Documentation / devicetree / bindings / sound / simple-card.txt


Based on kernel version 5.7.10. Page generated on 2020-07-23 22:17 EST.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351
Simple-Card:

Simple-Card specifies audio DAI connections of SoC <-> codec.

Required properties:

- compatible				: "simple-audio-card"

Optional properties:

- simple-audio-card,name		: User specified audio sound card name, one string
					  property.
- simple-audio-card,widgets		: Please refer to widgets.txt.
- simple-audio-card,routing		: A list of the connections between audio components.
					  Each entry is a pair of strings, the first being the
					  connection's sink, the second being the connection's
					  source.
- simple-audio-card,mclk-fs             : Multiplication factor between stream rate and codec
					  mclk. When defined, mclk-fs property defined in
					  dai-link sub nodes are ignored.
- simple-audio-card,hp-det-gpio		: Reference to GPIO that signals when
					  headphones are attached.
- simple-audio-card,mic-det-gpio	: Reference to GPIO that signals when
					  a microphone is attached.
- simple-audio-card,aux-devs		: List of phandles pointing to auxiliary devices, such
					  as amplifiers, to be added to the sound card.
- simple-audio-card,pin-switches	: List of strings containing the widget names for
					  which pin switches must be created.

Optional subnodes:

- simple-audio-card,dai-link		: Container for dai-link level
					  properties and the CPU and CODEC
					  sub-nodes. This container may be
					  omitted when the card has only one
					  DAI link. See the examples and the
					  section below.

Dai-link subnode properties and subnodes:

If dai-link subnode is omitted and the subnode properties are directly
under "sound"-node the subnode property and subnode names have to be
prefixed with "simple-audio-card,"-prefix.

Required dai-link subnodes:

- cpu					: CPU   sub-node
- codec					: CODEC sub-node

Optional dai-link subnode properties:

- format				: CPU/CODEC common audio format.
					  "i2s", "right_j", "left_j" , "dsp_a"
					  "dsp_b", "ac97", "pdm", "msb", "lsb"
- frame-master				: Indicates dai-link frame master.
					  phandle to a cpu or codec subnode.
- bitclock-master			: Indicates dai-link bit clock master.
					  phandle to a cpu or codec subnode.
- bitclock-inversion			: bool property. Add this if the
					  dai-link uses bit clock inversion.
- frame-inversion			: bool property. Add this if the
					  dai-link uses frame clock inversion.
- mclk-fs             			: Multiplication factor between stream
					  rate and codec mclk, applied only for
					  the dai-link.

For backward compatibility the frame-master and bitclock-master
properties can be used as booleans in codec subnode to indicate if the
codec is the dai-link frame or bit clock master. In this case there
should be no dai-link node, the same properties should not be present
at sound-node level, and the bitclock-inversion and frame-inversion
properties should also be placed in the codec node if needed.

Required CPU/CODEC subnodes properties:

- sound-dai				: phandle and port of CPU/CODEC

Optional CPU/CODEC subnodes properties:

