ALSA: cs5535audio: turn off PCM properly if closing the audio device
Subsystems (2)
PATCH 2/4 ALSA: cs5535audio: turn off PCM properly if closing the audio device
From: Jaya Kumar <[email protected]>
As per <http://dev.laptop.org/ticket/1420>, we need to properly turn off the PCM if we're closing the device in order to save power. This also causes the MIC led to turn off properly.
Signed-off-by Jaya Kumar <[email protected]>
Signed-off-by Andres Salomon <[email protected]>
--- sound/pci/cs5535audio/cs5535audio.c | 3 ++- sound/pci/cs5535audio/cs5535audio.h | 1 + sound/pci/cs5535audio/cs5535audio_pcm.c | 12 ++++++++++++ 3 files changed, 15 insertions(+), 1 deletions(-)
sound/pci/cs5535audio/cs5535audio.c +2 -1
@@ -159,7 +159,8 @@ static int __devinit snd_cs5535audio_mixer(struct cs5535audio *cs5535au)return err;memset (&ac97,0 ,sizeof (ac97)); - ac97.scaps =AC97_SCAP_AUDIO |AC97_SCAP_SKIP_MODEM ; + ac97.scaps =AC97_SCAP_AUDIO |AC97_SCAP_SKIP_MODEM + |AC97_SCAP_POWER_SAVE ; ac97.private_data = cs5535au; ac97.pci = cs5535au->pci;
sound/pci/cs5535audio/cs5535audio.h +1 -0
@@ -78,6 +78,7 @@ struct cs5535audio_dma {unsigned int buf_addr, buf_bytes;unsigned int period_bytes, periods;u32 saved_prd; +int pcm_open_flag; };struct cs5535audio {
sound/pci/cs5535audio/cs5535audio_pcm.c +12 -0
@@ -260,6 +260,9 @@ static int snd_cs5535audio_hw_params(struct snd_pcm_substream *substream, err =cs5535audio_build_dma_packets (cs5535au, dma, substream,params_periods (hw_params),params_period_bytes (hw_params)); +if (!err) + dma->pcm_open_flag =1 ; +return err; }
@@ -268,6 +271,15 @@ static int snd_cs5535audio_hw_free(struct snd_pcm_substream *substream)struct cs5535audio *cs5535au =snd_pcm_substream_chip (substream);struct cs5535audio_dma *dma = substream->runtime->private_data; +if (dma->pcm_open_flag) { +if (substream == cs5535au->playback_substream) +snd_ac97_update_power (cs5535au->ac97, +AC97_PCM_FRONT_DAC_RATE ,0 ); +else +snd_ac97_update_power (cs5535au->ac97, +AC97_PCM_LR_ADC_RATE ,0 ); + dma->pcm_open_flag =0 ; + }cs5535audio_clear_dma_packets (cs5535au, dma, substream);return snd_pcm_lib_free_pages (substream); }
Signature · 1 line
1.5.6.5