ARM: tegra: pcie: Remove dock detect variable
Jay Agarwal [Thu, 26 Dec 2013 14:03:25 +0000 (19:03 +0530)]
Removing unnecessary dock detect variable which
was appropriate for T30 using PM293 dock. T124
does not use any such dock

Bug 1406265

Change-Id: I29078472b269f73a8b4a60ea98c5c3a7d8c907ed
Signed-off-by: Jay Agarwal <jagarwal@nvidia.com>
Reviewed-on: http://git-master/r/349765
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Venu Byravarasu <vbyravarasu@nvidia.com>

arch/arm/mach-tegra/board-ardbeg.c
arch/arm/mach-tegra/board-bonaire.c
arch/arm/mach-tegra/board-vcm30_t124.c
drivers/pci/host/pci-tegra.c
include/linux/pci-tegra.h

index be4a12c..1700bc3 100644 (file)
@@ -374,10 +374,9 @@ static struct platform_device tegra_rtc_device = {
 static struct tegra_pci_platform_data laguna_pcie_platform_data = {
        .port_status[0] = 1,
        .port_status[1] = 1,
-       .use_dock_detect        = 1,
        /* Laguna platforms does not support CLKREQ# feature */
        .has_clkreq     = 0,
-       .gpio   = TEGRA_GPIO_PO1,
+       .gpio_hot_plug  = TEGRA_GPIO_PO1,
        .gpio_wake      = TEGRA_GPIO_PDD3,
        .gpio_x1_slot   = PMU_TCA6416_GPIO(8),
 };
index fb5a144..42c6687 100644 (file)
@@ -513,8 +513,7 @@ static void __init bonaire_hs_uart_init(void)
 static struct tegra_pci_platform_data bonaire_pcie_platform_data = {
        .port_status[0] = 1,
        .port_status[1] = 1,
-       .use_dock_detect        = 1,
-       .gpio                   = TEGRA_GPIO_PO1,
+       .gpio_hot_plug  = TEGRA_GPIO_PO1,
 };
 
 static void bonaire_pcie_init(void)
index 59a64f8..49b259f 100644 (file)
@@ -276,8 +276,7 @@ static struct platform_device tegra_rtc_device = {
 static struct tegra_pci_platform_data vcm30_t124_pcie_platform_data = {
        .port_status[0] = 1,
        .port_status[1] = 1,
-       .use_dock_detect        = 1,
-       .gpio   = TEGRA_GPIO_PO1,
+       .gpio_hot_plug  = TEGRA_GPIO_PO1,
        .gpio_x1_slot   = PMU_TCA6416_GPIO(12),
 };
 
index 8cc3744..624feaf 100644 (file)
@@ -294,9 +294,6 @@ static struct resource pcie_prefetch_mem_space;
 /* this flag enables features required either after boot or resume */
 /* also required to enable msi from host both after boot and resume */
 static bool resume_path;
-/* this flag is used for enumeration by hotplug */
-/* when dock is not connected while system boot */
-static bool is_dock_conn_at_boot = true;
 /* used to avoid successive hotplug disconnect or connect */
 static bool hotplug_event;
 
@@ -750,14 +747,14 @@ static void work_hotplug_handler(struct work_struct *work)
        int val;
 
        PR_FUNC_LINE;
-       if (pcie_driver->plat_data->gpio == -1)
+       if (pcie_driver->plat_data->gpio_hot_plug == -1)
                return;
-       val = gpio_get_value(pcie_driver->plat_data->gpio);
+       val = gpio_get_value(pcie_driver->plat_data->gpio_hot_plug);
        if (val == 0) {
-               pr_info("Pcie Dock Connected\n");
+               pr_info("PCIE Hotplug: Connected\n");
                tegra_pcie_attach();
        } else {
-               pr_info("Pcie Dock DisConnected\n");
+               pr_info("PCIE Hotplug: DisConnected\n");
                tegra_pcie_detach();
        }
 }
@@ -1487,6 +1484,45 @@ void tegra_pcie_check_ports(void)
 }
 EXPORT_SYMBOL(tegra_pcie_check_ports);
 
+static int tegra_pcie_conf_hotplug_gpio(void)
+{
+       int irq, err = 0;
+
+       pr_info("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");
+       if (err < 0) {
+               pr_err("%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",
+                       __func__, err);
+               goto err_irq;
+       }
+       irq = gpio_to_irq(tegra_pcie.plat_data->gpio_hot_plug);
+       if (irq < 0) {
+               pr_err("Unable to get irq number for hotplug_detect\n");
+               goto err_irq;
+       }
+       err = request_irq((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 number for hotplug_detect\n");
+               goto err_irq;
+       }
+       return 0;
+
+err_irq:
+       gpio_free(tegra_pcie.plat_data->gpio_hot_plug);
+       return err;
+}
+
 static int tegra_pcie_scale_voltage(bool isGen2)
 {
        unsigned long rate;
@@ -1692,50 +1728,19 @@ static int __init tegra_pcie_init(void)
                pr_err("PCIE: enable controller failed\n");
                return err;
        }
-
+       err = tegra_pcie_conf_hotplug_gpio();
+       if (err) {
+               pr_err("PCIE: configuring hotplug gpio failed\n");
+               return err;
+       }
        /* setup the AFI address translations */
        tegra_pcie_setup_translations();
        tegra_pcie_check_ports();
 
-       if (tegra_pcie.plat_data->use_dock_detect) {
-               int irq;
-
-               pr_info("acquiring dock_detect = %d\n",
-                               tegra_pcie.plat_data->gpio);
-               err = gpio_request(tegra_pcie.plat_data->gpio,
-                                   "pcie_dock_detect");
-               if (err < 0) {
-                       pr_err("%s: gpio_request failed %d\n", __func__, err);
-                       return err;
-               }
-               err = gpio_direction_input(tegra_pcie.plat_data->gpio);
-               if (err < 0) {
-                       pr_err("%s: gpio_direction_input failed %d\n",
-                               __func__, err);
-                       goto err_irq;
-               }
-               irq = gpio_to_irq(tegra_pcie.plat_data->gpio);
-               if (irq < 0) {
-                       pr_err("Unable to get irq number for dock_detect\n");
-                       goto err_irq;
-               }
-               err = request_irq((unsigned int)irq,
-                               gpio_pcie_detect_isr,
-                               IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
-                               "pcie_dock_detect",
-                               (void *)tegra_pcie.plat_data);
-               if (err < 0) {
-                       pr_err("Unable to claim irq number for dock_detect\n");
-                       goto err_irq;
-               }
-       }
-
        if (tegra_pcie.num_ports)
                pci_common_init(&tegra_pcie_hw);
        else {
-               /* no dock is connected, hotplug will occur after boot */
                err = tegra_pcie_power_off();
-               is_dock_conn_at_boot = false;
                if (err < 0) {
                        pr_err("Unable to power off pcie\n");
                        return err;
@@ -1746,9 +1751,6 @@ static int __init tegra_pcie_init(void)
        device_init_wakeup(tegra_pcie.dev, true);
 
        return 0;
-err_irq:
-       gpio_free(tegra_pcie.plat_data->gpio);
-       return err;
 }
 
 static int __init tegra_pcie_probe(struct platform_device *pdev)
index 01e5a4a..9fee3a5 100644 (file)
 
 struct tegra_pci_platform_data {
        int port_status[MAX_PCIE_SUPPORTED_PORTS];
-       bool use_dock_detect;
        /* used to identify if current platofrm supports CLKREQ# */
        bool has_clkreq;
-       int gpio;
+       int gpio_hot_plug;
        int gpio_wake;
        int gpio_x1_slot;
 };