diff options
| -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 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 | } |
