diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-12-28 18:42:53 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-12-28 18:42:53 -0500 |
commit | 22a756ee8951e597c76e5a60f81d40a43054489e (patch) | |
tree | 10415d740b2876dc13ac7b0f857a7717987b9ddf /sound/soc/codecs/wm8955.c | |
parent | 839d271c509b6ce5c1da8a8e89fad73a1af0ddda (diff) | |
parent | 776065e36de1d5eb9e33ff908352fef4050ab38d (diff) |
Merge branch 'for-2.6.37' into for-2.6.38
Diffstat (limited to 'sound/soc/codecs/wm8955.c')
-rw-r--r-- | sound/soc/codecs/wm8955.c | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c index ca0265f008d2..7167dfc96aa7 100644 --- a/sound/soc/codecs/wm8955.c +++ b/sound/soc/codecs/wm8955.c | |||
@@ -41,8 +41,6 @@ static const char *wm8955_supply_names[WM8955_NUM_SUPPLIES] = { | |||
41 | struct wm8955_priv { | 41 | struct wm8955_priv { |
42 | enum snd_soc_control_type control_type; | 42 | enum snd_soc_control_type control_type; |
43 | 43 | ||
44 | u16 reg_cache[WM8955_MAX_REGISTER + 1]; | ||
45 | |||
46 | unsigned int mclk_rate; | 44 | unsigned int mclk_rate; |
47 | 45 | ||
48 | int deemph; | 46 | int deemph; |
@@ -768,6 +766,7 @@ static int wm8955_set_bias_level(struct snd_soc_codec *codec, | |||
768 | enum snd_soc_bias_level level) | 766 | enum snd_soc_bias_level level) |
769 | { | 767 | { |
770 | struct wm8955_priv *wm8955 = snd_soc_codec_get_drvdata(codec); | 768 | struct wm8955_priv *wm8955 = snd_soc_codec_get_drvdata(codec); |
769 | u16 *reg_cache = codec->reg_cache; | ||
771 | int ret, i; | 770 | int ret, i; |
772 | 771 | ||
773 | switch (level) { | 772 | switch (level) { |
@@ -800,14 +799,14 @@ static int wm8955_set_bias_level(struct snd_soc_codec *codec, | |||
800 | /* Sync back cached values if they're | 799 | /* Sync back cached values if they're |
801 | * different from the hardware default. | 800 | * different from the hardware default. |
802 | */ | 801 | */ |
803 | for (i = 0; i < ARRAY_SIZE(wm8955->reg_cache); i++) { | 802 | for (i = 0; i < codec->driver->reg_cache_size; i++) { |
804 | if (i == WM8955_RESET) | 803 | if (i == WM8955_RESET) |
805 | continue; | 804 | continue; |
806 | 805 | ||
807 | if (wm8955->reg_cache[i] == wm8955_reg[i]) | 806 | if (reg_cache[i] == wm8955_reg[i]) |
808 | continue; | 807 | continue; |
809 | 808 | ||
810 | snd_soc_write(codec, i, wm8955->reg_cache[i]); | 809 | snd_soc_write(codec, i, reg_cache[i]); |
811 | } | 810 | } |
812 | 811 | ||
813 | /* Enable VREF and VMID */ | 812 | /* Enable VREF and VMID */ |
@@ -902,6 +901,7 @@ static int wm8955_probe(struct snd_soc_codec *codec) | |||
902 | { | 901 | { |
903 | struct wm8955_priv *wm8955 = snd_soc_codec_get_drvdata(codec); | 902 | struct wm8955_priv *wm8955 = snd_soc_codec_get_drvdata(codec); |
904 | struct wm8955_pdata *pdata = dev_get_platdata(codec->dev); | 903 | struct wm8955_pdata *pdata = dev_get_platdata(codec->dev); |
904 | u16 *reg_cache = codec->reg_cache; | ||
905 | int ret, i; | 905 | int ret, i; |
906 | 906 | ||
907 | ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8955->control_type); | 907 | ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8955->control_type); |
@@ -934,25 +934,25 @@ static int wm8955_probe(struct snd_soc_codec *codec) | |||
934 | } | 934 | } |
935 | 935 | ||
936 | /* Change some default settings - latch VU and enable ZC */ | 936 | /* Change some default settings - latch VU and enable ZC */ |
937 | wm8955->reg_cache[WM8955_LEFT_DAC_VOLUME] |= WM8955_LDVU; | 937 | reg_cache[WM8955_LEFT_DAC_VOLUME] |= WM8955_LDVU; |
938 | wm8955->reg_cache[WM8955_RIGHT_DAC_VOLUME] |= WM8955_RDVU; | 938 | reg_cache[WM8955_RIGHT_DAC_VOLUME] |= WM8955_RDVU; |
939 | wm8955->reg_cache[WM8955_LOUT1_VOLUME] |= WM8955_LO1VU | WM8955_LO1ZC; | 939 | reg_cache[WM8955_LOUT1_VOLUME] |= WM8955_LO1VU | WM8955_LO1ZC; |
940 | wm8955->reg_cache[WM8955_ROUT1_VOLUME] |= WM8955_RO1VU | WM8955_RO1ZC; | 940 | reg_cache[WM8955_ROUT1_VOLUME] |= WM8955_RO1VU | WM8955_RO1ZC; |
941 | wm8955->reg_cache[WM8955_LOUT2_VOLUME] |= WM8955_LO2VU | WM8955_LO2ZC; | 941 | reg_cache[WM8955_LOUT2_VOLUME] |= WM8955_LO2VU | WM8955_LO2ZC; |
942 | wm8955->reg_cache[WM8955_ROUT2_VOLUME] |= WM8955_RO2VU | WM8955_RO2ZC; | 942 | reg_cache[WM8955_ROUT2_VOLUME] |= WM8955_RO2VU | WM8955_RO2ZC; |
943 | wm8955->reg_cache[WM8955_MONOOUT_VOLUME] |= WM8955_MOZC; | 943 | reg_cache[WM8955_MONOOUT_VOLUME] |= WM8955_MOZC; |
944 | 944 | ||
945 | /* Also enable adaptive bass boost by default */ | 945 | /* Also enable adaptive bass boost by default */ |
946 | wm8955->reg_cache[WM8955_BASS_CONTROL] |= WM8955_BB; | 946 | reg_cache[WM8955_BASS_CONTROL] |= WM8955_BB; |
947 | 947 | ||
948 | /* Set platform data values */ | 948 | /* Set platform data values */ |
949 | if (pdata) { | 949 | if (pdata) { |
950 | if (pdata->out2_speaker) | 950 | if (pdata->out2_speaker) |
951 | wm8955->reg_cache[WM8955_ADDITIONAL_CONTROL_2] | 951 | reg_cache[WM8955_ADDITIONAL_CONTROL_2] |
952 | |= WM8955_ROUT2INV; | 952 | |= WM8955_ROUT2INV; |
953 | 953 | ||
954 | if (pdata->monoin_diff) | 954 | if (pdata->monoin_diff) |
955 | wm8955->reg_cache[WM8955_MONO_OUT_MIX_1] | 955 | reg_cache[WM8955_MONO_OUT_MIX_1] |
956 | |= WM8955_DMEN; | 956 | |= WM8955_DMEN; |
957 | } | 957 | } |
958 | 958 | ||
@@ -1003,6 +1003,7 @@ static __devinit int wm8955_i2c_probe(struct i2c_client *i2c, | |||
1003 | return -ENOMEM; | 1003 | return -ENOMEM; |
1004 | 1004 | ||
1005 | i2c_set_clientdata(i2c, wm8955); | 1005 | i2c_set_clientdata(i2c, wm8955); |
1006 | wm8955->control_type = SND_SOC_I2C; | ||
1006 | 1007 | ||
1007 | ret = snd_soc_register_codec(&i2c->dev, | 1008 | ret = snd_soc_register_codec(&i2c->dev, |
1008 | &soc_codec_dev_wm8955, &wm8955_dai, 1); | 1009 | &soc_codec_dev_wm8955, &wm8955_dai, 1); |