Commit 6c49e270 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 23e041db 8ee763b9
...@@ -504,6 +504,10 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream, ...@@ -504,6 +504,10 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream,
int err; int err;
aaci_pcm_hw_free(substream); aaci_pcm_hw_free(substream);
if (aacirun->pcm_open) {
snd_ac97_pcm_close(aacirun->pcm);
aacirun->pcm_open = 0;
}
err = devdma_hw_alloc(NULL, substream, err = devdma_hw_alloc(NULL, substream,
params_buffer_bytes(params)); params_buffer_bytes(params));
...@@ -517,7 +521,7 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream, ...@@ -517,7 +521,7 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream,
else else
err = snd_ac97_pcm_open(aacirun->pcm, params_rate(params), err = snd_ac97_pcm_open(aacirun->pcm, params_rate(params),
params_channels(params), params_channels(params),
aacirun->pcm->r[1].slots); aacirun->pcm->r[0].slots);
if (err) if (err)
goto out; goto out;
......
...@@ -625,11 +625,10 @@ static int tlv320aic23_resume(struct platform_device *pdev) ...@@ -625,11 +625,10 @@ static int tlv320aic23_resume(struct platform_device *pdev)
{ {
struct snd_soc_device *socdev = platform_get_drvdata(pdev); struct snd_soc_device *socdev = platform_get_drvdata(pdev);
struct snd_soc_codec *codec = socdev->card->codec; struct snd_soc_codec *codec = socdev->card->codec;
int i;
u16 reg; u16 reg;
/* Sync reg_cache with the hardware */ /* Sync reg_cache with the hardware */
for (reg = 0; reg < ARRAY_SIZE(tlv320aic23_reg); i++) { for (reg = 0; reg < TLV320AIC23_RESET; reg++) {
u16 val = tlv320aic23_read_reg_cache(codec, reg); u16 val = tlv320aic23_read_reg_cache(codec, reg);
tlv320aic23_write(codec, reg, val); tlv320aic23_write(codec, reg, val);
} }
......
...@@ -973,9 +973,19 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event) ...@@ -973,9 +973,19 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
if (!w->power_check) if (!w->power_check)
continue; continue;
power = w->power_check(w); /* If we're suspending then pull down all the
if (power) * power. */
sys_power = 1; switch (event) {
case SND_SOC_DAPM_STREAM_SUSPEND:
power = 0;
break;
default:
power = w->power_check(w);
if (power)
sys_power = 1;
break;
}
if (w->power == power) if (w->power == power)
continue; continue;
...@@ -999,8 +1009,12 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event) ...@@ -999,8 +1009,12 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
case SND_SOC_DAPM_STREAM_RESUME: case SND_SOC_DAPM_STREAM_RESUME:
sys_power = 1; sys_power = 1;
break; break;
case SND_SOC_DAPM_STREAM_SUSPEND:
sys_power = 0;
break;
case SND_SOC_DAPM_STREAM_NOP: case SND_SOC_DAPM_STREAM_NOP:
sys_power = codec->bias_level != SND_SOC_BIAS_STANDBY; sys_power = codec->bias_level != SND_SOC_BIAS_STANDBY;
break;
default: default:
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment