1# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/sound/cirrus,cs42l43.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Cirrus Logic CS42L43 Audio CODEC
8
9maintainers:
10  - patches@opensource.cirrus.com
11
12description: |
13  The CS42L43 is an audio CODEC with integrated MIPI SoundWire interface
14  (Version 1.2.1 compliant), I2C, SPI, and I2S/TDM interfaces designed
15  for portable applications. It provides a high dynamic range, stereo
16  DAC for headphone output, two integrated Class D amplifiers for
17  loudspeakers, and two ADCs for wired headset microphone input or
18  stereo line input. PDM inputs are provided for digital microphones.
19
20allOf:
21  - $ref: dai-common.yaml#
22
23properties:
24  compatible:
25    enum:
26      - cirrus,cs42l43
27
28  reg:
29    maxItems: 1
30
31  vdd-p-supply:
32    description:
33      Power supply for the high voltage interface.
34
35  vdd-a-supply:
36    description:
37      Power supply for internal analog circuits.
38
39  vdd-d-supply:
40    description:
41      Power supply for internal digital circuits. Can be internally supplied.
42
43  vdd-io-supply:
44    description:
45      Power supply for external interface and internal digital logic.
46
47  vdd-cp-supply:
48    description:
49      Power supply for the amplifier 3 and 4 charge pump.
50
51  vdd-amp-supply:
52    description:
53      Power supply for amplifier 1 and 2.
54
55  reset-gpios:
56    maxItems: 1
57
58  interrupt-controller: true
59
60  "#interrupt-cells":
61    const: 2
62
63  interrupts:
64    maxItems: 1
65
66  "#sound-dai-cells":
67    const: 1
68
69  clocks:
70    items:
71      - description: Synchronous audio clock provided on mclk_in.
72
73  clock-names:
74    const: mclk
75
76  cirrus,bias-low:
77    type: boolean
78    description:
79      Select a 1.8V headset micbias rather than 2.8V.
80
81  cirrus,bias-sense-microamp:
82    description:
83      Current at which the headset micbias sense clamp will engage, 0 to
84      disable.
85    enum: [ 0, 14, 24, 43, 52, 61, 71, 90, 99 ]
86    default: 0
87
88  cirrus,bias-ramp-ms:
89    description:
90      Time in milliseconds the hardware allows for the headset micbias to
91      ramp up.
92    enum: [ 10, 40, 90, 170 ]
93    default: 170
94
95  cirrus,detect-us:
96    description:
97      Time in microseconds the type detection will run for. Long values will
98      cause more audible effects, but give more accurate detection.
99    enum: [ 20, 100, 1000, 10000, 50000, 75000, 100000, 200000 ]
100    default: 10000
101
102  cirrus,button-automute:
103    type: boolean
104    description:
105      Enable the hardware automuting of decimator 1 when a headset button is
106      pressed.
107
108  cirrus,buttons-ohms:
109    description:
110      Impedance in Ohms for each headset button, these should be listed in
111      ascending order.
112    minItems: 1
113    maxItems: 6
114
115  cirrus,tip-debounce-ms:
116    description:
117      Software debounce on tip sense triggering in milliseconds.
118    default: 0
119
120  cirrus,tip-invert:
121    type: boolean
122    description:
123      Indicates tip detect polarity, inverted implies open-circuit whilst the
124      jack is inserted.
125
126  cirrus,tip-disable-pullup:
127    type: boolean
128    description:
129      Indicates if the internal pullup on the tip detect should be disabled.
130
131  cirrus,tip-fall-db-ms:
132    description:
133      Time in milliseconds a falling edge on the tip detect should be hardware
134      debounced for. Note the falling edge is considered after the invert.
135    enum: [ 0, 125, 250, 500, 750, 1000, 1250, 1500 ]
136    default: 500
137
138  cirrus,tip-rise-db-ms:
139    description:
140      Time in milliseconds a rising edge on the tip detect should be hardware
141      debounced for. Note the rising edge is considered after the invert.
142    enum: [ 0, 125, 250, 500, 750, 1000, 1250, 1500 ]
143    default: 500
144
145  cirrus,use-ring-sense:
146    type: boolean
147    description:
148      Indicates if the ring sense should be used.
149
150  cirrus,ring-invert:
151    type: boolean
152    description:
153      Indicates ring detect polarity, inverted implies open-circuit whilst the
154      jack is inserted.
155
156  cirrus,ring-disable-pullup:
157    type: boolean
158    description:
159      Indicates if the internal pullup on the ring detect should be disabled.
160
161  cirrus,ring-fall-db-ms:
162    description:
163      Time in milliseconds a falling edge on the ring detect should be hardware
164      debounced for. Note the falling edge is considered after the invert.
165    enum: [ 0, 125, 250, 500, 750, 1000, 1250, 1500 ]
166    default: 500
167
168  cirrus,ring-rise-db-ms:
169    description:
170      Time in milliseconds a rising edge on the ring detect should be hardware
171      debounced for. Note the rising edge is considered after the invert.
172    enum: [ 0, 125, 250, 500, 750, 1000, 1250, 1500 ]
173    default: 500
174
175  pinctrl:
176    type: object
177    $ref: /schemas/pinctrl/pinctrl.yaml#
178    additionalProperties: false
179
180    properties:
181      gpio-controller: true
182
183      "#gpio-cells":
184        const: 2
185
186      gpio-ranges:
187        items:
188          - description: A phandle to the CODEC pinctrl node
189            minimum: 0
190          - const: 0
191          - const: 0
192          - const: 3
193
194    patternProperties:
195      "-state$":
196        oneOf:
197          - $ref: "#/$defs/cirrus-cs42l43-state"
198          - patternProperties:
199              "-pins$":
200                $ref: "#/$defs/cirrus-cs42l43-state"
201            additionalProperties: false
202
203  spi:
204    type: object
205    $ref: /schemas/spi/spi-controller.yaml#
206    unevaluatedProperties: false
207
208$defs:
209  cirrus-cs42l43-state:
210    type: object
211
212    allOf:
213      - $ref: /schemas/pinctrl/pincfg-node.yaml#
214      - $ref: /schemas/pinctrl/pinmux-node.yaml#
215
216    oneOf:
217      - required: [ groups ]
218      - required: [ pins ]
219
220    additionalProperties: false
221
222    properties:
223      groups:
224        enum: [ gpio1, gpio2, gpio3, asp, pdmout2, pdmout1, i2c, spi ]
225
226      pins:
227        enum: [ gpio1, gpio2, gpio3,
228                asp_dout, asp_fsync, asp_bclk,
229                pdmout2_clk, pdmout2_data, pdmout1_clk, pdmout1_data,
230                i2c_sda, i2c_scl,
231                spi_miso, spi_sck, spi_ssb ]
232
233      function:
234        enum: [ gpio, spdif, irq, mic-shutter, spk-shutter ]
235
236      drive-strength:
237        description: Set drive strength in mA
238        enum: [ 1, 2, 4, 8, 9, 10, 12, 16 ]
239
240      input-debounce:
241        description: Set input debounce in uS
242        enum: [ 0, 85 ]
243
244required:
245  - compatible
246  - reg
247  - vdd-p-supply
248  - vdd-a-supply
249  - vdd-io-supply
250  - vdd-cp-supply
251
252additionalProperties: false
253
254examples:
255  - |
256    #include <dt-bindings/interrupt-controller/irq.h>
257
258    i2c {
259        #address-cells = <1>;
260        #size-cells = <0>;
261
262        cs42l43: codec@1a {
263            compatible = "cirrus,cs42l43";
264            reg = <0x1a>;
265
266            vdd-p-supply = <&vdd5v0>;
267            vdd-a-supply = <&vdd1v8>;
268            vdd-io-supply = <&vdd1v8>;
269            vdd-cp-supply = <&vdd1v8>;
270            vdd-amp-supply = <&vdd5v0>;
271
272            reset-gpios = <&gpio 0>;
273
274            interrupt-controller;
275            #interrupt-cells = <2>;
276            interrupt-parent = <&gpio>;
277            interrupts = <56 IRQ_TYPE_LEVEL_LOW>;
278
279            #sound-dai-cells = <1>;
280
281            clocks = <&clks 0>;
282            clock-names = "mclk";
283
284            cs42l43_pins: pinctrl {
285                gpio-controller;
286                #gpio-cells = <2>;
287                gpio-ranges = <&cs42l43_pins 0 0 3>;
288
289                pinctrl-names = "default";
290                pinctrl-0 = <&pinsettings>;
291
292                pinsettings: default-state {
293                    shutter-pins {
294                        groups = "gpio3";
295                        function = "mic-shutter";
296                    };
297                };
298            };
299
300            spi {
301                #address-cells = <1>;
302                #size-cells = <0>;
303
304                cs-gpios = <&cs42l43_pins 1 0>;
305
306                sensor@0 {
307                    compatible = "bosch,bme680";
308                    reg = <0>;
309                    spi-max-frequency = <1400000>;
310                };
311            };
312        };
313    };
314