1# SPDX-License-Identifier: GPL-2.0 2%YAML 1.2 3--- 4$id: http://devicetree.org/schemas/sound/simple-card.yaml# 5$schema: http://devicetree.org/meta-schemas/core.yaml# 6 7title: Simple Audio Card Driver Device Tree Bindings 8 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/phandle-array 17 maxItems: 1 18 19 bitclock-master: 20 description: Indicates dai-link bit clock master 21 $ref: /schemas/types.yaml#/definitions/phandle-array 22 maxItems: 1 23 24 frame-inversion: 25 description: dai-link uses frame clock inversion 26 $ref: /schemas/types.yaml#/definitions/flag 27 28 bitclock-inversion: 29 description: dai-link uses bit clock inversion 30 $ref: /schemas/types.yaml#/definitions/flag 31 32 dai-tdm-slot-num: 33 description: see tdm-slot.txt. 34 $ref: /schemas/types.yaml#/definitions/uint32 35 36 dai-tdm-slot-width: 37 description: see tdm-slot.txt. 38 $ref: /schemas/types.yaml#/definitions/uint32 39 40 system-clock-frequency: 41 description: | 42 If a clock is specified and a multiplication factor is given with 43 mclk-fs, the clock will be set to the calculated mclk frequency 44 when the stream starts. 45 $ref: /schemas/types.yaml#/definitions/uint32 46 47 system-clock-direction-out: 48 description: | 49 specifies clock direction as 'out' on initialization. 50 It is useful for some aCPUs with fixed clocks. 51 $ref: /schemas/types.yaml#/definitions/flag 52 53 mclk-fs: 54 description: | 55 Multiplication factor between stream rate and codec mclk. 56 When defined, mclk-fs property defined in dai-link sub nodes are ignored. 57 $ref: /schemas/types.yaml#/definitions/uint32 58 59 aux-devs: 60 description: | 61 List of phandles pointing to auxiliary devices, such 62 as amplifiers, to be added to the sound card. 63 $ref: /schemas/types.yaml#/definitions/phandle-array 64 65 convert-rate: 66 description: CPU to Codec rate convert. 67 $ref: /schemas/types.yaml#/definitions/uint32 68 69 convert-channels: 70 description: CPU to Codec rate channels. 71 $ref: /schemas/types.yaml#/definitions/uint32 72 73 prefix: 74 description: "device name prefix" 75 $ref: /schemas/types.yaml#/definitions/string 76 77 label: 78 maxItems: 1 79 80 routing: 81 description: | 82 A list of the connections between audio components. 83 Each entry is a pair of strings, the first being the 84 connection's sink, the second being the connection's source. 85 $ref: /schemas/types.yaml#/definitions/non-unique-string-array 86 87 widgets: 88 description: User specified audio sound widgets. 89 $ref: /schemas/types.yaml#/definitions/non-unique-string-array 90 91 pin-switches: 92 description: the widget names for which pin switches must be created. 93 $ref: /schemas/types.yaml#/definitions/string-array 94 95 format: 96 description: audio format. 97 items: 98 enum: 99 - i2s 100 - right_j 101 - left_j 102 - dsp_a 103 - dsp_b 104 - ac97 105 - pdm 106 - msb 107 - lsb 108 109 dai: 110 type: object 111 properties: 112 sound-dai: 113 maxItems: 1 114 115 # common properties 116 mclk-fs: 117 $ref: "#/definitions/mclk-fs" 118 prefix: 119 $ref: "#/definitions/prefix" 120 frame-inversion: 121 $ref: "#/definitions/frame-inversion" 122 bitclock-inversion: 123 $ref: "#/definitions/bitclock-inversion" 124 frame-master: 125 $ref: /schemas/types.yaml#/definitions/flag 126 bitclock-master: 127 $ref: /schemas/types.yaml#/definitions/flag 128 129 dai-tdm-slot-num: 130 $ref: "#/definitions/dai-tdm-slot-num" 131 dai-tdm-slot-width: 132 $ref: "#/definitions/dai-tdm-slot-width" 133 clocks: 134 maxItems: 1 135 system-clock-frequency: 136 $ref: "#/definitions/system-clock-frequency" 137 system-clock-direction-out: 138 $ref: "#/definitions/system-clock-direction-out" 139 required: 140 - sound-dai 141 142properties: 143 compatible: 144 contains: 145 enum: 146 - simple-audio-card 147 - simple-scu-audio-card 148 149 "#address-cells": 150 const: 1 151 "#size-cells": 152 const: 0 153 154 label: 155 $ref: "#/definitions/label" 156 157 simple-audio-card,name: 158 description: User specified audio sound card name. 159 $ref: /schemas/types.yaml#/definitions/string 160 161# use patternProperties to avoid naming "xxx,yyy" issue 162patternProperties: 163 "^simple-audio-card,widgets$": 164 $ref: "#/definitions/widgets" 165 "^simple-audio-card,routing$": 166 $ref: "#/definitions/routing" 167 "^simple-audio-card,cpu(@[0-9a-f]+)?": 168 $ref: "#/definitions/dai" 169 "^simple-audio-card,codec(@[0-9a-f]+)?": 170 $ref: "#/definitions/dai" 171 172 # common properties 173 "^simple-audio-card,frame-master$": 174 $ref: "#/definitions/frame-master" 175 "^simple-audio-card,bitclock-master$": 176 $ref: "#/definitions/bitclock-master" 177 "^simple-audio-card,frame-inversion$": 178 $ref: "#/definitions/frame-inversion" 179 "^simple-audio-card,bitclock-inversion$": 180 $ref: "#/definitions/bitclock-inversion" 181 "^simple-audio-card,format$": 182 $ref: "#/definitions/format" 183 "^simple-audio-card,mclk-fs$": 184 $ref: "#/definitions/mclk-fs" 185 "^simple-audio-card,aux-devs$": 186 $ref: "#/definitions/aux-devs" 187 "^simple-audio-card,convert-rate$": 188 $ref: "#/definitions/convert-rate" 189 "^simple-audio-card,convert-channels$": 190 $ref: "#/definitions/convert-channels" 191 "^simple-audio-card,prefix$": 192 $ref: "#/definitions/prefix" 193 "^simple-audio-card,pin-switches$": 194 $ref: "#/definitions/pin-switches" 195 "^simple-audio-card,hp-det-gpio$": 196 maxItems: 1 197 "^simple-audio-card,mic-det-gpio$": 198 maxItems: 1 199 200 "^simple-audio-card,dai-link(@[0-9a-f]+)?$": 201 description: | 202 Container for dai-link level properties and the CPU and CODEC sub-nodes. 203 This container may be omitted when the card has only one DAI link. 204 type: object 205 properties: 206 reg: 207 maxItems: 1 208 209 # common properties 210 frame-master: 211 $ref: "#/definitions/frame-master" 212 bitclock-master: 213 $ref: "#/definitions/bitclock-master" 214 frame-inversion: 215 $ref: "#/definitions/frame-inversion" 216 bitclock-inversion: 217 $ref: "#/definitions/bitclock-inversion" 218 format: 219 $ref: "#/definitions/format" 220 mclk-fs: 221 $ref: "#/definitions/mclk-fs" 222 aux-devs: 223 $ref: "#/definitions/aux-devs" 224 convert-rate: 225 $ref: "#/definitions/convert-rate" 226 convert-channels: 227 $ref: "#/definitions/convert-channels" 228 prefix: 229 $ref: "#/definitions/prefix" 230 pin-switches: 231 $ref: "#/definitions/pin-switches" 232 hp-det-gpio: 233 maxItems: 1 234 mic-det-gpio: 235 maxItems: 1 236 237 patternProperties: 238 "^cpu(@[0-9a-f]+)?": 239 $ref: "#/definitions/dai" 240 "^codec(@[0-9a-f]+)?": 241 $ref: "#/definitions/dai" 242 additionalProperties: false 243 244required: 245 - compatible 246 247additionalProperties: false 248 249examples: 250#-------------------- 251# single DAI link 252#-------------------- 253 - | 254 sound { 255 compatible = "simple-audio-card"; 256 simple-audio-card,name = "VF610-Tower-Sound-Card"; 257 simple-audio-card,format = "left_j"; 258 simple-audio-card,bitclock-master = <&dailink0_master>; 259 simple-audio-card,frame-master = <&dailink0_master>; 260 simple-audio-card,widgets = 261 "Microphone", "Microphone Jack", 262 "Headphone", "Headphone Jack", 263 "Speaker", "External Speaker"; 264 simple-audio-card,routing = 265 "MIC_IN", "Microphone Jack", 266 "Headphone Jack", "HP_OUT", 267 "External Speaker", "LINE_OUT"; 268 269 simple-audio-card,cpu { 270 sound-dai = <&sh_fsi2 0>; 271 }; 272 273 dailink0_master: simple-audio-card,codec { 274 sound-dai = <&ak4648>; 275 clocks = <&osc>; 276 }; 277 }; 278 279#-------------------- 280# Multi DAI links 281#-------------------- 282 - | 283 sound { 284 compatible = "simple-audio-card"; 285 simple-audio-card,name = "Cubox Audio"; 286 287 #address-cells = <1>; 288 #size-cells = <0>; 289 290 simple-audio-card,dai-link@0 { /* I2S - HDMI */ 291 reg = <0>; 292 format = "i2s"; 293 cpu { 294 sound-dai = <&audio0>; 295 }; 296 codec { 297 sound-dai = <&tda998x0>; 298 }; 299 }; 300 301 simple-audio-card,dai-link@1 { /* S/PDIF - HDMI */ 302 reg = <1>; 303 cpu { 304 sound-dai = <&audio1>; 305 }; 306 codec { 307 sound-dai = <&tda998x1>; 308 }; 309 }; 310 311 simple-audio-card,dai-link@2 { /* S/PDIF - S/PDIF */ 312 reg = <2>; 313 cpu { 314 sound-dai = <&audio2>; 315 }; 316 codec { 317 sound-dai = <&spdif_codec>; 318 }; 319 }; 320 }; 321 322#-------------------- 323# route audio from IMX6 SSI2 through TLV320DAC3100 codec 324# through TPA6130A2 amplifier to headphones: 325#-------------------- 326 - | 327 sound { 328 compatible = "simple-audio-card"; 329 330 simple-audio-card,widgets = 331 "Headphone", "Headphone Jack"; 332 simple-audio-card,routing = 333 "Headphone Jack", "HPLEFT", 334 "Headphone Jack", "HPRIGHT", 335 "LEFTIN", "HPL", 336 "RIGHTIN", "HPR"; 337 simple-audio-card,aux-devs = <&>; 338 simple-audio-card,cpu { 339 sound-dai = <&ssi2>; 340 }; 341 simple-audio-card,codec { 342 sound-dai = <&codec>; 343 clocks = <&clocks>; 344 }; 345 }; 346 347#-------------------- 348# Sampling Rate Conversion 349#-------------------- 350 - | 351 sound { 352 compatible = "simple-audio-card"; 353 354 simple-audio-card,name = "rsnd-ak4643"; 355 simple-audio-card,format = "left_j"; 356 simple-audio-card,bitclock-master = <&sndcodec>; 357 simple-audio-card,frame-master = <&sndcodec>; 358 359 simple-audio-card,convert-rate = <48000>; 360 361 simple-audio-card,prefix = "ak4642"; 362 simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback", 363 "DAI0 Capture", "ak4642 Capture"; 364 365 sndcpu: simple-audio-card,cpu { 366 sound-dai = <&rcar_sound>; 367 }; 368 369 sndcodec: simple-audio-card,codec { 370 sound-dai = <&ak4643>; 371 system-clock-frequency = <11289600>; 372 }; 373 }; 374 375#-------------------- 376# 2 CPU 1 Codec (Mixing) 377#-------------------- 378 - | 379 sound { 380 compatible = "simple-audio-card"; 381 #address-cells = <1>; 382 #size-cells = <0>; 383 384 simple-audio-card,name = "rsnd-ak4643"; 385 simple-audio-card,format = "left_j"; 386 simple-audio-card,bitclock-master = <&dpcmcpu>; 387 simple-audio-card,frame-master = <&dpcmcpu>; 388 389 simple-audio-card,convert-rate = <48000>; 390 simple-audio-card,convert-channels = <2>; 391 392 simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback", 393 "ak4642 Playback", "DAI1 Playback"; 394 395 dpcmcpu: simple-audio-card,cpu@0 { 396 reg = <0>; 397 sound-dai = <&rcar_sound 0>; 398 }; 399 400 simple-audio-card,cpu@1 { 401 reg = <1>; 402 sound-dai = <&rcar_sound 1>; 403 }; 404 405 simple-audio-card,codec { 406 prefix = "ak4642"; 407 sound-dai = <&ak4643>; 408 clocks = <&audio_clock>; 409 }; 410 }; 411 412#-------------------- 413# Multi DAI links with DPCM: 414# 415# CPU0 ------ ak4613 416# CPU1 ------ PCM3168A-p /* DPCM 1ch/2ch */ 417# CPU2 --/ /* DPCM 3ch/4ch */ 418# CPU3 --/ /* DPCM 5ch/6ch */ 419# CPU4 --/ /* DPCM 7ch/8ch */ 420# CPU5 ------ PCM3168A-c 421#-------------------- 422 - | 423 sound { 424 compatible = "simple-audio-card"; 425 #address-cells = <1>; 426 #size-cells = <0>; 427 428 simple-audio-card,routing = 429 "pcm3168a Playback", "DAI1 Playback", 430 "pcm3168a Playback", "DAI2 Playback", 431 "pcm3168a Playback", "DAI3 Playback", 432 "pcm3168a Playback", "DAI4 Playback"; 433 434 simple-audio-card,dai-link@0 { 435 reg = <0>; 436 format = "left_j"; 437 bitclock-master = <&sndcpu0>; 438 frame-master = <&sndcpu0>; 439 440 sndcpu0: cpu { 441 sound-dai = <&rcar_sound 0>; 442 }; 443 codec { 444 sound-dai = <&ak4613>; 445 }; 446 }; 447 448 simple-audio-card,dai-link@1 { 449 reg = <1>; 450 format = "i2s"; 451 bitclock-master = <&sndcpu1>; 452 frame-master = <&sndcpu1>; 453 454 convert-channels = <8>; /* TDM Split */ 455 456 sndcpu1: cpu0 { 457 sound-dai = <&rcar_sound 1>; 458 }; 459 cpu1 { 460 sound-dai = <&rcar_sound 2>; 461 }; 462 cpu2 { 463 sound-dai = <&rcar_sound 3>; 464 }; 465 cpu3 { 466 sound-dai = <&rcar_sound 4>; 467 }; 468 codec { 469 mclk-fs = <512>; 470 prefix = "pcm3168a"; 471 dai-tdm-slot-num = <8>; 472 sound-dai = <&pcm3168a 0>; 473 }; 474 }; 475 476 simple-audio-card,dai-link@2 { 477 reg = <2>; 478 format = "i2s"; 479 bitclock-master = <&sndcpu2>; 480 frame-master = <&sndcpu2>; 481 482 sndcpu2: cpu { 483 sound-dai = <&rcar_sound 5>; 484 }; 485 codec { 486 mclk-fs = <512>; 487 prefix = "pcm3168a"; 488 sound-dai = <&pcm3168a 1>; 489 }; 490 }; 491 }; 492