summaryrefslogtreecommitdiff
path: root/drivers/usb/chipidea/otg.c
diff options
context:
space:
mode:
authorLi Jun <jun.li@nxp.com>2016-02-03 16:06:57 +0800
committerDong Aisheng <aisheng.dong@nxp.com>2019-11-25 15:56:46 +0800
commit82c83d06b38ce9a295d1e7d9f3e96851f0662d05 (patch)
treeea18c8b0f9f523babbd49b63e6d4a944cee4a375 /drivers/usb/chipidea/otg.c
parent5f59266728549b59b3b57f0cb18440512e16ff2f (diff)
MLK-12344-2 usb: chipidea: otg: add vbus disconnect for gadget after sleep
During system sleep, if we switch otg role from gadget to host, and host vbus is directly controlled by ID signal, we will lose vbus drop event after resume because the vbus is on both at system suspend and resume, so we will miss gadget disconnect handling before start host role. This patch is to fix it by adding gadget disconnect for this case. Acked-by: Peter Chen <peter.chen@nxp.com> Signed-off-by: Li Jun <jun.li@nxp.com> (cherry picked from commit 79aab6fc3c9fca1fa4f83f25a5050ea4afc90f0a)
Diffstat (limited to 'drivers/usb/chipidea/otg.c')
-rw-r--r--drivers/usb/chipidea/otg.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/usb/chipidea/otg.c b/drivers/usb/chipidea/otg.c
index e6a85cda0f73..2e635da9464c 100644
--- a/drivers/usb/chipidea/otg.c
+++ b/drivers/usb/chipidea/otg.c
@@ -204,6 +204,14 @@ void ci_handle_id_switch(struct ci_hdrc *ci)
* external connector status.
*/
ret = hw_wait_vbus_lower_bsv(ci);
+ else if (ci->vbus_active)
+ /*
+ * If the role switch happens(e.g. during
+ * system sleep), and we lose vbus drop
+ * event, disconnect gadget for it before
+ * start host.
+ */
+ usb_gadget_vbus_disconnect(&ci->gadget);
ci_role_start(ci, role);
/* vbus change may have already occurred */