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
This commit is contained in:
commit
6c49e2700f
3 changed files with 23 additions and 6 deletions
|
@ -504,6 +504,10 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream,
|
|||
int err;
|
||||
|
||||
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,
|
||||
params_buffer_bytes(params));
|
||||
|
@ -517,7 +521,7 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream,
|
|||
else
|
||||
err = snd_ac97_pcm_open(aacirun->pcm, params_rate(params),
|
||||
params_channels(params),
|
||||
aacirun->pcm->r[1].slots);
|
||||
aacirun->pcm->r[0].slots);
|
||||
|
||||
if (err)
|
||||
goto out;
|
||||
|
|
|
@ -625,11 +625,10 @@ static int tlv320aic23_resume(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_device *socdev = platform_get_drvdata(pdev);
|
||||
struct snd_soc_codec *codec = socdev->card->codec;
|
||||
int i;
|
||||
u16 reg;
|
||||
|
||||
/* 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);
|
||||
tlv320aic23_write(codec, reg, val);
|
||||
}
|
||||
|
|
|
@ -973,9 +973,19 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
|
|||
if (!w->power_check)
|
||||
continue;
|
||||
|
||||
power = w->power_check(w);
|
||||
if (power)
|
||||
sys_power = 1;
|
||||
/* If we're suspending then pull down all the
|
||||
* power. */
|
||||
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)
|
||||
continue;
|
||||
|
@ -999,8 +1009,12 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
|
|||
case SND_SOC_DAPM_STREAM_RESUME:
|
||||
sys_power = 1;
|
||||
break;
|
||||
case SND_SOC_DAPM_STREAM_SUSPEND:
|
||||
sys_power = 0;
|
||||
break;
|
||||
case SND_SOC_DAPM_STREAM_NOP:
|
||||
sys_power = codec->bias_level != SND_SOC_BIAS_STANDBY;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue