diff options
author | Nitin Kumbhar <nkumbhar@nvidia.com> | 2011-05-11 11:10:56 +0530 |
---|---|---|
committer | Nitin Kumbhar <nkumbhar@nvidia.com> | 2011-05-11 11:10:56 +0530 |
commit | 4cd4ce07fc92c737003f8ead295626b17284c85b (patch) | |
tree | 0b28370147bbbb8e2b66c0d1b4bca4602153eaf3 /drivers | |
parent | 0dae5f2c580ab2a954088d315bc353babcfefded (diff) | |
parent | 5e1a8946bde3db838501b3372c60a8771a82c574 (diff) |
Merging android-tegra-2.6.36 into git-master/linux-2.6/android-tegra-2.6.36
Conflicts:
arch/arm/mach-tegra/usb_phy.c
drivers/usb/gadget/fsl_tegra_udc.c
drivers/usb/host/ehci-tegra.c
drivers/video/tegra/dc/dc.c
Change-Id: I62d72b8b96d4039bd0d253583c415ae714fb2693
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/bcm4329/dhd.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/bcm4329/dhd_linux.c | 7 | ||||
-rw-r--r-- | drivers/usb/host/ehci-tegra.c | 28 | ||||
-rw-r--r-- | drivers/video/tegra/dc/dc.c | 1 |
4 files changed, 17 insertions, 21 deletions
diff --git a/drivers/net/wireless/bcm4329/dhd.h b/drivers/net/wireless/bcm4329/dhd.h index c2bfc376f5b6..677393b7d4e6 100644 --- a/drivers/net/wireless/bcm4329/dhd.h +++ b/drivers/net/wireless/bcm4329/dhd.h @@ -186,7 +186,7 @@ typedef struct dhd_pub { wait_event_interruptible_timeout(a, FALSE, 3 * HZ); \ } \ } while (0) - #define DHD_PM_RESUME_WAIT(a) _DHD_PM_RESUME_WAIT(a, 30) + #define DHD_PM_RESUME_WAIT(a) _DHD_PM_RESUME_WAIT(a, 200) #define DHD_PM_RESUME_WAIT_FOREVER(a) _DHD_PM_RESUME_WAIT(a, ~0) #define DHD_PM_RESUME_RETURN_ERROR(a) do { if (dhd_mmc_suspend) return a; } while (0) #define DHD_PM_RESUME_RETURN do { if (dhd_mmc_suspend) return; } while (0) diff --git a/drivers/net/wireless/bcm4329/dhd_linux.c b/drivers/net/wireless/bcm4329/dhd_linux.c index ddf2f220dd36..efcf56073e24 100644 --- a/drivers/net/wireless/bcm4329/dhd_linux.c +++ b/drivers/net/wireless/bcm4329/dhd_linux.c @@ -168,14 +168,21 @@ static int wifi_remove(struct platform_device *pdev) up(&wifi_control_sem); return 0; } + static int wifi_suspend(struct platform_device *pdev, pm_message_t state) { DHD_TRACE(("##> %s\n", __FUNCTION__)); +#if defined(OOB_INTR_ONLY) + bcmsdh_oob_intr_set(0); +#endif /* (OOB_INTR_ONLY) */ return 0; } static int wifi_resume(struct platform_device *pdev) { DHD_TRACE(("##> %s\n", __FUNCTION__)); +#if defined(OOB_INTR_ONLY) + bcmsdh_oob_intr_set(1); +#endif /* (OOB_INTR_ONLY) */ return 0; } diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c index 7940a3a1a873..92bbe159cf4b 100644 --- a/drivers/usb/host/ehci-tegra.c +++ b/drivers/usb/host/ehci-tegra.c @@ -112,9 +112,12 @@ static int tegra_ehci_hub_control( goto done; } else if (typeReq == GetPortStatus) { temp = ehci_readl(ehci, status_reg); - if (tegra->port_resuming && !(temp & PORT_SUSPEND)) { + if (tegra->port_resuming && !(temp & PORT_SUSPEND) && + time_after_eq(jiffies, ehci->reset_done[wIndex-1])) { /* Resume completed, re-enable disconnect detection */ tegra->port_resuming = 0; + clear_bit((wIndex & 0xff) - 1, &ehci->suspended_ports); + ehci->reset_done[wIndex-1] = 0; tegra_usb_phy_postresume(tegra->phy); } } else if (typeReq == SetPortFeature && wValue == USB_PORT_FEAT_SUSPEND) { @@ -160,11 +163,11 @@ static int tegra_ehci_hub_control( if (!(temp & PORT_SUSPEND)) goto done; + tegra->port_resuming = 1; + /* Disable disconnect detection during port resume */ tegra_usb_phy_preresume(tegra->phy); - 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); @@ -186,22 +189,11 @@ static int tegra_ehci_hub_control( udelay(20); temp &= ~(PORT_RWC_BITS | PORT_WAKE_BITS); - /* start resume signalling */ + /* start resume signaling */ ehci_writel(ehci, temp | PORT_RESUME, status_reg); - spin_unlock_irqrestore(&ehci->lock, flags); - msleep(20); - spin_lock_irqsave(&ehci->lock, flags); - - /* Poll until the controller clears RESUME and SUSPEND */ - if (handshake(ehci, status_reg, PORT_RESUME, 0, 2000)) - pr_err("%s: timeout waiting for RESUME\n", __func__); - if (handshake(ehci, status_reg, PORT_SUSPEND, 0, 2000)) - pr_err("%s: timeout waiting for SUSPEND\n", __func__); - - ehci->reset_done[wIndex-1] = 0; - - tegra->port_resuming = 1; + ehci->reset_done[wIndex-1] = jiffies + msecs_to_jiffies(25); + /* whoever resumes must GetPortStatus to complete it!! */ goto done; } @@ -527,8 +519,6 @@ static int tegra_ehci_bus_resume(struct usb_hcd *hcd) tegra->bus_suspended = 0; } - tegra_usb_phy_preresume(tegra->phy); - tegra->port_resuming = 1; return ehci_bus_resume(hcd); } #endif diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c index 743b9f2e86b6..e0c540650224 100644 --- a/drivers/video/tegra/dc/dc.c +++ b/drivers/video/tegra/dc/dc.c @@ -1420,7 +1420,6 @@ static bool _tegra_dc_controller_enable(struct tegra_dc *dc) dc->out->enable(); tegra_dc_setup_clk(dc, dc->clk); - tegra_periph_reset_assert(dc->clk); clk_enable(dc->clk); clk_enable(dc->emc_clk); #ifndef CONFIG_TEGRA_FPGA_PLATFORM |