- dai-tdm-slot-num			: Please refer to tdm-slot.txt.
- dai-tdm-slot-width			: Please refer to tdm-slot.txt.
- clocks / system-clock-frequency	: specify subnode's clock if needed.
					  it can be specified via "clocks" if system has
					  clock node (= common clock), or "system-clock-frequency"
					  (if system doens't support common clock)
					  If a clock is specified, it is
					  enabled with clk_prepare_enable()
					  in dai startup() and disabled with
					  clk_disable_unprepare() in dai
					  shutdown().
					  If a clock is specified and a
					  multiplication factor is given with
					  mclk-fs, the clock will be set to the
					  calculated mclk frequency when the
					  stream starts.
- system-clock-direction-out		: specifies clock direction as 'out' on
					  initialization. It is useful for some aCPUs with
					  fixed clocks.

-------------------------------------------
Example 1 - single DAI link:
-------------------------------------------

sound {
	compatible = "simple-audio-card";
	simple-audio-card,name = "VF610-Tower-Sound-Card";
	simple-audio-card,format = "left_j";
	simple-audio-card,bitclock-master = <&dailink0_master>;
	simple-audio-card,frame-master = <&dailink0_master>;
	simple-audio-card,widgets =
		"Microphone", "Microphone Jack",
		"Headphone", "Headphone Jack",
		"Speaker", "External Speaker";
	simple-audio-card,routing =
		"MIC_IN", "Microphone Jack",
		"Headphone Jack", "HP_OUT",
		"External Speaker", "LINE_OUT";

	simple-audio-card,cpu {
		sound-dai = <&sh_fsi2 0>;
	};

	dailink0_master: simple-audio-card,codec {
		sound-dai = <&ak4648>;
		clocks = <&osc>;
	};
};

&i2c0 {
	ak4648: ak4648@12 {
		#sound-dai-cells = <0>;
		compatible = "asahi-kasei,ak4648";
		reg = <0x12>;
	};
};

sh_fsi2: sh_fsi2@ec230000 {
	#sound-dai-cells = <1>;
	compatible = "renesas,sh_fsi2";
	reg = <0xec230000 0x400>;
	interrupt-parent = <&gic>;
	interrupts = <0 146 0x4>;
};

-------------------------------------------
Example 2 - many DAI links:
-------------------------------------------

sound {
	compatible = "simple-audio-card";
	simple-audio-card,name = "Cubox Audio";

	simple-audio-card,dai-link@0 {		/* I2S - HDMI */
		reg = <0>;
		format = "i2s";
		cpu {
			sound-dai = <&audio1 0>;
		};
		codec {
			sound-dai = <&tda998x 0>;
		};
	};

	simple-audio-card,dai-link@1 {		/* S/PDIF - HDMI */
		reg = <1>;
		cpu {
			sound-dai = <&audio1 1>;
		};
		codec {
			sound-dai = <&tda998x 1>;
		};
	};

	simple-audio-card,dai-link@2 {		/* S/PDIF - S/PDIF */
		reg = <2>;
		cpu {
			sound-dai = <&audio1 1>;
		};
		codec {
			sound-dai = <&spdif_codec>;
		};
	};
};

-------------------------------------------
Example 3 - route audio from IMX6 SSI2 through TLV320DAC3100 codec
through TPA6130A2 amplifier to headphones:
-------------------------------------------

&i2c0 {
	codec: tlv320dac3100@18 {
		compatible = "ti,tlv320dac3100";
		...
	}

	amp: tpa6130a2@60 {
		compatible = "ti,tpa6130a2";
		...
	}
}

sound {
	compatible = "simple-audio-card";
	...
	simple-audio-card,widgets =
		"Headphone", "Headphone Jack";
	simple-audio-card,routing =
		"Headphone Jack", "HPLEFT",
		"Headphone Jack", "HPRIGHT",
		"LEFTIN", "HPL",
		"RIGHTIN", "HPR";
	simple-audio-card,aux-devs = <&amp>;
	simple-audio-card,cpu {
		sound-dai = <&ssi2>;
	};
	simple-audio-card,codec {
		sound-dai = <&codec>;
		clocks = ...
	};
};

-------------------------------------------
Example 4. Sampling Rate Conversion
-------------------------------------------

sound {
	compatible = "simple-audio-card";

	simple-audio-card,name = "rsnd-ak4643";
	simple-audio-card,format = "left_j";
	simple-audio-card,bitclock-master = <&sndcodec>;
	simple-audio-card,frame-master = <&sndcodec>;

	simple-audio-card,convert-rate = <48000>;

	simple-audio-card,prefix = "ak4642";
	simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
			"DAI0 Capture", "ak4642 Capture";

	sndcpu: simple-audio-card,cpu {
		sound-dai = <&rcar_sound>;
	};

	sndcodec: simple-audio-card,codec {
		sound-dai = <&ak4643>;
		system-clock-frequency = <11289600>;
	};
};

-------------------------------------------
Example 5. 2 CPU 1 Codec (Mixing)
-------------------------------------------
sound {
	compatible = "simple-audio-card";

	simple-audio-card,name = "rsnd-ak4643";
	simple-audio-card,format = "left_j";
	simple-audio-card,bitclock-master = <&dpcmcpu>;
	simple-audio-card,frame-master = <&dpcmcpu>;

	simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
			"ak4642 Playback", "DAI1 Playback";

	dpcmcpu: cpu@0 {
		sound-dai = <&rcar_sound 0>;
	};

	cpu@1 {
		sound-dai = <&rcar_sound 1>;
	};

	codec {
		prefix = "ak4642";
		sound-dai = <&ak4643>;
		clocks = <&audio_clock>;
	};
};

-------------------------------------------
Example 6 - many DAI links with DPCM:
-------------------------------------------

CPU0 ------ ak4613
CPU1 ------ PCM3168A-p  /* DPCM 1ch/2ch */
CPU2 --/                /* DPCM 3ch/4ch */
CPU3 --/                /* DPCM 5ch/6ch */
CPU4 --/                /* DPCM 7ch/8ch */
CPU5 ------ PCM3168A-c

sound {
	compatible = "simple-audio-card";

	simple-audio-card,routing =
		  "pcm3168a Playback", "DAI1 Playback",
		  "pcm3168a Playback", "DAI2 Playback",
		  "pcm3168a Playback", "DAI3 Playback",
		  "pcm3168a Playback", "DAI4 Playback";

	simple-audio-card,dai-link@0 {
		format = "left_j";
		bitclock-master = <&sndcpu0>;
		frame-master = <&sndcpu0>;

		sndcpu0: cpu {
			sound-dai = <&rcar_sound 0>;
		};
		codec {
			sound-dai = <&ak4613>;
		};
	};
	simple-audio-card,dai-link@1 {
		format = "i2s";
		bitclock-master = <&sndcpu1>;
		frame-master = <&sndcpu1>;

		convert-channels = <8>; /* TDM Split */

		sndcpu1: cpu@0 {
			sound-dai = <&rcar_sound 1>;
		};
		cpu@1 {
			sound-dai = <&rcar_sound 2>;
		};
		cpu@2 {
			sound-dai = <&rcar_sound 3>;
		};
		cpu@3 {
			sound-dai = <&rcar_sound 4>;
		};
		codec {
			mclk-fs = <512>;
			prefix = "pcm3168a";
			dai-tdm-slot-num = <8>;
			sound-dai = <&pcm3168a 0>;
		};
	};
	simple-audio-card,dai-link@2 {
		format = "i2s";
		bitclock-master = <&sndcpu2>;
		frame-master = <&sndcpu2>;

		sndcpu2: cpu {
			sound-dai = <&rcar_sound 5>;
		};
		codec {
			mclk-fs = <512>;
			prefix = "pcm3168a";
			sound-dai = <&pcm3168a 1>;
		};
	};
};