162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/sound/cirrus,cs42l43.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Cirrus Logic CS42L43 Audio CODEC
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - patches@opensource.cirrus.com
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription: |
1362306a36Sopenharmony_ci  The CS42L43 is an audio CODEC with integrated MIPI SoundWire interface
1462306a36Sopenharmony_ci  (Version 1.2.1 compliant), I2C, SPI, and I2S/TDM interfaces designed
1562306a36Sopenharmony_ci  for portable applications. It provides a high dynamic range, stereo
1662306a36Sopenharmony_ci  DAC for headphone output, two integrated Class D amplifiers for
1762306a36Sopenharmony_ci  loudspeakers, and two ADCs for wired headset microphone input or
1862306a36Sopenharmony_ci  stereo line input. PDM inputs are provided for digital microphones.
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ciallOf:
2162306a36Sopenharmony_ci  - $ref: dai-common.yaml#
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ciproperties:
2462306a36Sopenharmony_ci  compatible:
2562306a36Sopenharmony_ci    enum:
2662306a36Sopenharmony_ci      - cirrus,cs42l43
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci  reg:
2962306a36Sopenharmony_ci    maxItems: 1
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci  vdd-p-supply:
3262306a36Sopenharmony_ci    description:
3362306a36Sopenharmony_ci      Power supply for the high voltage interface.
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci  vdd-a-supply:
3662306a36Sopenharmony_ci    description:
3762306a36Sopenharmony_ci      Power supply for internal analog circuits.
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci  vdd-d-supply:
4062306a36Sopenharmony_ci    description:
4162306a36Sopenharmony_ci      Power supply for internal digital circuits. Can be internally supplied.
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci  vdd-io-supply:
4462306a36Sopenharmony_ci    description:
4562306a36Sopenharmony_ci      Power supply for external interface and internal digital logic.
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci  vdd-cp-supply:
4862306a36Sopenharmony_ci    description:
4962306a36Sopenharmony_ci      Power supply for the amplifier 3 and 4 charge pump.
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci  vdd-amp-supply:
5262306a36Sopenharmony_ci    description:
5362306a36Sopenharmony_ci      Power supply for amplifier 1 and 2.
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci  reset-gpios:
5662306a36Sopenharmony_ci    maxItems: 1
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci  interrupt-controller: true
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci  "#interrupt-cells":
6162306a36Sopenharmony_ci    const: 2
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci  interrupts:
6462306a36Sopenharmony_ci    maxItems: 1
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci  "#sound-dai-cells":
6762306a36Sopenharmony_ci    const: 1
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci  clocks:
7062306a36Sopenharmony_ci    items:
7162306a36Sopenharmony_ci      - description: Synchronous audio clock provided on mclk_in.
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci  clock-names:
7462306a36Sopenharmony_ci    const: mclk
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci  cirrus,bias-low:
7762306a36Sopenharmony_ci    type: boolean
7862306a36Sopenharmony_ci    description:
7962306a36Sopenharmony_ci      Select a 1.8V headset micbias rather than 2.8V.
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci  cirrus,bias-sense-microamp:
8262306a36Sopenharmony_ci    description:
8362306a36Sopenharmony_ci      Current at which the headset micbias sense clamp will engage, 0 to
8462306a36Sopenharmony_ci      disable.
8562306a36Sopenharmony_ci    enum: [ 0, 14, 24, 43, 52, 61, 71, 90, 99 ]
8662306a36Sopenharmony_ci    default: 0
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci  cirrus,bias-ramp-ms:
8962306a36Sopenharmony_ci    description:
9062306a36Sopenharmony_ci      Time in milliseconds the hardware allows for the headset micbias to
9162306a36Sopenharmony_ci      ramp up.
9262306a36Sopenharmony_ci    enum: [ 10, 40, 90, 170 ]
9362306a36Sopenharmony_ci    default: 170
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci  cirrus,detect-us:
9662306a36Sopenharmony_ci    description:
9762306a36Sopenharmony_ci      Time in microseconds the type detection will run for. Long values will
9862306a36Sopenharmony_ci      cause more audible effects, but give more accurate detection.
9962306a36Sopenharmony_ci    enum: [ 20, 100, 1000, 10000, 50000, 75000, 100000, 200000 ]
10062306a36Sopenharmony_ci    default: 10000
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci  cirrus,button-automute:
10362306a36Sopenharmony_ci    type: boolean
10462306a36Sopenharmony_ci    description:
10562306a36Sopenharmony_ci      Enable the hardware automuting of decimator 1 when a headset button is
10662306a36Sopenharmony_ci      pressed.
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci  cirrus,buttons-ohms:
10962306a36Sopenharmony_ci    description:
11062306a36Sopenharmony_ci      Impedance in Ohms for each headset button, these should be listed in
11162306a36Sopenharmony_ci      ascending order.
11262306a36Sopenharmony_ci    minItems: 1
11362306a36Sopenharmony_ci    maxItems: 6
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci  cirrus,tip-debounce-ms:
11662306a36Sopenharmony_ci    description:
11762306a36Sopenharmony_ci      Software debounce on tip sense triggering in milliseconds.
11862306a36Sopenharmony_ci    default: 0
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci  cirrus,tip-invert:
12162306a36Sopenharmony_ci    type: boolean
12262306a36Sopenharmony_ci    description:
12362306a36Sopenharmony_ci      Indicates tip detect polarity, inverted implies open-circuit whilst the
12462306a36Sopenharmony_ci      jack is inserted.
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci  cirrus,tip-disable-pullup:
12762306a36Sopenharmony_ci    type: boolean
12862306a36Sopenharmony_ci    description:
12962306a36Sopenharmony_ci      Indicates if the internal pullup on the tip detect should be disabled.
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci  cirrus,tip-fall-db-ms:
13262306a36Sopenharmony_ci    description:
13362306a36Sopenharmony_ci      Time in milliseconds a falling edge on the tip detect should be hardware
13462306a36Sopenharmony_ci      debounced for. Note the falling edge is considered after the invert.
13562306a36Sopenharmony_ci    enum: [ 0, 125, 250, 500, 750, 1000, 1250, 1500 ]
13662306a36Sopenharmony_ci    default: 500
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci  cirrus,tip-rise-db-ms:
13962306a36Sopenharmony_ci    description:
14062306a36Sopenharmony_ci      Time in milliseconds a rising edge on the tip detect should be hardware
14162306a36Sopenharmony_ci      debounced for. Note the rising edge is considered after the invert.
14262306a36Sopenharmony_ci    enum: [ 0, 125, 250, 500, 750, 1000, 1250, 1500 ]
14362306a36Sopenharmony_ci    default: 500
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci  cirrus,use-ring-sense:
14662306a36Sopenharmony_ci    type: boolean
14762306a36Sopenharmony_ci    description:
14862306a36Sopenharmony_ci      Indicates if the ring sense should be used.
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci  cirrus,ring-invert:
15162306a36Sopenharmony_ci    type: boolean
15262306a36Sopenharmony_ci    description:
15362306a36Sopenharmony_ci      Indicates ring detect polarity, inverted implies open-circuit whilst the
15462306a36Sopenharmony_ci      jack is inserted.
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci  cirrus,ring-disable-pullup:
15762306a36Sopenharmony_ci    type: boolean
15862306a36Sopenharmony_ci    description:
15962306a36Sopenharmony_ci      Indicates if the internal pullup on the ring detect should be disabled.
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci  cirrus,ring-fall-db-ms:
16262306a36Sopenharmony_ci    description:
16362306a36Sopenharmony_ci      Time in milliseconds a falling edge on the ring detect should be hardware
16462306a36Sopenharmony_ci      debounced for. Note the falling edge is considered after the invert.
16562306a36Sopenharmony_ci    enum: [ 0, 125, 250, 500, 750, 1000, 1250, 1500 ]
16662306a36Sopenharmony_ci    default: 500
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ci  cirrus,ring-rise-db-ms:
16962306a36Sopenharmony_ci    description:
17062306a36Sopenharmony_ci      Time in milliseconds a rising edge on the ring detect should be hardware
17162306a36Sopenharmony_ci      debounced for. Note the rising edge is considered after the invert.
17262306a36Sopenharmony_ci    enum: [ 0, 125, 250, 500, 750, 1000, 1250, 1500 ]
17362306a36Sopenharmony_ci    default: 500
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci  pinctrl:
17662306a36Sopenharmony_ci    type: object
17762306a36Sopenharmony_ci    $ref: /schemas/pinctrl/pinctrl.yaml#
17862306a36Sopenharmony_ci    additionalProperties: false
17962306a36Sopenharmony_ci
18062306a36Sopenharmony_ci    properties:
18162306a36Sopenharmony_ci      gpio-controller: true
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci      "#gpio-cells":
18462306a36Sopenharmony_ci        const: 2
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ci      gpio-ranges:
18762306a36Sopenharmony_ci        items:
18862306a36Sopenharmony_ci          - description: A phandle to the CODEC pinctrl node
18962306a36Sopenharmony_ci            minimum: 0
19062306a36Sopenharmony_ci          - const: 0
19162306a36Sopenharmony_ci          - const: 0
19262306a36Sopenharmony_ci          - const: 3
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci    patternProperties:
19562306a36Sopenharmony_ci      "-state$":
19662306a36Sopenharmony_ci        oneOf:
19762306a36Sopenharmony_ci          - $ref: "#/$defs/cirrus-cs42l43-state"
19862306a36Sopenharmony_ci          - patternProperties:
19962306a36Sopenharmony_ci              "-pins$":
20062306a36Sopenharmony_ci                $ref: "#/$defs/cirrus-cs42l43-state"
20162306a36Sopenharmony_ci            additionalProperties: false
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_ci  spi:
20462306a36Sopenharmony_ci    type: object
20562306a36Sopenharmony_ci    $ref: /schemas/spi/spi-controller.yaml#
20662306a36Sopenharmony_ci    unevaluatedProperties: false
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci$defs:
20962306a36Sopenharmony_ci  cirrus-cs42l43-state:
21062306a36Sopenharmony_ci    type: object
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ci    allOf:
21362306a36Sopenharmony_ci      - $ref: /schemas/pinctrl/pincfg-node.yaml#
21462306a36Sopenharmony_ci      - $ref: /schemas/pinctrl/pinmux-node.yaml#
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci    oneOf:
21762306a36Sopenharmony_ci      - required: [ groups ]
21862306a36Sopenharmony_ci      - required: [ pins ]
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci    additionalProperties: false
22162306a36Sopenharmony_ci
22262306a36Sopenharmony_ci    properties:
22362306a36Sopenharmony_ci      groups:
22462306a36Sopenharmony_ci        enum: [ gpio1, gpio2, gpio3, asp, pdmout2, pdmout1, i2c, spi ]
22562306a36Sopenharmony_ci
22662306a36Sopenharmony_ci      pins:
22762306a36Sopenharmony_ci        enum: [ gpio1, gpio2, gpio3,
22862306a36Sopenharmony_ci                asp_dout, asp_fsync, asp_bclk,
22962306a36Sopenharmony_ci                pdmout2_clk, pdmout2_data, pdmout1_clk, pdmout1_data,
23062306a36Sopenharmony_ci                i2c_sda, i2c_scl,
23162306a36Sopenharmony_ci                spi_miso, spi_sck, spi_ssb ]
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_ci      function:
23462306a36Sopenharmony_ci        enum: [ gpio, spdif, irq, mic-shutter, spk-shutter ]
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ci      drive-strength:
23762306a36Sopenharmony_ci        description: Set drive strength in mA
23862306a36Sopenharmony_ci        enum: [ 1, 2, 4, 8, 9, 10, 12, 16 ]
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci      input-debounce:
24162306a36Sopenharmony_ci        description: Set input debounce in uS
24262306a36Sopenharmony_ci        enum: [ 0, 85 ]
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_cirequired:
24562306a36Sopenharmony_ci  - compatible
24662306a36Sopenharmony_ci  - reg
24762306a36Sopenharmony_ci  - vdd-p-supply
24862306a36Sopenharmony_ci  - vdd-a-supply
24962306a36Sopenharmony_ci  - vdd-io-supply
25062306a36Sopenharmony_ci  - vdd-cp-supply
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ciadditionalProperties: false
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ciexamples:
25562306a36Sopenharmony_ci  - |
25662306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ci    i2c {
25962306a36Sopenharmony_ci        #address-cells = <1>;
26062306a36Sopenharmony_ci        #size-cells = <0>;
26162306a36Sopenharmony_ci
26262306a36Sopenharmony_ci        cs42l43: codec@1a {
26362306a36Sopenharmony_ci            compatible = "cirrus,cs42l43";
26462306a36Sopenharmony_ci            reg = <0x1a>;
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_ci            vdd-p-supply = <&vdd5v0>;
26762306a36Sopenharmony_ci            vdd-a-supply = <&vdd1v8>;
26862306a36Sopenharmony_ci            vdd-io-supply = <&vdd1v8>;
26962306a36Sopenharmony_ci            vdd-cp-supply = <&vdd1v8>;
27062306a36Sopenharmony_ci            vdd-amp-supply = <&vdd5v0>;
27162306a36Sopenharmony_ci
27262306a36Sopenharmony_ci            reset-gpios = <&gpio 0>;
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci            interrupt-controller;
27562306a36Sopenharmony_ci            #interrupt-cells = <2>;
27662306a36Sopenharmony_ci            interrupt-parent = <&gpio>;
27762306a36Sopenharmony_ci            interrupts = <56 IRQ_TYPE_LEVEL_LOW>;
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ci            #sound-dai-cells = <1>;
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_ci            clocks = <&clks 0>;
28262306a36Sopenharmony_ci            clock-names = "mclk";
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci            cs42l43_pins: pinctrl {
28562306a36Sopenharmony_ci                gpio-controller;
28662306a36Sopenharmony_ci                #gpio-cells = <2>;
28762306a36Sopenharmony_ci                gpio-ranges = <&cs42l43_pins 0 0 3>;
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ci                pinctrl-names = "default";
29062306a36Sopenharmony_ci                pinctrl-0 = <&pinsettings>;
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ci                pinsettings: default-state {
29362306a36Sopenharmony_ci                    shutter-pins {
29462306a36Sopenharmony_ci                        groups = "gpio3";
29562306a36Sopenharmony_ci                        function = "mic-shutter";
29662306a36Sopenharmony_ci                    };
29762306a36Sopenharmony_ci                };
29862306a36Sopenharmony_ci            };
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_ci            spi {
30162306a36Sopenharmony_ci                #address-cells = <1>;
30262306a36Sopenharmony_ci                #size-cells = <0>;
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_ci                cs-gpios = <&cs42l43_pins 1 0>;
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_ci                sensor@0 {
30762306a36Sopenharmony_ci                    compatible = "bosch,bme680";
30862306a36Sopenharmony_ci                    reg = <0>;
30962306a36Sopenharmony_ci                    spi-max-frequency = <1400000>;
31062306a36Sopenharmony_ci                };
31162306a36Sopenharmony_ci            };
31262306a36Sopenharmony_ci        };
31362306a36Sopenharmony_ci    };
314