ASoC: Only tweak WM8994 chip configuration on devices up to rev D

Any subsequent revisions will have these configuration changes applied
by default.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>

+13 -7
+13 -7
sound/soc/codecs/wm8994.c
··· 95 96 struct wm8994_micdet micdet[2]; 97 98 struct wm8994_pdata *pdata; 99 }; 100 ··· 3071 static int wm8994_set_bias_level(struct snd_soc_codec *codec, 3072 enum snd_soc_bias_level level) 3073 { 3074 switch (level) { 3075 case SND_SOC_BIAS_ON: 3076 break; ··· 3087 if (codec->bias_level == SND_SOC_BIAS_OFF) { 3088 /* Tweak DC servo and DSP configuration for 3089 * improved performance. */ 3090 - snd_soc_write(codec, 0x102, 0x3); 3091 - snd_soc_write(codec, 0x56, 0x3); 3092 - snd_soc_write(codec, 0x817, 0); 3093 - snd_soc_write(codec, 0x102, 0); 3094 3095 /* Discharge LINEOUT1 & 2 */ 3096 snd_soc_update_bits(codec, WM8994_ANTIPOP_1, ··· 3927 struct wm8994_priv *wm8994; 3928 struct snd_soc_codec *codec; 3929 int i; 3930 - u16 rev; 3931 3932 if (wm8994_codec) { 3933 dev_err(&pdev->dev, "Another WM8994 is registered\n"); ··· 3980 wm8994->reg_cache[i] = 0; 3981 3982 /* Set revision-specific configuration */ 3983 - rev = snd_soc_read(codec, WM8994_CHIP_REVISION); 3984 - switch (rev) { 3985 case 2: 3986 case 3: 3987 wm8994->hubs.dcs_codes = -5;
··· 95 96 struct wm8994_micdet micdet[2]; 97 98 + int revision; 99 struct wm8994_pdata *pdata; 100 }; 101 ··· 3070 static int wm8994_set_bias_level(struct snd_soc_codec *codec, 3071 enum snd_soc_bias_level level) 3072 { 3073 + struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); 3074 + 3075 switch (level) { 3076 case SND_SOC_BIAS_ON: 3077 break; ··· 3084 if (codec->bias_level == SND_SOC_BIAS_OFF) { 3085 /* Tweak DC servo and DSP configuration for 3086 * improved performance. */ 3087 + if (wm8994->revision < 4) { 3088 + /* Tweak DC servo and DSP configuration for 3089 + * improved performance. */ 3090 + snd_soc_write(codec, 0x102, 0x3); 3091 + snd_soc_write(codec, 0x56, 0x3); 3092 + snd_soc_write(codec, 0x817, 0); 3093 + snd_soc_write(codec, 0x102, 0); 3094 + } 3095 3096 /* Discharge LINEOUT1 & 2 */ 3097 snd_soc_update_bits(codec, WM8994_ANTIPOP_1, ··· 3920 struct wm8994_priv *wm8994; 3921 struct snd_soc_codec *codec; 3922 int i; 3923 3924 if (wm8994_codec) { 3925 dev_err(&pdev->dev, "Another WM8994 is registered\n"); ··· 3974 wm8994->reg_cache[i] = 0; 3975 3976 /* Set revision-specific configuration */ 3977 + wm8994->revision = snd_soc_read(codec, WM8994_CHIP_REVISION); 3978 + switch (wm8994->revision) { 3979 case 2: 3980 case 3: 3981 wm8994->hubs.dcs_codes = -5;