diff options
author | Jay Agarwal <jagarwal@nvidia.com> | 2014-02-14 16:13:24 +0530 |
---|---|---|
committer | Laxman Dewangan <ldewangan@nvidia.com> | 2014-02-19 06:01:12 -0800 |
commit | 6b388c69db2d6adf1cdf45fe7802c8387eea0acb (patch) | |
tree | 25a27c6bc8fca75c6cd155c25ce38ccd3978e134 /drivers/pci/host | |
parent | 7a81a3ac57d80ebb287a2093daa73ea7265cea41 (diff) |
pcie: host: tegra: Clean gpio APIs handling
Use devm_* gpio APIs to ensure better cleanup
Also suppress debug prints in MSI isr by 10 times
Bug 1429394
Change-Id: I32663a6443e32bcdf56c1e314250fdb639b17e7c
Signed-off-by: Jay Agarwal <jagarwal@nvidia.com>
Reviewed-on: http://git-master/r/367706
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Diffstat (limited to 'drivers/pci/host')
-rw-r--r-- | drivers/pci/host/pci-tegra.c | 79 |
1 files changed, 43 insertions, 36 deletions
diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c index 4840746fc3ab..c8e98eb1e077 100644 --- a/drivers/pci/host/pci-tegra.c +++ b/drivers/pci/host/pci-tegra.c @@ -1537,52 +1537,59 @@ static int tegra_pcie_conf_gpios(void) int irq, err = 0; PR_FUNC_LINE; - if (tegra_pcie.plat_data->gpio_hot_plug != -1) { + if (gpio_is_valid(tegra_pcie.plat_data->gpio_hot_plug)) { /* configure gpio for hotplug detection */ - pr_info("acquiring hotplug_detect = %d\n", + dev_info(tegra_pcie.dev, "acquiring hotplug_detect = %d\n", tegra_pcie.plat_data->gpio_hot_plug); - err = gpio_request(tegra_pcie.plat_data->gpio_hot_plug, - "pcie_hotplug_detect"); + err = devm_gpio_request(tegra_pcie.dev, + tegra_pcie.plat_data->gpio_hot_plug, + "pcie_hotplug_detect"); if (err < 0) { - pr_err("%s: gpio_request failed %d\n", __func__, err); + dev_err(tegra_pcie.dev, "%s: gpio_request failed %d\n", + __func__, err); return err; } err = gpio_direction_input( tegra_pcie.plat_data->gpio_hot_plug); if (err < 0) { - pr_err("%s: gpio_direction_input failed %d\n", + dev_err(tegra_pcie.dev, + "%s: gpio_direction_input failed %d\n", __func__, err); - goto err_hot_plug; + return err; } irq = gpio_to_irq(tegra_pcie.plat_data->gpio_hot_plug); if (irq < 0) { - pr_err("Unable to get irq for hotplug_detect\n"); - goto err_hot_plug; + dev_err(tegra_pcie.dev, + "Unable to get irq for hotplug_detect\n"); + return err; } - err = request_irq((unsigned int)irq, + err = devm_request_irq(tegra_pcie.dev, (unsigned int)irq, gpio_pcie_detect_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "pcie_hotplug_detect", (void *)tegra_pcie.plat_data); if (err < 0) { - pr_err("Unable to claim irq for hotplug_detect\n"); - goto err_hot_plug; + dev_err(tegra_pcie.dev, + "Unable to claim irq for hotplug_detect\n"); + return err; } } - if (tegra_pcie.plat_data->gpio_x1_slot != -1) { - err = gpio_request( + if (gpio_is_valid(tegra_pcie.plat_data->gpio_x1_slot)) { + err = devm_gpio_request(tegra_pcie.dev, tegra_pcie.plat_data->gpio_x1_slot, "pcie_x1_slot"); if (err < 0) { - pr_err("%s: pcie_x1_slot gpio_request failed %d\n", - __func__, err); - goto err_hot_plug; + dev_err(tegra_pcie.dev, + "%s: pcie_x1_slot gpio_request failed %d\n", + __func__, err); + return err; } err = gpio_direction_output( tegra_pcie.plat_data->gpio_x1_slot, 1); if (err < 0) { - pr_err("%s: pcie_x1_slot gpio_direction_output failed %d\n", + dev_err(tegra_pcie.dev, + "%s: pcie_x1_slot gpio_direction_output failed %d\n", __func__, err); - goto err_x1; + return err; } gpio_set_value_cansleep( tegra_pcie.plat_data->gpio_x1_slot, 1); @@ -1591,25 +1598,21 @@ static int tegra_pcie_conf_gpios(void) err = devm_gpio_request(tegra_pcie.dev, tegra_pcie.plat_data->gpio_wake, "pcie_wake"); if (err < 0) { - pr_err("%s: pcie_wake gpio_request failed %d\n", - __func__, err); - goto err_x1; + dev_err(tegra_pcie.dev, + "%s: pcie_wake gpio_request failed %d\n", + __func__, err); + return err; } err = gpio_direction_input( tegra_pcie.plat_data->gpio_wake); if (err < 0) { - pr_err("%s: pcie_wake gpio_direction_input failed %d\n", + dev_err(tegra_pcie.dev, + "%s: pcie_wake gpio_direction_input failed %d\n", __func__, err); - goto err_x1; + return err; } } return 0; -err_x1: - gpio_free(tegra_pcie.plat_data->gpio_x1_slot); -err_hot_plug: - if (tegra_pcie.plat_data->gpio_hot_plug != -1) - gpio_free(tegra_pcie.plat_data->gpio_hot_plug); - return err; } static int tegra_pcie_scale_voltage(bool isGen2) @@ -1872,7 +1875,7 @@ static int tegra_pcie_suspend_noirq(struct device *dev) PR_FUNC_LINE; /* configure PE_WAKE signal as wake sources */ - if ((tegra_pcie.plat_data->gpio_wake != -1) && + if (gpio_is_valid(tegra_pcie.plat_data->gpio_wake) && device_may_wakeup(dev)) { ret = enable_irq_wake(gpio_to_irq( tegra_pcie.plat_data->gpio_wake)); @@ -1894,7 +1897,7 @@ static int tegra_pcie_resume_noirq(struct device *dev) PR_FUNC_LINE; resume_path = true; - if ((tegra_pcie.plat_data->gpio_wake != -1) && + if (gpio_is_valid(tegra_pcie.plat_data->gpio_wake) && device_may_wakeup(dev)) { ret = disable_irq_wake(gpio_to_irq( tegra_pcie.plat_data->gpio_wake)); @@ -2051,12 +2054,16 @@ void msi_map_release(struct msi_map_entry *entry) static irqreturn_t tegra_pcie_msi_isr(int irq, void *arg) { - int i; - int offset; - int index; + int i, offset, index; + static int count; u32 reg; - PR_FUNC_LINE; + /* suppress print spews in debug mode */ + if (!count) { + PR_FUNC_LINE; + count = 10; + } + count--; for (i = 0; i < 8; i++) { reg = afi_readl(AFI_MSI_VEC0_0 + i * 4); while (reg != 0x00000000) { |