From 633c85bd905ef672e5e406c595b97deffd84a92a Mon Sep 17 00:00:00 2001 From: Xin Xie Date: Tue, 7 Aug 2012 16:07:14 -0700 Subject: usb: gadget: tegra: remove unnecessary bus resume Current Tegra UDC driver share same IRQ with OTG driver, and it will call bus_resume() even if there is no UDC IRQ pending. This patch will check UDC IRQ source and will not cause bus resume if no IRQ pending for UDC driver. BUG 1015685 Change-Id: Ifc5634ae5d1f7f1435c64bc527ab2e9fb8d0e36b Signed-off-by: Xin Xie Reviewed-on: http://git-master/r/121896 Reviewed-by: Simone Willett Tested-by: Simone Willett --- drivers/usb/gadget/tegra_udc.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/usb/gadget/tegra_udc.c b/drivers/usb/gadget/tegra_udc.c index 8b8828d731af..aaffe8482f82 100644 --- a/drivers/usb/gadget/tegra_udc.c +++ b/drivers/usb/gadget/tegra_udc.c @@ -2247,10 +2247,8 @@ static irqreturn_t tegra_udc_irq(int irq, void *_udc) } /* Disable ISR for OTG host mode */ - if (udc->stopped) { - spin_unlock_irqrestore(&udc->lock, flags); - return status; - } + if (udc->stopped) + goto done; /* Fence read for coherency of AHB master intiated writes */ readb(IO_ADDRESS(IO_PPCS_PHYS + USB1_PREFETCH_ID)); @@ -2258,6 +2256,9 @@ static irqreturn_t tegra_udc_irq(int irq, void *_udc) irq_src = udc_readl(udc, USB_STS_REG_OFFSET) & udc_readl(udc, USB_INTR_REG_OFFSET); + if (irq_src == 0) + goto done; + /* Clear notification bits */ udc_writel(udc, irq_src, USB_STS_REG_OFFSET); @@ -2314,6 +2315,7 @@ static irqreturn_t tegra_udc_irq(int irq, void *_udc) if (irq_src & (USB_STS_ERR | USB_STS_SYS_ERR)) VDBG("Error IRQ %x", irq_src); +done: spin_unlock_irqrestore(&udc->lock, flags); return status; } -- cgit v1.2.3