diff options
author | Colin Cross <ccross@android.com> | 2011-03-31 17:42:16 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2011-03-31 17:42:16 -0700 |
commit | 17a2400a982bbf7aaabe89d7bacf32f600d4e751 (patch) | |
tree | d9220c5e5ae1aeb1cbdce177299f645b631e0578 | |
parent | 9b571241de8cfa131178e9120ad46f1756bad8a7 (diff) | |
parent | 0aa722f2fbdaccbad084fb1f99390983cce440b2 (diff) |
Merge branch 'linux-tegra-2.6.36' into android-tegra-2.6.36
-rw-r--r-- | drivers/usb/host/ehci-tegra.c | 23 | ||||
-rw-r--r-- | drivers/video/tegra/dc/nvhdcp.c | 1 |
2 files changed, 24 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c index a516af28c29b..8acf0c4366f7 100644 --- a/drivers/usb/host/ehci-tegra.c +++ b/drivers/usb/host/ehci-tegra.c @@ -25,6 +25,8 @@ #define TEGRA_USB_DMA_ALIGN 32 +#define STS_SRI (1<<7) /* SOF Recieved */ + struct tegra_ehci_hcd { struct ehci_hcd *ehci; struct tegra_usb_phy *phy; @@ -71,6 +73,7 @@ static int tegra_ehci_hub_control( struct tegra_ehci_hcd *tegra = dev_get_drvdata(hcd->self.controller); u32 __iomem *status_reg; u32 temp; + u32 usbsts_reg; unsigned long flags; int retval = 0; @@ -144,6 +147,26 @@ static int tegra_ehci_hub_control( ehci->reset_done[wIndex-1] = jiffies + msecs_to_jiffies(25); + ehci_dbg(ehci, "%s:USBSTS = 0x%x", __func__, + ehci_readl(ehci, &ehci->regs->status)); + usbsts_reg = ehci_readl(ehci, &ehci->regs->status); + ehci_writel(ehci, usbsts_reg, &ehci->regs->status); + usbsts_reg = ehci_readl(ehci, &ehci->regs->status); + udelay(20); + + if (handshake(ehci, &ehci->regs->status, STS_SRI, STS_SRI, 2000)) + pr_err("%s: timeout set for STS_SRI\n", __func__); + + usbsts_reg = ehci_readl(ehci, &ehci->regs->status); + ehci_writel(ehci, usbsts_reg, &ehci->regs->status); + + if (handshake(ehci, &ehci->regs->status, STS_SRI, 0, 2000)) + pr_err("%s: timeout clear STS_SRI\n", __func__); + + if (handshake(ehci, &ehci->regs->status, STS_SRI, STS_SRI, 2000)) + pr_err("%s: timeout set STS_SRI\n", __func__); + + udelay(20); temp &= ~(PORT_RWC_BITS | PORT_WAKE_BITS); /* start resume signalling */ ehci_writel(ehci, temp | PORT_RESUME, status_reg); diff --git a/drivers/video/tegra/dc/nvhdcp.c b/drivers/video/tegra/dc/nvhdcp.c index 7bbe6741be45..fe8beb97c38a 100644 --- a/drivers/video/tegra/dc/nvhdcp.c +++ b/drivers/video/tegra/dc/nvhdcp.c @@ -1012,6 +1012,7 @@ void tegra_nvhdcp_set_plug(struct tegra_nvhdcp *nvhdcp, bool hpd) nvhdcp_set_plugged(nvhdcp, hpd); if (hpd) { + nvhdcp->fail_count = 0; queue_work(nvhdcp->downstream_wq, &nvhdcp->work); } else { flush_workqueue(nvhdcp->downstream_wq); |