summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2011-03-31 17:42:16 -0700
committerColin Cross <ccross@android.com>2011-03-31 17:42:16 -0700
commit17a2400a982bbf7aaabe89d7bacf32f600d4e751 (patch)
treed9220c5e5ae1aeb1cbdce177299f645b631e0578
parent9b571241de8cfa131178e9120ad46f1756bad8a7 (diff)
parent0aa722f2fbdaccbad084fb1f99390983cce440b2 (diff)
Merge branch 'linux-tegra-2.6.36' into android-tegra-2.6.36
-rw-r--r--drivers/usb/host/ehci-tegra.c23
-rw-r--r--drivers/video/tegra/dc/nvhdcp.c1
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);