# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/usb/usb-drd.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Generic USB OTG Controller

maintainers:
  - Greg Kroah-Hartman <gregkh@linuxfoundation.org>

properties:
  otg-rev:
    description:
      Tells usb driver the release number of the OTG and EH supplement with
      which the device and its descriptors are compliant, in binary-coded
      decimal (i.e. 2.0 is 0200H). This property is used if any real OTG
      features (HNP/SRP/ADP) is enabled. If ADP is required, otg-rev should be
      0x0200 or above.
    $ref: /schemas/types.yaml#/definitions/uint32
    enum: [0x0100, 0x0120, 0x0130, 0x0200]

  dr_mode:
    description:
      Tells Dual-Role USB controllers that we want to work on a particular
      mode. In case this attribute isn't passed via DT, USB DRD controllers
      should default to OTG.
    $ref: /schemas/types.yaml#/definitions/string
    enum: [host, peripheral, otg]
    default: otg

  hnp-disable:
    description:
      Tells OTG controllers we want to disable OTG HNP. Normally HNP is the
      basic function of real OTG except you want it to be a srp-capable only B
      device.
    type: boolean

  srp-disable:
    description:
      Tells OTG controllers we want to disable OTG SRP. SRP is optional for OTG
      device.
    type: boolean

  adp-disable:
    description:
      Tells OTG controllers we want to disable OTG ADP. ADP is optional for OTG
      device.
    type: boolean

  usb-role-switch:
    description:
      Indicates that the device is capable of assigning the USB data role
      (USB host or USB device) for a given USB connector, such as Type-C,
      Type-B(micro). See connector/usb-connector.yaml.

  role-switch-default-mode:
    description:
      Indicates if usb-role-switch is enabled, the device default operation
      mode of controller while usb role is USB_ROLE_NONE.
    $ref: /schemas/types.yaml#/definitions/string
    enum: [host, peripheral]
    default: peripheral

additionalProperties: true

examples:
  - |
    usb@4a030000 {
        compatible = "snps,dwc3";
        reg = <0x4a030000 0xcfff>;
        interrupts = <0 92 4>;
        usb-phy = <&usb2_phy>, <&usb3_phy>;
        maximum-speed = "super-speed";
        dr_mode = "otg";
        phy_type = "utmi_wide";
        otg-rev = <0x0200>;
        adp-disable;
    };