diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-11-30 16:55:20 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-11-30 16:55:20 -0500 |
commit | 6c49e2700fd5e78403d9119cbe12b7c7bb5b3d0e (patch) | |
tree | 29d072381c7712dd1b4176af28771e5e38883cfa /sound | |
parent | 23e041dbaa80eb1032f9d612433c6b9062da5afd (diff) | |
parent | 8ee763b9c82c6ca0a59a7271ce4fa29d7baf5c09 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
ALSA: AACI: fix recording bug
ALSA: AACI: fix AC97 multiple-open bug
ASoC: AIC23: Fixing infinite loop in resume path
ASoC: Fix suspend with active audio streams
Diffstat (limited to 'sound')
-rw-r--r-- | sound/arm/aaci.c | 6 | ||||
-rw-r--r-- | sound/soc/codecs/tlv320aic23.c | 3 | ||||
-rw-r--r-- | sound/soc/soc-dapm.c | 20 |
3 files changed, 23 insertions, 6 deletions
diff --git a/sound/arm/aaci.c b/sound/arm/aaci.c index 1f0f8213e2d5..6c160a038b23 100644 --- a/sound/arm/aaci.c +++ b/sound/arm/aaci.c | |||
@@ -504,6 +504,10 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream, | |||
504 | int err; | 504 | int err; |
505 | 505 | ||
506 | aaci_pcm_hw_free(substream); | 506 | aaci_pcm_hw_free(substream); |
507 | if (aacirun->pcm_open) { | ||
508 | snd_ac97_pcm_close(aacirun->pcm); | ||
509 | aacirun->pcm_open = 0; | ||
510 | } | ||
507 | 511 | ||
508 | err = devdma_hw_alloc(NULL, substream, | 512 | err = devdma_hw_alloc(NULL, substream, |
509 | params_buffer_bytes(params)); | 513 | params_buffer_bytes(params)); |
@@ -517,7 +521,7 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream, | |||
517 | else | 521 | else |
518 | err = snd_ac97_pcm_open(aacirun->pcm, params_rate(params), | 522 | err = snd_ac97_pcm_open(aacirun->pcm, params_rate(params), |
519 | params_channels(params), | 523 | params_channels(params), |
520 | aacirun->pcm->r[1].slots); | 524 | aacirun->pcm->r[0].slots); |
521 | 525 | ||
522 | if (err) | 526 | if (err) |
523 | goto out; | 527 | goto out; |
diff --git a/sound/soc/codecs/tlv320aic23.c b/sound/soc/codecs/tlv320aic23.c index 6b24d8bb02bb..90a0264f7538 100644 --- a/sound/soc/codecs/tlv320aic23.c +++ b/sound/soc/codecs/tlv320aic23.c | |||
@@ -625,11 +625,10 @@ static int tlv320aic23_resume(struct platform_device *pdev) | |||
625 | { | 625 | { |
626 | struct snd_soc_device *socdev = platform_get_drvdata(pdev); | 626 | struct snd_soc_device *socdev = platform_get_drvdata(pdev); |
627 | struct snd_soc_codec *codec = socdev->card->codec; | 627 | struct snd_soc_codec *codec = socdev->card->codec; |
628 | int i; | ||
629 | u16 reg; | 628 | u16 reg; |
630 | 629 | ||
631 | /* Sync reg_cache with the hardware */ | 630 | /* Sync reg_cache with the hardware */ |
632 | for (reg = 0; reg < ARRAY_SIZE(tlv320aic23_reg); i++) { | 631 | for (reg = 0; reg < TLV320AIC23_RESET; reg++) { |
633 | u16 val = tlv320aic23_read_reg_cache(codec, reg); | 632 | u16 val = tlv320aic23_read_reg_cache(codec, reg); |
634 | tlv320aic23_write(codec, reg, val); | 633 | tlv320aic23_write(codec, reg, val); |
635 | } | 634 | } |
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index d89f6dc00908..66d4c165f99b 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c | |||
@@ -973,9 +973,19 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event) | |||
973 | if (!w->power_check) | 973 | if (!w->power_check) |
974 | continue; | 974 | continue; |
975 | 975 | ||
976 | power = w->power_check(w); | 976 | /* If we're suspending then pull down all the |
977 | if (power) | 977 | * power. */ |
978 | sys_power = 1; | 978 | switch (event) { |
979 | case SND_SOC_DAPM_STREAM_SUSPEND: | ||
980 | power = 0; | ||
981 | break; | ||
982 | |||
983 | default: | ||
984 | power = w->power_check(w); | ||
985 | if (power) | ||
986 | sys_power = 1; | ||
987 | break; | ||
988 | } | ||
979 | 989 | ||
980 | if (w->power == power) | 990 | if (w->power == power) |
981 | continue; | 991 | continue; |
@@ -999,8 +1009,12 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event) | |||
999 | case SND_SOC_DAPM_STREAM_RESUME: | 1009 | case SND_SOC_DAPM_STREAM_RESUME: |
1000 | sys_power = 1; | 1010 | sys_power = 1; |
1001 | break; | 1011 | break; |
1012 | case SND_SOC_DAPM_STREAM_SUSPEND: | ||
1013 | sys_power = 0; | ||
1014 | break; | ||
1002 | case SND_SOC_DAPM_STREAM_NOP: | 1015 | case SND_SOC_DAPM_STREAM_NOP: |
1003 | sys_power = codec->bias_level != SND_SOC_BIAS_STANDBY; | 1016 | sys_power = codec->bias_level != SND_SOC_BIAS_STANDBY; |
1017 | break; | ||
1004 | default: | 1018 | default: |
1005 | break; | 1019 | break; |
1006 | } | 1020 | } |