diff --git a/Makefile b/Makefile index b9de7f4..1aa0949 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ ifneq ($(KERNELRELEASE),) snd-soc-wm8960-objs := wm8960.o snd-soc-ac108-objs := ac108.o ac101.o -snd-soc-seeed-voicecard-objs := seeed-voicecard.o +snd-soc-seeed-voicecard-objs := seeed-voicecard.o ac101.o obj-m += snd-soc-wm8960.o diff --git a/ac108.c b/ac108.c index 4075eee..075b6cd 100644 --- a/ac108.c +++ b/ac108.c @@ -1058,7 +1058,7 @@ static int ac108_trigger(struct snd_pcm_substream *substream, int cmd, snd_pcm_stream_str(substream), cmd); - if (ac10x->i2c101 && _MASTER_MULTI_CODEC == _MASTER_AC101) { + if (!cmd && ac10x->i2c101 && _MASTER_MULTI_CODEC == _MASTER_AC101) { ac101_trigger(substream, cmd, dai); if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { goto __ret; diff --git a/seeed-voicecard.c b/seeed-voicecard.c index 9f5f7e7..25bca71 100644 --- a/seeed-voicecard.c +++ b/seeed-voicecard.c @@ -198,6 +198,7 @@ static int seeed_voice_card_trigger(struct snd_pcm_substream *substream, int cmd { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *dai = asoc_rtd_to_codec(rtd, 0); + struct ac10x_priv *ac10x = snd_soc_dai_get_drvdata(dai); struct seeed_card_data *priv = snd_soc_card_get_drvdata(rtd->card); #if CONFIG_AC10X_TRIG_LOCK unsigned long flags; @@ -217,6 +218,9 @@ static int seeed_voice_card_trigger(struct snd_pcm_substream *substream, int cmd /* I know it will degrades performance, but I have no choice */ spin_lock_irqsave(&priv->lock, flags); #endif + if (cmd && ac10x->i2c101 && _MASTER_MULTI_CODEC == _MASTER_AC101) { + ac101_trigger(substream, cmd, dai); + } if (_set_clock[SNDRV_PCM_STREAM_CAPTURE]) _set_clock[SNDRV_PCM_STREAM_CAPTURE](1); if (_set_clock[SNDRV_PCM_STREAM_PLAYBACK]) _set_clock[SNDRV_PCM_STREAM_PLAYBACK](1); #if CONFIG_AC10X_TRIG_LOCK