560 lines · yaml
1# SPDX-License-Identifier: GPL-2.02%YAML 1.23---4$id: http://devicetree.org/schemas/sound/simple-card.yaml#5$schema: http://devicetree.org/meta-schemas/core.yaml#6 7title: Simple Audio Card Driver8 9maintainers:10 - Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>11 12definitions:13 14 frame-master:15 description: Indicates dai-link frame master.16 $ref: /schemas/types.yaml#/definitions/phandle17 18 bitclock-master:19 description: Indicates dai-link bit clock master20 $ref: /schemas/types.yaml#/definitions/phandle21 22 frame-inversion:23 description: dai-link uses frame clock inversion24 $ref: /schemas/types.yaml#/definitions/flag25 26 bitclock-inversion:27 description: dai-link uses bit clock inversion28 $ref: /schemas/types.yaml#/definitions/flag29 30 dai-tdm-slot-num:31 description: see tdm-slot.txt.32 $ref: /schemas/types.yaml#/definitions/uint3233 34 dai-tdm-slot-width:35 description: see tdm-slot.txt.36 $ref: /schemas/types.yaml#/definitions/uint3237 38 system-clock-frequency:39 description: |40 If a clock is specified and a multiplication factor is given with41 mclk-fs, the clock will be set to the calculated mclk frequency42 when the stream starts.43 $ref: /schemas/types.yaml#/definitions/uint3244 45 system-clock-direction-out:46 description: |47 specifies clock direction as 'out' on initialization.48 It is useful for some aCPUs with fixed clocks.49 $ref: /schemas/types.yaml#/definitions/flag50 51 system-clock-fixed:52 description: |53 Specifies that the clock frequency should not be modified.54 Implied when system-clock-frequency is specified, but can be used when55 a clock is mapped to the device whose frequency cannot or should not be56 changed. When mclk-fs is also specified, this restricts the device to a57 single fixed sampling rate.58 $ref: /schemas/types.yaml#/definitions/flag59 60 mclk-fs:61 description: |62 Multiplication factor between stream rate and codec mclk.63 When defined, mclk-fs property defined in dai-link sub nodes are ignored.64 $ref: /schemas/types.yaml#/definitions/uint3265 66 aux-devs:67 description: |68 List of phandles pointing to auxiliary devices, such69 as amplifiers, to be added to the sound card.70 $ref: /schemas/types.yaml#/definitions/phandle-array71 72 convert-rate:73 description: CPU to Codec rate convert.74 $ref: /schemas/types.yaml#/definitions/uint3275 76 convert-channels:77 description: CPU to Codec rate channels.78 $ref: /schemas/types.yaml#/definitions/uint3279 80 prefix:81 description: device name prefix82 $ref: /schemas/types.yaml#/definitions/string83 84 label:85 maxItems: 186 87 routing:88 description: |89 A list of the connections between audio components.90 Each entry is a pair of strings, the first being the91 connection's sink, the second being the connection's source.92 $ref: /schemas/types.yaml#/definitions/non-unique-string-array93 94 widgets:95 description: User specified audio sound widgets.96 $ref: /schemas/types.yaml#/definitions/non-unique-string-array97 98 pin-switches:99 description: the widget names for which pin switches must be created.100 $ref: /schemas/types.yaml#/definitions/string-array101 102 format:103 description: audio format.104 items:105 enum:106 - i2s107 - right_j108 - left_j109 - dsp_a110 - dsp_b111 - ac97112 - pdm113 - msb114 - lsb115 116 dai:117 type: object118 properties:119 sound-dai:120 maxItems: 1121 122 # common properties123 mclk-fs:124 $ref: "#/definitions/mclk-fs"125 prefix:126 $ref: "#/definitions/prefix"127 frame-inversion:128 $ref: "#/definitions/frame-inversion"129 bitclock-inversion:130 $ref: "#/definitions/bitclock-inversion"131 frame-master:132 $ref: /schemas/types.yaml#/definitions/flag133 bitclock-master:134 $ref: /schemas/types.yaml#/definitions/flag135 136 dai-tdm-slot-num:137 $ref: "#/definitions/dai-tdm-slot-num"138 dai-tdm-slot-width:139 $ref: "#/definitions/dai-tdm-slot-width"140 clocks:141 maxItems: 1142 system-clock-frequency:143 $ref: "#/definitions/system-clock-frequency"144 system-clock-direction-out:145 $ref: "#/definitions/system-clock-direction-out"146 system-clock-fixed:147 $ref: "#/definitions/system-clock-fixed"148 required:149 - sound-dai150 151 additional-devs:152 type: object153 description:154 Additional devices used by the simple audio card.155 patternProperties:156 '^iio-aux(-.+)?$':157 type: object158 $ref: audio-iio-aux.yaml#159 160properties:161 compatible:162 contains:163 enum:164 - simple-audio-card165 - simple-scu-audio-card166 167 "#address-cells":168 const: 1169 "#size-cells":170 const: 0171 172 label:173 $ref: "#/definitions/label"174 175 simple-audio-card,name:176 description: User specified audio sound card name.177 $ref: /schemas/types.yaml#/definitions/string178 179 simple-audio-card,widgets:180 $ref: "#/definitions/widgets"181 simple-audio-card,routing:182 $ref: "#/definitions/routing"183 184 # common properties185 simple-audio-card,frame-master:186 $ref: "#/definitions/frame-master"187 simple-audio-card,bitclock-master:188 $ref: "#/definitions/bitclock-master"189 simple-audio-card,frame-inversion:190 $ref: "#/definitions/frame-inversion"191 simple-audio-card,bitclock-inversion:192 $ref: "#/definitions/bitclock-inversion"193 simple-audio-card,format:194 $ref: "#/definitions/format"195 simple-audio-card,mclk-fs:196 $ref: "#/definitions/mclk-fs"197 simple-audio-card,aux-devs:198 $ref: "#/definitions/aux-devs"199 simple-audio-card,additional-devs:200 $ref: "#/definitions/additional-devs"201 simple-audio-card,convert-rate:202 $ref: "#/definitions/convert-rate"203 simple-audio-card,convert-channels:204 $ref: "#/definitions/convert-channels"205 simple-audio-card,prefix:206 $ref: "#/definitions/prefix"207 simple-audio-card,pin-switches:208 $ref: "#/definitions/pin-switches"209 simple-audio-card,hp-det-gpio:210 maxItems: 1211 simple-audio-card,mic-det-gpio:212 maxItems: 1213 214patternProperties:215 "^simple-audio-card,cpu(@[0-9a-f]+)?$":216 $ref: "#/definitions/dai"217 "^simple-audio-card,codec(@[0-9a-f]+)?$":218 $ref: "#/definitions/dai"219 "^simple-audio-card,plat(@[0-9a-f]+)?$":220 $ref: "#/definitions/dai"221 222 "^simple-audio-card,dai-link(@[0-9a-f]+)?$":223 description: |224 Container for dai-link level properties and the CPU and CODEC sub-nodes.225 This container may be omitted when the card has only one DAI link.226 type: object227 properties:228 reg:229 maxItems: 1230 231 "#address-cells":232 const: 1233 "#size-cells":234 const: 0235 # common properties236 frame-master:237 $ref: "#/definitions/frame-master"238 bitclock-master:239 $ref: "#/definitions/bitclock-master"240 frame-inversion:241 $ref: "#/definitions/frame-inversion"242 bitclock-inversion:243 $ref: "#/definitions/bitclock-inversion"244 format:245 $ref: "#/definitions/format"246 mclk-fs:247 $ref: "#/definitions/mclk-fs"248 aux-devs:249 $ref: "#/definitions/aux-devs"250 convert-rate:251 $ref: "#/definitions/convert-rate"252 convert-channels:253 $ref: "#/definitions/convert-channels"254 prefix:255 $ref: "#/definitions/prefix"256 pin-switches:257 $ref: "#/definitions/pin-switches"258 hp-det-gpio:259 maxItems: 1260 mic-det-gpio:261 maxItems: 1262 263 patternProperties:264 "^cpu(-[0-9]+)?$":265 $ref: "#/definitions/dai"266 "^codec(-[0-9]+)?$":267 $ref: "#/definitions/dai"268 additionalProperties: false269 270required:271 - compatible272 273additionalProperties: false274 275examples:276# --------------------277# single DAI link278# --------------------279 - |280 sound {281 compatible = "simple-audio-card";282 simple-audio-card,name = "VF610-Tower-Sound-Card";283 simple-audio-card,format = "left_j";284 simple-audio-card,bitclock-master = <&dailink0_master>;285 simple-audio-card,frame-master = <&dailink0_master>;286 simple-audio-card,widgets =287 "Microphone", "Microphone Jack",288 "Headphone", "Headphone Jack",289 "Speaker", "External Speaker";290 simple-audio-card,routing =291 "MIC_IN", "Microphone Jack",292 "Headphone Jack", "HP_OUT",293 "External Speaker", "LINE_OUT";294 295 simple-audio-card,cpu {296 sound-dai = <&sh_fsi2 0>;297 };298 299 dailink0_master: simple-audio-card,codec {300 sound-dai = <&ak4648>;301 clocks = <&osc>;302 };303 };304 305# --------------------306# Multi DAI links307# --------------------308 - |309 sound {310 compatible = "simple-audio-card";311 simple-audio-card,name = "Cubox Audio";312 313 #address-cells = <1>;314 #size-cells = <0>;315 316 simple-audio-card,dai-link@0 { /* I2S - HDMI */317 reg = <0>;318 format = "i2s";319 cpu {320 sound-dai = <&audio0>;321 };322 codec {323 sound-dai = <&tda998x0>;324 };325 };326 327 simple-audio-card,dai-link@1 { /* S/PDIF - HDMI */328 reg = <1>;329 cpu {330 sound-dai = <&audio1>;331 };332 codec {333 sound-dai = <&tda998x1>;334 };335 };336 337 simple-audio-card,dai-link@2 { /* S/PDIF - S/PDIF */338 reg = <2>;339 cpu {340 sound-dai = <&audio2>;341 };342 codec {343 sound-dai = <&spdif_codec>;344 };345 };346 };347 348# --------------------349# route audio from IMX6 SSI2 through TLV320DAC3100 codec350# through TPA6130A2 amplifier to headphones:351# --------------------352 - |353 sound {354 compatible = "simple-audio-card";355 356 simple-audio-card,widgets =357 "Headphone", "Headphone Jack";358 simple-audio-card,routing =359 "Headphone Jack", "HPLEFT",360 "Headphone Jack", "HPRIGHT",361 "LEFTIN", "HPL",362 "RIGHTIN", "HPR";363 simple-audio-card,aux-devs = <&>;364 simple-audio-card,cpu {365 sound-dai = <&ssi2>;366 };367 simple-audio-card,codec {368 sound-dai = <&codec>;369 clocks = <&clocks>;370 };371 };372 373# --------------------374# route audio to/from a codec through an amplifier375# designed with a potentiometer driven by IIO:376# --------------------377 - |378 sound {379 compatible = "simple-audio-card";380 381 simple-audio-card,aux-devs = <&_in>, <&_out>;382 simple-audio-card,routing =383 "CODEC LEFTIN", "AMP_IN LEFT OUT",384 "CODEC RIGHTIN", "AMP_IN RIGHT OUT",385 "AMP_OUT LEFT IN", "CODEC LEFTOUT",386 "AMP_OUT RIGHT IN", "CODEC RIGHTOUT";387 388 simple-audio-card,additional-devs {389 amp_out: iio-aux-out {390 compatible = "audio-iio-aux";391 io-channels = <&pot_out 0>, <&pot_out 1>;392 io-channel-names = "LEFT", "RIGHT";393 snd-control-invert-range = <1 1>;394 sound-name-prefix = "AMP_OUT";395 };396 397 amp_in: iio_aux-in {398 compatible = "audio-iio-aux";399 io-channels = <&pot_in 0>, <&pot_in 1>;400 io-channel-names = "LEFT", "RIGHT";401 sound-name-prefix = "AMP_IN";402 };403 };404 405 simple-audio-card,cpu {406 sound-dai = <&cpu>;407 };408 409 simple-audio-card,codec {410 sound-dai = <&codec>;411 clocks = <&clocks>;412 };413 };414 415# --------------------416# Sampling Rate Conversion417# --------------------418 - |419 sound {420 compatible = "simple-audio-card";421 422 simple-audio-card,name = "rsnd-ak4643";423 simple-audio-card,format = "left_j";424 simple-audio-card,bitclock-master = <&sndcodec>;425 simple-audio-card,frame-master = <&sndcodec>;426 427 simple-audio-card,convert-rate = <48000>;428 429 simple-audio-card,prefix = "ak4642";430 simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",431 "DAI0 Capture", "ak4642 Capture";432 433 sndcpu: simple-audio-card,cpu {434 sound-dai = <&rcar_sound>;435 };436 437 sndcodec: simple-audio-card,codec {438 sound-dai = <&ak4643>;439 system-clock-frequency = <11289600>;440 };441 };442 443# --------------------444# 2 CPU 1 Codec (Mixing)445# --------------------446 - |447 sound {448 compatible = "simple-audio-card";449 #address-cells = <1>;450 #size-cells = <0>;451 452 simple-audio-card,name = "rsnd-ak4643";453 simple-audio-card,format = "left_j";454 simple-audio-card,bitclock-master = <&dpcmcpu>;455 simple-audio-card,frame-master = <&dpcmcpu>;456 457 simple-audio-card,convert-rate = <48000>;458 simple-audio-card,convert-channels = <2>;459 460 simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",461 "ak4642 Playback", "DAI1 Playback";462 463 dpcmcpu: simple-audio-card,cpu@0 {464 reg = <0>;465 sound-dai = <&rcar_sound 0>;466 };467 468 simple-audio-card,cpu@1 {469 reg = <1>;470 sound-dai = <&rcar_sound 1>;471 };472 473 simple-audio-card,codec {474 prefix = "ak4642";475 sound-dai = <&ak4643>;476 clocks = <&audio_clock>;477 };478 };479 480# --------------------481# Multi DAI links with DPCM:482#483# CPU0 ------ ak4613484# CPU1 ------ PCM3168A-p /* DPCM 1ch/2ch */485# CPU2 --/ /* DPCM 3ch/4ch */486# CPU3 --/ /* DPCM 5ch/6ch */487# CPU4 --/ /* DPCM 7ch/8ch */488# CPU5 ------ PCM3168A-c489# --------------------490 - |491 sound {492 compatible = "simple-audio-card";493 #address-cells = <1>;494 #size-cells = <0>;495 496 simple-audio-card,routing =497 "pcm3168a Playback", "DAI1 Playback",498 "pcm3168a Playback", "DAI2 Playback",499 "pcm3168a Playback", "DAI3 Playback",500 "pcm3168a Playback", "DAI4 Playback";501 502 simple-audio-card,dai-link@0 {503 reg = <0>;504 format = "left_j";505 bitclock-master = <&sndcpu0>;506 frame-master = <&sndcpu0>;507 508 sndcpu0: cpu {509 sound-dai = <&rcar_sound 0>;510 };511 codec {512 sound-dai = <&ak4613>;513 };514 };515 516 simple-audio-card,dai-link@1 {517 reg = <1>;518 format = "i2s";519 bitclock-master = <&sndcpu1>;520 frame-master = <&sndcpu1>;521 522 convert-channels = <8>; /* TDM Split */523 524 sndcpu1: cpu-0 {525 sound-dai = <&rcar_sound 1>;526 };527 cpu-1 {528 sound-dai = <&rcar_sound 2>;529 };530 cpu-2 {531 sound-dai = <&rcar_sound 3>;532 };533 cpu-3 {534 sound-dai = <&rcar_sound 4>;535 };536 codec {537 mclk-fs = <512>;538 prefix = "pcm3168a";539 dai-tdm-slot-num = <8>;540 sound-dai = <&pcm3168a 0>;541 };542 };543 544 simple-audio-card,dai-link@2 {545 reg = <2>;546 format = "i2s";547 bitclock-master = <&sndcpu2>;548 frame-master = <&sndcpu2>;549 550 sndcpu2: cpu {551 sound-dai = <&rcar_sound 5>;552 };553 codec {554 mclk-fs = <512>;555 prefix = "pcm3168a";556 sound-dai = <&pcm3168a 1>;557 };558 };559 };560