diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2022-07-01 05:18:21 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2022-07-08 11:51:42 +0100 |
commit | c2ff7f15a4ef74b8cb6d425dfa8d8b928f193a80 (patch) | |
tree | 35a3899e8af7566fc04ba861fc44408b078cd369 /sound/soc/generic/audio-graph-card2.c | |
parent | 817a62108dfacebd548e38451bf0e7eee023e97f (diff) |
ASoC: audio-graph-card2.c: make Codec2Codec settings optional
Current audio-graph-card2 can use Codec2Codec, and having its
original parameter (= rate) on DT is mandatory for now.
But simple-card-utils.c has asoc_simple_init_for_codec2codec() to
setup *default* Codec2Codec settings.
This patch makes Audio Graph Card2 Codec2Codec rate settings
optional.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87fsjls95u.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/generic/audio-graph-card2.c')
-rw-r--r-- | sound/soc/generic/audio-graph-card2.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/sound/soc/generic/audio-graph-card2.c b/sound/soc/generic/audio-graph-card2.c index 8e0628e6f2a0..510058c47a92 100644 --- a/sound/soc/generic/audio-graph-card2.c +++ b/sound/soc/generic/audio-graph-card2.c @@ -851,8 +851,6 @@ int audio_graph2_link_c2c(struct asoc_simple_priv *priv, struct link_info *li) { struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link); - struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link); - struct snd_soc_pcm_stream *c2c_conf = dai_props->c2c_conf; struct device_node *port0, *port1, *ports; struct device_node *codec0_port, *codec1_port; struct device_node *ep0, *ep1; @@ -880,21 +878,30 @@ int audio_graph2_link_c2c(struct asoc_simple_priv *priv, ports = of_get_parent(port0); port1 = of_get_next_child(ports, lnk); + /* + * Card2 can use original Codec2Codec settings if DT has. + * It will use default settings if no settings on DT. + * see + * asoc_simple_init_for_codec2codec() + * + * Add more settings here if needed + */ of_property_read_u32(ports, "rate", &val); - if (!val) { - struct device *dev = simple_priv_to_dev(priv); - - dev_err(dev, "Codec2Codec needs rate settings\n"); - goto err1; + if (val) { + struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link); + struct snd_soc_pcm_stream *c2c_conf = dai_props->c2c_conf; + + c2c_conf->formats = SNDRV_PCM_FMTBIT_S32_LE; /* update ME */ + c2c_conf->rates = SNDRV_PCM_RATE_8000_384000; + c2c_conf->rate_min = + c2c_conf->rate_max = val; + c2c_conf->channels_min = + c2c_conf->channels_max = 2; /* update ME */ + + dai_link->params = c2c_conf; + dai_link->num_params = 1; } - c2c_conf->formats = SNDRV_PCM_FMTBIT_S32_LE; /* update ME */ - c2c_conf->rate_min = - c2c_conf->rate_max = val; - c2c_conf->channels_min = - c2c_conf->channels_max = 2; /* update ME */ - dai_link->params = c2c_conf; - ep0 = port_to_endpoint(port0); ep1 = port_to_endpoint(port1); @@ -923,7 +930,6 @@ err2: of_node_put(ep1); of_node_put(codec0_port); of_node_put(codec1_port); -err1: of_node_put(ports); of_node_put(port0); of_node_put(port1); |