brcm2708: add linux 4.9 support
[openwrt/staging/yousong.git] / target / linux / brcm2708 / patches-4.9 / 0144-usb-dwc2-Avoid-suspending-if-we-re-in-gadget-mode-18.patch
diff --git a/target/linux/brcm2708/patches-4.9/0144-usb-dwc2-Avoid-suspending-if-we-re-in-gadget-mode-18.patch b/target/linux/brcm2708/patches-4.9/0144-usb-dwc2-Avoid-suspending-if-we-re-in-gadget-mode-18.patch
new file mode 100644 (file)
index 0000000..cd82d4f
--- /dev/null
@@ -0,0 +1,51 @@
+From 7158cd0f806c91291c4f8e7c2e2b7e5be3023d30 Mon Sep 17 00:00:00 2001
+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;