diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-06-08 22:30:34 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-06-11 21:00:12 -0400 |
commit | a89c3e956ae78cec8926b92f2d61b7a5b675e787 (patch) | |
tree | 4ea296713b0ee12536e785e42b8365f955857511 | |
parent | b7c95d9146c8201740e2ce9dca7fb1eb8b7b0053 (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.c | 63 |
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) |