summaryrefslogtreecommitdiff
path: root/drivers/usb/dwc3/gadget.c
diff options
context:
space:
mode:
authorHemant Kumar <hemantk@codeaurora.org>2016-04-14 15:57:10 -0700
committerKyle Yan <kyan@codeaurora.org>2016-04-29 14:35:24 -0700
commit606410ceac4a89d256f9378c8a18936ad7d1d420 (patch)
treefde828253b0aa9dd23f01c7634b1184427436d41 /drivers/usb/dwc3/gadget.c
parent88df6d8843593748af8381311614f2130120dcec (diff)
usb: dwc3: Request dwc3 irq in driver probe
request_irq() for dwc irq is called in dwc3_gadget_start() when msm-dwc3 is in suspended state because usb cable is not connected. dwc3 resume happens upon USB connect, it enables already enabled irq. This result into unbalanced enable irq warning. Fix this by moving request_irq to dwc3_probe(). CRs-Fixed: 999124 Change-Id: I61ec085778fe43b87de18a84829ea3f5280c451c Signed-off-by: Hemant Kumar <hemantk@codeaurora.org> Signed-off-by: Mayank Rana <mrana@codeaurora.org>
Diffstat (limited to 'drivers/usb/dwc3/gadget.c')
-rw-r--r--drivers/usb/dwc3/gadget.c24
1 files changed, 3 insertions, 21 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index dc10f299b2a6..98df702b291d 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1905,7 +1905,6 @@ void dwc3_gadget_disable_irq(struct dwc3 *dwc)
dwc3_writel(dwc->regs, DWC3_DEVTEN, 0x00);
}
-static irqreturn_t dwc3_interrupt(int irq, void *_dwc);
static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc);
static void dwc3_gadget_disconnect_interrupt(struct dwc3 *dwc);
@@ -2055,16 +2054,6 @@ static int dwc3_gadget_start(struct usb_gadget *g,
struct dwc3 *dwc = gadget_to_dwc(g);
unsigned long flags;
int ret = 0;
- int irq;
-
- irq = platform_get_irq(to_platform_device(dwc->dev), 0);
- dwc->irq = irq;
- ret = request_irq(irq, dwc3_interrupt, IRQF_SHARED, "dwc3", dwc);
- if (ret) {
- dev_err(dwc->dev, "failed to request irq #%d --> %d\n",
- irq, ret);
- goto err0;
- }
spin_lock_irqsave(&dwc->lock, flags);
@@ -2073,7 +2062,7 @@ static int dwc3_gadget_start(struct usb_gadget *g,
dwc->gadget.name,
dwc->gadget_driver->driver.name);
ret = -EBUSY;
- goto err1;
+ goto err0;
}
dwc->gadget_driver = driver;
@@ -2087,11 +2076,8 @@ static int dwc3_gadget_start(struct usb_gadget *g,
spin_unlock_irqrestore(&dwc->lock, flags);
return 0;
-err1:
- spin_unlock_irqrestore(&dwc->lock, flags);
- free_irq(irq, dwc);
-
err0:
+ spin_unlock_irqrestore(&dwc->lock, flags);
return ret;
}
@@ -2099,7 +2085,6 @@ static int dwc3_gadget_stop(struct usb_gadget *g)
{
struct dwc3 *dwc = gadget_to_dwc(g);
unsigned long flags;
- int irq;
pm_runtime_get_sync(dwc->dev);
dbg_event(0xFF, "Stop gsync",
@@ -2121,9 +2106,6 @@ static int dwc3_gadget_stop(struct usb_gadget *g)
pm_runtime_put_autosuspend(dwc->dev);
dbg_event(0xFF, "Auto_susgsync", 0);
- irq = platform_get_irq(to_platform_device(dwc->dev), 0);
- free_irq(irq, dwc);
-
return 0;
}
@@ -3417,7 +3399,7 @@ static irqreturn_t dwc3_check_event_buf(struct dwc3 *dwc, u32 buf)
return IRQ_WAKE_THREAD;
}
-static irqreturn_t dwc3_interrupt(int irq, void *_dwc)
+irqreturn_t dwc3_interrupt(int irq, void *_dwc)
{
struct dwc3 *dwc = _dwc;
int i;