Skip to content

Commit

Permalink
Merge remote-tracking branch 'asoc/fix/wm8962' into asoc-linus
Browse files Browse the repository at this point in the history
  • Loading branch information
Mark Brown committed Jun 19, 2013
2 parents f9511d8 + f5055f9 commit b12a530
Showing 1 changed file with 24 additions and 11 deletions.
35 changes: 24 additions & 11 deletions sound/soc/codecs/wm8962.c
Original file line number Diff line number Diff line change
Expand Up @@ -1600,7 +1600,6 @@ static int wm8962_put_hp_sw(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
u16 *reg_cache = codec->reg_cache;
int ret;

/* Apply the update (if any) */
Expand All @@ -1609,16 +1608,19 @@ static int wm8962_put_hp_sw(struct snd_kcontrol *kcontrol,
return 0;

/* If the left PGA is enabled hit that VU bit... */
if (snd_soc_read(codec, WM8962_PWR_MGMT_2) & WM8962_HPOUTL_PGA_ENA)
return snd_soc_write(codec, WM8962_HPOUTL_VOLUME,
reg_cache[WM8962_HPOUTL_VOLUME]);
ret = snd_soc_read(codec, WM8962_PWR_MGMT_2);
if (ret & WM8962_HPOUTL_PGA_ENA) {
snd_soc_write(codec, WM8962_HPOUTL_VOLUME,
snd_soc_read(codec, WM8962_HPOUTL_VOLUME));
return 1;
}

/* ...otherwise the right. The VU is stereo. */
if (snd_soc_read(codec, WM8962_PWR_MGMT_2) & WM8962_HPOUTR_PGA_ENA)
return snd_soc_write(codec, WM8962_HPOUTR_VOLUME,
reg_cache[WM8962_HPOUTR_VOLUME]);
if (ret & WM8962_HPOUTR_PGA_ENA)
snd_soc_write(codec, WM8962_HPOUTR_VOLUME,
snd_soc_read(codec, WM8962_HPOUTR_VOLUME));

return 0;
return 1;
}

/* The VU bits for the speakers are in a different register to the mute
Expand Down Expand Up @@ -3374,7 +3376,6 @@ static int wm8962_probe(struct snd_soc_codec *codec)
int ret;
struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
struct wm8962_pdata *pdata = dev_get_platdata(codec->dev);
u16 *reg_cache = codec->reg_cache;
int i, trigger, irq_pol;
bool dmicclk, dmicdat;

Expand Down Expand Up @@ -3432,8 +3433,9 @@ static int wm8962_probe(struct snd_soc_codec *codec)

/* Put the speakers into mono mode? */
if (pdata->spk_mono)
reg_cache[WM8962_CLASS_D_CONTROL_2]
|= WM8962_SPK_MONO;
snd_soc_update_bits(codec, WM8962_CLASS_D_CONTROL_2,
WM8962_SPK_MONO_MASK, WM8962_SPK_MONO);


/* Micbias setup, detection enable and detection
* threasholds. */
Expand Down Expand Up @@ -3721,6 +3723,17 @@ static int wm8962_runtime_resume(struct device *dev)

regcache_sync(wm8962->regmap);

regmap_update_bits(wm8962->regmap, WM8962_ANTI_POP,
WM8962_STARTUP_BIAS_ENA | WM8962_VMID_BUF_ENA,
WM8962_STARTUP_BIAS_ENA | WM8962_VMID_BUF_ENA);

/* Bias enable at 2*5k (fast start-up) */
regmap_update_bits(wm8962->regmap, WM8962_PWR_MGMT_1,
WM8962_BIAS_ENA | WM8962_VMID_SEL_MASK,
WM8962_BIAS_ENA | 0x180);

msleep(5);

return 0;
}

Expand Down

0 comments on commit b12a530

Please sign in to comment.