mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
c4e8ebb9f2
simple-card and simple-scu-card are very similar driver, but the former is supporting normal sound card, the latter is supporting DPCM sound card. We couldn't use normal sound and DPCM sound in same time by one sound card. This patch merges both sound card into simple-card. Now we can use both feature on same driver. simple-card is now supporting .compatible = "simple-scu-audio-card". Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
350 lines
8.9 KiB
Plaintext
350 lines
8.9 KiB
Plaintext
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.
|
|
|
|
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 = <&>;
|
|
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>;
|
|
};
|
|
};
|
|
};
|