# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/net/pse-pd/skyworks,si3474.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Skyworks Si3474 Power Sourcing Equipment controller

maintainers:
  - Piotr Kubik <piotr.kubik@adtran.com>

allOf:
  - $ref: pse-controller.yaml#

properties:
  compatible:
    enum:
      - skyworks,si3474

  reg:
    maxItems: 2

  reg-names:
    items:
      - const: main
      - const: secondary

  channels:
    description: The Si3474 is a single-chip PoE PSE controller managing
      8 physical power delivery channels. Internally, it's structured
      into two logical "Quads".
      Quad 0 Manages physical channels ('ports' in datasheet) 0, 1, 2, 3
      Quad 1 Manages physical channels ('ports' in datasheet) 4, 5, 6, 7.

    type: object
    additionalProperties: false

    properties:
      "#address-cells":
        const: 1

      "#size-cells":
        const: 0

    patternProperties:
      '^channel@[0-7]$':
        type: object
        additionalProperties: false

        properties:
          reg:
            maxItems: 1

        required:
          - reg

    required:
      - "#address-cells"
      - "#size-cells"

required:
  - compatible
  - reg
  - pse-pis

unevaluatedProperties: false

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

      ethernet-pse@26 {
        compatible = "skyworks,si3474";
        reg-names = "main", "secondary";
        reg = <0x26>, <0x27>;

        channels {
          #address-cells = <1>;
          #size-cells = <0>;
          phys0_0: channel@0 {
            reg = <0>;
          };
          phys0_1: channel@1 {
            reg = <1>;
          };
          phys0_2: channel@2 {
            reg = <2>;
          };
          phys0_3: channel@3 {
            reg = <3>;
          };
          phys0_4: channel@4 {
            reg = <4>;
          };
          phys0_5: channel@5 {
            reg = <5>;
          };
          phys0_6: channel@6 {
            reg = <6>;
          };
          phys0_7: channel@7 {
            reg = <7>;
          };
        };
        pse-pis {
          #address-cells = <1>;
          #size-cells = <0>;
          pse_pi0: pse-pi@0 {
            reg = <0>;
            #pse-cells = <0>;
            pairset-names = "alternative-a", "alternative-b";
            pairsets = <&phys0_0>, <&phys0_1>;
            polarity-supported = "MDI-X", "S";
            vpwr-supply = <&reg_pse>;
          };
          pse_pi1: pse-pi@1 {
            reg = <1>;
            #pse-cells = <0>;
            pairset-names = "alternative-a", "alternative-b";
            pairsets = <&phys0_2>, <&phys0_3>;
            polarity-supported = "MDI-X", "S";
            vpwr-supply = <&reg_pse>;
          };
          pse_pi2: pse-pi@2 {
            reg = <2>;
            #pse-cells = <0>;
            pairset-names = "alternative-a", "alternative-b";
            pairsets = <&phys0_4>, <&phys0_5>;
            polarity-supported = "MDI-X", "S";
            vpwr-supply = <&reg_pse>;
          };
          pse_pi3: pse-pi@3 {
            reg = <3>;
            #pse-cells = <0>;
            pairset-names = "alternative-a", "alternative-b";
            pairsets = <&phys0_6>, <&phys0_7>;
            polarity-supported = "MDI-X", "S";
            vpwr-supply = <&reg_pse>;
          };
        };
      };
    };
