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

title: Qualcomm Bluetooth Chips

maintainers:
  - Balakrishna Godavarthi <quic_bgodavar@quicinc.com>
  - Rocky Liao <quic_rjliao@quicinc.com>

description:
  This binding describes Qualcomm UART-attached bluetooth chips.

properties:
  compatible:
    enum:
      - qcom,qca2066-bt
      - qcom,qca6174-bt
      - qcom,qca9377-bt
      - qcom,wcn3988-bt
      - qcom,wcn3990-bt
      - qcom,wcn3991-bt
      - qcom,wcn3998-bt
      - qcom,qca6390-bt
      - qcom,wcn6750-bt
      - qcom,wcn6855-bt
      - qcom,wcn7850-bt

  enable-gpios:
    maxItems: 1
    description: gpio specifier used to enable chip

  swctrl-gpios:
    maxItems: 1
    description: gpio specifier is used to find status
                 of clock supply to SoC

  clocks:
    maxItems: 1
    description: clock provided to the controller (SUSCLK_32KHZ)

  vddio-supply:
    description: VDD_IO supply regulator handle

  vddxo-supply:
    description: VDD_XO supply regulator handle

  vddrf-supply:
    description: VDD_RF supply regulator handle

  vddch0-supply:
    description: VDD_CH0 supply regulator handle

  vddch1-supply:
    description: VDD_CH1 supply regulator handle

  vddaon-supply:
    description: VDD_AON supply regulator handle

  vdddig-supply:
    description: VDD_DIG supply regulator handle

  vddbtcmx-supply:
    description: VDD_BT_CMX supply regulator handle

  vddbtcxmx-supply:
    description: VDD_BT_CXMX supply regulator handle

  vddrfacmn-supply:
    description: VDD_RFA_CMN supply regulator handle

  vddrfa0p8-supply:
    description: VDD_RFA_0P8 supply regulator handle

  vddrfa1p7-supply:
    description: VDD_RFA_1P7 supply regulator handle

  vddrfa1p8-supply:
    description: VDD_RFA_1P8 supply regulator handle

  vddrfa1p2-supply:
    description: VDD_RFA_1P2 supply regulator handle

  vddrfa1p9-supply:
    description: VDD_RFA_1P9 supply regulator handle

  vddrfa2p2-supply:
    description: VDD_RFA_2P2 supply regulator handle

  vddasd-supply:
    description: VDD_ASD supply regulator handle

  vddwlcx-supply:
    description: VDD_WLCX supply regulator handle

  vddwlmx-supply:
    description: VDD_WLMX supply regulator handle

  max-speed: true

  firmware-name:
    description: specify the name of nvm firmware to load

  local-bd-address: true

  qcom,local-bd-address-broken:
    type: boolean
    description:
      boot firmware is incorrectly passing the address in big-endian order

required:
  - compatible

additionalProperties: false

allOf:
  - $ref: bluetooth-controller.yaml#
  - $ref: /schemas/serial/serial-peripheral-props.yaml#
  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,qca2066-bt
              - qcom,qca6174-bt
    then:
      required:
        - enable-gpios
        - clocks

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,wcn3988-bt
              - qcom,wcn3990-bt
              - qcom,wcn3991-bt
              - qcom,wcn3998-bt
    then:
      required:
        - vddio-supply
        - vddxo-supply
        - vddrf-supply
        - vddch0-supply

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,wcn6750-bt
    then:
      required:
        - enable-gpios
        - swctrl-gpios
        - vddio-supply
        - vddaon-supply
        - vddbtcxmx-supply
        - vddrfacmn-supply
        - vddrfa0p8-supply
        - vddrfa1p7-supply
        - vddrfa1p2-supply
        - vddasd-supply
  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,wcn6855-bt
    then:
      required:
        - vddrfacmn-supply
        - vddaon-supply
        - vddwlcx-supply
        - vddwlmx-supply
        - vddbtcmx-supply
        - vddrfa0p8-supply
        - vddrfa1p2-supply
        - vddrfa1p8-supply
  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,wcn7850-bt
    then:
      required:
        - vddrfacmn-supply
        - vddaon-supply
        - vddwlcx-supply
        - vddwlmx-supply
        - vddrfa0p8-supply
        - vddrfa1p2-supply
        - vddrfa1p8-supply
  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,qca6390-bt
    then:
      required:
        - vddrfacmn-supply
        - vddaon-supply
        - vddbtcmx-supply
        - vddrfa0p8-supply
        - vddrfa1p2-supply
        - vddrfa1p7-supply

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

        bluetooth {
            compatible = "qcom,qca6174-bt";
            enable-gpios = <&pm8994_gpios 19 GPIO_ACTIVE_HIGH>;
            clocks = <&divclk4>;
            firmware-name = "nvm_00440302.bin";
        };
    };
  - |
    serial {

        bluetooth {
            compatible = "qcom,wcn3990-bt";
            vddio-supply = <&vreg_s4a_1p8>;
            vddxo-supply = <&vreg_l7a_1p8>;
            vddrf-supply = <&vreg_l17a_1p3>;
            vddch0-supply = <&vreg_l25a_3p3>;
            max-speed = <3200000>;
            firmware-name = "crnv21.bin";
        };
    };
  - |
    serial {

        bluetooth {
            compatible = "qcom,wcn6750-bt";
            pinctrl-names = "default";
            pinctrl-0 = <&bt_en_default>;
            enable-gpios = <&tlmm 85 GPIO_ACTIVE_HIGH>;
            swctrl-gpios = <&tlmm 86 GPIO_ACTIVE_HIGH>;
            vddio-supply = <&vreg_l19b_1p8>;
            vddaon-supply = <&vreg_s7b_0p9>;
            vddbtcxmx-supply = <&vreg_s7b_0p9>;
            vddrfacmn-supply = <&vreg_s7b_0p9>;
            vddrfa0p8-supply = <&vreg_s7b_0p9>;
            vddrfa1p7-supply = <&vreg_s1b_1p8>;
            vddrfa1p2-supply = <&vreg_s8b_1p2>;
            vddrfa2p2-supply = <&vreg_s1c_2p2>;
            vddasd-supply = <&vreg_l11c_2p8>;
            max-speed = <3200000>;
            firmware-name = "msnv11.bin";
        };
    };
