usb: host: tegra: Configurable USB hotplug
Artiste Hsu [Tue, 27 Sep 2011 01:47:32 +0000 (09:47 +0800)]
Hotplug on usb is supported when hotplug flag is set in platform data

Bug 869745

(cherry picked from commit I57ba0b18a2d4232b2df2074c91aff97c6e639e7d)
Reviewed-on: http://git-master/r/54588

Change-Id: I24e5ddf49cead14d3eebe30da0f92402015c95c7
Reviewed-on: http://git-master/r/57725
Tested-by: Artiste Hsu <chhsu@nvidia.com>
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>

Rebase-Id: Rdf4296a0b0e04733832b8b60b347a3da9cc67413

arch/arm/mach-tegra/board-cardhu.c
arch/arm/mach-tegra/board-ventana.c
drivers/usb/host/ehci-tegra.c
include/linux/platform_data/tegra_usb.h

index 6c137fd..0ff72fc 100644 (file)
@@ -631,6 +631,7 @@ static struct tegra_ehci_platform_data tegra_ehci_pdata[] = {
                        .phy_config = &utmi_phy_config[2],
                        .operating_mode = TEGRA_USB_HOST,
                        .power_down_on_bus_suspend = 1,
+                       .hotplug = 1,
        },
 };
 
index fb335ee..3d80370 100644 (file)
@@ -484,6 +484,7 @@ static struct tegra_ehci_platform_data tegra_ehci_pdata[] = {
                        .phy_config = &utmi_phy_config[1],
                        .operating_mode = TEGRA_USB_HOST,
                        .power_down_on_bus_suspend = 1,
+                       .hotplug = 1,
        },
 };
 
index 2a544fc..196bd4c 100644 (file)
@@ -64,6 +64,7 @@ struct tegra_ehci_hcd {
        int bus_suspended;
        int port_resuming;
        int power_down_on_bus_suspend;
+       int hotplug;
        struct delayed_work work;
        enum tegra_usb_phy_port_speed port_speed;
        struct work_struct clk_timer_work;
@@ -177,7 +178,7 @@ static irqreturn_t tegra_ehci_irq (struct usb_hcd *hcd)
                        spin_unlock (&ehci->lock);
                }
        }
-       if (tegra->phy->instance == 2) {
+       if (tegra->hotplug) {
                spin_lock(&ehci->lock);
                val = readl(hcd->regs + TEGRA_USB_SUSP_CTRL_OFFSET);
                if ((val  & TEGRA_USB_PHY_CLK_VALID_INT_STS)) {
@@ -1134,6 +1135,7 @@ static int tegra_ehci_probe(struct platform_device *pdev)
 
        tegra->host_resumed = 1;
        tegra->power_down_on_bus_suspend = pdata->power_down_on_bus_suspend;
+       tegra->hotplug = pdata->hotplug;
        tegra->ehci = hcd_to_ehci(hcd);
 
        irq = platform_get_irq(pdev, 0);
index 27879ce..cf75a98 100644 (file)
@@ -34,6 +34,7 @@ struct tegra_ehci_platform_data {
        enum tegra_usb_operating_modes operating_mode;
        /* power down the phy on bus suspend */
        int power_down_on_bus_suspend;
+       int hotplug;
        void *phy_config;
        enum tegra_usb_phy_type phy_type;
 };