Loading Documentation/devicetree/bindings/sound/audio-graph-scu-card.txt 0 → 100644 +117 −0 Original line number Diff line number Diff line Audio-Graph-SCU-Card: Audio-Graph-SCU-Card is "Audio-Graph-Card" + "ALSA DPCM". It is based on common bindings for device graphs. see ${LINUX}/Documentation/devicetree/bindings/graph.txt Basically, Audio-Graph-SCU-Card property is same as Simple-Card / Simple-SCU-Card / Audio-Graph-Card. see ${LINUX}/Documentation/devicetree/bindings/sound/simple-card.txt ${LINUX}/Documentation/devicetree/bindings/sound/simple-scu-card.txt ${LINUX}/Documentation/devicetree/bindings/sound/audio-graph-card.txt Below are same as Simple-Card / Audio-Graph-Card. - label - dai-format - frame-master - bitclock-master - bitclock-inversion - frame-inversion - dai-tdm-slot-num - dai-tdm-slot-width - clocks / system-clock-frequency Below are same as Simple-SCU-Card. - convert-rate - convert-channels - prefix - routing Required properties: - compatible : "audio-graph-scu-card"; - dais : list of CPU DAI port{s} Example 1. Sampling Rate Conversion sound_card { compatible = "audio-graph-scu-card"; label = "sound-card"; prefix = "codec"; routing = "codec Playback", "DAI0 Playback", "codec Playback", "DAI1 Playback"; convert-rate = <48000>; dais = <&cpu_port>; }; audio-codec { ... port { codec_endpoint: endpoint { remote-endpoint = <&cpu_endpoint>; }; }; }; dai-controller { ... cpu_port: port { cpu_endpoint: endpoint { remote-endpoint = <&codec_endpoint>; dai-format = "left_j"; ... }; }; }; Example 2. 2 CPU 1 Codec (Mixing) sound_card { compatible = "audio-graph-scu-card"; label = "sound-card"; prefix = "codec"; routing = "codec Playback", "DAI0 Playback", "codec Playback", "DAI1 Playback"; convert-rate = <48000>; dais = <&cpu_port0 &cpu_port1>; }; audio-codec { ... port { codec_endpoint: endpoint { remote-endpoint = <&cpu_endpoint0>; }; }; }; dai-controller { ... ports { cpu_port0: port { cpu_endpoint0: endpoint { remote-endpoint = <&codec_endpoint>; dai-format = "left_j"; ... }; }; cpu_port1: port { cpu_endpoint1: endpoint { dai-format = "left_j"; ... }; }; }; }; Documentation/devicetree/bindings/sound/renesas,rsnd.txt +22 −15 Original line number Diff line number Diff line Loading @@ -83,11 +83,11 @@ SRC can convert [xx]Hz to [yy]Hz. Then, it has below 2 modes ** Asynchronous mode ------------------ You need to use "renesas,rsrc-card" sound card for it. You need to use "simple-scu-audio-card" sound card for it. example) sound { compatible = "renesas,rsrc-card"; compatible = "simple-scu-audio-card"; ... /* * SRC Asynchronous mode setting Loading @@ -97,12 +97,12 @@ example) * Inputed 48kHz data will be converted to * system specified Hz */ convert-rate = <48000>; simple-audio-card,convert-rate = <48000>; ... cpu { simple-audio-card,cpu { sound-dai = <&rcar_sound>; }; codec { simple-audio-card,codec { ... }; }; Loading Loading @@ -141,23 +141,23 @@ For more detail information, see below ${LINUX}/sound/soc/sh/rcar/ctu.c - comment of header You need to use "renesas,rsrc-card" sound card for it. You need to use "simple-scu-audio-card" sound card for it. example) sound { compatible = "renesas,rsrc-card"; compatible = "simple-scu-audio-card"; ... /* * CTU setting * All input data will be converted to 2ch * as output data */ convert-channels = <2>; simple-audio-card,convert-channels = <2>; ... cpu { simple-audio-card,cpu { sound-dai = <&rcar_sound>; }; codec { simple-audio-card,codec { ... }; }; Loading Loading @@ -190,22 +190,22 @@ and these sounds will be merged by MIX. aplay -D plughw:0,0 xxxx.wav & aplay -D plughw:0,1 yyyy.wav You need to use "renesas,rsrc-card" sound card for it. You need to use "simple-scu-audio-card" sound card for it. Ex) [MEM] -> [SRC1] -> [CTU02] -+-> [MIX0] -> [DVC0] -> [SSI0] | [MEM] -> [SRC2] -> [CTU03] -+ sound { compatible = "renesas,rsrc-card"; compatible = "simple-scu-audio-card"; ... cpu@0 { simple-audio-card,cpu@0 { sound-dai = <&rcar_sound 0>; }; cpu@1 { simple-audio-card,cpu@1 { sound-dai = <&rcar_sound 1>; }; codec { simple-audio-card,codec { ... }; }; Loading Loading @@ -368,6 +368,10 @@ Required properties: see below for detail. - #sound-dai-cells : it must be 0 if your system is using single DAI it must be 1 if your system is using multi DAI - clocks : References to SSI/SRC/MIX/CTU/DVC/AUDIO_CLK clocks. - clock-names : List of necessary clock names. "ssi-all", "ssi.X", "src.X", "mix.X", "ctu.X", "dvc.X", "clk_a", "clk_b", "clk_c", "clk_i" Optional properties: - #clock-cells : it must be 0 if your system has audio_clkout Loading @@ -375,6 +379,9 @@ Optional properties: - clock-frequency : for all audio_clkout0/1/2/3 - clkout-lr-asynchronous : boolean property. it indicates that audio_clkoutn is asynchronizes with lr-clock. - resets : References to SSI resets. - reset-names : List of valid reset names. "ssi-all", "ssi.X" SSI subnode properties: - interrupts : Should contain SSI interrupt for PIO transfer Loading Documentation/devicetree/bindings/sound/simple-scu-card.txt +1 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ Optional CPU/CODEC subnodes properties: - clocks / system-clock-frequency : see simple-audio-card.txt Example 1. Sampling Rate Covert Example 1. Sampling Rate Conversion sound { compatible = "simple-scu-audio-card"; Loading include/sound/simple_card_utils.h +6 −3 Original line number Diff line number Diff line Loading @@ -35,13 +35,16 @@ int asoc_simple_card_parse_card_name(struct snd_soc_card *card, char *prefix); #define asoc_simple_card_parse_clk_cpu(dev, node, dai_link, simple_dai) \ asoc_simple_card_parse_clk(dev, node, dai_link->cpu_of_node, simple_dai) asoc_simple_card_parse_clk(dev, node, dai_link->cpu_of_node, simple_dai, \ dai_link->cpu_dai_name) #define asoc_simple_card_parse_clk_codec(dev, node, dai_link, simple_dai) \ asoc_simple_card_parse_clk(dev, node, dai_link->codec_of_node, simple_dai) asoc_simple_card_parse_clk(dev, node, dai_link->codec_of_node, simple_dai,\ dai_link->codec_dai_name) int asoc_simple_card_parse_clk(struct device *dev, struct device_node *node, struct device_node *dai_of_node, struct asoc_simple_dai *simple_dai); struct asoc_simple_dai *simple_dai, const char *name); #define asoc_simple_card_parse_cpu(node, dai_link, \ list_name, cells_name, is_single_link) \ Loading sound/soc/generic/Kconfig +9 −0 Original line number Diff line number Diff line Loading @@ -22,3 +22,12 @@ config SND_AUDIO_GRAPH_CARD help This option enables generic simple simple sound card support with OF-graph DT bindings. config SND_AUDIO_GRAPH_SCU_CARD tristate "ASoC Audio Graph SCU sound card support" depends on OF select SND_SIMPLE_CARD_UTILS help This option enables generic simple SCU sound card support with OF-graph DT bindings. It supports DPCM of multi CPU single Codec ststem. Loading
Documentation/devicetree/bindings/sound/audio-graph-scu-card.txt 0 → 100644 +117 −0 Original line number Diff line number Diff line Audio-Graph-SCU-Card: Audio-Graph-SCU-Card is "Audio-Graph-Card" + "ALSA DPCM". It is based on common bindings for device graphs. see ${LINUX}/Documentation/devicetree/bindings/graph.txt Basically, Audio-Graph-SCU-Card property is same as Simple-Card / Simple-SCU-Card / Audio-Graph-Card. see ${LINUX}/Documentation/devicetree/bindings/sound/simple-card.txt ${LINUX}/Documentation/devicetree/bindings/sound/simple-scu-card.txt ${LINUX}/Documentation/devicetree/bindings/sound/audio-graph-card.txt Below are same as Simple-Card / Audio-Graph-Card. - label - dai-format - frame-master - bitclock-master - bitclock-inversion - frame-inversion - dai-tdm-slot-num - dai-tdm-slot-width - clocks / system-clock-frequency Below are same as Simple-SCU-Card. - convert-rate - convert-channels - prefix - routing Required properties: - compatible : "audio-graph-scu-card"; - dais : list of CPU DAI port{s} Example 1. Sampling Rate Conversion sound_card { compatible = "audio-graph-scu-card"; label = "sound-card"; prefix = "codec"; routing = "codec Playback", "DAI0 Playback", "codec Playback", "DAI1 Playback"; convert-rate = <48000>; dais = <&cpu_port>; }; audio-codec { ... port { codec_endpoint: endpoint { remote-endpoint = <&cpu_endpoint>; }; }; }; dai-controller { ... cpu_port: port { cpu_endpoint: endpoint { remote-endpoint = <&codec_endpoint>; dai-format = "left_j"; ... }; }; }; Example 2. 2 CPU 1 Codec (Mixing) sound_card { compatible = "audio-graph-scu-card"; label = "sound-card"; prefix = "codec"; routing = "codec Playback", "DAI0 Playback", "codec Playback", "DAI1 Playback"; convert-rate = <48000>; dais = <&cpu_port0 &cpu_port1>; }; audio-codec { ... port { codec_endpoint: endpoint { remote-endpoint = <&cpu_endpoint0>; }; }; }; dai-controller { ... ports { cpu_port0: port { cpu_endpoint0: endpoint { remote-endpoint = <&codec_endpoint>; dai-format = "left_j"; ... }; }; cpu_port1: port { cpu_endpoint1: endpoint { dai-format = "left_j"; ... }; }; }; };
Documentation/devicetree/bindings/sound/renesas,rsnd.txt +22 −15 Original line number Diff line number Diff line Loading @@ -83,11 +83,11 @@ SRC can convert [xx]Hz to [yy]Hz. Then, it has below 2 modes ** Asynchronous mode ------------------ You need to use "renesas,rsrc-card" sound card for it. You need to use "simple-scu-audio-card" sound card for it. example) sound { compatible = "renesas,rsrc-card"; compatible = "simple-scu-audio-card"; ... /* * SRC Asynchronous mode setting Loading @@ -97,12 +97,12 @@ example) * Inputed 48kHz data will be converted to * system specified Hz */ convert-rate = <48000>; simple-audio-card,convert-rate = <48000>; ... cpu { simple-audio-card,cpu { sound-dai = <&rcar_sound>; }; codec { simple-audio-card,codec { ... }; }; Loading Loading @@ -141,23 +141,23 @@ For more detail information, see below ${LINUX}/sound/soc/sh/rcar/ctu.c - comment of header You need to use "renesas,rsrc-card" sound card for it. You need to use "simple-scu-audio-card" sound card for it. example) sound { compatible = "renesas,rsrc-card"; compatible = "simple-scu-audio-card"; ... /* * CTU setting * All input data will be converted to 2ch * as output data */ convert-channels = <2>; simple-audio-card,convert-channels = <2>; ... cpu { simple-audio-card,cpu { sound-dai = <&rcar_sound>; }; codec { simple-audio-card,codec { ... }; }; Loading Loading @@ -190,22 +190,22 @@ and these sounds will be merged by MIX. aplay -D plughw:0,0 xxxx.wav & aplay -D plughw:0,1 yyyy.wav You need to use "renesas,rsrc-card" sound card for it. You need to use "simple-scu-audio-card" sound card for it. Ex) [MEM] -> [SRC1] -> [CTU02] -+-> [MIX0] -> [DVC0] -> [SSI0] | [MEM] -> [SRC2] -> [CTU03] -+ sound { compatible = "renesas,rsrc-card"; compatible = "simple-scu-audio-card"; ... cpu@0 { simple-audio-card,cpu@0 { sound-dai = <&rcar_sound 0>; }; cpu@1 { simple-audio-card,cpu@1 { sound-dai = <&rcar_sound 1>; }; codec { simple-audio-card,codec { ... }; }; Loading Loading @@ -368,6 +368,10 @@ Required properties: see below for detail. - #sound-dai-cells : it must be 0 if your system is using single DAI it must be 1 if your system is using multi DAI - clocks : References to SSI/SRC/MIX/CTU/DVC/AUDIO_CLK clocks. - clock-names : List of necessary clock names. "ssi-all", "ssi.X", "src.X", "mix.X", "ctu.X", "dvc.X", "clk_a", "clk_b", "clk_c", "clk_i" Optional properties: - #clock-cells : it must be 0 if your system has audio_clkout Loading @@ -375,6 +379,9 @@ Optional properties: - clock-frequency : for all audio_clkout0/1/2/3 - clkout-lr-asynchronous : boolean property. it indicates that audio_clkoutn is asynchronizes with lr-clock. - resets : References to SSI resets. - reset-names : List of valid reset names. "ssi-all", "ssi.X" SSI subnode properties: - interrupts : Should contain SSI interrupt for PIO transfer Loading
Documentation/devicetree/bindings/sound/simple-scu-card.txt +1 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ Optional CPU/CODEC subnodes properties: - clocks / system-clock-frequency : see simple-audio-card.txt Example 1. Sampling Rate Covert Example 1. Sampling Rate Conversion sound { compatible = "simple-scu-audio-card"; Loading
include/sound/simple_card_utils.h +6 −3 Original line number Diff line number Diff line Loading @@ -35,13 +35,16 @@ int asoc_simple_card_parse_card_name(struct snd_soc_card *card, char *prefix); #define asoc_simple_card_parse_clk_cpu(dev, node, dai_link, simple_dai) \ asoc_simple_card_parse_clk(dev, node, dai_link->cpu_of_node, simple_dai) asoc_simple_card_parse_clk(dev, node, dai_link->cpu_of_node, simple_dai, \ dai_link->cpu_dai_name) #define asoc_simple_card_parse_clk_codec(dev, node, dai_link, simple_dai) \ asoc_simple_card_parse_clk(dev, node, dai_link->codec_of_node, simple_dai) asoc_simple_card_parse_clk(dev, node, dai_link->codec_of_node, simple_dai,\ dai_link->codec_dai_name) int asoc_simple_card_parse_clk(struct device *dev, struct device_node *node, struct device_node *dai_of_node, struct asoc_simple_dai *simple_dai); struct asoc_simple_dai *simple_dai, const char *name); #define asoc_simple_card_parse_cpu(node, dai_link, \ list_name, cells_name, is_single_link) \ Loading
sound/soc/generic/Kconfig +9 −0 Original line number Diff line number Diff line Loading @@ -22,3 +22,12 @@ config SND_AUDIO_GRAPH_CARD help This option enables generic simple simple sound card support with OF-graph DT bindings. config SND_AUDIO_GRAPH_SCU_CARD tristate "ASoC Audio Graph SCU sound card support" depends on OF select SND_SIMPLE_CARD_UTILS help This option enables generic simple SCU sound card support with OF-graph DT bindings. It supports DPCM of multi CPU single Codec ststem.