Merge tag 'powerpc-6.6-6' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc...
[platform/kernel/linux-starfive.git] / Documentation / devicetree / bindings / sound / cirrus,cs42l43.yaml
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
7 title: Cirrus Logic CS42L43 Audio CODEC
8
9 maintainers:
10   - patches@opensource.cirrus.com
11
12 description: |
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
20 allOf:
21   - $ref: dai-common.yaml#
22
23 properties:
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
244 required:
245   - compatible
246   - reg
247   - vdd-p-supply
248   - vdd-a-supply
249   - vdd-io-supply
250   - vdd-cp-supply
251
252 additionalProperties: false
253
254 examples:
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     };