History

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.

Takashi Iwai committed 14 years ago

Commit cfd0d112 parents eedec3d 43b6cec5 files · +19 −13Browse files

Unified · Split

5 files
  1. sound/soc/codecs/cs42l73.c +1 −1
  2. sound/soc/codecs/wm8962.c +3 −3
  3. sound/soc/codecs/wm8994.c +0 −5
  4. sound/soc/codecs/wm_hubs.c +4 −4
  5. sound/soc/soc-core.c +11 −0
sound/soc/codecs/cs42l73.c+1−1
@@ -1113,7 +1113,7 @@ static int cs42l73_pcm_hw_params(struct snd_pcm_substream *substream, · 1112 unmodified lines
11131113 priv->config[id].mmcc &= 0xC0;
11141114 priv->config[id].mmcc |= cs42l73_mclk_coeffs[mclk_coeff].mmcc;
11151115 priv->config[id].spc &= 0xFC;
1116− priv->config[id].spc &= MCK_SCLK_64FS;
1116+ priv->config[id].spc |= MCK_SCLK_MCLK;
11171117 } else {
11181118 /* CS42L73 Slave */
11191119 priv->config[id].spc &= 0xFC;
sound/soc/codecs/wm8962.c+3−3
@@ -3159,13 +3159,13 @@ static int wm8962_hw_params(struct snd_pcm_substream *substream, · 3158 unmodified lines
31593159 case SNDRV_PCM_FORMAT_S16_LE:
31603160 break;
31613161 case SNDRV_PCM_FORMAT_S20_3LE:
3162− aif0 |= 0x40;
3162+ aif0 |= 0x4;
31633163 break;
31643164 case SNDRV_PCM_FORMAT_S24_LE:
3165− aif0 |= 0x80;
3165+ aif0 |= 0x8;
31663166 break;
31673167 case SNDRV_PCM_FORMAT_S32_LE:
3168− aif0 |= 0xc0;
3168+ aif0 |= 0xc;
31693169 break;
31703170 default:
31713171 return -EINVAL;
sound/soc/codecs/wm8994.c+0−5
@@ -2753,11 +2753,6 @@ static int wm8994_resume(struct snd_soc_codec *codec) · 2752 unmodified lines
27532753 codec->cache_only = 0;
27542754 }
27552755
2756− /* Restore the registers */
2757− ret = snd_soc_cache_sync(codec);
2758− if (ret != 0)
2759− dev_err(codec->dev, "Failed to sync cache: %d\n", ret);
2760−
27612756 wm8994_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
27622757
27632758 for (i = 0; i < ARRAY_SIZE(wm8994->fll); i++) {
sound/soc/codecs/wm_hubs.c+4−4
@@ -586,8 +586,8 @@ SOC_DAPM_SINGLE("Left Output Switch", WM8993_LINE_MIXER1, 0, 1, 0), · 585 unmodified lines
586586 };
587587
588588 static const struct snd_kcontrol_new line2_mix[] = {
589−SOC_DAPM_SINGLE("IN2R Switch", WM8993_LINE_MIXER2, 2, 1, 0),
590−SOC_DAPM_SINGLE("IN2L Switch", WM8993_LINE_MIXER2, 1, 1, 0),
589+SOC_DAPM_SINGLE("IN1L Switch", WM8993_LINE_MIXER2, 2, 1, 0),
590+SOC_DAPM_SINGLE("IN1R Switch", WM8993_LINE_MIXER2, 1, 1, 0),
591591 SOC_DAPM_SINGLE("Output Switch", WM8993_LINE_MIXER2, 0, 1, 0),
592592 };
593593
@@ -848,8 +848,8 @@ static const struct snd_soc_dapm_route lineout1_se_routes[] = { · 254 unmodified lines
848848 };
849849
850850 static const struct snd_soc_dapm_route lineout2_diff_routes[] = {
851− { "LINEOUT2 Mixer", "IN2L Switch", "IN2L PGA" },
852− { "LINEOUT2 Mixer", "IN2R Switch", "IN2R PGA" },
851+ { "LINEOUT2 Mixer", "IN1L Switch", "IN1L PGA" },
852+ { "LINEOUT2 Mixer", "IN1R Switch", "IN1R PGA" },
853853 { "LINEOUT2 Mixer", "Output Switch", "Right Output PGA" },
854854
855855 { "LINEOUT2N Driver", NULL, "LINEOUT2 Mixer" },
sound/soc/soc-core.c+11−0
@@ -567,6 +567,17 @@ int snd_soc_suspend(struct device *dev) · 566 unmodified lines
567567 if (!codec->suspended && codec->driver->suspend) {
568568 switch (codec->dapm.bias_level) {
569569 case SND_SOC_BIAS_STANDBY:
570+ /*
571+ * If the CODEC is capable of idle
572+ * bias off then being in STANDBY
573+ * means it's doing something,
574+ * otherwise fall through.
575+ */
576+ if (codec->dapm.idle_bias_off) {
577+ dev_dbg(codec->dev,
578+ "idle_bias_off CODEC on over suspend\n");
579+ break;
580+ }
570581 case SND_SOC_BIAS_OFF:
571582 codec->driver->suspend(codec);
572583 codec->suspended = 1;