aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2023-03-10 18:02:43 +0000
committerSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2023-03-14 09:55:11 +0000
commit60312cce724accf179fbbf52a804486f6c0c1c8a (patch)
treeb525c3a202a198cd3743f4d25a6f0254b07abb4b
parent08e41caed54be6561801b53c3c844e487371420a (diff)
ASoC: codecs: wsa883x: mute/unumte stream in triggerwip/sc8280xp-v6.3-rc1
If the PA is switched on without actually feeding stream, the speakers pop due to static charge. Keep them muted till the stream is actually feed. remove stream mute and move muting to trigger, and also remove any speaker unmute from DAPM widget power up sequence. Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
-rw-r--r--sound/soc/codecs/wsa883x.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/sound/soc/codecs/wsa883x.c b/sound/soc/codecs/wsa883x.c
index c609cb63dae6d..b83b5b0d4bab7 100644
--- a/sound/soc/codecs/wsa883x.c
+++ b/sound/soc/codecs/wsa883x.c
@@ -1204,9 +1204,6 @@ static int wsa883x_spkr_event(struct snd_soc_dapm_widget *w,
break;
}
- snd_soc_component_write_field(component, WSA883X_DRE_CTL_1,
- WSA883X_DRE_GAIN_EN_MASK,
- WSA883X_DRE_GAIN_FROM_CSR);
if (wsa883x->port_enable[WSA883X_PORT_COMP])
snd_soc_component_write_field(component, WSA883X_DRE_CTL_0,
WSA883X_DRE_OFFSET_MASK,
@@ -1219,9 +1216,6 @@ static int wsa883x_spkr_event(struct snd_soc_dapm_widget *w,
snd_soc_component_write_field(component, WSA883X_PDM_WD_CTL,
WSA883X_PDM_EN_MASK,
WSA883X_PDM_ENABLE);
- snd_soc_component_write_field(component, WSA883X_PA_FSM_CTL,
- WSA883X_GLOBAL_PA_EN_MASK,
- WSA883X_GLOBAL_PA_ENABLE);
break;
case SND_SOC_DAPM_PRE_PMD:
@@ -1341,10 +1335,38 @@ static int wsa883x_digital_mute(struct snd_soc_dai *dai, int mute, int stream)
return 0;
}
+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;
+ case SNDRV_PCM_TRIGGER_STOP:
+ case SNDRV_PCM_TRIGGER_SUSPEND:
+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
+ wsa883x_digital_mute(dai, true, 0);
+ break;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+static int wsa883x_startup(struct snd_pcm_substream *stream,
+ struct snd_soc_dai *dai)
+{
+ return wsa883x_digital_mute(dai, true, 0);
+}
+
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,
.set_stream = wsa883x_set_sdw_stream,
};