]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
ASoC: audio-graph-card2: add link-trigger-order support
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Wed, 12 Jun 2024 06:02:52 +0000 (06:02 +0000)
committerMark Brown <broonie@kernel.org>
Wed, 26 Jun 2024 16:47:59 +0000 (17:47 +0100)
Some Sound Card might need special trigger ordering which is based on
CPU/Codec connection. It is already supported on ASoC, but Audio Graph
Card2 still not yet support it. Let's support it.

Cc: Maxim Kochetkov <fido_max@inbox.ru>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://patch.msgid.link/87msnqzoj8.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/generic/audio-graph-card2.c

index be5a4ebfddd4163a9c2119bbd3e112bd4ff216e9..93d9d045587bc43e7be579f21c4cf51115263030 100644 (file)
@@ -759,6 +759,8 @@ static void graph_link_init(struct simple_util_priv *priv,
        struct device_node *ports_cpu, *ports_codec;
        unsigned int daifmt = 0, daiclk = 0;
        bool playback_only = 0, capture_only = 0;
+       enum snd_soc_trigger_order trigger_start = SND_SOC_TRIGGER_ORDER_DEFAULT;
+       enum snd_soc_trigger_order trigger_stop  = SND_SOC_TRIGGER_ORDER_DEFAULT;
        unsigned int bit_frame = 0;
 
        of_node_get(port_cpu);
@@ -806,6 +808,14 @@ static void graph_link_init(struct simple_util_priv *priv,
        of_property_read_u32(ep_cpu,            "mclk-fs", &dai_props->mclk_fs);
        of_property_read_u32(ep_codec,          "mclk-fs", &dai_props->mclk_fs);
 
+       graph_util_parse_trigger_order(priv, lnk,               &trigger_start, &trigger_stop);
+       graph_util_parse_trigger_order(priv, ports_cpu,         &trigger_start, &trigger_stop);
+       graph_util_parse_trigger_order(priv, ports_codec,       &trigger_start, &trigger_stop);
+       graph_util_parse_trigger_order(priv, port_cpu,          &trigger_start, &trigger_stop);
+       graph_util_parse_trigger_order(priv, port_cpu,          &trigger_start, &trigger_stop);
+       graph_util_parse_trigger_order(priv, ep_cpu,            &trigger_start, &trigger_stop);
+       graph_util_parse_trigger_order(priv, ep_codec,          &trigger_start, &trigger_stop);
+
        /*
         * convert bit_frame
         * We need to flip clock_provider if it was CPU node,
@@ -818,6 +828,9 @@ static void graph_link_init(struct simple_util_priv *priv,
        dai_link->playback_only = playback_only;
        dai_link->capture_only  = capture_only;
 
+       dai_link->trigger_start = trigger_start;
+       dai_link->trigger_stop  = trigger_stop;
+
        dai_link->dai_fmt       = daifmt | daiclk;
        dai_link->init          = simple_util_dai_init;
        dai_link->ops           = &graph_ops;