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

title: Broadcom BCM4329 family fullmac wireless SDIO/PCIE devices

maintainers:
  - Arend van Spriel <arend@broadcom.com>

description:
  The Broadcom Single chip MAC part for the BCM4329 family and
  later Cypress chips in the same family named CYW4373 and similar.
  These chips also have a Bluetooth portion described in a separate
  binding.

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - brcm,bcm43143-fmac
              - brcm,bcm4341b0-fmac
              - brcm,bcm4341b4-fmac
              - brcm,bcm4341b5-fmac
              - brcm,bcm4329-fmac
              - brcm,bcm4330-fmac
              - brcm,bcm4334-fmac
              - brcm,bcm43340-fmac
              - brcm,bcm4335-fmac
              - brcm,bcm43362-fmac
              - brcm,bcm4339-fmac
              - brcm,bcm43430a0-fmac
              - brcm,bcm43430a1-fmac
              - brcm,bcm43455-fmac
              - brcm,bcm43456-fmac
              - brcm,bcm4354-fmac
              - brcm,bcm4356-fmac
              - brcm,bcm4359-fmac
              - cypress,cyw4373-fmac
              - cypress,cyw43012-fmac
          - const: brcm,bcm4329-fmac
      - enum:
          - brcm,bcm4329-fmac
          - pci14e4,43dc  # BCM4355
          - pci14e4,4464  # BCM4364
          - pci14e4,4488  # BCM4377
          - pci14e4,4425  # BCM4378
          - pci14e4,4433  # BCM4387

  reg:
    description: SDIO function number for the device (for most cases
      this will be 1) or PCI device identifier.

  interrupts:
    maxItems: 1
    description: Out-of-band (OOB) IRQ line for waking up the host
      in response to WLAN activity. This corresponds to the HOST_WAKE
      line into the chip.

  interrupt-names:
    description: Name for the OOB IRQ, this must be set to "host-wake".
    const: host-wake

  brcm,drive-strength:
    $ref: /schemas/types.yaml#/definitions/uint32
    description: Drive strength used for the SDIO pins on the device in mA.
    minimum: 0
    maximum: 32

  reset-gpios:
    maxItems: 1
    description: A GPIO line connected to the WL_RST line, if present
      this shall be flagged as active low.

  brcm,ccode-map:
    $ref: /schemas/types.yaml#/definitions/string-array
    description: Multiple strings for translating ISO3166 country code to
      brcmfmac firmware country code and revision.
    items:
      pattern: '^[A-Z][A-Z]-[A-Z][0-9A-Z]-[0-9]+$'

  brcm,ccode-map-trivial:
    description: |
      Use a trivial mapping of ISO3166 country codes to brcmfmac firmware
      country code and revision: cc -> { cc, 0 }. In other words, assume that
      the CLM blob firmware uses ISO3166 country codes as well, and that all
      revisions are zero. This property is mutually exclusive with
      brcm,ccode-map. If both properties are specified, then brcm,ccode-map
      takes precedence.
    type: boolean

  brcm,cal-blob:
    $ref: /schemas/types.yaml#/definitions/uint8-array
    description: A per-device calibration blob for the Wi-Fi radio. This
      should be filled in by the bootloader from platform configuration
      data, if necessary, and will be uploaded to the device if present.

  brcm,board-type:
    $ref: /schemas/types.yaml#/definitions/string
    description: Overrides the board type, which is normally the compatible of
      the root node. This can be used to decouple the overall system board or
      device name from the board type for WiFi purposes, which is used to
      construct firmware and NVRAM configuration filenames, allowing for
      multiple devices that share the same module or characteristics for the
      WiFi subsystem to share the same firmware/NVRAM files. On Apple platforms,
      this should be the Apple module-instance codename prefixed by "apple,",
      e.g. "apple,honshu".

  apple,antenna-sku:
    $ref: /schemas/types.yaml#/definitions/string
    description: Antenna SKU used to identify a specific antenna configuration
      on Apple platforms. This is use to build firmware filenames, to allow
      platforms with different antenna configs to have different firmware and/or
      NVRAM. This would normally be filled in by the bootloader from platform
      configuration data.

required:
  - compatible
  - reg

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/gpio/gpio.h>
    mmc@80118000 {
      compatible = "arm,pl18x", "arm,primecell";
      reg = <0x80118000 0x1000>;
      clocks = <&clk 0>, <&clk 1>;
      clock-names = "mclk", "apb_pclk";
      interrupts = <0 60 IRQ_TYPE_LEVEL_HIGH>;
      bus-width = <4>;
      non-removable;
      vmmc-supply = <&wl_bt_reg>;
      #address-cells = <1>;
      #size-cells = <0>;

      wifi@1 {
        compatible = "brcm,bcm4334-fmac", "brcm,bcm4329-fmac";
        reg = <1>;
        interrupt-parent = <&gpio>;
        interrupts = <24 IRQ_TYPE_EDGE_FALLING>;
        interrupt-names = "host-wake";
        reset-gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
        brcm,ccode-map = "JP-JP-78", "US-Q2-86";
      };
    };
