aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/chipidea/host.c
diff options
context:
space:
mode:
authorStephen Boyd <stephen.boyd@linaro.org>2016-12-28 17:56:53 -0500
committerPeter Chen <peter.chen@nxp.com>2017-01-19 22:25:06 -0500
commitb90a17c5ba81bc34cf2becab49a1a2eeff45c70b (patch)
tree7c3db3236e2513a1b8d56efc8a0ffcecb7d12255 /drivers/usb/chipidea/host.c
parent8feb3680bd0363a8d784fa0d065e0a6cdc9e0cff (diff)
usb: chipidea: Notify events when switching host mode
The chipidea/udc.c file sends a CI_HDRC_CONTROLLER_RESET_EVENT to the wrapper drivers when it calls hw_device_reset(), but that function is not called from chipidea/host.c. And the udc.c file sends the CI_HDRC_CONTROLLER_STOPPED_EVENT but the host.c file doesn't do anything. The intent of the reset event is to allow the wrapper driver to do any wrapper specific things after the reset bit has been set in the usb command register. Therefore, add this event hook in the host role after we toggle that bit. Similarly, the intent of the stopped event is to allow the wrapper driver to do any wrapper specific things after the device is stopped. So when we stop the host role, send the stopped event. Acked-by: Peter Chen <peter.chen@nxp.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Stephen Boyd <stephen.boyd@linaro.org> Signed-off-by: Peter Chen <peter.chen@nxp.com>
Diffstat (limited to 'drivers/usb/chipidea/host.c')
-rw-r--r--drivers/usb/chipidea/host.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c
index 111b0e0b8698..f884c0877bca 100644
--- a/drivers/usb/chipidea/host.c
+++ b/drivers/usb/chipidea/host.c
@@ -90,6 +90,9 @@ static int ehci_ci_reset(struct usb_hcd *hcd)
90 90
91 ehci->need_io_watchdog = 0; 91 ehci->need_io_watchdog = 0;
92 92
93 if (ci->platdata->notify_event)
94 ci->platdata->notify_event(ci, CI_HDRC_CONTROLLER_RESET_EVENT);
95
93 ci_platform_configure(ci); 96 ci_platform_configure(ci);
94 97
95 return ret; 98 return ret;
@@ -187,6 +190,9 @@ static void host_stop(struct ci_hdrc *ci)
187 struct usb_hcd *hcd = ci->hcd; 190 struct usb_hcd *hcd = ci->hcd;
188 191
189 if (hcd) { 192 if (hcd) {
193 if (ci->platdata->notify_event)
194 ci->platdata->notify_event(ci,
195 CI_HDRC_CONTROLLER_STOPPED_EVENT);
190 usb_remove_hcd(hcd); 196 usb_remove_hcd(hcd);
191 ci->role = CI_ROLE_END; 197 ci->role = CI_ROLE_END;
192 synchronize_irq(ci->irq); 198 synchronize_irq(ci->irq);