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

title: Texas Instruments Wilink 6/7/8 (wl12xx/wl18xx) Wireless LAN Controller

maintainers:
  - Tony Lindgren <tony@atomide.com>

description:
  The wl12xx/wl18xx chips can be connected via SPI or via SDIO.
  Note that the *-clock-frequency properties assume internal clocks.  In case
  of external clocks, new bindings (for parsing the clock nodes) have to be
  added.

properties:
  compatible:
    enum:
      - ti,wl1271
      - ti,wl1273
      - ti,wl1281
      - ti,wl1283
      - ti,wl1285
      - ti,wl1801
      - ti,wl1805
      - ti,wl1807
      - ti,wl1831
      - ti,wl1835
      - ti,wl1837

  reg:
    maxItems: 1
    description:
      This is required when connected via SPI, and optional when connected via
      SDIO.

  interrupts:
    minItems: 1
    maxItems: 2

  interrupt-names:
    items:
      - const: irq
      - const: wakeup

  vwlan-supply:
    description:
      Points to the node of the regulator that powers/enable the wl12xx/wl18xx
      chip.  This is required when connected via SPI.


  ref-clock-frequency:
    $ref: /schemas/types.yaml#/definitions/uint32
    description: Reference clock frequency.

  tcxo-clock-frequency:
    $ref: /schemas/types.yaml#/definitions/uint32
    description: TCXO clock frequency.

  clock-xtal:
    $ref: /schemas/types.yaml#/definitions/flag
    description: Indicates that the clock is generated from XTAL.

required:
  - compatible
  - interrupts

allOf:
  - $ref: /schemas/spi/spi-peripheral-props.yaml#
  - if:
      properties:
        compatible:
          contains:
            enum:
              - ti,wl1271
              - ti,wl1273
              - ti,wl1281
              - ti,wl1283
    then:
      required:
        - ref-clock-frequency

unevaluatedProperties: false

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

    // For wl12xx family:
    spi {
        #address-cells = <1>;
        #size-cells = <0>;

        wlcore1: wlcore@1 {
            compatible = "ti,wl1271";
            reg = <1>;
            spi-max-frequency = <48000000>;
            interrupts = <8 IRQ_TYPE_LEVEL_HIGH>;
            vwlan-supply = <&vwlan_fixed>;
            clock-xtal;
            ref-clock-frequency = <38400000>;
        };
    };

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

    // For wl18xx family:
    spi {
        #address-cells = <1>;
        #size-cells = <0>;

        wlcore2: wlcore@0 {
            compatible = "ti,wl1835";
            reg = <0>;
            spi-max-frequency = <48000000>;
            interrupts = <27 IRQ_TYPE_EDGE_RISING>;
            vwlan-supply = <&vwlan_fixed>;
        };
    };

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

    // SDIO example:
    mmc3 {
        vmmc-supply = <&wlan_en_reg>;
        bus-width = <4>;
        cap-power-off-card;
        keep-power-in-suspend;

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

        wlcore3: wlcore@2 {
            compatible = "ti,wl1835";
            reg = <2>;
            interrupts = <19 IRQ_TYPE_LEVEL_HIGH>;
        };
    };