12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- From 504c440dd9c391ed97299a9d4b2e41b3ac3b6211 Mon Sep 17 00:00:00 2001
- From: Peter Chen <[email protected]>
- 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 <[email protected]>
- ---
- 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
- @@ -1269,6 +1269,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
- @@ -953,6 +953,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
- @@ -1109,6 +1110,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
|