ASoC: audio-graph-card2.c: make Codec2Codec settings optional
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Fri, 1 Jul 2022 05:18:21 +0000 (05:18 +0000)
committerMark Brown <broonie@kernel.org>
Fri, 8 Jul 2022 10:51:42 +0000 (11:51 +0100)
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>
sound/soc/generic/audio-graph-card2-custom-sample.dtsi
sound/soc/generic/audio-graph-card2.c

index 8eee7b8..053d987 100644 (file)
 
                codec2codec {
                        ports@0 {
-                               rate = <48000>;
+                               /* use default settings */
                        c2c:    port@0 { c2cf_ep: endpoint { remote-endpoint = <&codec6_ep>; }; };
                                port@1 { c2cb_ep: endpoint { remote-endpoint = <&codec7_ep>; }; };
                        };
                        ports@1 {
+                               /* use original settings */
                                rate = <48000>;
                        c2c_m:  port@0 { c2cmf_ep: endpoint { remote-endpoint = <&mc2c0_ep>; }; };
                                port@1 { c2cmb_ep: endpoint { remote-endpoint = <&mc2c1_ep>; }; };
index 8e0628e..510058c 100644 (file)
@@ -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);