summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtiste Hsu <chhsu@nvidia.com>2011-09-27 09:47:32 +0800
committerSimone Willett <swillett@nvidia.com>2011-09-27 15:16:17 -0700
commit9b500390784a8e1d11c0bd225c342781bc817b98 (patch)
tree94529bf21cc48c85cb09f34ba916cb472167dfac
parent3c5148a04fbc50c3200efe8793b8850ca07e05c2 (diff)
usb: host: tegra: Configurable USB hotplug
Hotplug on usb is supported when hotplug flag is set in platform data Bug 869745 Change-Id: I57ba0b18a2d4232b2df2074c91aff97c6e639e7d Reviewed-on: http://git-master/r/54588 Tested-by: Artiste Hsu <chhsu@nvidia.com> Reviewed-by: Suresh Mangipudi <smangipudi@nvidia.com> Reviewed-by: Venkat Moganty <vmoganty@nvidia.com>
-rw-r--r--arch/arm/mach-tegra/board-cardhu.c1
-rw-r--r--arch/arm/mach-tegra/board-ventana.c1
-rw-r--r--drivers/usb/host/ehci-tegra.c4
-rw-r--r--include/linux/platform_data/tegra_usb.h1
4 files changed, 6 insertions, 1 deletions
diff --git a/arch/arm/mach-tegra/board-cardhu.c b/arch/arm/mach-tegra/board-cardhu.c
index a44ca21f2595..a378931faebf 100644
--- a/arch/arm/mach-tegra/board-cardhu.c
+++ b/arch/arm/mach-tegra/board-cardhu.c
@@ -832,6 +832,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,
},
};
diff --git a/arch/arm/mach-tegra/board-ventana.c b/arch/arm/mach-tegra/board-ventana.c
index 71d4ef79a97e..4e8e9c42d591 100644
--- a/arch/arm/mach-tegra/board-ventana.c
+++ b/arch/arm/mach-tegra/board-ventana.c
@@ -717,6 +717,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,
},
};
diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
index 2e84ee1e9f7c..2ee41aa81124 100644
--- a/drivers/usb/host/ehci-tegra.c
+++ b/drivers/usb/host/ehci-tegra.c
@@ -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;
@@ -111,7 +112,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)) {
@@ -1048,6 +1049,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);
diff --git a/include/linux/platform_data/tegra_usb.h b/include/linux/platform_data/tegra_usb.h
index 27879ce1d73e..cf75a98f5c37 100644
--- a/include/linux/platform_data/tegra_usb.h
+++ b/include/linux/platform_data/tegra_usb.h
@@ -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;
};