Unverified Commit c2c60eaf authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: simpe-card/audio-graph fixups

Merge series from Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>:

These are simpe-card/audio-graph fixup patches.
parents 8a7ae8c5 8f597983
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -173,8 +173,6 @@ void asoc_simple_canonicalize_cpu(struct snd_soc_dai_link_component *cpus,

void asoc_simple_clean_reference(struct snd_soc_card *card);

void asoc_simple_convert_fixup(struct asoc_simple_data *data,
				      struct snd_pcm_hw_params *params);
void asoc_simple_parse_convert(struct device_node *np, char *prefix,
			       struct asoc_simple_data *data);
bool asoc_simple_is_convert_required(const struct asoc_simple_data *data);
+8 −2
Original line number Diff line number Diff line
@@ -49,10 +49,13 @@
	 *		+-+		+-+
	 *
	 * [DPCM]
	 *
	 *	CPU3/CPU4 are converting rate to 44100
	 *
	 *	FE		BE
	 *		  ****
	 *	cpu3 <-@--*  *--@-> codec3
	 *	cpu4 <-@--*  *
	 *	cpu4 <-@--*  *  (44.1kHz)
	 *		  ****
	 *
	 * [DPCM-Multi]
@@ -286,7 +289,10 @@
			port@2  { codec2_ep:  endpoint { remote-endpoint = <&mcodec2_ep>; }; };

			/* [DPCM]::BE */
			port@3  { codec3_ep:  endpoint { remote-endpoint = <&be00_ep>; }; };
			port@3  {
				convert-rate = <44100>;
				codec3_ep:  endpoint { remote-endpoint = <&be00_ep>; };
			};

			/* [DPCM-Multi]::BE */
			port@4  { codec4_ep:  endpoint { remote-endpoint = <&mbe1_ep>; }; };
+2 −1
Original line number Diff line number Diff line
@@ -849,7 +849,8 @@ int audio_graph2_link_dpcm(struct asoc_simple_priv *priv,
			goto err;
	}

	graph_parse_convert(rep, dai_props);
	graph_parse_convert(ep,  dai_props); /* at node of <dpcm> */
	graph_parse_convert(rep, dai_props); /* at node of <CPU/Codec> */

	snd_soc_dai_link_set_capabilities(dai_link);

+13 −22
Original line number Diff line number Diff line
@@ -41,27 +41,6 @@ static void asoc_simple_fixup_sample_fmt(struct asoc_simple_data *data,
	}
}

void asoc_simple_convert_fixup(struct asoc_simple_data *data,
			       struct snd_pcm_hw_params *params)
{
	struct snd_interval *rate = hw_param_interval(params,
						SNDRV_PCM_HW_PARAM_RATE);
	struct snd_interval *channels = hw_param_interval(params,
						SNDRV_PCM_HW_PARAM_CHANNELS);

	if (data->convert_rate)
		rate->min =
		rate->max = data->convert_rate;

	if (data->convert_channels)
		channels->min =
		channels->max = data->convert_channels;

	if (data->convert_sample_format)
		asoc_simple_fixup_sample_fmt(data, params);
}
EXPORT_SYMBOL_GPL(asoc_simple_convert_fixup);

void asoc_simple_parse_convert(struct device_node *np,
			       char *prefix,
			       struct asoc_simple_data *data)
@@ -522,8 +501,20 @@ int asoc_simple_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
{
	struct asoc_simple_priv *priv = snd_soc_card_get_drvdata(rtd->card);
	struct simple_dai_props *dai_props = simple_priv_to_props(priv, rtd->num);
	struct asoc_simple_data *data = &dai_props->adata;
	struct snd_interval *rate = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
	struct snd_interval *channels = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);

	if (data->convert_rate)
		rate->min =
		rate->max = data->convert_rate;

	asoc_simple_convert_fixup(&dai_props->adata, params);
	if (data->convert_channels)
		channels->min =
		channels->max = data->convert_channels;

	if (data->convert_sample_format)
		asoc_simple_fixup_sample_fmt(data, params);

	return 0;
}