Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2e7ee15c authored by Nicolin Chen's avatar Nicolin Chen Committed by Mark Brown
Browse files

ASoC: wm8962: Remove remaining direct register cache accesses



Also fix return values for headphone switch updates.

Signed-off-by: default avatarNicolin Chen <b42378@freescale.com>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
Cc: stable@vger.kernel.org
parent 317ddd25
Loading
Loading
Loading
Loading
+13 −11
Original line number Original line Diff line number Diff line
@@ -1600,7 +1600,6 @@ static int wm8962_put_hp_sw(struct snd_kcontrol *kcontrol,
			    struct snd_ctl_elem_value *ucontrol)
			    struct snd_ctl_elem_value *ucontrol)
{
{
	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
	u16 *reg_cache = codec->reg_cache;
	int ret;
	int ret;


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


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


	/* ...otherwise the right.  The VU is stereo. */
	/* ...otherwise the right.  The VU is stereo. */
	if (snd_soc_read(codec, WM8962_PWR_MGMT_2) & WM8962_HPOUTR_PGA_ENA)
	if (ret & WM8962_HPOUTR_PGA_ENA)
		return snd_soc_write(codec, WM8962_HPOUTR_VOLUME,
		snd_soc_write(codec, WM8962_HPOUTR_VOLUME,
				     reg_cache[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
/* The VU bits for the speakers are in a different register to the mute
@@ -3374,7 +3376,6 @@ static int wm8962_probe(struct snd_soc_codec *codec)
	int ret;
	int ret;
	struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
	struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
	struct wm8962_pdata *pdata = dev_get_platdata(codec->dev);
	struct wm8962_pdata *pdata = dev_get_platdata(codec->dev);
	u16 *reg_cache = codec->reg_cache;
	int i, trigger, irq_pol;
	int i, trigger, irq_pol;
	bool dmicclk, dmicdat;
	bool dmicclk, dmicdat;


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


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



		/* Micbias setup, detection enable and detection
		/* Micbias setup, detection enable and detection
		 * threasholds. */
		 * threasholds. */