blob: 99a536601cc7e67e2d3fe735749ff3dda5f16175 [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# 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: 14
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: 1000
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:
Tom Rini6bb92fc2024-05-20 09:54:58 -0600188 - items:
189 - description: A phandle to the CODEC pinctrl node
190 minimum: 0
191 - const: 0
192 - const: 0
193 - const: 3
Tom Rini53633a82024-02-29 12:33:36 -0500194
195 patternProperties:
196 "-state$":
197 oneOf:
198 - $ref: "#/$defs/cirrus-cs42l43-state"
199 - patternProperties:
200 "-pins$":
201 $ref: "#/$defs/cirrus-cs42l43-state"
202 additionalProperties: false
203
204 spi:
205 type: object
206 $ref: /schemas/spi/spi-controller.yaml#
207 unevaluatedProperties: false
208
209$defs:
210 cirrus-cs42l43-state:
211 type: object
212
213 allOf:
214 - $ref: /schemas/pinctrl/pincfg-node.yaml#
215 - $ref: /schemas/pinctrl/pinmux-node.yaml#
216
217 oneOf:
218 - required: [ groups ]
219 - required: [ pins ]
220
221 additionalProperties: false
222
223 properties:
224 groups:
225 enum: [ gpio1, gpio2, gpio3, asp, pdmout2, pdmout1, i2c, spi ]
226
227 pins:
228 enum: [ gpio1, gpio2, gpio3,
229 asp_dout, asp_fsync, asp_bclk,
230 pdmout2_clk, pdmout2_data, pdmout1_clk, pdmout1_data,
231 i2c_sda, i2c_scl,
232 spi_miso, spi_sck, spi_ssb ]
233
234 function:
235 enum: [ gpio, spdif, irq, mic-shutter, spk-shutter ]
236
237 drive-strength:
238 description: Set drive strength in mA
239 enum: [ 1, 2, 4, 8, 9, 10, 12, 16 ]
240
241 input-debounce:
242 description: Set input debounce in uS
243 enum: [ 0, 85 ]
244
245required:
246 - compatible
247 - reg
248 - vdd-p-supply
249 - vdd-a-supply
250 - vdd-io-supply
251 - vdd-cp-supply
252
253additionalProperties: false
254
255examples:
256 - |
257 #include <dt-bindings/interrupt-controller/irq.h>
258
259 i2c {
260 #address-cells = <1>;
261 #size-cells = <0>;
262
263 cs42l43: codec@1a {
264 compatible = "cirrus,cs42l43";
265 reg = <0x1a>;
266
267 vdd-p-supply = <&vdd5v0>;
268 vdd-a-supply = <&vdd1v8>;
269 vdd-io-supply = <&vdd1v8>;
270 vdd-cp-supply = <&vdd1v8>;
271 vdd-amp-supply = <&vdd5v0>;
272
273 reset-gpios = <&gpio 0>;
274
275 interrupt-controller;
276 #interrupt-cells = <2>;
277 interrupt-parent = <&gpio>;
278 interrupts = <56 IRQ_TYPE_LEVEL_LOW>;
279
280 #sound-dai-cells = <1>;
281
282 clocks = <&clks 0>;
283 clock-names = "mclk";
284
285 cs42l43_pins: pinctrl {
286 gpio-controller;
287 #gpio-cells = <2>;
288 gpio-ranges = <&cs42l43_pins 0 0 3>;
289
290 pinctrl-names = "default";
291 pinctrl-0 = <&pinsettings>;
292
293 pinsettings: default-state {
294 shutter-pins {
295 groups = "gpio3";
296 function = "mic-shutter";
297 };
298 };
299 };
300
301 spi {
302 #address-cells = <1>;
303 #size-cells = <0>;
304
305 cs-gpios = <&cs42l43_pins 1 0>;
306
307 sensor@0 {
308 compatible = "bosch,bme680";
309 reg = <0>;
310 spi-max-frequency = <1400000>;
311 };
312 };
313 };
314 };