aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKuninori Morimoto <[email protected]>2024-06-12 06:02:39 +0000
committerMark Brown <[email protected]>2024-06-26 17:47:57 +0100
commit8696d732f1c804312d44806242d4a91c49a7a154 (patch)
tree63aea48fae3f0b4134d819c522e33b789c82be2e
parent5d9cacdccf17bd33dac3ea378324650159c2a863 (diff)
ASoC: simple-audio-card: add link-trigger-order support
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 <[email protected]> Signed-off-by: Kuninori Morimoto <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Mark Brown <[email protected]>
-rw-r--r--sound/soc/generic/simple-card.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index 2de5e6efe947..edbb6322e9be 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -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;