# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/cirrus,cs35l45.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Cirrus Logic CS35L45 Speaker Amplifier

maintainers:
  - Ricardo Rivera-Matos <rriveram@opensource.cirrus.com>
  - Richard Fitzgerald <rf@opensource.cirrus.com>

description: |
  CS35L45 is a Boosted Mono Class D Amplifier with DSP
  Speaker Protection and Adaptive Battery Management.

allOf:
  - $ref: dai-common.yaml#

properties:
  compatible:
    enum:
      - cirrus,cs35l45

  reg:
    maxItems: 1

  '#sound-dai-cells':
    const: 1

  reset-gpios:
    maxItems: 1

  vdd-a-supply:
    description: voltage regulator phandle for the VDD_A supply

  vdd-batt-supply:
    description: voltage regulator phandle for the VDD_BATT supply

  spi-max-frequency:
    maximum: 5000000

  cirrus,asp-sdout-hiz-ctrl:
    description:
      Audio serial port SDOUT Hi-Z control. Sets the Hi-Z
      configuration for SDOUT pin of amplifier. Logical OR of
      CS35L45_ASP_TX_HIZ_xxx values.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 3
    default: 2

patternProperties:
  "^cirrus,gpio-ctrl[1-3]$":
    description:
      GPIO pins configuration.
    type: object
    additionalProperties: false
    properties:
      gpio-dir:
        description:
          GPIO pin direction. Valid only when 'gpio-ctrl' is 1
            0 = Output
            1 = Input
        $ref: /schemas/types.yaml#/definitions/uint32
        minimum: 0
        maximum: 1
        default: 1
      gpio-lvl:
        description:
          GPIO level. Valid only when 'gpio-ctrl' is 1 and 'gpio-dir' is 0
            0 = Low
            1 = High
        $ref: /schemas/types.yaml#/definitions/uint32
        minimum: 0
        maximum: 1
        default: 0
      gpio-op-cfg:
        description:
          GPIO level. Valid only when 'gpio-ctrl' is 1 and 'gpio-dir' is 0
            0 = CMOS
            1 = Open Drain
        $ref: /schemas/types.yaml#/definitions/uint32
        minimum: 0
        maximum: 1
        default: 0
      gpio-pol:
        description:
          GPIO output polarity select. Valid only when 'gpio-ctrl' is 1
          and 'gpio-dir' is 0
            0 = Non-inverted, Active High
            1 = Inverted, Active Low
        $ref: /schemas/types.yaml#/definitions/uint32
        minimum: 0
        maximum: 1
        default: 0
      gpio-ctrl:
        description:
          Defines the function of the GPIO pin.
          GPIO1
            0 = High impedance input
            1 = Pin acts as a GPIO, direction controlled by 'gpio-dir'
            2 = Pin acts as MDSYNC, direction controlled by MDSYNC
            3-7 = Reserved
          GPIO2
            0 = High impedance input
            1 = Pin acts as a GPIO, direction controlled by 'gpio-dir'
            2 = Pin acts as open drain INT
            3 = Reserved
            4 = Pin acts as push-pull output INT. Active low.
            5 = Pin acts as push-pull output INT. Active high.
            6,7 = Reserved
          GPIO3
            0 = High impedance input
            1 = Pin acts as a GPIO, direction controlled by 'gpio-dir'
            2-7 = Reserved
        $ref: /schemas/types.yaml#/definitions/uint32
        minimum: 0
        maximum: 7
        default: 0
required:
  - compatible
  - reg
  - "#sound-dai-cells"

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/sound/cs35l45.h>
    spi {
        #address-cells = <1>;
        #size-cells = <0>;

        cs35l45: cs35l45@2 {
          #sound-dai-cells = <1>;
          compatible = "cirrus,cs35l45";
          reg = <2>;
          spi-max-frequency = <5000000>;
          vdd-a-supply = <&dummy_vreg>;
          vdd-batt-supply = <&dummy_vreg>;
          reset-gpios = <&gpio 110 0>;
          cirrus,asp-sdout-hiz-ctrl = <(CS35L45_ASP_TX_HIZ_UNUSED |
                                        CS35L45_ASP_TX_HIZ_DISABLED)>;
          cirrus,gpio-ctrl1 {
             gpio-ctrl = <0x2>;
          };
          cirrus,gpio-ctrl2 {
             gpio-ctrl = <0x2>;
          };
          cirrus,gpio-ctrl3 {
             gpio-ctrl = <0x1>;
             gpio-dir = <0x1>;
          };
        };
    };