]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
ASoC: simple-audio-card: add link-trigger-order support
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Wed, 12 Jun 2024 06:02:39 +0000 (06:02 +0000)
committerMark Brown <broonie@kernel.org>
Wed, 26 Jun 2024 16:47:57 +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 Simple Audio
Card 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/87plsmzojk.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/generic/simple-card.c

index 2de5e6efe947fc9c0434748f327d842063bb0ffc..edbb6322e9be2229cd36bd02541d5bea42e0e14a 100644 (file)
@@ -176,6 +176,8 @@ static int simple_link_init(struct simple_util_priv *priv,
        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 device_node *node = of_get_parent(cpu);
+       enum snd_soc_trigger_order trigger_start = SND_SOC_TRIGGER_ORDER_DEFAULT;
+       enum snd_soc_trigger_order trigger_stop  = SND_SOC_TRIGGER_ORDER_DEFAULT;
        bool playback_only = 0, capture_only = 0;
        int ret;
 
@@ -198,9 +200,17 @@ static int simple_link_init(struct simple_util_priv *priv,
        of_property_read_u32(codec,             "mclk-fs", &dai_props->mclk_fs);
        of_property_read_u32(codec,     PREFIX  "mclk-fs", &dai_props->mclk_fs);
 
+       graph_util_parse_trigger_order(priv, top,       &trigger_start, &trigger_stop);
+       graph_util_parse_trigger_order(priv, node,      &trigger_start, &trigger_stop);
+       graph_util_parse_trigger_order(priv, cpu,       &trigger_start, &trigger_stop);
+       graph_util_parse_trigger_order(priv, codec,     &trigger_start, &trigger_stop);
+
        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->init                  = simple_util_dai_init;
        dai_link->ops                   = &simple_ops;