aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2012-06-08 22:30:34 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-06-11 21:00:12 -0400
commita89c3e956ae78cec8926b92f2d61b7a5b675e787 (patch)
tree4ea296713b0ee12536e785e42b8365f955857511
parentb7c95d9146c8201740e2ce9dca7fb1eb8b7b0053 (diff)
ASoC: wm8903: Move register default changes to I2C probe
Also convert to use update_bits() while we're at it. No great need to do this, it's just a bit neater to do as much as possible in the I2C probe. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Tested-by: Stephen Warren <swarren@wwwdotorg.org>
-rw-r--r--sound/soc/codecs/wm8903.c63
1 files changed, 31 insertions, 32 deletions
diff --git a/sound/soc/codecs/wm8903.c b/sound/soc/codecs/wm8903.c
index 7261a68aac6f..73f1c8d7bafb 100644
--- a/sound/soc/codecs/wm8903.c
+++ b/sound/soc/codecs/wm8903.c
@@ -1896,7 +1896,6 @@ static int wm8903_probe(struct snd_soc_codec *codec)
1896{ 1896{
1897 struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec); 1897 struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
1898 int ret; 1898 int ret;
1899 u16 val;
1900 1899
1901 wm8903->codec = codec; 1900 wm8903->codec = codec;
1902 codec->control_data = wm8903->regmap; 1901 codec->control_data = wm8903->regmap;
@@ -1910,37 +1909,6 @@ static int wm8903_probe(struct snd_soc_codec *codec)
1910 /* power on device */ 1909 /* power on device */
1911 wm8903_set_bias_level(codec, SND_SOC_BIAS_STANDBY); 1910 wm8903_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
1912 1911
1913 /* Latch volume update bits */
1914 val = snd_soc_read(codec, WM8903_ADC_DIGITAL_VOLUME_LEFT);
1915 val |= WM8903_ADCVU;
1916 snd_soc_write(codec, WM8903_ADC_DIGITAL_VOLUME_LEFT, val);
1917 snd_soc_write(codec, WM8903_ADC_DIGITAL_VOLUME_RIGHT, val);
1918
1919 val = snd_soc_read(codec, WM8903_DAC_DIGITAL_VOLUME_LEFT);
1920 val |= WM8903_DACVU;
1921 snd_soc_write(codec, WM8903_DAC_DIGITAL_VOLUME_LEFT, val);
1922 snd_soc_write(codec, WM8903_DAC_DIGITAL_VOLUME_RIGHT, val);
1923
1924 val = snd_soc_read(codec, WM8903_ANALOGUE_OUT1_LEFT);
1925 val |= WM8903_HPOUTVU;
1926 snd_soc_write(codec, WM8903_ANALOGUE_OUT1_LEFT, val);
1927 snd_soc_write(codec, WM8903_ANALOGUE_OUT1_RIGHT, val);
1928
1929 val = snd_soc_read(codec, WM8903_ANALOGUE_OUT2_LEFT);
1930 val |= WM8903_LINEOUTVU;
1931 snd_soc_write(codec, WM8903_ANALOGUE_OUT2_LEFT, val);
1932 snd_soc_write(codec, WM8903_ANALOGUE_OUT2_RIGHT, val);
1933
1934 val = snd_soc_read(codec, WM8903_ANALOGUE_OUT3_LEFT);
1935 val |= WM8903_SPKVU;
1936 snd_soc_write(codec, WM8903_ANALOGUE_OUT3_LEFT, val);
1937 snd_soc_write(codec, WM8903_ANALOGUE_OUT3_RIGHT, val);
1938
1939 /* Enable DAC soft mute by default */
1940 snd_soc_update_bits(codec, WM8903_DAC_DIGITAL_1,
1941 WM8903_DAC_MUTEMODE | WM8903_DAC_MUTE,
1942 WM8903_DAC_MUTEMODE | WM8903_DAC_MUTE);
1943
1944 return ret; 1912 return ret;
1945} 1913}
1946 1914
@@ -2197,6 +2165,37 @@ static __devinit int wm8903_i2c_probe(struct i2c_client *i2c,
2197 WM8903_IM_WSEQ_BUSY_EINT, 0); 2165 WM8903_IM_WSEQ_BUSY_EINT, 0);
2198 } 2166 }
2199 2167
2168 /* Latch volume update bits */
2169 regmap_update_bits(wm8903->regmap, WM8903_ADC_DIGITAL_VOLUME_LEFT,
2170 WM8903_ADCVU, WM8903_ADCVU);
2171 regmap_update_bits(wm8903->regmap, WM8903_ADC_DIGITAL_VOLUME_RIGHT,
2172 WM8903_ADCVU, WM8903_ADCVU);
2173
2174 regmap_update_bits(wm8903->regmap, WM8903_DAC_DIGITAL_VOLUME_LEFT,
2175 WM8903_DACVU, WM8903_DACVU);
2176 regmap_update_bits(wm8903->regmap, WM8903_DAC_DIGITAL_VOLUME_RIGHT,
2177 WM8903_DACVU, WM8903_DACVU);
2178
2179 regmap_update_bits(wm8903->regmap, WM8903_ANALOGUE_OUT1_LEFT,
2180 WM8903_HPOUTVU, WM8903_HPOUTVU);
2181 regmap_update_bits(wm8903->regmap, WM8903_ANALOGUE_OUT1_RIGHT,
2182 WM8903_HPOUTVU, WM8903_HPOUTVU);
2183
2184 regmap_update_bits(wm8903->regmap, WM8903_ANALOGUE_OUT2_LEFT,
2185 WM8903_LINEOUTVU, WM8903_LINEOUTVU);
2186 regmap_update_bits(wm8903->regmap, WM8903_ANALOGUE_OUT2_RIGHT,
2187 WM8903_LINEOUTVU, WM8903_LINEOUTVU);
2188
2189 regmap_update_bits(wm8903->regmap, WM8903_ANALOGUE_OUT3_LEFT,
2190 WM8903_SPKVU, WM8903_SPKVU);
2191 regmap_update_bits(wm8903->regmap, WM8903_ANALOGUE_OUT3_RIGHT,
2192 WM8903_SPKVU, WM8903_SPKVU);
2193
2194 /* Enable DAC soft mute by default */
2195 regmap_update_bits(wm8903->regmap, WM8903_DAC_DIGITAL_1,
2196 WM8903_DAC_MUTEMODE | WM8903_DAC_MUTE,
2197 WM8903_DAC_MUTEMODE | WM8903_DAC_MUTE);
2198
2200 ret = snd_soc_register_codec(&i2c->dev, 2199 ret = snd_soc_register_codec(&i2c->dev,
2201 &soc_codec_dev_wm8903, &wm8903_dai, 1); 2200 &soc_codec_dev_wm8903, &wm8903_dai, 1);
2202 if (ret != 0) 2201 if (ret != 0)