Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

dt-bindings: mfd: cirrus,cs42l43: Add initial DT binding

The CS42L43 is an audio CODEC with integrated MIPI SoundWire interface
(Version 1.2.1 compliant), I2C, SPI, and I2S/TDM interfaces designed
for portable applications. It provides a high dynamic range, stereo
DAC for headphone output, two integrated Class D amplifiers for
loudspeakers, and two ADCs for wired headset microphone input or
stereo line input. PDM inputs are provided for digital microphones.

Add a YAML DT binding document for this device.

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20230804104602.395892-3-ckeepax@opensource.cirrus.com
Signed-off-by: Lee Jones <lee@kernel.org>

authored by

Charles Keepax and committed by
Lee Jones
ec77cad8 12a95123

+313
+313
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, 23, 41, 50, 60, 68, 86, 95 ] 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 + };