aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Brown <[email protected]>2022-11-10 17:50:07 +0000
committerMark Brown <[email protected]>2022-11-10 17:50:07 +0000
commitc2c60eafb2ec48fffed13605a61e590c2ba057fe (patch)
tree40f72c2f51e194b56d1ebeb095544b854ecd2c83
parent8a7ae8c5aeea79202966b3f2cb2dc370c8f89720 (diff)
parent8f5979833b45b318d0971f384de3fb17924042f0 (diff)
ASoC: simpe-card/audio-graph fixups
Merge series from Kuninori Morimoto <[email protected]>: These are simpe-card/audio-graph fixup patches.
-rw-r--r--include/sound/simple_card_utils.h2
-rw-r--r--sound/soc/generic/audio-graph-card2-custom-sample.dtsi10
-rw-r--r--sound/soc/generic/audio-graph-card2.c3
-rw-r--r--sound/soc/generic/simple-card-utils.c35
4 files changed, 23 insertions, 27 deletions
diff --git a/include/sound/simple_card_utils.h b/include/sound/simple_card_utils.h
index 25e049f44178..38590f1ae9ee 100644
--- a/include/sound/simple_card_utils.h
+++ b/include/sound/simple_card_utils.h
@@ -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);
diff --git a/sound/soc/generic/audio-graph-card2-custom-sample.dtsi b/sound/soc/generic/audio-graph-card2-custom-sample.dtsi
index fe547c18771f..994db61a26b3 100644
--- a/sound/soc/generic/audio-graph-card2-custom-sample.dtsi
+++ b/sound/soc/generic/audio-graph-card2-custom-sample.dtsi
@@ -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>; }; };
diff --git a/sound/soc/generic/audio-graph-card2.c b/sound/soc/generic/audio-graph-card2.c
index 8ac6df645ee6..e34c3433d354 100644
--- a/sound/soc/generic/audio-graph-card2.c
+++ b/sound/soc/generic/audio-graph-card2.c
@@ -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);
diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
index be69bbc47f81..e35becce9635 100644
--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -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;
}