[ALSA] soc - Add device level DAPM event
Added a device level dapm event so that both the machine and codec are informed when dapm events occur. Signed-off-by: Liam Girdwood <lg@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
committed by
Jaroslav Kysela
parent
7570f29a54
commit
0b4d221b8d
@@ -288,15 +288,16 @@ static void close_delayed_work(struct work_struct *work)
|
||||
if (codec_dai->pop_wait == 1) {
|
||||
|
||||
codec_dai->pop_wait = 0;
|
||||
snd_soc_dapm_stream_event(codec, codec_dai->playback.stream_name,
|
||||
snd_soc_dapm_stream_event(codec,
|
||||
codec_dai->playback.stream_name,
|
||||
SND_SOC_DAPM_STREAM_STOP);
|
||||
|
||||
/* power down the codec power domain if no longer active */
|
||||
if (codec->active == 0) {
|
||||
dbg("pop wq D3 %s %s\n", codec->name,
|
||||
codec_dai->playback.stream_name);
|
||||
if (codec->dapm_event)
|
||||
codec->dapm_event(codec, SNDRV_CTL_POWER_D3hot);
|
||||
snd_soc_dapm_device_event(socdev,
|
||||
SNDRV_CTL_POWER_D3hot);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -352,12 +353,12 @@ static int soc_codec_close(struct snd_pcm_substream *substream)
|
||||
} else {
|
||||
/* capture streams can be powered down now */
|
||||
snd_soc_dapm_stream_event(codec,
|
||||
codec_dai->capture.stream_name, SND_SOC_DAPM_STREAM_STOP);
|
||||
codec_dai->capture.stream_name,
|
||||
SND_SOC_DAPM_STREAM_STOP);
|
||||
|
||||
if (codec->active == 0 && codec_dai->pop_wait == 0){
|
||||
if (codec->dapm_event)
|
||||
codec->dapm_event(codec, SNDRV_CTL_POWER_D3hot);
|
||||
}
|
||||
if (codec->active == 0 && codec_dai->pop_wait == 0)
|
||||
snd_soc_dapm_device_event(socdev,
|
||||
SNDRV_CTL_POWER_D3hot);
|
||||
}
|
||||
|
||||
mutex_unlock(&pcm_mutex);
|
||||
@@ -432,8 +433,7 @@ static int soc_pcm_prepare(struct snd_pcm_substream *substream)
|
||||
/* no delayed work - do we need to power up codec */
|
||||
if (codec->dapm_state != SNDRV_CTL_POWER_D0) {
|
||||
|
||||
if (codec->dapm_event)
|
||||
codec->dapm_event(codec, SNDRV_CTL_POWER_D1);
|
||||
snd_soc_dapm_device_event(socdev, SNDRV_CTL_POWER_D1);
|
||||
|
||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
snd_soc_dapm_stream_event(codec,
|
||||
@@ -444,8 +444,7 @@ static int soc_pcm_prepare(struct snd_pcm_substream *substream)
|
||||
codec_dai->capture.stream_name,
|
||||
SND_SOC_DAPM_STREAM_START);
|
||||
|
||||
if (codec->dapm_event)
|
||||
codec->dapm_event(codec, SNDRV_CTL_POWER_D0);
|
||||
snd_soc_dapm_device_event(socdev, SNDRV_CTL_POWER_D0);
|
||||
if (codec_dai->dai_ops.digital_mute)
|
||||
codec_dai->dai_ops.digital_mute(codec_dai, 0);
|
||||
|
||||
|
Reference in New Issue
Block a user