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

title: Hirschmann Hellcreek TSN Switch Device Tree Bindings

allOf:
  - $ref: dsa.yaml#

maintainers:
  - Andrew Lunn <andrew@lunn.ch>
  - Florian Fainelli <f.fainelli@gmail.com>
  - Vivien Didelot <vivien.didelot@gmail.com>
  - Kurt Kanzenbach <kurt@linutronix.de>

description:
  The Hellcreek TSN Switch IP is a 802.1Q Ethernet compliant switch. It supports
  the Precision Time Protocol, Hardware Timestamping as well the Time Aware
  Shaper.

properties:
  compatible:
    items:
      - const: hirschmann,hellcreek-de1soc-r1

  reg:
    description:
      The physical base address and size of TSN and PTP memory base
    minItems: 2
    maxItems: 2

  reg-names:
    items:
      - const: tsn
      - const: ptp

  leds:
    type: object
    properties:
      '#address-cells':
        const: 1
      '#size-cells':
        const: 0

    patternProperties:
      "^led@[01]$":
        type: object
        description: Hellcreek leds
        $ref: ../../leds/common.yaml#

        properties:
          reg:
            items:
              - enum: [0, 1]
            description: Led number

          label: true

          default-state: true

        required:
          - reg

        additionalProperties: false

    additionalProperties: false

required:
  - compatible
  - reg
  - reg-names
  - ethernet-ports
  - leds

unevaluatedProperties: false

examples:
  - |
        switch0: switch@ff240000 {
            compatible = "hirschmann,hellcreek-de1soc-r1";
            reg = <0xff240000 0x1000>,
                  <0xff250000 0x1000>;
            reg-names = "tsn", "ptp";
            dsa,member = <0 0>;

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

                port@0 {
                    reg = <0>;
                    label = "cpu";
                    ethernet = <&gmac0>;
                };

                port@2 {
                    reg = <2>;
                    label = "lan0";
                    phy-handle = <&phy1>;
                };

                port@3 {
                    reg = <3>;
                    label = "lan1";
                    phy-handle = <&phy2>;
                };
            };

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

                led@0 {
                    reg = <0>;
                    label = "sync_good";
                    default-state = "on";
                };

                led@1 {
                    reg = <1>;
                    label = "is_gm";
                    default-state = "off";
                };
            };
        };
