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:
@@ -1113,7 +1113,7 @@ static int cs42l73_pcm_hw_params(struct snd_pcm_substream *substream,
|
|||||||
priv->config[id].mmcc &= 0xC0;
|
priv->config[id].mmcc &= 0xC0;
|
||||||
priv->config[id].mmcc |= cs42l73_mclk_coeffs[mclk_coeff].mmcc;
|
priv->config[id].mmcc |= cs42l73_mclk_coeffs[mclk_coeff].mmcc;
|
||||||
priv->config[id].spc &= 0xFC;
|
priv->config[id].spc &= 0xFC;
|
||||||
priv->config[id].spc &= MCK_SCLK_64FS;
|
priv->config[id].spc |= MCK_SCLK_MCLK;
|
||||||
} else {
|
} else {
|
||||||
/* CS42L73 Slave */
|
/* CS42L73 Slave */
|
||||||
priv->config[id].spc &= 0xFC;
|
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:
|
case SNDRV_PCM_FORMAT_S16_LE:
|
||||||
break;
|
break;
|
||||||
case SNDRV_PCM_FORMAT_S20_3LE:
|
case SNDRV_PCM_FORMAT_S20_3LE:
|
||||||
aif0 |= 0x40;
|
aif0 |= 0x4;
|
||||||
break;
|
break;
|
||||||
case SNDRV_PCM_FORMAT_S24_LE:
|
case SNDRV_PCM_FORMAT_S24_LE:
|
||||||
aif0 |= 0x80;
|
aif0 |= 0x8;
|
||||||
break;
|
break;
|
||||||
case SNDRV_PCM_FORMAT_S32_LE:
|
case SNDRV_PCM_FORMAT_S32_LE:
|
||||||
aif0 |= 0xc0;
|
aif0 |= 0xc;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@@ -2753,11 +2753,6 @@ static int wm8994_resume(struct snd_soc_codec *codec)
|
|||||||
codec->cache_only = 0;
|
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);
|
wm8994_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(wm8994->fll); i++) {
|
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[] = {
|
static const struct snd_kcontrol_new line2_mix[] = {
|
||||||
SOC_DAPM_SINGLE("IN2R Switch", WM8993_LINE_MIXER2, 2, 1, 0),
|
SOC_DAPM_SINGLE("IN1L Switch", WM8993_LINE_MIXER2, 2, 1, 0),
|
||||||
SOC_DAPM_SINGLE("IN2L Switch", WM8993_LINE_MIXER2, 1, 1, 0),
|
SOC_DAPM_SINGLE("IN1R Switch", WM8993_LINE_MIXER2, 1, 1, 0),
|
||||||
SOC_DAPM_SINGLE("Output Switch", WM8993_LINE_MIXER2, 0, 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[] = {
|
static const struct snd_soc_dapm_route lineout2_diff_routes[] = {
|
||||||
{ "LINEOUT2 Mixer", "IN2L Switch", "IN2L PGA" },
|
{ "LINEOUT2 Mixer", "IN1L Switch", "IN1L PGA" },
|
||||||
{ "LINEOUT2 Mixer", "IN2R Switch", "IN2R PGA" },
|
{ "LINEOUT2 Mixer", "IN1R Switch", "IN1R PGA" },
|
||||||
{ "LINEOUT2 Mixer", "Output Switch", "Right Output PGA" },
|
{ "LINEOUT2 Mixer", "Output Switch", "Right Output PGA" },
|
||||||
|
|
||||||
{ "LINEOUT2N Driver", NULL, "LINEOUT2 Mixer" },
|
{ "LINEOUT2N Driver", NULL, "LINEOUT2 Mixer" },
|
||||||
|
@@ -567,6 +567,17 @@ int snd_soc_suspend(struct device *dev)
|
|||||||
if (!codec->suspended && codec->driver->suspend) {
|
if (!codec->suspended && codec->driver->suspend) {
|
||||||
switch (codec->dapm.bias_level) {
|
switch (codec->dapm.bias_level) {
|
||||||
case SND_SOC_BIAS_STANDBY:
|
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:
|
case SND_SOC_BIAS_OFF:
|
||||||
codec->driver->suspend(codec);
|
codec->driver->suspend(codec);
|
||||||
codec->suspended = 1;
|
codec->suspended = 1;
|
||||||
|
Reference in New Issue
Block a user