summaryrefslogtreecommitdiff
path: root/drivers
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
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')
-rw-r--r--drivers/usb/dwc3/core.c13
-rw-r--r--drivers/usb/dwc3/gadget.c24
-rw-r--r--drivers/usb/dwc3/gadget.h1
3 files changed, 16 insertions, 22 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 4fa506963ca1..0736b0d0a024 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -991,7 +991,7 @@ static int dwc3_probe(struct platform_device *pdev)
u8 hird_threshold;
u32 fladj = 0;
u32 num_evt_buffs;
-
+ int irq;
int ret;
void __iomem *regs;
@@ -1016,6 +1016,17 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->xhci_resources[1].flags = res->flags;
dwc->xhci_resources[1].name = res->name;
+ irq = platform_get_irq(to_platform_device(dwc->dev), 0);
+ ret = devm_request_irq(dev, irq, dwc3_interrupt, IRQF_SHARED, "dwc3",
+ dwc);
+ if (ret) {
+ dev_err(dwc->dev, "failed to request irq #%d --> %d\n",
+ irq, ret);
+ return -ENODEV;
+ }
+
+ dwc->irq = irq;
+
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
dev_err(dev, "missing memory resource\n");
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;
diff --git a/drivers/usb/dwc3/gadget.h b/drivers/usb/dwc3/gadget.h
index 719326d14e6c..3abd6379164e 100644
--- a/drivers/usb/dwc3/gadget.h
+++ b/drivers/usb/dwc3/gadget.h
@@ -96,6 +96,7 @@ int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request,
gfp_t gfp_flags);
int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol);
void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum, bool force);
+irqreturn_t dwc3_interrupt(int irq, void *_dwc);
static inline dma_addr_t dwc3_trb_dma_offset(struct dwc3_ep *dep,
struct dwc3_trb *trb)