23 Mar
2023
23 Mar
'23
7:11 p.m.
+static int wsa883x_trigger(struct snd_pcm_substream *s, int cmd,
struct snd_soc_dai *dai)
+{
- switch (cmd) {
- case SNDRV_PCM_TRIGGER_START:
- case SNDRV_PCM_TRIGGER_RESUME:
- case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
wsa883x_digital_mute(dai, false, 0);
break;
static const struct snd_soc_dai_ops wsa883x_dai_ops = {
- .startup = wsa883x_startup, .hw_params = wsa883x_hw_params, .hw_free = wsa883x_hw_free,
- .mute_stream = wsa883x_digital_mute,
- .trigger = wsa883x_trigger,
The trigger is run in atomic context, can you really write safely to a SoundWire device there?
Mark, I've seen that comment from you several times, and I wonder if I am missing something: the triggers for SoundWire managers and dailinks are typically nonatomic - at least for the Cadence-based solution the trigger is based on a bank switch that may happen with a delay and with a wait_for_completion(). Sending a command over the SoundWire channel is also typically not atomic, there's usually a wait_for_completion() as well.