The only particularly remarkable change here is the one for handling of
the Android suspend ignore code for idle_bias_off CODECs. That one is actually a regression fix as some of the new power savings that have been introduced confused the suspend ignore code, making devices that are active for non-audio reasons look like they are idle causing them to be suspended instead of being kept active. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJPLSlpAAoJEBus8iNuMP3d0JkP/jA3bSbSR2/qg0SeOP1uEN9G 5JBD12urid3+cPi8FzBw3ecIH2thf1SoSg8rL//4gENyX6N9Ia1jXNjhYsA701kH 7EXsCqmMBl9qUfVTaGGAIh1SsRbNVuSQlL5KmG3yQPwRooNX+K/slr6BuItUepzz H4C1bl45a92Wh6Nc1t+jYDJXS5Z+o5fc45AVpeiw+xcPblFcXptKVuWpHXfBHgef +qK8SpfrvKfGygrFnLteYIwDby7ZPA21znRiBjPg2jL+w3KsIgOlZWbWJHZdlJ7/ 5oSKaYXYbuA3UCUBayteakeDqiAoxjv4aw6XzAVgtwaITyuOdkWtLjvmSVFAElF4 J0u7/CukK434qezds9bztaBqigoEpRj4EH0Dd5ybZi1vOJO5V9UA8/SNux+K6yWX +MHizTDZFlZNMdYsoCfinVlpelmvNl1TJYTL7JLKMUmE0+ph2Jz6elgbIkvlwHFb bEjm/+fLZIHnzam88FikmbAER96w/pc7EtFFXmWKDkQwy9wDvnt4wNhy/MhwXub3 XiMkmcb+cCoaN5nefs49mYvIMUP90INfLWTn8r30GqbByEWdASC4sj5GSC6Ak7/G Y4e90zxFd10UiaZMFoGmfcMBQ49ZKNGgxJ3aWPoz7dfM8MI6Gy9qcLyoDWBlwBFN uh159btp7tVAn4D/wgC+ =FOxW -----END PGP SIGNATURE----- Merge tag 'asoc-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus The only particularly remarkable change here is the one for handling of the Android suspend ignore code for idle_bias_off CODECs. That one is actually a regression fix as some of the new power savings that have been introduced confused the suspend ignore code, making devices that are active for non-audio reasons look like they are idle causing them to be suspended instead of being kept active.
This commit is contained in:
Коммит
cfd0d11ef5
|
@ -1113,7 +1113,7 @@ static int cs42l73_pcm_hw_params(struct snd_pcm_substream *substream,
|
|||
priv->config[id].mmcc &= 0xC0;
|
||||
priv->config[id].mmcc |= cs42l73_mclk_coeffs[mclk_coeff].mmcc;
|
||||
priv->config[id].spc &= 0xFC;
|
||||
priv->config[id].spc &= MCK_SCLK_64FS;
|
||||
priv->config[id].spc |= MCK_SCLK_MCLK;
|
||||
} else {
|
||||
/* CS42L73 Slave */
|
||||
priv->config[id].spc &= 0xFC;
|
||||
|
|
|
@ -3159,13 +3159,13 @@ static int wm8962_hw_params(struct snd_pcm_substream *substream,
|
|||
case SNDRV_PCM_FORMAT_S16_LE:
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S20_3LE:
|
||||
aif0 |= 0x40;
|
||||
aif0 |= 0x4;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S24_LE:
|
||||
aif0 |= 0x80;
|
||||
aif0 |= 0x8;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S32_LE:
|
||||
aif0 |= 0xc0;
|
||||
aif0 |= 0xc;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
|
|
@ -2753,11 +2753,6 @@ static int wm8994_resume(struct snd_soc_codec *codec)
|
|||
codec->cache_only = 0;
|
||||
}
|
||||
|
||||
/* Restore the registers */
|
||||
ret = snd_soc_cache_sync(codec);
|
||||
if (ret != 0)
|
||||
dev_err(codec->dev, "Failed to sync cache: %d\n", ret);
|
||||
|
||||
wm8994_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(wm8994->fll); i++) {
|
||||
|
|
|
@ -586,8 +586,8 @@ SOC_DAPM_SINGLE("Left Output Switch", WM8993_LINE_MIXER1, 0, 1, 0),
|
|||
};
|
||||
|
||||
static const struct snd_kcontrol_new line2_mix[] = {
|
||||
SOC_DAPM_SINGLE("IN2R Switch", WM8993_LINE_MIXER2, 2, 1, 0),
|
||||
SOC_DAPM_SINGLE("IN2L Switch", WM8993_LINE_MIXER2, 1, 1, 0),
|
||||
SOC_DAPM_SINGLE("IN1L Switch", WM8993_LINE_MIXER2, 2, 1, 0),
|
||||
SOC_DAPM_SINGLE("IN1R Switch", WM8993_LINE_MIXER2, 1, 1, 0),
|
||||
SOC_DAPM_SINGLE("Output Switch", WM8993_LINE_MIXER2, 0, 1, 0),
|
||||
};
|
||||
|
||||
|
@ -848,8 +848,8 @@ static const struct snd_soc_dapm_route lineout1_se_routes[] = {
|
|||
};
|
||||
|
||||
static const struct snd_soc_dapm_route lineout2_diff_routes[] = {
|
||||
{ "LINEOUT2 Mixer", "IN2L Switch", "IN2L PGA" },
|
||||
{ "LINEOUT2 Mixer", "IN2R Switch", "IN2R PGA" },
|
||||
{ "LINEOUT2 Mixer", "IN1L Switch", "IN1L PGA" },
|
||||
{ "LINEOUT2 Mixer", "IN1R Switch", "IN1R PGA" },
|
||||
{ "LINEOUT2 Mixer", "Output Switch", "Right Output PGA" },
|
||||
|
||||
{ "LINEOUT2N Driver", NULL, "LINEOUT2 Mixer" },
|
||||
|
|
|
@ -567,6 +567,17 @@ int snd_soc_suspend(struct device *dev)
|
|||
if (!codec->suspended && codec->driver->suspend) {
|
||||
switch (codec->dapm.bias_level) {
|
||||
case SND_SOC_BIAS_STANDBY:
|
||||
/*
|
||||
* If the CODEC is capable of idle
|
||||
* bias off then being in STANDBY
|
||||
* means it's doing something,
|
||||
* otherwise fall through.
|
||||
*/
|
||||
if (codec->dapm.idle_bias_off) {
|
||||
dev_dbg(codec->dev,
|
||||
"idle_bias_off CODEC on over suspend\n");
|
||||
break;
|
||||
}
|
||||
case SND_SOC_BIAS_OFF:
|
||||
codec->driver->suspend(codec);
|
||||
codec->suspended = 1;
|
||||
|
|
Загрузка…
Ссылка в новой задаче