summaryrefslogtreecommitdiffstats
path: root/drivers/usb/chipidea
diff options
context:
space:
mode:
authorLoic Poulain2018-09-04 17:18:58 +0200
committerPeter Chen2018-09-20 11:04:22 +0200
commit59739131e0ca06db7560f9073fff2fb83f6bc2a5 (patch)
tree74e4108219616ba253ce9bae9181782cb4be560d /drivers/usb/chipidea
parentusb: chipidea: Prevent unbalanced IRQ disable (diff)
downloadkernel-qcow2-linux-59739131e0ca06db7560f9073fff2fb83f6bc2a5.tar.gz
kernel-qcow2-linux-59739131e0ca06db7560f9073fff2fb83f6bc2a5.tar.xz
kernel-qcow2-linux-59739131e0ca06db7560f9073fff2fb83f6bc2a5.zip
usb: chipidea: Fix otg event handler
At OTG work running time, it's possible that several events need to be addressed (e.g. ID and VBUS events). The current implementation handles only one event at a time which leads to ignoring the other one. Fix it. Signed-off-by: Loic Poulain <loic.poulain@linaro.org> Signed-off-by: Peter Chen <peter.chen@nxp.com>
Diffstat (limited to 'drivers/usb/chipidea')
-rw-r--r--drivers/usb/chipidea/otg.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/usb/chipidea/otg.c b/drivers/usb/chipidea/otg.c
index db4ceffcf2a6..f25d4827fd49 100644
--- a/drivers/usb/chipidea/otg.c
+++ b/drivers/usb/chipidea/otg.c
@@ -203,14 +203,17 @@ static void ci_otg_work(struct work_struct *work)
}
pm_runtime_get_sync(ci->dev);
+
if (ci->id_event) {
ci->id_event = false;
ci_handle_id_switch(ci);
- } else if (ci->b_sess_valid_event) {
+ }
+
+ if (ci->b_sess_valid_event) {
ci->b_sess_valid_event = false;
ci_handle_vbus_change(ci);
- } else
- dev_err(ci->dev, "unexpected event occurs at %s\n", __func__);
+ }
+
pm_runtime_put_sync(ci->dev);
enable_irq(ci->irq);