diff options
author | David Schalig <dschalig@nvidia.com> | 2011-08-10 15:47:35 +0900 |
---|---|---|
committer | Annamaria Pyreddy <apyreddy@nvidia.com> | 2011-09-01 10:57:39 -0700 |
commit | 03697e177ad1f15c2da670322b0c6aa0284d3a5e (patch) | |
tree | ae367d76456d5b29d2a2b2ab5d13f3bb30ce989f /drivers | |
parent | a06d3db94b8ae0b8b8f87c5a46689a68c5905fd0 (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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/host/ehci-tegra.c | 33 |
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); } |