# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright (c) 2020, Silicon Laboratories, Inc.
%YAML 1.2
---

$id: http://devicetree.org/schemas/net/wireless/silabs,wfx.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Silicon Labs WFxxx devicetree bindings

maintainers:
  - Jérôme Pouiller <jerome.pouiller@silabs.com>

description:
  The WFxxx chip series can be connected via SPI or via SDIO.

  For SDIO':'

    The driver is able to detect a WFxxx chip on SDIO bus by matching its Vendor
    ID and Product ID. However, driver will only provide limited features in
    this case. Thus declaring WFxxx chip in device tree is recommended (and may
    become mandatory in the future).

    In addition, it is recommended to declare a mmc-pwrseq on SDIO host above
    WFx. Without it, you may encounter issues with warm boot. The mmc-pwrseq
    should be compatible with mmc-pwrseq-simple. Please consult
    Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.yaml for more
    information.

  For SPI':'

    In add of the properties below, please consult
    Documentation/devicetree/bindings/spi/spi-controller.yaml for optional SPI
    related properties.

  Note that in add of the properties below, the WFx driver also supports
  `mac-address` and `local-mac-address` as described in
  Documentation/devicetree/bindings/net/ethernet.txt

properties:
  compatible:
    const: silabs,wf200
  reg:
    description:
      When used on SDIO bus, <reg> must be set to 1. When used on SPI bus, it is
      the chip select address of the device as defined in the SPI devices
      bindings.
    maxItems: 1
  spi-max-frequency:
    description: (SPI only) Maximum SPI clocking speed of device in Hz.
    maxItems: 1
  interrupts:
    description: The interrupt line. Triggers IRQ_TYPE_LEVEL_HIGH and
      IRQ_TYPE_EDGE_RISING are both supported by the chip and the driver. When
      SPI is used, this property is required. When SDIO is used, the "in-band"
      interrupt provided by the SDIO bus is used unless an interrupt is defined
      in the Device Tree.
    maxItems: 1
  reset-gpios:
    description: (SPI only) Phandle of gpio that will be used to reset chip
      during probe. Without this property, you may encounter issues with warm
      boot. (For legacy purpose, the gpio in inverted when compatible ==
      "silabs,wfx-spi")

      For SDIO, the reset gpio should declared using a mmc-pwrseq.
    maxItems: 1
  wakeup-gpios:
    description: Phandle of gpio that will be used to wake-up chip. Without this
      property, driver will disable most of power saving features.
    maxItems: 1
  config-file:
    description: Use an alternative file as PDS. Default is `wf200.pds`. Only
      necessary for development/debug purpose.
    maxItems: 1

required:
  - compatible
  - reg

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

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

        wfx@0 {
            compatible = "silabs,wf200";
            pinctrl-names = "default";
            pinctrl-0 = <&wfx_irq &wfx_gpios>;
            reg = <0>;
            interrupts-extended = <&gpio 16 IRQ_TYPE_EDGE_RISING>;
            wakeup-gpios = <&gpio 12 GPIO_ACTIVE_HIGH>;
            reset-gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
            spi-max-frequency = <42000000>;
        };
    };

  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    wfx_pwrseq: wfx_pwrseq {
        compatible = "mmc-pwrseq-simple";
        pinctrl-names = "default";
        pinctrl-0 = <&wfx_reset>;
        reset-gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
    };

    mmc0 {
        mmc-pwrseq = <&wfx_pwrseq>;
        #address-cells = <1>;
        #size-cells = <0>;

        mmc@1 {
            compatible = "silabs,wf200";
            pinctrl-names = "default";
            pinctrl-0 = <&wfx_wakeup>;
            reg = <1>;
            wakeup-gpios = <&gpio 12 GPIO_ACTIVE_HIGH>;
        };
    };
...
