lede/target/linux/layerscape/patches-5.4/820-usb-0005-usb-dwc3-add-otg-properties-update.patch
AmadeusGhost 86bc29e4a8
kernel: bump 5.4 to 5.4.68 (#5555)
[mac80211]
 ca5ee6e mac80211: Fix potential endless loop
 2c14710 mac80211: add more AQL fixes/improvements
 91fb3ce mac80211: remove an obsolete patch that is no longer doing anything useful
 acf1733 mac80211: add preliminary support for enabling 802.11ax in config
 d717343 mac80211: update encap offload patches to the latest version
 673062f mac80211: allow bigger A-MSDU sizes in VHT, even if HT is limited
 caf7277 mac80211: do not allow bigger VHT MPDUs than the hardware supports
 cd36c0d mac80211: select the first available channel for 5GHz interfaces
 1c6d456 mac80211: fix regression in station connection monitor optimization
 4bd7689 mac80211: update sta connection monitor regression fix

[target]
 Sync: at91, ath25, ath79, lantiq, mediatek, mvebu.
2020-10-03 00:36:16 +08:00

68 lines
2.4 KiB
Diff

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
@@ -1263,6 +1263,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
@@ -949,6 +949,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
@@ -1104,6 +1105,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
@@ -3495,6 +3495,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