2017-03-04 18:37:50 +00:00
|
|
|
From 2ca9749f5b4326dad52756eaf5e7865504b4d374 Mon Sep 17 00:00:00 2001
|
2017-02-07 20:07:54 +00:00
|
|
|
From: ED6E0F17 <edge@karikoa.net>
|
|
|
|
Date: Fri, 3 Feb 2017 14:52:42 +0000
|
|
|
|
Subject: [PATCH] usb: dwc2: Avoid suspending if we're in gadget mode (#1825)
|
|
|
|
|
|
|
|
I've found when booting HiKey with the usb gadget cable attached
|
|
|
|
if I then try to connect via adb, I get an infinite spew of:
|
|
|
|
|
|
|
|
dwc2 f72c0000.usb: dwc2_hsotg_ep_sethalt(ep ffffffc0790ecb18 ep1out, 0)
|
|
|
|
dwc2 f72c0000.usb: dwc2_hsotg_ep_sethalt(ep ffffffc0790eca18 ep1in, 0)
|
|
|
|
|
|
|
|
It seems that the usb autosuspend is suspending the bus shortly
|
|
|
|
after bootup when the gadget cable is attached. So when adbd
|
|
|
|
then tries to use the device, it doesn't work and it then tries
|
|
|
|
to restart it over and over via the ep_sethalt calls (via
|
|
|
|
FUNCTIONFS_CLEAR_HALT ioctl).
|
|
|
|
|
|
|
|
Chen Yu suggested this patch to avoid suspending if we're
|
|
|
|
in device mode, and it avoids the problem.
|
|
|
|
|
|
|
|
Cc: Wei Xu <xuwei5@hisilicon.com>
|
|
|
|
Cc: Guodong Xu <guodong.xu@linaro.org>
|
|
|
|
Cc: Amit Pundir <amit.pundir@linaro.org>
|
|
|
|
Cc: Rob Herring <robh+dt@kernel.org>
|
|
|
|
Cc: John Youn <johnyoun@synopsys.com>
|
|
|
|
Cc: Douglas Anderson <dianders@chromium.org>
|
|
|
|
Cc: Chen Yu <chenyu56@huawei.com>
|
|
|
|
Cc: Kishon Vijay Abraham I <kishon@ti.com>
|
|
|
|
Cc: Felipe Balbi <felipe.balbi@linux.intel.com>
|
|
|
|
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
|
|
Cc: linux-usb@vger.kernel.org
|
|
|
|
Suggested-by: Chen Yu <chenyu56@huawei.com>
|
|
|
|
Signed-off-by: John Stultz <john.stultz@linaro.org>
|
|
|
|
Signed-off-by: John Youn <johnyoun@synopsys.com>
|
|
|
|
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
|
|
|
|
---
|
|
|
|
drivers/usb/dwc2/hcd.c | 3 +++
|
|
|
|
1 file changed, 3 insertions(+)
|
|
|
|
|
|
|
|
--- a/drivers/usb/dwc2/hcd.c
|
|
|
|
+++ b/drivers/usb/dwc2/hcd.c
|
|
|
|
@@ -4365,6 +4365,9 @@ static int _dwc2_hcd_suspend(struct usb_
|
|
|
|
if (!HCD_HW_ACCESSIBLE(hcd))
|
|
|
|
goto unlock;
|
|
|
|
|
|
|
|
+ if (hsotg->op_state == OTG_STATE_B_PERIPHERAL)
|
|
|
|
+ goto unlock;
|
|
|
|
+
|
|
|
|
if (!hsotg->core_params->hibernation)
|
|
|
|
goto skip_power_saving;
|
|
|
|
|