xref: /linux/Documentation/devicetree/bindings/sound/cirrus,cs42l43.yaml (revision 0e6ebfd163645d300fdf4abedd1718195ad293bc)
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: 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:
188          - items:
189              - description: A phandle to the CODEC pinctrl node
190                minimum: 0
191              - const: 0
192              - const: 0
193              - const: 3
194
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    };
315