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

title: Genesys Logic USB hub controller

maintainers:
  - Icenowy Zheng <uwu@icenowy.me>

properties:
  compatible:
    enum:
      - usb5e3,608
      - usb5e3,610
      - usb5e3,620
      - usb5e3,626

  reg: true

  reset-gpios:
    description: GPIO controlling the RESET# pin.

  vdd-supply:
    description:
      The regulator that provides 3.3V or 5.0V core power to the hub.

  peer-hub:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      For onboard hub controllers that support USB 3.x and USB 2.0 hubs
      with shared resets and power supplies, this property is used to identify
      the hubs with which these are shared.

required:
  - compatible
  - reg

allOf:
  - $ref: usb-device.yaml#
  - if:
      properties:
        compatible:
          contains:
            enum:
              - usb5e3,608
    then:
      properties:
        peer-hub: false
        vdd-supply: false

  - if:
      properties:
        compatible:
          contains:
            enum:
              - usb5e3,610
              - usb5e3,620
    then:
      properties:
        peer-hub: true
        vdd-supply: true

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    usb {
        dr_mode = "host";
        #address-cells = <1>;
        #size-cells = <0>;

        hub: hub@1 {
            compatible = "usb5e3,608";
            reg = <1>;
            reset-gpios = <&pio 7 2 GPIO_ACTIVE_LOW>;
        };
    };

  - |
    #include <dt-bindings/gpio/gpio.h>
    usb {
        dr_mode = "host";
        #address-cells = <1>;
        #size-cells = <0>;

        /* 2.0 hub on port 1 */
        hub_2_0: hub@1 {
            compatible = "usb5e3,610";
            reg = <1>;
            peer-hub = <&hub_3_0>;
            reset-gpios = <&gpio 20 GPIO_ACTIVE_LOW>;
            vdd-supply = <&vcc_5v>;
        };

        /* 3.1 hub on port 4 */
        hub_3_0: hub@2 {
            compatible = "usb5e3,620";
            reg = <2>;
            peer-hub = <&hub_2_0>;
            reset-gpios = <&gpio 20 GPIO_ACTIVE_LOW>;
            vdd-supply = <&vcc_5v>;
        };
    };
