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

title: Micrel KSZ series PHYs and switches

maintainers:
  - Andrew Lunn <andrew@lunn.ch>
  - Stefan Eichenberger <eichest@gmail.com>

description:
  The Micrel KSZ series contains different network phys and switches.

properties:
  compatible:
    enum:
      - ethernet-phy-id000e.7237  # KSZ8873MLL
      - ethernet-phy-id0022.1430  # KSZ886X
      - ethernet-phy-id0022.1435  # KSZ8863
      - ethernet-phy-id0022.1510  # KSZ8041
      - ethernet-phy-id0022.1537  # KSZ8041RNLI
      - ethernet-phy-id0022.1550  # KSZ8051
      - ethernet-phy-id0022.1555  # KSZ8021
      - ethernet-phy-id0022.1556  # KSZ8031
      - ethernet-phy-id0022.1560  # KSZ8081, KSZ8091
      - ethernet-phy-id0022.1570  # KSZ8061
      - ethernet-phy-id0022.161a  # KSZ8001
      - ethernet-phy-id0022.1720  # KS8737

  micrel,fiber-mode:
    type: boolean
    description: |
      If present the PHY is configured to operate in fiber mode.

      The KSZ8041FTL variant supports fiber mode, enabled by the FXEN
      boot strapping pin. It can't be determined from the PHY registers
      whether the PHY is in fiber mode, so this boolean device tree
      property can be used to describe it.

      In fiber mode, auto-negotiation is disabled and the PHY can only
      work in 100base-fx (full and half duplex) modes.

  micrel,led-mode:
    $ref: /schemas/types.yaml#/definitions/uint32
    description: |
      LED mode value to set for PHYs with configurable LEDs.

      Configure the LED mode with single value. The list of PHYs and the
      bits that are currently supported:

      KSZ8001: register 0x1e, bits 15..14
      KSZ8041: register 0x1e, bits 15..14
      KSZ8021: register 0x1f, bits 5..4
      KSZ8031: register 0x1f, bits 5..4
      KSZ8051: register 0x1f, bits 5..4
      KSZ8081: register 0x1f, bits 5..4
      KSZ8091: register 0x1f, bits 5..4

      See the respective PHY datasheet for the mode values.
    minimum: 0
    maximum: 3

allOf:
  - $ref: ethernet-phy.yaml#
  - if:
      not:
        properties:
          compatible:
            contains:
              const: ethernet-phy-id0022.1510
    then:
      properties:
        micrel,fiber-mode: false
  - if:
      not:
        properties:
          compatible:
            contains:
              enum:
                - ethernet-phy-id0022.1510
                - ethernet-phy-id0022.1555
                - ethernet-phy-id0022.1556
                - ethernet-phy-id0022.1550
                - ethernet-phy-id0022.1560
                - ethernet-phy-id0022.161a
    then:
      properties:
        micrel,led-mode: false
  - if:
      properties:
        compatible:
          contains:
            enum:
              - ethernet-phy-id0022.1555
              - ethernet-phy-id0022.1556
              - ethernet-phy-id0022.1560
    then:
      properties:
        clock-names:
          const: rmii-ref
          description:
            The RMII reference input clock. Used to determine the XI input
            clock.
        micrel,rmii-reference-clock-select-25-mhz:
          type: boolean
          description: |
            RMII Reference Clock Select bit selects 25 MHz mode

            Setting the RMII Reference Clock Select bit enables 25 MHz rather
            than 50 MHz clock mode.

dependentRequired:
  micrel,rmii-reference-clock-select-25-mhz: [ clock-names ]

unevaluatedProperties: false

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

        ethernet-phy@5 {
            compatible = "ethernet-phy-id0022.1510";
            reg = <5>;
            micrel,led-mode = <2>;
            micrel,fiber-mode;
        };
    };
