# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/usb/microchip,usb5744.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Microchip USB5744 4-port Hub Controller

description:
  Microchip's USB5744 SmartHubTM IC is a 4 port, SuperSpeed (SS)/Hi-Speed (HS),
  low power, low pin count configurable and fully compliant with the USB 3.1
  Gen 1 specification. The USB5744 also supports Full Speed (FS) and Low Speed
  (LS) USB signaling, offering complete coverage of all defined USB operating
  speeds. The new SuperSpeed hubs operate in parallel with the USB 2.0
  controller, so 5 Gbps SuperSpeed data transfers are not affected by slower
  USB 2.0 traffic.

maintainers:
  - Michal Simek <michal.simek@amd.com>
  - Mubin Sayyed <mubin.sayyed@amd.com>
  - Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>

properties:
  compatible:
    enum:
      - usb424,2744
      - usb424,5744
      - microchip,usb5744

  reg:
    maxItems: 1

  reset-gpios:
    maxItems: 1
    description:
      GPIO controlling the GRST# pin.

  vdd-supply:
    description:
      3V3 power supply to the hub

  vdd2-supply:
    description:
      1V2 power supply to the hub

  peer-hub:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      phandle to the peer hub on the controller.

  i2c-bus:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      phandle of an usb hub connected via i2c bus.

required:
  - compatible
  - reg

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: microchip,usb5744
    then:
      properties:
        reset-gpios: false
        vdd-supply: false
        vdd2-supply: false
        peer-hub: false
        i2c-bus: false
    else:
      $ref: /schemas/usb/usb-device.yaml

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    i2c: i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        hub: usb-hub@2d {
            compatible = "microchip,usb5744";
            reg = <0x2d>;
        };
    };

    usb {
        #address-cells = <1>;
        #size-cells = <0>;

        /* 2.0 hub on port 1 */
        hub_2_0: hub@1 {
            compatible = "usb424,2744";
            reg = <1>;
            peer-hub = <&hub_3_0>;
            i2c-bus = <&hub>;
            reset-gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
        };

        /* 3.0 hub on port 2 */
        hub_3_0: hub@2 {
            compatible = "usb424,5744";
            reg = <2>;
            peer-hub = <&hub_2_0>;
            i2c-bus = <&hub>;
            reset-gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
        };
    };
