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

title: Smart Mixed-Signal Connectivity (SMSC) LAN911x/912x Controller

maintainers:
  - Shawn Guo <shawnguo@kernel.org>

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

properties:
  compatible:
    oneOf:
      - const: smsc,lan9115
      - items:
          - enum:
              - smsc,lan89218
              - smsc,lan9117
              - smsc,lan9118
              - smsc,lan9220
              - smsc,lan9221
          - const: smsc,lan9115

  reg:
    maxItems: 1

  reg-shift: true

  reg-io-width:
    enum: [ 2, 4 ]
    default: 2

  interrupts:
    minItems: 1
    items:
      - description:
          LAN interrupt line
      - description:
          Optional PME (power management event) interrupt that is able to wake
          up the host system with a 50ms pulse on network activity

  clocks:
    maxItems: 1

  phy-mode: true

  smsc,irq-active-high:
    type: boolean
    description: Indicates the IRQ polarity is active-high

  smsc,irq-push-pull:
    type: boolean
    description: Indicates the IRQ type is push-pull

  smsc,force-internal-phy:
    type: boolean
    description: Forces SMSC LAN controller to use internal PHY

  smsc,force-external-phy:
    type: boolean
    description: Forces SMSC LAN controller to use external PHY

  smsc,save-mac-address:
    type: boolean
    description:
      Indicates that MAC address needs to be saved before resetting the
      controller

  reset-gpios:
    maxItems: 1
    description:
      A GPIO line connected to the RESET (active low) signal of the device.
      On many systems this is wired high so the device goes out of reset at
      power-on, but if it is under program control, this optional GPIO can
      wake up in response to it.

  vdd33a-supply:
    description: 3.3V analog power supply

  vddvario-supply:
    description: IO logic power supply

required:
  - compatible
  - reg
  - interrupts

# There are lots of bus-specific properties ("qcom,*", "samsung,*", "fsl,*",
# "gpmc,*", ...) to be found, that actually depend on the compatible value of
# the parent node.
additionalProperties: true

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

    ethernet@f4000000 {
            compatible = "smsc,lan9220", "smsc,lan9115";
            reg = <0xf4000000 0x2000000>;
            phy-mode = "mii";
            interrupt-parent = <&gpio1>;
            interrupts = <31>, <32>;
            reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
            reg-io-width = <4>;
            smsc,irq-push-pull;
    };
