aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/arm/aaci.c6
-rw-r--r--sound/soc/codecs/tlv320aic23.c3
-rw-r--r--sound/soc/soc-dapm.c20
3 files changed, 23 insertions, 6 deletions
diff --git a/sound/arm/aaci.c b/sound/arm/aaci.c
index e59372887f36..1534f3d88bce 100644
--- a/sound/arm/aaci.c
+++ b/sound/arm/aaci.c
@@ -503,6 +503,10 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream,
503 int err; 503 int err;
504 504
505 aaci_pcm_hw_free(substream); 505 aaci_pcm_hw_free(substream);
506 if (aacirun->pcm_open) {
507 snd_ac97_pcm_close(aacirun->pcm);
508 aacirun->pcm_open = 0;
509 }
506 510
507 err = snd_pcm_lib_malloc_pages(substream, 511 err = snd_pcm_lib_malloc_pages(substream,
508 params_buffer_bytes(params)); 512 params_buffer_bytes(params));
@@ -516,7 +520,7 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream,
516 else 520 else
517 err = snd_ac97_pcm_open(aacirun->pcm, params_rate(params), 521 err = snd_ac97_pcm_open(aacirun->pcm, params_rate(params),
518 params_channels(params), 522 params_channels(params),
519 aacirun->pcm->r[1].slots); 523 aacirun->pcm->r[0].slots);
520 524
521 if (err) 525 if (err)
522 goto out; 526 goto out;
diff --git a/sound/soc/codecs/tlv320aic23.c b/sound/soc/codecs/tlv320aic23.c
index fb6b7dd558f3..58ffb6de400f 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 }