X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fstaging%2Fwigyori.git;a=blobdiff_plain;f=target%2Flinux%2Flayerscape%2Fpatches-5.4%2F820-usb-0018-MLK-18794-1-usb-host-xhci-add-.bus_suspend-override.patch;fp=target%2Flinux%2Flayerscape%2Fpatches-5.4%2F820-usb-0018-MLK-18794-1-usb-host-xhci-add-.bus_suspend-override.patch;h=c5f59a3915f59e312a1067dbc7c253742ea88410;hp=0000000000000000000000000000000000000000;hb=cddd4591404fb4c53dc0b3c0b15b942cdbed4356;hpb=d1d2c0b5579ea4f69a42246c9318539d61ba1999 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 +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 +(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