aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/820-usb-0018-MLK-18794-1-usb-host-xhci-add-.bus_suspend-override.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/layerscape/patches-5.4/820-usb-0018-MLK-18794-1-usb-host-xhci-add-.bus_suspend-override.patch')
-rw-r--r--target/linux/layerscape/patches-5.4/820-usb-0018-MLK-18794-1-usb-host-xhci-add-.bus_suspend-override.patch45
1 files changed, 45 insertions, 0 deletions
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
index 0000000000..c5f59a3915
--- /dev/null
+++ b/target/linux/layerscape/patches-5.4/820-usb-0018-MLK-18794-1-usb-host-xhci-add-.bus_suspend-override.patch
@@ -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