summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schalig <dschalig@nvidia.com>2011-08-10 15:47:35 +0900
committerAnnamaria Pyreddy <apyreddy@nvidia.com>2011-09-01 10:57:39 -0700
commit03697e177ad1f15c2da670322b0c6aa0284d3a5e (patch)
treeae367d76456d5b29d2a2b2ab5d13f3bb30ce989f
parenta06d3db94b8ae0b8b8f87c5a46689a68c5905fd0 (diff)
usb: ehci: tegra: enable hotplug interrupt for port3
Hotplug on usb is supported only for usb3(instance 2) Bug 859355 (cherry picked from commit ff19ea44f7c6425efaa24b3470debe39457d82a6) Change-Id: I14400b2928c6c590d1b0dd6aebbea44cc6fa1754 Reviewed-on: http://git-master/r/46246 Reviewed-by: Annamaria Pyreddy <apyreddy@nvidia.com> Tested-by: Annamaria Pyreddy <apyreddy@nvidia.com>
-rw-r--r--drivers/usb/host/ehci-tegra.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
index d8813bc68035..0ab94c847c23 100644
--- a/drivers/usb/host/ehci-tegra.c
+++ b/drivers/usb/host/ehci-tegra.c
@@ -88,26 +88,29 @@ static void tegra_ehci_power_down(struct usb_hcd *hcd, bool is_dpd)
static irqreturn_t tegra_ehci_irq (struct usb_hcd *hcd)
{
struct ehci_hcd *ehci = hcd_to_ehci (hcd);
+ struct tegra_ehci_hcd *tegra = dev_get_drvdata(hcd->self.controller);
struct ehci_regs __iomem *hw = ehci->regs;
u32 val;
- spin_lock (&ehci->lock);
- val = readl(hcd->regs + TEGRA_USB_SUSP_CTRL_OFFSET);
- if ((val & TEGRA_USB_PHY_CLK_VALID_INT_STS)) {
- val &= ~TEGRA_USB_PHY_CLK_VALID_INT_ENB | TEGRA_USB_PHY_CLK_VALID_INT_STS;
- writel(val , (hcd->regs + TEGRA_USB_SUSP_CTRL_OFFSET));
-
- val = readl(hcd->regs + TEGRA_USB_PORTSC1_OFFSET);
- val &= ~TEGRA_USB_PORTSC1_WKCN;
- writel(val , (hcd->regs + TEGRA_USB_PORTSC1_OFFSET));
-
- val = readl(&hw->status);
- if (!(val & STS_PCD)) {
- spin_unlock (&ehci->lock);
- return 0;
+ if (tegra->phy->instance == 2) {
+ spin_lock (&ehci->lock);
+ val = readl(hcd->regs + TEGRA_USB_SUSP_CTRL_OFFSET);
+ if ((val & TEGRA_USB_PHY_CLK_VALID_INT_STS)) {
+ val &= ~TEGRA_USB_PHY_CLK_VALID_INT_ENB | TEGRA_USB_PHY_CLK_VALID_INT_STS;
+ writel(val , (hcd->regs + TEGRA_USB_SUSP_CTRL_OFFSET));
+
+ val = readl(hcd->regs + TEGRA_USB_PORTSC1_OFFSET);
+ val &= ~TEGRA_USB_PORTSC1_WKCN;
+ writel(val , (hcd->regs + TEGRA_USB_PORTSC1_OFFSET));
+
+ val = readl(&hw->status);
+ if (!(val & STS_PCD)) {
+ spin_unlock (&ehci->lock);
+ return 0;
+ }
}
+ spin_unlock (&ehci->lock);
}
- spin_unlock (&ehci->lock);
return ehci_irq(hcd);
}