layerscape: add patches-5.4
[openwrt/staging/wigyori.git] / target / linux / layerscape / patches-5.4 / 820-usb-0018-MLK-18794-1-usb-host-xhci-add-.bus_suspend-override.patch
diff --git a/target/linux/layerscape/patches-5.4/820-usb-0018-MLK-18794-1-usb-host-xhci-add-.bus_suspend-override.patch b/target/linux/layerscape/patches-5.4/820-usb-0018-MLK-18794-1-usb-host-xhci-add-.bus_suspend-override.patch
new file mode 100644 (file)
index 0000000..c5f59a3
--- /dev/null
@@ -0,0 +1,45 @@
+From b5c498026a95f9d80be23711dd6c178cc78d6c33 Mon Sep 17 00:00:00 2001
+From: Peter Chen <peter.chen@nxp.com>
+Date: Wed, 15 Aug 2018 14:59:55 +0800
+Subject: [PATCH] MLK-18794-1 usb: host: xhci: add .bus_suspend override
+
+Some platforms (eg: Cadence USB3) have special requirements to add
+platform USB register setting between xhci_bus_suspend and
+platform USB controller suspend routine. Eg, The Cadence USB3 needs
+RX detect clock switch from 24Mhz to 32Khz within 100ms after set
+port to U3, but sometimes, for USB3 HUB connection, the USB2
+bus suspend will cost more than 100ms, and introduce the disconnection
+before the PHY enters low power mode, then the state is in mess from
+controller side.
+
+So in this commit, we introduce .bus_suspend for xhci_driver_overrides
+for above use cases.
+
+Signed-off-by: Peter Chen <peter.chen@nxp.com>
+(cherry picked from commit f6baa57913ceb40da14a945820cb87e8d6ceb7c7)
+---
+ drivers/usb/host/xhci.c | 2 ++
+ drivers/usb/host/xhci.h | 1 +
+ 2 files changed, 3 insertions(+)
+
+--- a/drivers/usb/host/xhci.c
++++ b/drivers/usb/host/xhci.c
+@@ -5369,6 +5369,8 @@ void xhci_init_driver(struct hc_driver *
+                       drv->reset = over->reset;
+               if (over->start)
+                       drv->start = over->start;
++              if (over->bus_suspend)
++                      drv->bus_suspend = over->bus_suspend;
+       }
+ }
+ EXPORT_SYMBOL_GPL(xhci_init_driver);
+--- a/drivers/usb/host/xhci.h
++++ b/drivers/usb/host/xhci.h
+@@ -1910,6 +1910,7 @@ struct xhci_driver_overrides {
+       size_t extra_priv_size;
+       int (*reset)(struct usb_hcd *hcd);
+       int (*start)(struct usb_hcd *hcd);
++      int (*bus_suspend)(struct usb_hcd *hcd);
+ };
+ #define       XHCI_CFC_DELAY          10