Loading include/linux/mfd/wm8994/registers.h +9 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ #define WM8994_LDO_1 0x3B #define WM8994_LDO_2 0x3C #define WM8994_CHARGE_PUMP_1 0x4C #define WM8958_CHARGE_PUMP_2 0x4D #define WM8994_CLASS_W_1 0x51 #define WM8994_DC_SERVO_1 0x54 #define WM8994_DC_SERVO_2 0x55 Loading Loading @@ -1925,6 +1926,14 @@ #define WM8994_CP_ENA_SHIFT 15 /* CP_ENA */ #define WM8994_CP_ENA_WIDTH 1 /* CP_ENA */ /* * R77 (0x4D) - Charge Pump (2) */ #define WM8958_CP_DISCH 0x8000 /* CP_DISCH */ #define WM8958_CP_DISCH_MASK 0x8000 /* CP_DISCH */ #define WM8958_CP_DISCH_SHIFT 15 /* CP_DISCH */ #define WM8958_CP_DISCH_WIDTH 1 /* CP_DISCH */ /* * R81 (0x51) - Class W (1) */ Loading sound/soc/codecs/wm8994.c +27 −9 Original line number Diff line number Diff line Loading @@ -1858,16 +1858,34 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec, if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { pm_runtime_get_sync(codec->dev); /* Tweak DC servo and DSP configuration for * improved performance. */ if (control->type == WM8994 && wm8994->revision < 4) { /* Tweak DC servo and DSP configuration for * improved performance. */ switch (control->type) { case WM8994: if (wm8994->revision < 4) { /* Tweak DC servo and DSP * configuration for improved * performance. */ snd_soc_write(codec, 0x102, 0x3); snd_soc_write(codec, 0x56, 0x3); snd_soc_write(codec, 0x817, 0); snd_soc_write(codec, 0x102, 0); } break; case WM8958: if (wm8994->revision == 0) { /* Optimise performance for rev A */ snd_soc_write(codec, 0x102, 0x3); snd_soc_write(codec, 0xcb, 0x81); snd_soc_write(codec, 0x817, 0); snd_soc_write(codec, 0x102, 0); snd_soc_update_bits(codec, WM8958_CHARGE_PUMP_2, WM8958_CP_DISCH, WM8958_CP_DISCH); } break; } /* Discharge LINEOUT1 & 2 */ snd_soc_update_bits(codec, WM8994_ANTIPOP_1, Loading Loading
include/linux/mfd/wm8994/registers.h +9 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ #define WM8994_LDO_1 0x3B #define WM8994_LDO_2 0x3C #define WM8994_CHARGE_PUMP_1 0x4C #define WM8958_CHARGE_PUMP_2 0x4D #define WM8994_CLASS_W_1 0x51 #define WM8994_DC_SERVO_1 0x54 #define WM8994_DC_SERVO_2 0x55 Loading Loading @@ -1925,6 +1926,14 @@ #define WM8994_CP_ENA_SHIFT 15 /* CP_ENA */ #define WM8994_CP_ENA_WIDTH 1 /* CP_ENA */ /* * R77 (0x4D) - Charge Pump (2) */ #define WM8958_CP_DISCH 0x8000 /* CP_DISCH */ #define WM8958_CP_DISCH_MASK 0x8000 /* CP_DISCH */ #define WM8958_CP_DISCH_SHIFT 15 /* CP_DISCH */ #define WM8958_CP_DISCH_WIDTH 1 /* CP_DISCH */ /* * R81 (0x51) - Class W (1) */ Loading
sound/soc/codecs/wm8994.c +27 −9 Original line number Diff line number Diff line Loading @@ -1858,16 +1858,34 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec, if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { pm_runtime_get_sync(codec->dev); /* Tweak DC servo and DSP configuration for * improved performance. */ if (control->type == WM8994 && wm8994->revision < 4) { /* Tweak DC servo and DSP configuration for * improved performance. */ switch (control->type) { case WM8994: if (wm8994->revision < 4) { /* Tweak DC servo and DSP * configuration for improved * performance. */ snd_soc_write(codec, 0x102, 0x3); snd_soc_write(codec, 0x56, 0x3); snd_soc_write(codec, 0x817, 0); snd_soc_write(codec, 0x102, 0); } break; case WM8958: if (wm8994->revision == 0) { /* Optimise performance for rev A */ snd_soc_write(codec, 0x102, 0x3); snd_soc_write(codec, 0xcb, 0x81); snd_soc_write(codec, 0x817, 0); snd_soc_write(codec, 0x102, 0); snd_soc_update_bits(codec, WM8958_CHARGE_PUMP_2, WM8958_CP_DISCH, WM8958_CP_DISCH); } break; } /* Discharge LINEOUT1 & 2 */ snd_soc_update_bits(codec, WM8994_ANTIPOP_1, Loading