Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03cf603a authored by Mark Brown's avatar Mark Brown
Browse files

Merge branch 'topic/rcar' of...

Merge branch 'topic/rcar' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-of-graph
parents 37fae579 a97a06c7
Loading
Loading
Loading
Loading
+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";
					...
				};
			};
		};
	};
+22 −15
Original line number Diff line number Diff line
@@ -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
@@ -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 {
			...
		};
	};
@@ -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 {
			...
		};
	};
@@ -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 {
			...
		};
	};
@@ -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
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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";
+6 −3
Original line number Diff line number Diff line
@@ -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)	\
+9 −0
Original line number Diff line number Diff line
@@ -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