GNU Linux-libre 6.1.90-gnu
[releases.git] / Documentation / devicetree / bindings / sound / cirrus,cs42l42.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,cs42l42.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Cirrus Logic CS42L42 audio CODEC
8
9 maintainers:
10   - patches@opensource.cirrus.com
11
12 description:
13   The CS42L42 is a low-power audio codec designed for portable applications.
14   It provides a high-dynamic range, stereo DAC for audio playback and a mono
15   high-dynamic-range ADC for audio capture. There is an integrated headset
16   detection block.
17
18 properties:
19   compatible:
20     enum:
21       - cirrus,cs42l42
22       - cirrus,cs42l83
23
24   reg:
25     description:
26       The I2C address of the CS42L42.
27     maxItems: 1
28
29   VP-supply:
30     description:
31       VP power supply.
32
33   VCP-supply:
34     description:
35       Charge pump power supply.
36
37   VD_FILT-supply:
38     description:
39       FILT+ power supply.
40
41   VL-supply:
42     description:
43       Logic power supply.
44
45   VA-supply:
46     description:
47       Analog power supply.
48
49   reset-gpios:
50     description:
51       This pin will be asserted and then deasserted to reset the
52       CS42L42 before communication starts.
53     maxItems: 1
54
55   interrupts:
56     description:
57       Interrupt for CS42L42 IRQ line.
58     maxItems: 1
59
60   cirrus,ts-inv:
61     description: |
62       Sets the behaviour of the jack plug detect switch.
63
64       0 - (Default) Shorted to tip when unplugged, open when plugged.
65       This is "inverted tip sense (ITS)" in the datasheet.
66
67       1 - Open when unplugged, shorted to tip when plugged.
68       This is "normal tip sense (TS)" in the datasheet.
69
70       The CS42L42_TS_INV_* defines are available for this.
71     $ref: "/schemas/types.yaml#/definitions/uint32"
72     minimum: 0
73     maximum: 1
74
75   cirrus,ts-dbnc-rise:
76     description: |
77       Debounce the rising edge of TIP_SENSE_PLUG. With no
78       debounce, the tip sense pin might be noisy on a plug event.
79
80       0 - 0ms
81       1 - 125ms
82       2 - 250ms
83       3 - 500ms
84       4 - 750ms
85       5 - 1s (Default)
86       6 - 1.25s
87       7 - 1.5s
88
89       The CS42L42_TS_DBNCE_* defines are available for this.
90     $ref: "/schemas/types.yaml#/definitions/uint32"
91     minimum: 0
92     maximum: 7
93
94   cirrus,ts-dbnc-fall:
95     description: |
96       Debounce the falling edge of TIP_SENSE_UNPLUG. With no
97       debounce, the tip sense pin might be noisy on an unplug event.
98
99       0 - 0ms
100       1 - 125ms
101       2 - 250ms
102       3 - 500ms
103       4 - 750ms
104       5 - 1s (Default)
105       6 - 1.25s
106       7 - 1.5s
107
108       The CS42L42_TS_DBNCE_* defines are available for this.
109     $ref: "/schemas/types.yaml#/definitions/uint32"
110     minimum: 0
111     maximum: 7
112
113   cirrus,btn-det-init-dbnce:
114     description: |
115       This sets how long to wait after enabling button detection
116       interrupts before servicing button interrupts, to allow the
117       HS bias time to settle. Value is in milliseconds.
118       There may be erroneous button interrupts if this debounce time
119       is too short.
120
121       0ms - 200ms,
122       Default = 100ms
123     $ref: "/schemas/types.yaml#/definitions/uint32"
124     minimum: 0
125     maximum: 200
126
127   cirrus,btn-det-event-dbnce:
128     description: |
129       This sets how long to wait after receiving a button press
130       interrupt before processing it. Allows time for the button
131       press to make a clean connection with the bias resistors.
132       Value is in milliseconds.
133
134       0ms - 20ms,
135       Default = 10ms
136     $ref: "/schemas/types.yaml#/definitions/uint32"
137     minimum: 0
138     maximum: 20
139
140   cirrus,bias-lvls:
141     description: |
142       For a level-detect headset button scheme, each button will bias
143       the mic pin to a certain voltage. To determine which button was
144       pressed, the voltage is compared to sequential, decreasing
145       voltages, until the compared voltage < bias voltage.
146       For different hardware setups, a designer might want to tweak this.
147       This is an array of descending values for the comparator voltage,
148       given as percent of the HSBIAS voltage.
149
150       Array of 4 values, each 0-63
151       < x1 x2 x3 x4 >
152       Default = < 15 8 4 1 >
153     $ref: /schemas/types.yaml#/definitions/uint32-array
154     minItems: 4
155     maxItems: 4
156     items:
157       minimum: 0
158       maximum: 63
159
160   cirrus,hs-bias-ramp-rate:
161     description: |
162       If present this sets the rate that the HS bias should rise and fall.
163       The actual rise and fall times depend on external hardware (the
164       datasheet gives several rise and fall time examples).
165
166       0 - Fast rise time; slow, load-dependent fall time
167       1 - Fast
168       2 - Slow (default)
169       3 - Slowest
170
171       The CS42L42_HSBIAS_RAMP_* defines are available for this.
172     $ref: "/schemas/types.yaml#/definitions/uint32"
173     minimum: 0
174     maximum: 3
175
176   cirrus,hs-bias-sense-disable:
177     description: |
178       If present the HSBIAS sense is disabled. Configures HSBIAS output
179       current sense through the external 2.21-k resistor. HSBIAS_SENSE
180       is a hardware feature to reduce the potential pop noise when the
181       headset plug is removed slowly. But on some platforms ESD voltage
182       will affect it causing plug detection to fail, especially with CTIA
183       headset type. For different hardware setups, a designer might want
184       to tweak default behavior.
185     type: boolean
186
187 required:
188   - compatible
189   - reg
190   - VP-supply
191   - VCP-supply
192   - VD_FILT-supply
193   - VL-supply
194   - VA-supply
195
196 additionalProperties: false
197
198 examples:
199   - |
200     #include <dt-bindings/sound/cs42l42.h>
201     i2c {
202       #address-cells = <1>;
203       #size-cells = <0>;
204
205       cs42l42: cs42l42@48 {
206           compatible = "cirrus,cs42l42";
207           reg = <0x48>;
208           VA-supply = <&dummy_vreg>;
209           VP-supply = <&dummy_vreg>;
210           VCP-supply = <&dummy_vreg>;
211           VD_FILT-supply = <&dummy_vreg>;
212           VL-supply = <&dummy_vreg>;
213
214           reset-gpios = <&axi_gpio_0 1 0>;
215           interrupt-parent = <&gpio0>;
216           interrupts = <55 8>;
217
218           cirrus,ts-inv = <CS42L42_TS_INV_DIS>;
219           cirrus,ts-dbnc-rise = <CS42L42_TS_DBNCE_1000>;
220           cirrus,ts-dbnc-fall = <CS42L42_TS_DBNCE_0>;
221           cirrus,btn-det-init-dbnce = <100>;
222           cirrus,btn-det-event-dbnce = <10>;
223           cirrus,bias-lvls = <0x0F 0x08 0x04 0x01>;
224           cirrus,hs-bias-ramp-rate = <CS42L42_HSBIAS_RAMP_SLOW>;
225       };
226     };