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

title: Microchip USB 2.0 Hi-Speed Hub Controller

maintainers:
  - Richard Leitner <richard.leitner@skidata.com>

properties:
  compatible:
    enum:
      - microchip,usb2422
      - microchip,usb2512b
      - microchip,usb2512bi
      - microchip,usb2513b
      - microchip,usb2513bi
      - microchip,usb2514b
      - microchip,usb2514bi
      - microchip,usb2517
      - microchip,usb2517i
      - microchip,usb251xb

  reg:
    maxItems: 1

  reset-gpios:
    description: |
      Should specify the gpio for hub reset

  vdd-supply:
    description: |
      Should specify the phandle to the regulator supplying vdd

  skip-config:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      Skip Hub configuration, but only send the USB-Attach command

  vendor-id:
    $ref: /schemas/types.yaml#/definitions/uint16
    default: 0x0424
    description: |
      Set USB Vendor ID of the hub

  product-id:
    $ref: /schemas/types.yaml#/definitions/uint16
    description: |
      Set USB Product ID of the hub

  device-id:
    $ref: /schemas/types.yaml#/definitions/uint16
    default: 0x0bb3
    description: |
      Set USB Device ID of the hub

  language-id:
    $ref: /schemas/types.yaml#/definitions/uint16
    default: 0x0000
    description: |
      Set USB Language ID

  manufacturer:
    $ref: /schemas/types.yaml#/definitions/string
    description: |
      Set USB Manufacturer string (max 31 characters long)

  product:
    $ref: /schemas/types.yaml#/definitions/string
    description: |
      Set USB Product string (max 31 characters long)

  serial:
    $ref: /schemas/types.yaml#/definitions/string
    description: |
      Set USB Serial string (max 31 characters long)

  bus-powered:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      selects between self- and bus-powered operation
      (boolean, default is self-powered)

  self-powered:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      selects between self- and bus-powered operation
      (boolean, default is self-powered)

  disable-hi-speed:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      disable USB Hi-Speed support (boolean)

  multi-tt:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      selects between multi- and single-transaction-translator
      (boolean, default is multi-tt)

  single-tt:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      selects between multi- and single-transaction-translator
      (boolean, default is multi-tt)

  disable-eop:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      disable End of Packet generation in full-speed mode (boolean)

  ganged-sensing:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      select over-current sense type in self-powered mode
      (boolean, default is individual)

  individual-sensing:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      select over-current sense type in self-powered mode
      (boolean, default is individual)

  ganged-port-switching:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      select port power switching mode (boolean, default is individual)

  individual-port-switching:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      select port power switching mode (boolean, default is individual)

  dynamic-power-switching:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      enable auto-switching from self- to bus-powered operation if the
      local power source is removed or unavailable (boolean)

  oc-delay-us:
    enum: [100, 4000, 8000, 16000]
    default: 8000
    description: |
      Delay time (in microseconds) for filtering the over-current sense
      inputs. If an invalid value is given, the default is used instead.

  compound-device:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      indicate the hub is part of a compound device (boolean)

  port-mapping-mode:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      enable port mapping mode (boolean)

  led-usb-mode:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      led usb/speed indication mode selection (boolean, default is speed mode)

  led-speed-mode:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      led usb/speed indication mode selection (boolean, default is speed mode)

  string-support:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      enable string descriptor support (required for manufacturer, product
      and serial string configuration)

  non-removable-ports:
    $ref: /schemas/types.yaml#/definitions/uint8-array
    description: |
      Should specify the ports which have a non-removable device connected.

  sp-disabled-ports:
    $ref: /schemas/types.yaml#/definitions/uint8-array
    description: |
      Specifies the ports which will be self-power disabled

  bp-disabled-ports:
    $ref: /schemas/types.yaml#/definitions/uint8-array
    description: |
      Specifies the ports which will be bus-power disabled

  sp-max-total-current-microamp:
    maximum: 100000
    default: 1000
    description: |
      Specifies max current consumed by the hub from VBUS when
      operating in self-powered hub. It includes the hub silicon
      along with all associated circuitry including a permanently
      attached peripheral.

  bp-max-total-current-microamp:
    maximum: 510000
    default: 100000
    description: |
      Specifies max current consumed by the hub from VBUS when
      operating in self-powered hub. It includes the hub silicon
      along with all associated circuitry including a permanently
      attached peripheral.

  sp-max-removable-current-microamp:
    maximum: 100000
    default: 1000
    description: |
      Specifies max current consumed by the hub from VBUS when
      operating in self-powered hub. It includes the hub silicon
      along with all associated circuitry excluding a permanently
      attached peripheral.

  bp-max-removable-current-microamp:
    maximum: 510000
    default: 100000
    description: |
      Specifies max current consumed by the hub from VBUS when
      operating in self-powered hub. It includes the hub silicon
      along with all associated circuitry excluding a permanently
      attached peripheral.

  power-on-time-ms:
    maximum: 510
    default: 100
    description: |
      Specifies the time it takes from the time the host initiates the
      power-on sequence to a port until the port has adequate power.

  swap-dx-lanes:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    description: |
      Specifies the ports which will swap the differential-pair (D+/D-),
      default is not-swapped.

additionalProperties: false

required:
  - compatible

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>

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

      usb-hub@2c {
        compatible = "microchip,usb2512b";
        reg = <0x2c>;
        reset-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;
      };

      usb-hub@2d {
        compatible = "microchip,usb2514b";
        reg = <0x2d>;
        vendor-id = /bits/ 16 <0x0000>;
        product-id = /bits/ 16 <0x0000>;
        string-support;
        manufacturer = "Foo";
        product = "Foo-Bar";
        serial = "1234567890A";
        /* correct misplaced usb connectors on port 1,2 */
        swap-dx-lanes = <1 2>;
      };
    };

  - |
    #include <dt-bindings/gpio/gpio.h>
    usb-hub {
      /* I2C is not connected */
      compatible = "microchip,usb2512b";
      reset-gpios = <&porta 8 GPIO_ACTIVE_LOW>;
    };
