aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/820-usb-0005-usb-dwc3-add-otg-properties-update.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/layerscape/patches-5.4/820-usb-0005-usb-dwc3-add-otg-properties-update.patch')
-rw-r--r--target/linux/layerscape/patches-5.4/820-usb-0005-usb-dwc3-add-otg-properties-update.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-5.4/820-usb-0005-usb-dwc3-add-otg-properties-update.patch b/target/linux/layerscape/patches-5.4/820-usb-0005-usb-dwc3-add-otg-properties-update.patch
new file mode 100644
index 0000000000..218797247d
--- /dev/null
+++ b/target/linux/layerscape/patches-5.4/820-usb-0005-usb-dwc3-add-otg-properties-update.patch
@@ -0,0 +1,67 @@
+From 504c440dd9c391ed97299a9d4b2e41b3ac3b6211 Mon Sep 17 00:00:00 2001
+From: Peter Chen <peter.chen@nxp.com>
+Date: Mon, 28 Jan 2019 15:15:11 +0800
+Subject: [PATCH] usb: dwc3: add otg properties update
+
+During the USB certification CV9 test, if we report OTG descriptor
+to test suite, it will require doing OTG test, but in fact, it does
+not support OTG-compliance in dwc3 driver.
+
+Signed-off-by: Peter Chen <peter.chen@nxp.com>
+---
+ drivers/usb/dwc3/core.c | 11 +++++++++++
+ drivers/usb/dwc3/core.h | 2 ++
+ drivers/usb/dwc3/gadget.c | 4 ++++
+ 3 files changed, 17 insertions(+)
+
+--- a/drivers/usb/dwc3/core.c
++++ b/drivers/usb/dwc3/core.c
+@@ -1260,6 +1260,17 @@ static void dwc3_get_properties(struct d
+
+ dwc->maximum_speed = usb_get_maximum_speed(dev);
+ dwc->dr_mode = usb_get_dr_mode(dev);
++ if (dwc->dr_mode == USB_DR_MODE_OTG) {
++ dwc->otg_caps.otg_rev = 0x0300;
++ dwc->otg_caps.hnp_support = true;
++ dwc->otg_caps.srp_support = true;
++ dwc->otg_caps.adp_support = true;
++
++ /* Update otg capabilities by DT properties */
++ of_usb_update_otg_caps(dev->of_node,
++ &dwc->otg_caps);
++ }
++
+ dwc->hsphy_mode = of_usb_get_phy_mode(dev->of_node);
+
+ dwc->sysdev_is_parent = device_property_read_bool(dev,
+--- a/drivers/usb/dwc3/core.h
++++ b/drivers/usb/dwc3/core.h
+@@ -944,6 +944,7 @@ struct dwc3_scratchpad_array {
+ * @nr_scratch: number of scratch buffers
+ * @u1u2: only used on revisions <1.83a for workaround
+ * @maximum_speed: maximum speed requested (mainly for testing purposes)
++ * @otg_caps: the OTG capabilities from hardware point
+ * @revision: revision register contents
+ * @version_type: VERSIONTYPE register contents, a sub release of a revision
+ * @dr_mode: requested mode of operation
+@@ -1097,6 +1098,7 @@ struct dwc3 {
+ u32 nr_scratch;
+ u32 u1u2;
+ u32 maximum_speed;
++ struct usb_otg_caps otg_caps;
+
+ /*
+ * All 3.1 IP version constants are greater than the 3.0 IP
+--- a/drivers/usb/dwc3/gadget.c
++++ b/drivers/usb/dwc3/gadget.c
+@@ -3376,6 +3376,10 @@ int dwc3_gadget_init(struct dwc3 *dwc)
+ dwc->gadget.sg_supported = true;
+ dwc->gadget.name = "dwc3-gadget";
+ dwc->gadget.lpm_capable = true;
++ dwc->gadget.is_otg = (dwc->dr_mode == USB_DR_MODE_OTG) &&
++ (dwc->otg_caps.hnp_support ||
++ dwc->otg_caps.srp_support ||
++ dwc->otg_caps.adp_support);
+
+ /*
+ * FIXME We might be setting max_speed to <SUPER, however versions