Commit c2ff7f15 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown

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: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87fsjls95u.wl-kuninori.morimoto.gx@renesas.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 817a6210
...@@ -154,11 +154,12 @@ ports@1 { ...@@ -154,11 +154,12 @@ ports@1 {
codec2codec { codec2codec {
ports@0 { ports@0 {
rate = <48000>; /* use default settings */
c2c: port@0 { c2cf_ep: endpoint { remote-endpoint = <&codec6_ep>; }; }; c2c: port@0 { c2cf_ep: endpoint { remote-endpoint = <&codec6_ep>; }; };
port@1 { c2cb_ep: endpoint { remote-endpoint = <&codec7_ep>; }; }; port@1 { c2cb_ep: endpoint { remote-endpoint = <&codec7_ep>; }; };
}; };
ports@1 { ports@1 {
/* use original settings */
rate = <48000>; rate = <48000>;
c2c_m: port@0 { c2cmf_ep: endpoint { remote-endpoint = <&mc2c0_ep>; }; }; c2c_m: port@0 { c2cmf_ep: endpoint { remote-endpoint = <&mc2c0_ep>; }; };
port@1 { c2cmb_ep: endpoint { remote-endpoint = <&mc2c1_ep>; }; }; port@1 { c2cmb_ep: endpoint { remote-endpoint = <&mc2c1_ep>; }; };
......
...@@ -851,8 +851,6 @@ int audio_graph2_link_c2c(struct asoc_simple_priv *priv, ...@@ -851,8 +851,6 @@ int audio_graph2_link_c2c(struct asoc_simple_priv *priv,
struct link_info *li) struct link_info *li)
{ {
struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link); 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 *port0, *port1, *ports;
struct device_node *codec0_port, *codec1_port; struct device_node *codec0_port, *codec1_port;
struct device_node *ep0, *ep1; struct device_node *ep0, *ep1;
...@@ -880,20 +878,29 @@ int audio_graph2_link_c2c(struct asoc_simple_priv *priv, ...@@ -880,20 +878,29 @@ int audio_graph2_link_c2c(struct asoc_simple_priv *priv,
ports = of_get_parent(port0); ports = of_get_parent(port0);
port1 = of_get_next_child(ports, lnk); 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); of_property_read_u32(ports, "rate", &val);
if (!val) { if (val) {
struct device *dev = simple_priv_to_dev(priv); struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link);
struct snd_soc_pcm_stream *c2c_conf = dai_props->c2c_conf;
dev_err(dev, "Codec2Codec needs rate settings\n");
goto err1;
}
c2c_conf->formats = SNDRV_PCM_FMTBIT_S32_LE; /* update ME */ 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_min =
c2c_conf->rate_max = val; c2c_conf->rate_max = val;
c2c_conf->channels_min = c2c_conf->channels_min =
c2c_conf->channels_max = 2; /* update ME */ c2c_conf->channels_max = 2; /* update ME */
dai_link->params = c2c_conf; dai_link->params = c2c_conf;
dai_link->num_params = 1;
}
ep0 = port_to_endpoint(port0); ep0 = port_to_endpoint(port0);
ep1 = port_to_endpoint(port1); ep1 = port_to_endpoint(port1);
...@@ -923,7 +930,6 @@ int audio_graph2_link_c2c(struct asoc_simple_priv *priv, ...@@ -923,7 +930,6 @@ int audio_graph2_link_c2c(struct asoc_simple_priv *priv,
of_node_put(ep1); of_node_put(ep1);
of_node_put(codec0_port); of_node_put(codec0_port);
of_node_put(codec1_port); of_node_put(codec1_port);
err1:
of_node_put(ports); of_node_put(ports);
of_node_put(port0); of_node_put(port0);
of_node_put(port1); of_node_put(port1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment