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

Commit bc6ae96a authored by Axel Lin's avatar Axel Lin Committed by Mark Brown
Browse files

ASoC: tlv320aic32x4: Use snd_soc_update_bits for read-modify-write



Use snd_soc_update_bits for read-modify-write register access instead of
open-coding it using snd_soc_read and snd_soc_write.

Signed-off-by: default avatarAxel Lin <axel.lin@gmail.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 694b0001
Loading
Loading
Loading
Loading
+24 −37
Original line number Diff line number Diff line
@@ -528,40 +528,33 @@ static int aic32x4_set_bias_level(struct snd_soc_codec *codec,
				  enum snd_soc_bias_level level)
{
	struct aic32x4_priv *aic32x4 = snd_soc_codec_get_drvdata(codec);
	u8 value;

	switch (level) {
	case SND_SOC_BIAS_ON:
		if (aic32x4->master) {
			/* Switch on PLL */
			value = snd_soc_read(codec, AIC32X4_PLLPR);
			snd_soc_write(codec, AIC32X4_PLLPR,
				      (value | AIC32X4_PLLEN));
			snd_soc_update_bits(codec, AIC32X4_PLLPR,
					    AIC32X4_PLLEN, AIC32X4_PLLEN);

			/* Switch on NDAC Divider */
			value = snd_soc_read(codec, AIC32X4_NDAC);
			snd_soc_write(codec, AIC32X4_NDAC,
				      value | AIC32X4_NDACEN);
			snd_soc_update_bits(codec, AIC32X4_NDAC,
					    AIC32X4_NDACEN, AIC32X4_NDACEN);

			/* Switch on MDAC Divider */
			value = snd_soc_read(codec, AIC32X4_MDAC);
			snd_soc_write(codec, AIC32X4_MDAC,
				      value | AIC32X4_MDACEN);
			snd_soc_update_bits(codec, AIC32X4_MDAC,
					    AIC32X4_MDACEN, AIC32X4_MDACEN);

			/* Switch on NADC Divider */
			value = snd_soc_read(codec, AIC32X4_NADC);
			snd_soc_write(codec, AIC32X4_NADC,
				      value | AIC32X4_MDACEN);
			snd_soc_update_bits(codec, AIC32X4_NADC,
					    AIC32X4_NADCEN, AIC32X4_NADCEN);

			/* Switch on MADC Divider */
			value = snd_soc_read(codec, AIC32X4_MADC);
			snd_soc_write(codec, AIC32X4_MADC,
				      value | AIC32X4_MDACEN);
			snd_soc_update_bits(codec, AIC32X4_MADC,
					    AIC32X4_MADCEN, AIC32X4_MADCEN);

			/* Switch on BCLK_N Divider */
			value = snd_soc_read(codec, AIC32X4_BCLKN);
			snd_soc_write(codec, AIC32X4_BCLKN,
				      value | AIC32X4_BCLKEN);
			snd_soc_update_bits(codec, AIC32X4_BCLKN,
					    AIC32X4_BCLKEN, AIC32X4_BCLKEN);
		}
		break;
	case SND_SOC_BIAS_PREPARE:
@@ -569,34 +562,28 @@ static int aic32x4_set_bias_level(struct snd_soc_codec *codec,
	case SND_SOC_BIAS_STANDBY:
		if (aic32x4->master) {
			/* Switch off PLL */
			value = snd_soc_read(codec, AIC32X4_PLLPR);
			snd_soc_write(codec, AIC32X4_PLLPR,
				      (value & ~AIC32X4_PLLEN));
			snd_soc_update_bits(codec, AIC32X4_PLLPR,
					    AIC32X4_PLLEN, 0);

			/* Switch off NDAC Divider */
			value = snd_soc_read(codec, AIC32X4_NDAC);
			snd_soc_write(codec, AIC32X4_NDAC,
				      value & ~AIC32X4_NDACEN);
			snd_soc_update_bits(codec, AIC32X4_NDAC,
					    AIC32X4_NDACEN, 0);

			/* Switch off MDAC Divider */
			value = snd_soc_read(codec, AIC32X4_MDAC);
			snd_soc_write(codec, AIC32X4_MDAC,
				      value & ~AIC32X4_MDACEN);
			snd_soc_update_bits(codec, AIC32X4_MDAC,
					    AIC32X4_MDACEN, 0);

			/* Switch off NADC Divider */
			value = snd_soc_read(codec, AIC32X4_NADC);
			snd_soc_write(codec, AIC32X4_NADC,
				      value & ~AIC32X4_NDACEN);
			snd_soc_update_bits(codec, AIC32X4_NADC,
					    AIC32X4_NADCEN, 0);

			/* Switch off MADC Divider */
			value = snd_soc_read(codec, AIC32X4_MADC);
			snd_soc_write(codec, AIC32X4_MADC,
				      value & ~AIC32X4_MDACEN);
			value = snd_soc_read(codec, AIC32X4_BCLKN);
			snd_soc_update_bits(codec, AIC32X4_MADC,
					    AIC32X4_MADCEN, 0);

			/* Switch off BCLK_N Divider */
			snd_soc_write(codec, AIC32X4_BCLKN,
				      value & ~AIC32X4_BCLKEN);
			snd_soc_update_bits(codec, AIC32X4_BCLKN,
					    AIC32X4_BCLKEN, 0);
		}
		break;
	case SND_SOC_BIAS_OFF: