diff options
Diffstat (limited to 'sound/soc/codecs')
70 files changed, 4125 insertions, 1981 deletions
diff --git a/sound/soc/codecs/88pm860x-codec.c b/sound/soc/codecs/88pm860x-codec.c index 01d19e9f53f9..7e4d88007d4f 100644 --- a/sound/soc/codecs/88pm860x-codec.c +++ b/sound/soc/codecs/88pm860x-codec.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <sound/pcm.h> | 19 | #include <sound/pcm.h> |
20 | #include <sound/pcm_params.h> | 20 | #include <sound/pcm_params.h> |
21 | #include <sound/soc.h> | 21 | #include <sound/soc.h> |
22 | #include <sound/soc-dapm.h> | ||
23 | #include <sound/tlv.h> | 22 | #include <sound/tlv.h> |
24 | #include <sound/initval.h> | 23 | #include <sound/initval.h> |
25 | #include <sound/jack.h> | 24 | #include <sound/jack.h> |
@@ -1172,7 +1171,7 @@ static int pm860x_set_bias_level(struct snd_soc_codec *codec, | |||
1172 | break; | 1171 | break; |
1173 | 1172 | ||
1174 | case SND_SOC_BIAS_STANDBY: | 1173 | case SND_SOC_BIAS_STANDBY: |
1175 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 1174 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
1176 | /* Enable Audio PLL & Audio section */ | 1175 | /* Enable Audio PLL & Audio section */ |
1177 | data = AUDIO_PLL | AUDIO_SECTION_RESET | 1176 | data = AUDIO_PLL | AUDIO_SECTION_RESET |
1178 | | AUDIO_SECTION_ON; | 1177 | | AUDIO_SECTION_ON; |
@@ -1185,7 +1184,7 @@ static int pm860x_set_bias_level(struct snd_soc_codec *codec, | |||
1185 | pm860x_set_bits(codec->control_data, REG_MISC2, data, 0); | 1184 | pm860x_set_bits(codec->control_data, REG_MISC2, data, 0); |
1186 | break; | 1185 | break; |
1187 | } | 1186 | } |
1188 | codec->bias_level = level; | 1187 | codec->dapm.bias_level = level; |
1189 | return 0; | 1188 | return 0; |
1190 | } | 1189 | } |
1191 | 1190 | ||
@@ -1346,6 +1345,7 @@ EXPORT_SYMBOL_GPL(pm860x_mic_jack_detect); | |||
1346 | static int pm860x_probe(struct snd_soc_codec *codec) | 1345 | static int pm860x_probe(struct snd_soc_codec *codec) |
1347 | { | 1346 | { |
1348 | struct pm860x_priv *pm860x = snd_soc_codec_get_drvdata(codec); | 1347 | struct pm860x_priv *pm860x = snd_soc_codec_get_drvdata(codec); |
1348 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
1349 | int i, ret; | 1349 | int i, ret; |
1350 | 1350 | ||
1351 | pm860x->codec = codec; | 1351 | pm860x->codec = codec; |
@@ -1374,9 +1374,9 @@ static int pm860x_probe(struct snd_soc_codec *codec) | |||
1374 | 1374 | ||
1375 | snd_soc_add_controls(codec, pm860x_snd_controls, | 1375 | snd_soc_add_controls(codec, pm860x_snd_controls, |
1376 | ARRAY_SIZE(pm860x_snd_controls)); | 1376 | ARRAY_SIZE(pm860x_snd_controls)); |
1377 | snd_soc_dapm_new_controls(codec, pm860x_dapm_widgets, | 1377 | snd_soc_dapm_new_controls(dapm, pm860x_dapm_widgets, |
1378 | ARRAY_SIZE(pm860x_dapm_widgets)); | 1378 | ARRAY_SIZE(pm860x_dapm_widgets)); |
1379 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 1379 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
1380 | return 0; | 1380 | return 0; |
1381 | 1381 | ||
1382 | out_codec: | 1382 | out_codec: |
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 3b5690d28b8b..6ebd3a685b2c 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig | |||
@@ -22,6 +22,7 @@ config SND_SOC_ALL_CODECS | |||
22 | select SND_SOC_AK4535 if I2C | 22 | select SND_SOC_AK4535 if I2C |
23 | select SND_SOC_AK4642 if I2C | 23 | select SND_SOC_AK4642 if I2C |
24 | select SND_SOC_AK4671 if I2C | 24 | select SND_SOC_AK4671 if I2C |
25 | select SND_SOC_ALC5623 if I2C | ||
25 | select SND_SOC_CQ0093VC if MFD_DAVINCI_VOICECODEC | 26 | select SND_SOC_CQ0093VC if MFD_DAVINCI_VOICECODEC |
26 | select SND_SOC_CS42L51 if I2C | 27 | select SND_SOC_CS42L51 if I2C |
27 | select SND_SOC_CS4270 if I2C | 28 | select SND_SOC_CS4270 if I2C |
@@ -57,6 +58,7 @@ config SND_SOC_ALL_CODECS | |||
57 | select SND_SOC_WM8741 if SND_SOC_I2C_AND_SPI | 58 | select SND_SOC_WM8741 if SND_SOC_I2C_AND_SPI |
58 | select SND_SOC_WM8750 if SND_SOC_I2C_AND_SPI | 59 | select SND_SOC_WM8750 if SND_SOC_I2C_AND_SPI |
59 | select SND_SOC_WM8753 if SND_SOC_I2C_AND_SPI | 60 | select SND_SOC_WM8753 if SND_SOC_I2C_AND_SPI |
61 | select SND_SOC_WM8770 if SPI_MASTER | ||
60 | select SND_SOC_WM8776 if SND_SOC_I2C_AND_SPI | 62 | select SND_SOC_WM8776 if SND_SOC_I2C_AND_SPI |
61 | select SND_SOC_WM8804 if SND_SOC_I2C_AND_SPI | 63 | select SND_SOC_WM8804 if SND_SOC_I2C_AND_SPI |
62 | select SND_SOC_WM8900 if I2C | 64 | select SND_SOC_WM8900 if I2C |
@@ -130,6 +132,9 @@ config SND_SOC_AK4642 | |||
130 | config SND_SOC_AK4671 | 132 | config SND_SOC_AK4671 |
131 | tristate | 133 | tristate |
132 | 134 | ||
135 | config SND_SOC_ALC5623 | ||
136 | tristate | ||
137 | |||
133 | config SND_SOC_CQ0093VC | 138 | config SND_SOC_CQ0093VC |
134 | tristate | 139 | tristate |
135 | 140 | ||
@@ -240,6 +245,9 @@ config SND_SOC_WM8750 | |||
240 | config SND_SOC_WM8753 | 245 | config SND_SOC_WM8753 |
241 | tristate | 246 | tristate |
242 | 247 | ||
248 | config SND_SOC_WM8770 | ||
249 | tristate | ||
250 | |||
243 | config SND_SOC_WM8776 | 251 | config SND_SOC_WM8776 |
244 | tristate | 252 | tristate |
245 | 253 | ||
@@ -318,3 +326,4 @@ config SND_SOC_WM2000 | |||
318 | 326 | ||
319 | config SND_SOC_WM9090 | 327 | config SND_SOC_WM9090 |
320 | tristate | 328 | tristate |
329 | |||
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile index f67a2d6f7a46..3469fab2863a 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile | |||
@@ -17,6 +17,7 @@ snd-soc-da7210-objs := da7210.o | |||
17 | snd-soc-l3-objs := l3.o | 17 | snd-soc-l3-objs := l3.o |
18 | snd-soc-max98088-objs := max98088.o | 18 | snd-soc-max98088-objs := max98088.o |
19 | snd-soc-pcm3008-objs := pcm3008.o | 19 | snd-soc-pcm3008-objs := pcm3008.o |
20 | snd-soc-alc5623-objs := alc5623.o | ||
20 | snd-soc-spdif-objs := spdif_transciever.o | 21 | snd-soc-spdif-objs := spdif_transciever.o |
21 | snd-soc-ssm2602-objs := ssm2602.o | 22 | snd-soc-ssm2602-objs := ssm2602.o |
22 | snd-soc-stac9766-objs := stac9766.o | 23 | snd-soc-stac9766-objs := stac9766.o |
@@ -41,6 +42,7 @@ snd-soc-wm8731-objs := wm8731.o | |||
41 | snd-soc-wm8741-objs := wm8741.o | 42 | snd-soc-wm8741-objs := wm8741.o |
42 | snd-soc-wm8750-objs := wm8750.o | 43 | snd-soc-wm8750-objs := wm8750.o |
43 | snd-soc-wm8753-objs := wm8753.o | 44 | snd-soc-wm8753-objs := wm8753.o |
45 | snd-soc-wm8770-objs := wm8770.o | ||
44 | snd-soc-wm8776-objs := wm8776.o | 46 | snd-soc-wm8776-objs := wm8776.o |
45 | snd-soc-wm8804-objs := wm8804.o | 47 | snd-soc-wm8804-objs := wm8804.o |
46 | snd-soc-wm8900-objs := wm8900.o | 48 | snd-soc-wm8900-objs := wm8900.o |
@@ -58,7 +60,7 @@ snd-soc-wm8985-objs := wm8985.o | |||
58 | snd-soc-wm8988-objs := wm8988.o | 60 | snd-soc-wm8988-objs := wm8988.o |
59 | snd-soc-wm8990-objs := wm8990.o | 61 | snd-soc-wm8990-objs := wm8990.o |
60 | snd-soc-wm8993-objs := wm8993.o | 62 | snd-soc-wm8993-objs := wm8993.o |
61 | snd-soc-wm8994-objs := wm8994.o | 63 | snd-soc-wm8994-objs := wm8994.o wm8994-tables.o |
62 | snd-soc-wm9081-objs := wm9081.o | 64 | snd-soc-wm9081-objs := wm9081.o |
63 | snd-soc-wm9705-objs := wm9705.o | 65 | snd-soc-wm9705-objs := wm9705.o |
64 | snd-soc-wm9712-objs := wm9712.o | 66 | snd-soc-wm9712-objs := wm9712.o |
@@ -92,6 +94,7 @@ obj-$(CONFIG_SND_SOC_L3) += snd-soc-l3.o | |||
92 | obj-$(CONFIG_SND_SOC_JZ4740_CODEC) += snd-soc-jz4740-codec.o | 94 | obj-$(CONFIG_SND_SOC_JZ4740_CODEC) += snd-soc-jz4740-codec.o |
93 | obj-$(CONFIG_SND_SOC_MAX98088) += snd-soc-max98088.o | 95 | obj-$(CONFIG_SND_SOC_MAX98088) += snd-soc-max98088.o |
94 | obj-$(CONFIG_SND_SOC_PCM3008) += snd-soc-pcm3008.o | 96 | obj-$(CONFIG_SND_SOC_PCM3008) += snd-soc-pcm3008.o |
97 | obj-$(CONFIG_SND_SOC_ALC5623) += snd-soc-alc5623.o | ||
95 | obj-$(CONFIG_SND_SOC_SPDIF) += snd-soc-spdif.o | 98 | obj-$(CONFIG_SND_SOC_SPDIF) += snd-soc-spdif.o |
96 | obj-$(CONFIG_SND_SOC_SSM2602) += snd-soc-ssm2602.o | 99 | obj-$(CONFIG_SND_SOC_SSM2602) += snd-soc-ssm2602.o |
97 | obj-$(CONFIG_SND_SOC_STAC9766) += snd-soc-stac9766.o | 100 | obj-$(CONFIG_SND_SOC_STAC9766) += snd-soc-stac9766.o |
@@ -116,6 +119,7 @@ obj-$(CONFIG_SND_SOC_WM8731) += snd-soc-wm8731.o | |||
116 | obj-$(CONFIG_SND_SOC_WM8741) += snd-soc-wm8741.o | 119 | obj-$(CONFIG_SND_SOC_WM8741) += snd-soc-wm8741.o |
117 | obj-$(CONFIG_SND_SOC_WM8750) += snd-soc-wm8750.o | 120 | obj-$(CONFIG_SND_SOC_WM8750) += snd-soc-wm8750.o |
118 | obj-$(CONFIG_SND_SOC_WM8753) += snd-soc-wm8753.o | 121 | obj-$(CONFIG_SND_SOC_WM8753) += snd-soc-wm8753.o |
122 | obj-$(CONFIG_SND_SOC_WM8770) += snd-soc-wm8770.o | ||
119 | obj-$(CONFIG_SND_SOC_WM8776) += snd-soc-wm8776.o | 123 | obj-$(CONFIG_SND_SOC_WM8776) += snd-soc-wm8776.o |
120 | obj-$(CONFIG_SND_SOC_WM8804) += snd-soc-wm8804.o | 124 | obj-$(CONFIG_SND_SOC_WM8804) += snd-soc-wm8804.o |
121 | obj-$(CONFIG_SND_SOC_WM8900) += snd-soc-wm8900.o | 125 | obj-$(CONFIG_SND_SOC_WM8900) += snd-soc-wm8900.o |
diff --git a/sound/soc/codecs/ad1836.c b/sound/soc/codecs/ad1836.c index d272534c8f84..ab63d52e36e1 100644 --- a/sound/soc/codecs/ad1836.c +++ b/sound/soc/codecs/ad1836.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <sound/initval.h> | 27 | #include <sound/initval.h> |
28 | #include <sound/soc.h> | 28 | #include <sound/soc.h> |
29 | #include <sound/tlv.h> | 29 | #include <sound/tlv.h> |
30 | #include <sound/soc-dapm.h> | ||
31 | #include <linux/spi/spi.h> | 30 | #include <linux/spi/spi.h> |
32 | #include "ad1836.h" | 31 | #include "ad1836.h" |
33 | 32 | ||
@@ -220,6 +219,7 @@ static struct snd_soc_dai_driver ad1836_dai = { | |||
220 | static int ad1836_probe(struct snd_soc_codec *codec) | 219 | static int ad1836_probe(struct snd_soc_codec *codec) |
221 | { | 220 | { |
222 | struct ad1836_priv *ad1836 = snd_soc_codec_get_drvdata(codec); | 221 | struct ad1836_priv *ad1836 = snd_soc_codec_get_drvdata(codec); |
222 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
223 | int ret = 0; | 223 | int ret = 0; |
224 | 224 | ||
225 | codec->control_data = ad1836->control_data; | 225 | codec->control_data = ad1836->control_data; |
@@ -227,7 +227,6 @@ static int ad1836_probe(struct snd_soc_codec *codec) | |||
227 | if (ret < 0) { | 227 | if (ret < 0) { |
228 | dev_err(codec->dev, "failed to set cache I/O: %d\n", | 228 | dev_err(codec->dev, "failed to set cache I/O: %d\n", |
229 | ret); | 229 | ret); |
230 | kfree(ad1836); | ||
231 | return ret; | 230 | return ret; |
232 | } | 231 | } |
233 | 232 | ||
@@ -252,9 +251,9 @@ static int ad1836_probe(struct snd_soc_codec *codec) | |||
252 | 251 | ||
253 | snd_soc_add_controls(codec, ad1836_snd_controls, | 252 | snd_soc_add_controls(codec, ad1836_snd_controls, |
254 | ARRAY_SIZE(ad1836_snd_controls)); | 253 | ARRAY_SIZE(ad1836_snd_controls)); |
255 | snd_soc_dapm_new_controls(codec, ad1836_dapm_widgets, | 254 | snd_soc_dapm_new_controls(dapm, ad1836_dapm_widgets, |
256 | ARRAY_SIZE(ad1836_dapm_widgets)); | 255 | ARRAY_SIZE(ad1836_dapm_widgets)); |
257 | snd_soc_dapm_add_routes(codec, audio_paths, ARRAY_SIZE(audio_paths)); | 256 | snd_soc_dapm_add_routes(dapm, audio_paths, ARRAY_SIZE(audio_paths)); |
258 | 257 | ||
259 | return ret; | 258 | return ret; |
260 | } | 259 | } |
diff --git a/sound/soc/codecs/ad193x.c b/sound/soc/codecs/ad193x.c index fa2834c91b9f..a007bd7326fd 100644 --- a/sound/soc/codecs/ad193x.c +++ b/sound/soc/codecs/ad193x.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <sound/initval.h> | 19 | #include <sound/initval.h> |
20 | #include <sound/soc.h> | 20 | #include <sound/soc.h> |
21 | #include <sound/tlv.h> | 21 | #include <sound/tlv.h> |
22 | #include <sound/soc-dapm.h> | ||
23 | #include "ad193x.h" | 22 | #include "ad193x.h" |
24 | 23 | ||
25 | /* codec private data */ | 24 | /* codec private data */ |
@@ -353,6 +352,7 @@ static struct snd_soc_dai_driver ad193x_dai = { | |||
353 | static int ad193x_probe(struct snd_soc_codec *codec) | 352 | static int ad193x_probe(struct snd_soc_codec *codec) |
354 | { | 353 | { |
355 | struct ad193x_priv *ad193x = snd_soc_codec_get_drvdata(codec); | 354 | struct ad193x_priv *ad193x = snd_soc_codec_get_drvdata(codec); |
355 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
356 | int ret; | 356 | int ret; |
357 | 357 | ||
358 | codec->control_data = ad193x->control_data; | 358 | codec->control_data = ad193x->control_data; |
@@ -363,7 +363,6 @@ static int ad193x_probe(struct snd_soc_codec *codec) | |||
363 | if (ret < 0) { | 363 | if (ret < 0) { |
364 | dev_err(codec->dev, "failed to set cache I/O: %d\n", | 364 | dev_err(codec->dev, "failed to set cache I/O: %d\n", |
365 | ret); | 365 | ret); |
366 | kfree(ad193x); | ||
367 | return ret; | 366 | return ret; |
368 | } | 367 | } |
369 | 368 | ||
@@ -385,9 +384,9 @@ static int ad193x_probe(struct snd_soc_codec *codec) | |||
385 | 384 | ||
386 | snd_soc_add_controls(codec, ad193x_snd_controls, | 385 | snd_soc_add_controls(codec, ad193x_snd_controls, |
387 | ARRAY_SIZE(ad193x_snd_controls)); | 386 | ARRAY_SIZE(ad193x_snd_controls)); |
388 | snd_soc_dapm_new_controls(codec, ad193x_dapm_widgets, | 387 | snd_soc_dapm_new_controls(dapm, ad193x_dapm_widgets, |
389 | ARRAY_SIZE(ad193x_dapm_widgets)); | 388 | ARRAY_SIZE(ad193x_dapm_widgets)); |
390 | snd_soc_dapm_add_routes(codec, audio_paths, ARRAY_SIZE(audio_paths)); | 389 | snd_soc_dapm_add_routes(dapm, audio_paths, ARRAY_SIZE(audio_paths)); |
391 | 390 | ||
392 | return ret; | 391 | return ret; |
393 | } | 392 | } |
diff --git a/sound/soc/codecs/ad1980.c b/sound/soc/codecs/ad1980.c index 410ccd5d41cd..34cb51ef2156 100644 --- a/sound/soc/codecs/ad1980.c +++ b/sound/soc/codecs/ad1980.c | |||
@@ -29,7 +29,6 @@ | |||
29 | #include <sound/ac97_codec.h> | 29 | #include <sound/ac97_codec.h> |
30 | #include <sound/initval.h> | 30 | #include <sound/initval.h> |
31 | #include <sound/soc.h> | 31 | #include <sound/soc.h> |
32 | #include <sound/soc-dapm.h> | ||
33 | 32 | ||
34 | #include "ad1980.h" | 33 | #include "ad1980.h" |
35 | 34 | ||
diff --git a/sound/soc/codecs/ak4535.c b/sound/soc/codecs/ak4535.c index cd88c8f32a38..73675458076d 100644 --- a/sound/soc/codecs/ak4535.c +++ b/sound/soc/codecs/ak4535.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <sound/pcm.h> | 24 | #include <sound/pcm.h> |
25 | #include <sound/pcm_params.h> | 25 | #include <sound/pcm_params.h> |
26 | #include <sound/soc.h> | 26 | #include <sound/soc.h> |
27 | #include <sound/soc-dapm.h> | ||
28 | #include <sound/initval.h> | 27 | #include <sound/initval.h> |
29 | 28 | ||
30 | #include "ak4535.h" | 29 | #include "ak4535.h" |
@@ -290,10 +289,11 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
290 | 289 | ||
291 | static int ak4535_add_widgets(struct snd_soc_codec *codec) | 290 | static int ak4535_add_widgets(struct snd_soc_codec *codec) |
292 | { | 291 | { |
293 | snd_soc_dapm_new_controls(codec, ak4535_dapm_widgets, | 292 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
294 | ARRAY_SIZE(ak4535_dapm_widgets)); | ||
295 | 293 | ||
296 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 294 | snd_soc_dapm_new_controls(dapm, ak4535_dapm_widgets, |
295 | ARRAY_SIZE(ak4535_dapm_widgets)); | ||
296 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); | ||
297 | 297 | ||
298 | return 0; | 298 | return 0; |
299 | } | 299 | } |
@@ -399,7 +399,7 @@ static int ak4535_set_bias_level(struct snd_soc_codec *codec, | |||
399 | ak4535_write(codec, AK4535_PM1, i & (~0x80)); | 399 | ak4535_write(codec, AK4535_PM1, i & (~0x80)); |
400 | break; | 400 | break; |
401 | } | 401 | } |
402 | codec->bias_level = level; | 402 | codec->dapm.bias_level = level; |
403 | return 0; | 403 | return 0; |
404 | } | 404 | } |
405 | 405 | ||
diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c index 90c90b7f4a2e..f00eba313dfd 100644 --- a/sound/soc/codecs/ak4642.c +++ b/sound/soc/codecs/ak4642.c | |||
@@ -26,7 +26,7 @@ | |||
26 | #include <linux/i2c.h> | 26 | #include <linux/i2c.h> |
27 | #include <linux/platform_device.h> | 27 | #include <linux/platform_device.h> |
28 | #include <linux/slab.h> | 28 | #include <linux/slab.h> |
29 | #include <sound/soc-dapm.h> | 29 | #include <sound/soc.h> |
30 | #include <sound/initval.h> | 30 | #include <sound/initval.h> |
31 | #include <sound/tlv.h> | 31 | #include <sound/tlv.h> |
32 | 32 | ||
diff --git a/sound/soc/codecs/ak4671.c b/sound/soc/codecs/ak4671.c index 24f5f49bb9d2..4faf10553a30 100644 --- a/sound/soc/codecs/ak4671.c +++ b/sound/soc/codecs/ak4671.c | |||
@@ -17,7 +17,6 @@ | |||
17 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
18 | #include <linux/slab.h> | 18 | #include <linux/slab.h> |
19 | #include <sound/soc.h> | 19 | #include <sound/soc.h> |
20 | #include <sound/soc-dapm.h> | ||
21 | #include <sound/initval.h> | 20 | #include <sound/initval.h> |
22 | #include <sound/tlv.h> | 21 | #include <sound/tlv.h> |
23 | 22 | ||
@@ -437,10 +436,11 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
437 | 436 | ||
438 | static int ak4671_add_widgets(struct snd_soc_codec *codec) | 437 | static int ak4671_add_widgets(struct snd_soc_codec *codec) |
439 | { | 438 | { |
440 | snd_soc_dapm_new_controls(codec, ak4671_dapm_widgets, | 439 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
441 | ARRAY_SIZE(ak4671_dapm_widgets)); | ||
442 | 440 | ||
443 | snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); | 441 | snd_soc_dapm_new_controls(dapm, ak4671_dapm_widgets, |
442 | ARRAY_SIZE(ak4671_dapm_widgets)); | ||
443 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); | ||
444 | 444 | ||
445 | return 0; | 445 | return 0; |
446 | } | 446 | } |
@@ -602,7 +602,7 @@ static int ak4671_set_bias_level(struct snd_soc_codec *codec, | |||
602 | snd_soc_write(codec, AK4671_AD_DA_POWER_MANAGEMENT, 0x00); | 602 | snd_soc_write(codec, AK4671_AD_DA_POWER_MANAGEMENT, 0x00); |
603 | break; | 603 | break; |
604 | } | 604 | } |
605 | codec->bias_level = level; | 605 | codec->dapm.bias_level = level; |
606 | return 0; | 606 | return 0; |
607 | } | 607 | } |
608 | 608 | ||
diff --git a/sound/soc/codecs/alc5623.c b/sound/soc/codecs/alc5623.c new file mode 100644 index 000000000000..9783e7e2eb93 --- /dev/null +++ b/sound/soc/codecs/alc5623.c | |||
@@ -0,0 +1,1113 @@ | |||
1 | /* | ||
2 | * alc5623.c -- alc562[123] ALSA Soc Audio driver | ||
3 | * | ||
4 | * Copyright 2008 Realtek Microelectronics | ||
5 | * Author: flove <flove@realtek.com> Ethan <eku@marvell.com> | ||
6 | * | ||
7 | * Copyright 2010 Arnaud Patard <arnaud.patard@rtp-net.org> | ||
8 | * | ||
9 | * | ||
10 | * Based on WM8753.c | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or modify | ||
13 | * it under the terms of the GNU General Public License version 2 as | ||
14 | * published by the Free Software Foundation. | ||
15 | * | ||
16 | */ | ||
17 | |||
18 | #include <linux/module.h> | ||
19 | #include <linux/kernel.h> | ||
20 | #include <linux/init.h> | ||
21 | #include <linux/delay.h> | ||
22 | #include <linux/pm.h> | ||
23 | #include <linux/i2c.h> | ||
24 | #include <linux/slab.h> | ||
25 | #include <linux/platform_device.h> | ||
26 | #include <sound/core.h> | ||
27 | #include <sound/pcm.h> | ||
28 | #include <sound/pcm_params.h> | ||
29 | #include <sound/tlv.h> | ||
30 | #include <sound/soc.h> | ||
31 | #include <sound/initval.h> | ||
32 | #include <sound/alc5623.h> | ||
33 | |||
34 | #include "alc5623.h" | ||
35 | |||
36 | static int caps_charge = 2000; | ||
37 | module_param(caps_charge, int, 0); | ||
38 | MODULE_PARM_DESC(caps_charge, "ALC5623 cap charge time (msecs)"); | ||
39 | |||
40 | /* codec private data */ | ||
41 | struct alc5623_priv { | ||
42 | enum snd_soc_control_type control_type; | ||
43 | void *control_data; | ||
44 | struct mutex mutex; | ||
45 | u8 id; | ||
46 | unsigned int sysclk; | ||
47 | u16 reg_cache[ALC5623_VENDOR_ID2+2]; | ||
48 | unsigned int add_ctrl; | ||
49 | unsigned int jack_det_ctrl; | ||
50 | }; | ||
51 | |||
52 | static void alc5623_fill_cache(struct snd_soc_codec *codec) | ||
53 | { | ||
54 | int i, step = codec->driver->reg_cache_step; | ||
55 | u16 *cache = codec->reg_cache; | ||
56 | |||
57 | /* not really efficient ... */ | ||
58 | for (i = 0 ; i < codec->driver->reg_cache_size ; i += step) | ||
59 | cache[i] = codec->hw_read(codec, i); | ||
60 | } | ||
61 | |||
62 | static inline int alc5623_reset(struct snd_soc_codec *codec) | ||
63 | { | ||
64 | return snd_soc_write(codec, ALC5623_RESET, 0); | ||
65 | } | ||
66 | |||
67 | static int amp_mixer_event(struct snd_soc_dapm_widget *w, | ||
68 | struct snd_kcontrol *kcontrol, int event) | ||
69 | { | ||
70 | /* to power-on/off class-d amp generators/speaker */ | ||
71 | /* need to write to 'index-46h' register : */ | ||
72 | /* so write index num (here 0x46) to reg 0x6a */ | ||
73 | /* and then 0xffff/0 to reg 0x6c */ | ||
74 | snd_soc_write(w->codec, ALC5623_HID_CTRL_INDEX, 0x46); | ||
75 | |||
76 | switch (event) { | ||
77 | case SND_SOC_DAPM_PRE_PMU: | ||
78 | snd_soc_write(w->codec, ALC5623_HID_CTRL_DATA, 0xFFFF); | ||
79 | break; | ||
80 | case SND_SOC_DAPM_POST_PMD: | ||
81 | snd_soc_write(w->codec, ALC5623_HID_CTRL_DATA, 0); | ||
82 | break; | ||
83 | } | ||
84 | |||
85 | return 0; | ||
86 | } | ||
87 | |||
88 | /* | ||
89 | * ALC5623 Controls | ||
90 | */ | ||
91 | |||
92 | static const DECLARE_TLV_DB_SCALE(vol_tlv, -3450, 150, 0); | ||
93 | static const DECLARE_TLV_DB_SCALE(hp_tlv, -4650, 150, 0); | ||
94 | static const DECLARE_TLV_DB_SCALE(adc_rec_tlv, -1650, 150, 0); | ||
95 | static const unsigned int boost_tlv[] = { | ||
96 | TLV_DB_RANGE_HEAD(3), | ||
97 | 0, 0, TLV_DB_SCALE_ITEM(0, 0, 0), | ||
98 | 1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0), | ||
99 | 2, 2, TLV_DB_SCALE_ITEM(3000, 0, 0), | ||
100 | }; | ||
101 | static const DECLARE_TLV_DB_SCALE(dig_tlv, 0, 600, 0); | ||
102 | |||
103 | static const struct snd_kcontrol_new rt5621_vol_snd_controls[] = { | ||
104 | SOC_DOUBLE_TLV("Speaker Playback Volume", | ||
105 | ALC5623_SPK_OUT_VOL, 8, 0, 31, 1, hp_tlv), | ||
106 | SOC_DOUBLE("Speaker Playback Switch", | ||
107 | ALC5623_SPK_OUT_VOL, 15, 7, 1, 1), | ||
108 | SOC_DOUBLE_TLV("Headphone Playback Volume", | ||
109 | ALC5623_HP_OUT_VOL, 8, 0, 31, 1, hp_tlv), | ||
110 | SOC_DOUBLE("Headphone Playback Switch", | ||
111 | ALC5623_HP_OUT_VOL, 15, 7, 1, 1), | ||
112 | }; | ||
113 | |||
114 | static const struct snd_kcontrol_new rt5622_vol_snd_controls[] = { | ||
115 | SOC_DOUBLE_TLV("Speaker Playback Volume", | ||
116 | ALC5623_SPK_OUT_VOL, 8, 0, 31, 1, hp_tlv), | ||
117 | SOC_DOUBLE("Speaker Playback Switch", | ||
118 | ALC5623_SPK_OUT_VOL, 15, 7, 1, 1), | ||
119 | SOC_DOUBLE_TLV("Line Playback Volume", | ||
120 | ALC5623_HP_OUT_VOL, 8, 0, 31, 1, hp_tlv), | ||
121 | SOC_DOUBLE("Line Playback Switch", | ||
122 | ALC5623_HP_OUT_VOL, 15, 7, 1, 1), | ||
123 | }; | ||
124 | |||
125 | static const struct snd_kcontrol_new alc5623_vol_snd_controls[] = { | ||
126 | SOC_DOUBLE_TLV("Line Playback Volume", | ||
127 | ALC5623_SPK_OUT_VOL, 8, 0, 31, 1, hp_tlv), | ||
128 | SOC_DOUBLE("Line Playback Switch", | ||
129 | ALC5623_SPK_OUT_VOL, 15, 7, 1, 1), | ||
130 | SOC_DOUBLE_TLV("Headphone Playback Volume", | ||
131 | ALC5623_HP_OUT_VOL, 8, 0, 31, 1, hp_tlv), | ||
132 | SOC_DOUBLE("Headphone Playback Switch", | ||
133 | ALC5623_HP_OUT_VOL, 15, 7, 1, 1), | ||
134 | }; | ||
135 | |||
136 | static const struct snd_kcontrol_new alc5623_snd_controls[] = { | ||
137 | SOC_DOUBLE_TLV("Auxout Playback Volume", | ||
138 | ALC5623_MONO_AUX_OUT_VOL, 8, 0, 31, 1, hp_tlv), | ||
139 | SOC_DOUBLE("Auxout Playback Switch", | ||
140 | ALC5623_MONO_AUX_OUT_VOL, 15, 7, 1, 1), | ||
141 | SOC_DOUBLE_TLV("PCM Playback Volume", | ||
142 | ALC5623_STEREO_DAC_VOL, 8, 0, 31, 1, vol_tlv), | ||
143 | SOC_DOUBLE_TLV("AuxI Capture Volume", | ||
144 | ALC5623_AUXIN_VOL, 8, 0, 31, 1, vol_tlv), | ||
145 | SOC_DOUBLE_TLV("LineIn Capture Volume", | ||
146 | ALC5623_LINE_IN_VOL, 8, 0, 31, 1, vol_tlv), | ||
147 | SOC_SINGLE_TLV("Mic1 Capture Volume", | ||
148 | ALC5623_MIC_VOL, 8, 31, 1, vol_tlv), | ||
149 | SOC_SINGLE_TLV("Mic2 Capture Volume", | ||
150 | ALC5623_MIC_VOL, 0, 31, 1, vol_tlv), | ||
151 | SOC_DOUBLE_TLV("Rec Capture Volume", | ||
152 | ALC5623_ADC_REC_GAIN, 7, 0, 31, 0, adc_rec_tlv), | ||
153 | SOC_SINGLE_TLV("Mic 1 Boost Volume", | ||
154 | ALC5623_MIC_CTRL, 10, 2, 0, boost_tlv), | ||
155 | SOC_SINGLE_TLV("Mic 2 Boost Volume", | ||
156 | ALC5623_MIC_CTRL, 8, 2, 0, boost_tlv), | ||
157 | SOC_SINGLE_TLV("Digital Boost Volume", | ||
158 | ALC5623_ADD_CTRL_REG, 4, 3, 0, dig_tlv), | ||
159 | }; | ||
160 | |||
161 | /* | ||
162 | * DAPM Controls | ||
163 | */ | ||
164 | static const struct snd_kcontrol_new alc5623_hp_mixer_controls[] = { | ||
165 | SOC_DAPM_SINGLE("LI2HP Playback Switch", ALC5623_LINE_IN_VOL, 15, 1, 1), | ||
166 | SOC_DAPM_SINGLE("AUXI2HP Playback Switch", ALC5623_AUXIN_VOL, 15, 1, 1), | ||
167 | SOC_DAPM_SINGLE("MIC12HP Playback Switch", ALC5623_MIC_ROUTING_CTRL, 15, 1, 1), | ||
168 | SOC_DAPM_SINGLE("MIC22HP Playback Switch", ALC5623_MIC_ROUTING_CTRL, 7, 1, 1), | ||
169 | SOC_DAPM_SINGLE("DAC2HP Playback Switch", ALC5623_STEREO_DAC_VOL, 15, 1, 1), | ||
170 | }; | ||
171 | |||
172 | static const struct snd_kcontrol_new alc5623_hpl_mixer_controls[] = { | ||
173 | SOC_DAPM_SINGLE("ADC2HP_L Playback Switch", ALC5623_ADC_REC_GAIN, 15, 1, 1), | ||
174 | }; | ||
175 | |||
176 | static const struct snd_kcontrol_new alc5623_hpr_mixer_controls[] = { | ||
177 | SOC_DAPM_SINGLE("ADC2HP_R Playback Switch", ALC5623_ADC_REC_GAIN, 14, 1, 1), | ||
178 | }; | ||
179 | |||
180 | static const struct snd_kcontrol_new alc5623_mono_mixer_controls[] = { | ||
181 | SOC_DAPM_SINGLE("ADC2MONO_L Playback Switch", ALC5623_ADC_REC_GAIN, 13, 1, 1), | ||
182 | SOC_DAPM_SINGLE("ADC2MONO_R Playback Switch", ALC5623_ADC_REC_GAIN, 12, 1, 1), | ||
183 | SOC_DAPM_SINGLE("LI2MONO Playback Switch", ALC5623_LINE_IN_VOL, 13, 1, 1), | ||
184 | SOC_DAPM_SINGLE("AUXI2MONO Playback Switch", ALC5623_AUXIN_VOL, 13, 1, 1), | ||
185 | SOC_DAPM_SINGLE("MIC12MONO Playback Switch", ALC5623_MIC_ROUTING_CTRL, 13, 1, 1), | ||
186 | SOC_DAPM_SINGLE("MIC22MONO Playback Switch", ALC5623_MIC_ROUTING_CTRL, 5, 1, 1), | ||
187 | SOC_DAPM_SINGLE("DAC2MONO Playback Switch", ALC5623_STEREO_DAC_VOL, 13, 1, 1), | ||
188 | }; | ||
189 | |||
190 | static const struct snd_kcontrol_new alc5623_speaker_mixer_controls[] = { | ||
191 | SOC_DAPM_SINGLE("LI2SPK Playback Switch", ALC5623_LINE_IN_VOL, 14, 1, 1), | ||
192 | SOC_DAPM_SINGLE("AUXI2SPK Playback Switch", ALC5623_AUXIN_VOL, 14, 1, 1), | ||
193 | SOC_DAPM_SINGLE("MIC12SPK Playback Switch", ALC5623_MIC_ROUTING_CTRL, 14, 1, 1), | ||
194 | SOC_DAPM_SINGLE("MIC22SPK Playback Switch", ALC5623_MIC_ROUTING_CTRL, 6, 1, 1), | ||
195 | SOC_DAPM_SINGLE("DAC2SPK Playback Switch", ALC5623_STEREO_DAC_VOL, 14, 1, 1), | ||
196 | }; | ||
197 | |||
198 | /* Left Record Mixer */ | ||
199 | static const struct snd_kcontrol_new alc5623_captureL_mixer_controls[] = { | ||
200 | SOC_DAPM_SINGLE("Mic1 Capture Switch", ALC5623_ADC_REC_MIXER, 14, 1, 1), | ||
201 | SOC_DAPM_SINGLE("Mic2 Capture Switch", ALC5623_ADC_REC_MIXER, 13, 1, 1), | ||
202 | SOC_DAPM_SINGLE("LineInL Capture Switch", ALC5623_ADC_REC_MIXER, 12, 1, 1), | ||
203 | SOC_DAPM_SINGLE("Left AuxI Capture Switch", ALC5623_ADC_REC_MIXER, 11, 1, 1), | ||
204 | SOC_DAPM_SINGLE("HPMixerL Capture Switch", ALC5623_ADC_REC_MIXER, 10, 1, 1), | ||
205 | SOC_DAPM_SINGLE("SPKMixer Capture Switch", ALC5623_ADC_REC_MIXER, 9, 1, 1), | ||
206 | SOC_DAPM_SINGLE("MonoMixer Capture Switch", ALC5623_ADC_REC_MIXER, 8, 1, 1), | ||
207 | }; | ||
208 | |||
209 | /* Right Record Mixer */ | ||
210 | static const struct snd_kcontrol_new alc5623_captureR_mixer_controls[] = { | ||
211 | SOC_DAPM_SINGLE("Mic1 Capture Switch", ALC5623_ADC_REC_MIXER, 6, 1, 1), | ||
212 | SOC_DAPM_SINGLE("Mic2 Capture Switch", ALC5623_ADC_REC_MIXER, 5, 1, 1), | ||
213 | SOC_DAPM_SINGLE("LineInR Capture Switch", ALC5623_ADC_REC_MIXER, 4, 1, 1), | ||
214 | SOC_DAPM_SINGLE("Right AuxI Capture Switch", ALC5623_ADC_REC_MIXER, 3, 1, 1), | ||
215 | SOC_DAPM_SINGLE("HPMixerR Capture Switch", ALC5623_ADC_REC_MIXER, 2, 1, 1), | ||
216 | SOC_DAPM_SINGLE("SPKMixer Capture Switch", ALC5623_ADC_REC_MIXER, 1, 1, 1), | ||
217 | SOC_DAPM_SINGLE("MonoMixer Capture Switch", ALC5623_ADC_REC_MIXER, 0, 1, 1), | ||
218 | }; | ||
219 | |||
220 | static const char *alc5623_spk_n_sour_sel[] = { | ||
221 | "RN/-R", "RP/+R", "LN/-R", "Vmid" }; | ||
222 | static const char *alc5623_hpl_out_input_sel[] = { | ||
223 | "Vmid", "HP Left Mix"}; | ||
224 | static const char *alc5623_hpr_out_input_sel[] = { | ||
225 | "Vmid", "HP Right Mix"}; | ||
226 | static const char *alc5623_spkout_input_sel[] = { | ||
227 | "Vmid", "HPOut Mix", "Speaker Mix", "Mono Mix"}; | ||
228 | static const char *alc5623_aux_out_input_sel[] = { | ||
229 | "Vmid", "HPOut Mix", "Speaker Mix", "Mono Mix"}; | ||
230 | |||
231 | /* auxout output mux */ | ||
232 | static const struct soc_enum alc5623_aux_out_input_enum = | ||
233 | SOC_ENUM_SINGLE(ALC5623_OUTPUT_MIXER_CTRL, 6, 4, alc5623_aux_out_input_sel); | ||
234 | static const struct snd_kcontrol_new alc5623_auxout_mux_controls = | ||
235 | SOC_DAPM_ENUM("Route", alc5623_aux_out_input_enum); | ||
236 | |||
237 | /* speaker output mux */ | ||
238 | static const struct soc_enum alc5623_spkout_input_enum = | ||
239 | SOC_ENUM_SINGLE(ALC5623_OUTPUT_MIXER_CTRL, 10, 4, alc5623_spkout_input_sel); | ||
240 | static const struct snd_kcontrol_new alc5623_spkout_mux_controls = | ||
241 | SOC_DAPM_ENUM("Route", alc5623_spkout_input_enum); | ||
242 | |||
243 | /* headphone left output mux */ | ||
244 | static const struct soc_enum alc5623_hpl_out_input_enum = | ||
245 | SOC_ENUM_SINGLE(ALC5623_OUTPUT_MIXER_CTRL, 9, 2, alc5623_hpl_out_input_sel); | ||
246 | static const struct snd_kcontrol_new alc5623_hpl_out_mux_controls = | ||
247 | SOC_DAPM_ENUM("Route", alc5623_hpl_out_input_enum); | ||
248 | |||
249 | /* headphone right output mux */ | ||
250 | static const struct soc_enum alc5623_hpr_out_input_enum = | ||
251 | SOC_ENUM_SINGLE(ALC5623_OUTPUT_MIXER_CTRL, 8, 2, alc5623_hpr_out_input_sel); | ||
252 | static const struct snd_kcontrol_new alc5623_hpr_out_mux_controls = | ||
253 | SOC_DAPM_ENUM("Route", alc5623_hpr_out_input_enum); | ||
254 | |||
255 | /* speaker output N select */ | ||
256 | static const struct soc_enum alc5623_spk_n_sour_enum = | ||
257 | SOC_ENUM_SINGLE(ALC5623_OUTPUT_MIXER_CTRL, 14, 4, alc5623_spk_n_sour_sel); | ||
258 | static const struct snd_kcontrol_new alc5623_spkoutn_mux_controls = | ||
259 | SOC_DAPM_ENUM("Route", alc5623_spk_n_sour_enum); | ||
260 | |||
261 | static const struct snd_soc_dapm_widget alc5623_dapm_widgets[] = { | ||
262 | /* Muxes */ | ||
263 | SND_SOC_DAPM_MUX("AuxOut Mux", SND_SOC_NOPM, 0, 0, | ||
264 | &alc5623_auxout_mux_controls), | ||
265 | SND_SOC_DAPM_MUX("SpeakerOut Mux", SND_SOC_NOPM, 0, 0, | ||
266 | &alc5623_spkout_mux_controls), | ||
267 | SND_SOC_DAPM_MUX("Left Headphone Mux", SND_SOC_NOPM, 0, 0, | ||
268 | &alc5623_hpl_out_mux_controls), | ||
269 | SND_SOC_DAPM_MUX("Right Headphone Mux", SND_SOC_NOPM, 0, 0, | ||
270 | &alc5623_hpr_out_mux_controls), | ||
271 | SND_SOC_DAPM_MUX("SpeakerOut N Mux", SND_SOC_NOPM, 0, 0, | ||
272 | &alc5623_spkoutn_mux_controls), | ||
273 | |||
274 | /* output mixers */ | ||
275 | SND_SOC_DAPM_MIXER("HP Mix", SND_SOC_NOPM, 0, 0, | ||
276 | &alc5623_hp_mixer_controls[0], | ||
277 | ARRAY_SIZE(alc5623_hp_mixer_controls)), | ||
278 | SND_SOC_DAPM_MIXER("HPR Mix", ALC5623_PWR_MANAG_ADD2, 4, 0, | ||
279 | &alc5623_hpr_mixer_controls[0], | ||
280 | ARRAY_SIZE(alc5623_hpr_mixer_controls)), | ||
281 | SND_SOC_DAPM_MIXER("HPL Mix", ALC5623_PWR_MANAG_ADD2, 5, 0, | ||
282 | &alc5623_hpl_mixer_controls[0], | ||
283 | ARRAY_SIZE(alc5623_hpl_mixer_controls)), | ||
284 | SND_SOC_DAPM_MIXER("HPOut Mix", SND_SOC_NOPM, 0, 0, NULL, 0), | ||
285 | SND_SOC_DAPM_MIXER("Mono Mix", ALC5623_PWR_MANAG_ADD2, 2, 0, | ||
286 | &alc5623_mono_mixer_controls[0], | ||
287 | ARRAY_SIZE(alc5623_mono_mixer_controls)), | ||
288 | SND_SOC_DAPM_MIXER("Speaker Mix", ALC5623_PWR_MANAG_ADD2, 3, 0, | ||
289 | &alc5623_speaker_mixer_controls[0], | ||
290 | ARRAY_SIZE(alc5623_speaker_mixer_controls)), | ||
291 | |||
292 | /* input mixers */ | ||
293 | SND_SOC_DAPM_MIXER("Left Capture Mix", ALC5623_PWR_MANAG_ADD2, 1, 0, | ||
294 | &alc5623_captureL_mixer_controls[0], | ||
295 | ARRAY_SIZE(alc5623_captureL_mixer_controls)), | ||
296 | SND_SOC_DAPM_MIXER("Right Capture Mix", ALC5623_PWR_MANAG_ADD2, 0, 0, | ||
297 | &alc5623_captureR_mixer_controls[0], | ||
298 | ARRAY_SIZE(alc5623_captureR_mixer_controls)), | ||
299 | |||
300 | SND_SOC_DAPM_DAC("Left DAC", "Left HiFi Playback", | ||
301 | ALC5623_PWR_MANAG_ADD2, 9, 0), | ||
302 | SND_SOC_DAPM_DAC("Right DAC", "Right HiFi Playback", | ||
303 | ALC5623_PWR_MANAG_ADD2, 8, 0), | ||
304 | SND_SOC_DAPM_MIXER("I2S Mix", ALC5623_PWR_MANAG_ADD1, 15, 0, NULL, 0), | ||
305 | SND_SOC_DAPM_MIXER("AuxI Mix", SND_SOC_NOPM, 0, 0, NULL, 0), | ||
306 | SND_SOC_DAPM_MIXER("Line Mix", SND_SOC_NOPM, 0, 0, NULL, 0), | ||
307 | SND_SOC_DAPM_ADC("Left ADC", "Left HiFi Capture", | ||
308 | ALC5623_PWR_MANAG_ADD2, 7, 0), | ||
309 | SND_SOC_DAPM_ADC("Right ADC", "Right HiFi Capture", | ||
310 | ALC5623_PWR_MANAG_ADD2, 6, 0), | ||
311 | SND_SOC_DAPM_PGA("Left Headphone", ALC5623_PWR_MANAG_ADD3, 10, 0, NULL, 0), | ||
312 | SND_SOC_DAPM_PGA("Right Headphone", ALC5623_PWR_MANAG_ADD3, 9, 0, NULL, 0), | ||
313 | SND_SOC_DAPM_PGA("SpeakerOut", ALC5623_PWR_MANAG_ADD3, 12, 0, NULL, 0), | ||
314 | SND_SOC_DAPM_PGA("Left AuxOut", ALC5623_PWR_MANAG_ADD3, 14, 0, NULL, 0), | ||
315 | SND_SOC_DAPM_PGA("Right AuxOut", ALC5623_PWR_MANAG_ADD3, 13, 0, NULL, 0), | ||
316 | SND_SOC_DAPM_PGA("Left LineIn", ALC5623_PWR_MANAG_ADD3, 7, 0, NULL, 0), | ||
317 | SND_SOC_DAPM_PGA("Right LineIn", ALC5623_PWR_MANAG_ADD3, 6, 0, NULL, 0), | ||
318 | SND_SOC_DAPM_PGA("Left AuxI", ALC5623_PWR_MANAG_ADD3, 5, 0, NULL, 0), | ||
319 | SND_SOC_DAPM_PGA("Right AuxI", ALC5623_PWR_MANAG_ADD3, 4, 0, NULL, 0), | ||
320 | SND_SOC_DAPM_PGA("MIC1 PGA", ALC5623_PWR_MANAG_ADD3, 3, 0, NULL, 0), | ||
321 | SND_SOC_DAPM_PGA("MIC2 PGA", ALC5623_PWR_MANAG_ADD3, 2, 0, NULL, 0), | ||
322 | SND_SOC_DAPM_PGA("MIC1 Pre Amp", ALC5623_PWR_MANAG_ADD3, 1, 0, NULL, 0), | ||
323 | SND_SOC_DAPM_PGA("MIC2 Pre Amp", ALC5623_PWR_MANAG_ADD3, 0, 0, NULL, 0), | ||
324 | SND_SOC_DAPM_MICBIAS("Mic Bias1", ALC5623_PWR_MANAG_ADD1, 11, 0), | ||
325 | |||
326 | SND_SOC_DAPM_OUTPUT("AUXOUTL"), | ||
327 | SND_SOC_DAPM_OUTPUT("AUXOUTR"), | ||
328 | SND_SOC_DAPM_OUTPUT("HPL"), | ||
329 | SND_SOC_DAPM_OUTPUT("HPR"), | ||
330 | SND_SOC_DAPM_OUTPUT("SPKOUT"), | ||
331 | SND_SOC_DAPM_OUTPUT("SPKOUTN"), | ||
332 | SND_SOC_DAPM_INPUT("LINEINL"), | ||
333 | SND_SOC_DAPM_INPUT("LINEINR"), | ||
334 | SND_SOC_DAPM_INPUT("AUXINL"), | ||
335 | SND_SOC_DAPM_INPUT("AUXINR"), | ||
336 | SND_SOC_DAPM_INPUT("MIC1"), | ||
337 | SND_SOC_DAPM_INPUT("MIC2"), | ||
338 | SND_SOC_DAPM_VMID("Vmid"), | ||
339 | }; | ||
340 | |||
341 | static const char *alc5623_amp_names[] = {"AB Amp", "D Amp"}; | ||
342 | static const struct soc_enum alc5623_amp_enum = | ||
343 | SOC_ENUM_SINGLE(ALC5623_OUTPUT_MIXER_CTRL, 13, 2, alc5623_amp_names); | ||
344 | static const struct snd_kcontrol_new alc5623_amp_mux_controls = | ||
345 | SOC_DAPM_ENUM("Route", alc5623_amp_enum); | ||
346 | |||
347 | static const struct snd_soc_dapm_widget alc5623_dapm_amp_widgets[] = { | ||
348 | SND_SOC_DAPM_PGA_E("D Amp", ALC5623_PWR_MANAG_ADD2, 14, 0, NULL, 0, | ||
349 | amp_mixer_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), | ||
350 | SND_SOC_DAPM_PGA("AB Amp", ALC5623_PWR_MANAG_ADD2, 15, 0, NULL, 0), | ||
351 | SND_SOC_DAPM_MUX("AB-D Amp Mux", SND_SOC_NOPM, 0, 0, | ||
352 | &alc5623_amp_mux_controls), | ||
353 | }; | ||
354 | |||
355 | static const struct snd_soc_dapm_route intercon[] = { | ||
356 | /* virtual mixer - mixes left & right channels */ | ||
357 | {"I2S Mix", NULL, "Left DAC"}, | ||
358 | {"I2S Mix", NULL, "Right DAC"}, | ||
359 | {"Line Mix", NULL, "Right LineIn"}, | ||
360 | {"Line Mix", NULL, "Left LineIn"}, | ||
361 | {"AuxI Mix", NULL, "Left AuxI"}, | ||
362 | {"AuxI Mix", NULL, "Right AuxI"}, | ||
363 | {"AUXOUTL", NULL, "Left AuxOut"}, | ||
364 | {"AUXOUTR", NULL, "Right AuxOut"}, | ||
365 | |||
366 | /* HP mixer */ | ||
367 | {"HPL Mix", "ADC2HP_L Playback Switch", "Left Capture Mix"}, | ||
368 | {"HPL Mix", NULL, "HP Mix"}, | ||
369 | {"HPR Mix", "ADC2HP_R Playback Switch", "Right Capture Mix"}, | ||
370 | {"HPR Mix", NULL, "HP Mix"}, | ||
371 | {"HP Mix", "LI2HP Playback Switch", "Line Mix"}, | ||
372 | {"HP Mix", "AUXI2HP Playback Switch", "AuxI Mix"}, | ||
373 | {"HP Mix", "MIC12HP Playback Switch", "MIC1 PGA"}, | ||
374 | {"HP Mix", "MIC22HP Playback Switch", "MIC2 PGA"}, | ||
375 | {"HP Mix", "DAC2HP Playback Switch", "I2S Mix"}, | ||
376 | |||
377 | /* speaker mixer */ | ||
378 | {"Speaker Mix", "LI2SPK Playback Switch", "Line Mix"}, | ||
379 | {"Speaker Mix", "AUXI2SPK Playback Switch", "AuxI Mix"}, | ||
380 | {"Speaker Mix", "MIC12SPK Playback Switch", "MIC1 PGA"}, | ||
381 | {"Speaker Mix", "MIC22SPK Playback Switch", "MIC2 PGA"}, | ||
382 | {"Speaker Mix", "DAC2SPK Playback Switch", "I2S Mix"}, | ||
383 | |||
384 | /* mono mixer */ | ||
385 | {"Mono Mix", "ADC2MONO_L Playback Switch", "Left Capture Mix"}, | ||
386 | {"Mono Mix", "ADC2MONO_R Playback Switch", "Right Capture Mix"}, | ||
387 | {"Mono Mix", "LI2MONO Playback Switch", "Line Mix"}, | ||
388 | {"Mono Mix", "AUXI2MONO Playback Switch", "AuxI Mix"}, | ||
389 | {"Mono Mix", "MIC12MONO Playback Switch", "MIC1 PGA"}, | ||
390 | {"Mono Mix", "MIC22MONO Playback Switch", "MIC2 PGA"}, | ||
391 | {"Mono Mix", "DAC2MONO Playback Switch", "I2S Mix"}, | ||
392 | |||
393 | /* Left record mixer */ | ||
394 | {"Left Capture Mix", "LineInL Capture Switch", "LINEINL"}, | ||
395 | {"Left Capture Mix", "Left AuxI Capture Switch", "AUXINL"}, | ||
396 | {"Left Capture Mix", "Mic1 Capture Switch", "MIC1 Pre Amp"}, | ||
397 | {"Left Capture Mix", "Mic2 Capture Switch", "MIC2 Pre Amp"}, | ||
398 | {"Left Capture Mix", "HPMixerL Capture Switch", "HPL Mix"}, | ||
399 | {"Left Capture Mix", "SPKMixer Capture Switch", "Speaker Mix"}, | ||
400 | {"Left Capture Mix", "MonoMixer Capture Switch", "Mono Mix"}, | ||
401 | |||
402 | /*Right record mixer */ | ||
403 | {"Right Capture Mix", "LineInR Capture Switch", "LINEINR"}, | ||
404 | {"Right Capture Mix", "Right AuxI Capture Switch", "AUXINR"}, | ||
405 | {"Right Capture Mix", "Mic1 Capture Switch", "MIC1 Pre Amp"}, | ||
406 | {"Right Capture Mix", "Mic2 Capture Switch", "MIC2 Pre Amp"}, | ||
407 | {"Right Capture Mix", "HPMixerR Capture Switch", "HPR Mix"}, | ||
408 | {"Right Capture Mix", "SPKMixer Capture Switch", "Speaker Mix"}, | ||
409 | {"Right Capture Mix", "MonoMixer Capture Switch", "Mono Mix"}, | ||
410 | |||
411 | /* headphone left mux */ | ||
412 | {"Left Headphone Mux", "HP Left Mix", "HPL Mix"}, | ||
413 | {"Left Headphone Mux", "Vmid", "Vmid"}, | ||
414 | |||
415 | /* headphone right mux */ | ||
416 | {"Right Headphone Mux", "HP Right Mix", "HPR Mix"}, | ||
417 | {"Right Headphone Mux", "Vmid", "Vmid"}, | ||
418 | |||
419 | /* speaker out mux */ | ||
420 | {"SpeakerOut Mux", "Vmid", "Vmid"}, | ||
421 | {"SpeakerOut Mux", "HPOut Mix", "HPOut Mix"}, | ||
422 | {"SpeakerOut Mux", "Speaker Mix", "Speaker Mix"}, | ||
423 | {"SpeakerOut Mux", "Mono Mix", "Mono Mix"}, | ||
424 | |||
425 | /* Mono/Aux Out mux */ | ||
426 | {"AuxOut Mux", "Vmid", "Vmid"}, | ||
427 | {"AuxOut Mux", "HPOut Mix", "HPOut Mix"}, | ||
428 | {"AuxOut Mux", "Speaker Mix", "Speaker Mix"}, | ||
429 | {"AuxOut Mux", "Mono Mix", "Mono Mix"}, | ||
430 | |||
431 | /* output pga */ | ||
432 | {"HPL", NULL, "Left Headphone"}, | ||
433 | {"Left Headphone", NULL, "Left Headphone Mux"}, | ||
434 | {"HPR", NULL, "Right Headphone"}, | ||
435 | {"Right Headphone", NULL, "Right Headphone Mux"}, | ||
436 | {"Left AuxOut", NULL, "AuxOut Mux"}, | ||
437 | {"Right AuxOut", NULL, "AuxOut Mux"}, | ||
438 | |||
439 | /* input pga */ | ||
440 | {"Left LineIn", NULL, "LINEINL"}, | ||
441 | {"Right LineIn", NULL, "LINEINR"}, | ||
442 | {"Left AuxI", NULL, "AUXINL"}, | ||
443 | {"Right AuxI", NULL, "AUXINR"}, | ||
444 | {"MIC1 Pre Amp", NULL, "MIC1"}, | ||
445 | {"MIC2 Pre Amp", NULL, "MIC2"}, | ||
446 | {"MIC1 PGA", NULL, "MIC1 Pre Amp"}, | ||
447 | {"MIC2 PGA", NULL, "MIC2 Pre Amp"}, | ||
448 | |||
449 | /* left ADC */ | ||
450 | {"Left ADC", NULL, "Left Capture Mix"}, | ||
451 | |||
452 | /* right ADC */ | ||
453 | {"Right ADC", NULL, "Right Capture Mix"}, | ||
454 | |||
455 | {"SpeakerOut N Mux", "RN/-R", "SpeakerOut"}, | ||
456 | {"SpeakerOut N Mux", "RP/+R", "SpeakerOut"}, | ||
457 | {"SpeakerOut N Mux", "LN/-R", "SpeakerOut"}, | ||
458 | {"SpeakerOut N Mux", "Vmid", "Vmid"}, | ||
459 | |||
460 | {"SPKOUT", NULL, "SpeakerOut"}, | ||
461 | {"SPKOUTN", NULL, "SpeakerOut N Mux"}, | ||
462 | }; | ||
463 | |||
464 | static const struct snd_soc_dapm_route intercon_spk[] = { | ||
465 | {"SpeakerOut", NULL, "SpeakerOut Mux"}, | ||
466 | }; | ||
467 | |||
468 | static const struct snd_soc_dapm_route intercon_amp_spk[] = { | ||
469 | {"AB Amp", NULL, "SpeakerOut Mux"}, | ||
470 | {"D Amp", NULL, "SpeakerOut Mux"}, | ||
471 | {"AB-D Amp Mux", "AB Amp", "AB Amp"}, | ||
472 | {"AB-D Amp Mux", "D Amp", "D Amp"}, | ||
473 | {"SpeakerOut", NULL, "AB-D Amp Mux"}, | ||
474 | }; | ||
475 | |||
476 | /* PLL divisors */ | ||
477 | struct _pll_div { | ||
478 | u32 pll_in; | ||
479 | u32 pll_out; | ||
480 | u16 regvalue; | ||
481 | }; | ||
482 | |||
483 | /* Note : pll code from original alc5623 driver. Not sure of how good it is */ | ||
484 | /* usefull only for master mode */ | ||
485 | static const struct _pll_div codec_master_pll_div[] = { | ||
486 | |||
487 | { 2048000, 8192000, 0x0ea0}, | ||
488 | { 3686400, 8192000, 0x4e27}, | ||
489 | { 12000000, 8192000, 0x456b}, | ||
490 | { 13000000, 8192000, 0x495f}, | ||
491 | { 13100000, 8192000, 0x0320}, | ||
492 | { 2048000, 11289600, 0xf637}, | ||
493 | { 3686400, 11289600, 0x2f22}, | ||
494 | { 12000000, 11289600, 0x3e2f}, | ||
495 | { 13000000, 11289600, 0x4d5b}, | ||
496 | { 13100000, 11289600, 0x363b}, | ||
497 | { 2048000, 16384000, 0x1ea0}, | ||
498 | { 3686400, 16384000, 0x9e27}, | ||
499 | { 12000000, 16384000, 0x452b}, | ||
500 | { 13000000, 16384000, 0x542f}, | ||
501 | { 13100000, 16384000, 0x03a0}, | ||
502 | { 2048000, 16934400, 0xe625}, | ||
503 | { 3686400, 16934400, 0x9126}, | ||
504 | { 12000000, 16934400, 0x4d2c}, | ||
505 | { 13000000, 16934400, 0x742f}, | ||
506 | { 13100000, 16934400, 0x3c27}, | ||
507 | { 2048000, 22579200, 0x2aa0}, | ||
508 | { 3686400, 22579200, 0x2f20}, | ||
509 | { 12000000, 22579200, 0x7e2f}, | ||
510 | { 13000000, 22579200, 0x742f}, | ||
511 | { 13100000, 22579200, 0x3c27}, | ||
512 | { 2048000, 24576000, 0x2ea0}, | ||
513 | { 3686400, 24576000, 0xee27}, | ||
514 | { 12000000, 24576000, 0x2915}, | ||
515 | { 13000000, 24576000, 0x772e}, | ||
516 | { 13100000, 24576000, 0x0d20}, | ||
517 | }; | ||
518 | |||
519 | static const struct _pll_div codec_slave_pll_div[] = { | ||
520 | |||
521 | { 1024000, 16384000, 0x3ea0}, | ||
522 | { 1411200, 22579200, 0x3ea0}, | ||
523 | { 1536000, 24576000, 0x3ea0}, | ||
524 | { 2048000, 16384000, 0x1ea0}, | ||
525 | { 2822400, 22579200, 0x1ea0}, | ||
526 | { 3072000, 24576000, 0x1ea0}, | ||
527 | |||
528 | }; | ||
529 | |||
530 | static int alc5623_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id, | ||
531 | int source, unsigned int freq_in, unsigned int freq_out) | ||
532 | { | ||
533 | int i; | ||
534 | struct snd_soc_codec *codec = codec_dai->codec; | ||
535 | int gbl_clk = 0, pll_div = 0; | ||
536 | u16 reg; | ||
537 | |||
538 | if (pll_id < ALC5623_PLL_FR_MCLK || pll_id > ALC5623_PLL_FR_BCK) | ||
539 | return -ENODEV; | ||
540 | |||
541 | /* Disable PLL power */ | ||
542 | snd_soc_update_bits(codec, ALC5623_PWR_MANAG_ADD2, | ||
543 | ALC5623_PWR_ADD2_PLL, | ||
544 | 0); | ||
545 | |||
546 | /* pll is not used in slave mode */ | ||
547 | reg = snd_soc_read(codec, ALC5623_DAI_CONTROL); | ||
548 | if (reg & ALC5623_DAI_SDP_SLAVE_MODE) | ||
549 | return 0; | ||
550 | |||
551 | if (!freq_in || !freq_out) | ||
552 | return 0; | ||
553 | |||
554 | switch (pll_id) { | ||
555 | case ALC5623_PLL_FR_MCLK: | ||
556 | for (i = 0; i < ARRAY_SIZE(codec_master_pll_div); i++) { | ||
557 | if (codec_master_pll_div[i].pll_in == freq_in | ||
558 | && codec_master_pll_div[i].pll_out == freq_out) { | ||
559 | /* PLL source from MCLK */ | ||
560 | pll_div = codec_master_pll_div[i].regvalue; | ||
561 | break; | ||
562 | } | ||
563 | } | ||
564 | break; | ||
565 | case ALC5623_PLL_FR_BCK: | ||
566 | for (i = 0; i < ARRAY_SIZE(codec_slave_pll_div); i++) { | ||
567 | if (codec_slave_pll_div[i].pll_in == freq_in | ||
568 | && codec_slave_pll_div[i].pll_out == freq_out) { | ||
569 | /* PLL source from Bitclk */ | ||
570 | gbl_clk = ALC5623_GBL_CLK_PLL_SOUR_SEL_BITCLK; | ||
571 | pll_div = codec_slave_pll_div[i].regvalue; | ||
572 | break; | ||
573 | } | ||
574 | } | ||
575 | break; | ||
576 | default: | ||
577 | return -EINVAL; | ||
578 | } | ||
579 | |||
580 | if (!pll_div) | ||
581 | return -EINVAL; | ||
582 | |||
583 | snd_soc_write(codec, ALC5623_GLOBAL_CLK_CTRL_REG, gbl_clk); | ||
584 | snd_soc_write(codec, ALC5623_PLL_CTRL, pll_div); | ||
585 | snd_soc_update_bits(codec, ALC5623_PWR_MANAG_ADD2, | ||
586 | ALC5623_PWR_ADD2_PLL, | ||
587 | ALC5623_PWR_ADD2_PLL); | ||
588 | gbl_clk |= ALC5623_GBL_CLK_SYS_SOUR_SEL_PLL; | ||
589 | snd_soc_write(codec, ALC5623_GLOBAL_CLK_CTRL_REG, gbl_clk); | ||
590 | |||
591 | return 0; | ||
592 | } | ||
593 | |||
594 | struct _coeff_div { | ||
595 | u16 fs; | ||
596 | u16 regvalue; | ||
597 | }; | ||
598 | |||
599 | /* codec hifi mclk (after PLL) clock divider coefficients */ | ||
600 | /* values inspired from column BCLK=32Fs of Appendix A table */ | ||
601 | static const struct _coeff_div coeff_div[] = { | ||
602 | {256*8, 0x3a69}, | ||
603 | {384*8, 0x3c6b}, | ||
604 | {256*4, 0x2a69}, | ||
605 | {384*4, 0x2c6b}, | ||
606 | {256*2, 0x1a69}, | ||
607 | {384*2, 0x1c6b}, | ||
608 | {256*1, 0x0a69}, | ||
609 | {384*1, 0x0c6b}, | ||
610 | }; | ||
611 | |||
612 | static int get_coeff(struct snd_soc_codec *codec, int rate) | ||
613 | { | ||
614 | struct alc5623_priv *alc5623 = snd_soc_codec_get_drvdata(codec); | ||
615 | int i; | ||
616 | |||
617 | for (i = 0; i < ARRAY_SIZE(coeff_div); i++) { | ||
618 | if (coeff_div[i].fs * rate == alc5623->sysclk) | ||
619 | return i; | ||
620 | } | ||
621 | return -EINVAL; | ||
622 | } | ||
623 | |||
624 | /* | ||
625 | * Clock after PLL and dividers | ||
626 | */ | ||
627 | static int alc5623_set_dai_sysclk(struct snd_soc_dai *codec_dai, | ||
628 | int clk_id, unsigned int freq, int dir) | ||
629 | { | ||
630 | struct snd_soc_codec *codec = codec_dai->codec; | ||
631 | struct alc5623_priv *alc5623 = snd_soc_codec_get_drvdata(codec); | ||
632 | |||
633 | switch (freq) { | ||
634 | case 8192000: | ||
635 | case 11289600: | ||
636 | case 12288000: | ||
637 | case 16384000: | ||
638 | case 16934400: | ||
639 | case 18432000: | ||
640 | case 22579200: | ||
641 | case 24576000: | ||
642 | alc5623->sysclk = freq; | ||
643 | return 0; | ||
644 | } | ||
645 | return -EINVAL; | ||
646 | } | ||
647 | |||
648 | static int alc5623_set_dai_fmt(struct snd_soc_dai *codec_dai, | ||
649 | unsigned int fmt) | ||
650 | { | ||
651 | struct snd_soc_codec *codec = codec_dai->codec; | ||
652 | u16 iface = 0; | ||
653 | |||
654 | /* set master/slave audio interface */ | ||
655 | switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { | ||
656 | case SND_SOC_DAIFMT_CBM_CFM: | ||
657 | iface = ALC5623_DAI_SDP_MASTER_MODE; | ||
658 | break; | ||
659 | case SND_SOC_DAIFMT_CBS_CFS: | ||
660 | iface = ALC5623_DAI_SDP_SLAVE_MODE; | ||
661 | break; | ||
662 | default: | ||
663 | return -EINVAL; | ||
664 | } | ||
665 | |||
666 | /* interface format */ | ||
667 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { | ||
668 | case SND_SOC_DAIFMT_I2S: | ||
669 | iface |= ALC5623_DAI_I2S_DF_I2S; | ||
670 | break; | ||
671 | case SND_SOC_DAIFMT_RIGHT_J: | ||
672 | iface |= ALC5623_DAI_I2S_DF_RIGHT; | ||
673 | break; | ||
674 | case SND_SOC_DAIFMT_LEFT_J: | ||
675 | iface |= ALC5623_DAI_I2S_DF_LEFT; | ||
676 | break; | ||
677 | case SND_SOC_DAIFMT_DSP_A: | ||
678 | iface |= ALC5623_DAI_I2S_DF_PCM; | ||
679 | break; | ||
680 | case SND_SOC_DAIFMT_DSP_B: | ||
681 | iface |= ALC5623_DAI_I2S_DF_PCM | ALC5623_DAI_I2S_PCM_MODE; | ||
682 | break; | ||
683 | default: | ||
684 | return -EINVAL; | ||
685 | } | ||
686 | |||
687 | /* clock inversion */ | ||
688 | switch (fmt & SND_SOC_DAIFMT_INV_MASK) { | ||
689 | case SND_SOC_DAIFMT_NB_NF: | ||
690 | break; | ||
691 | case SND_SOC_DAIFMT_IB_IF: | ||
692 | iface |= ALC5623_DAI_MAIN_I2S_BCLK_POL_CTRL; | ||
693 | break; | ||
694 | case SND_SOC_DAIFMT_IB_NF: | ||
695 | iface |= ALC5623_DAI_MAIN_I2S_BCLK_POL_CTRL; | ||
696 | break; | ||
697 | case SND_SOC_DAIFMT_NB_IF: | ||
698 | break; | ||
699 | default: | ||
700 | return -EINVAL; | ||
701 | } | ||
702 | |||
703 | return snd_soc_write(codec, ALC5623_DAI_CONTROL, iface); | ||
704 | } | ||
705 | |||
706 | static int alc5623_pcm_hw_params(struct snd_pcm_substream *substream, | ||
707 | struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) | ||
708 | { | ||
709 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | ||
710 | struct snd_soc_codec *codec = rtd->codec; | ||
711 | struct alc5623_priv *alc5623 = snd_soc_codec_get_drvdata(codec); | ||
712 | int coeff, rate; | ||
713 | u16 iface; | ||
714 | |||
715 | iface = snd_soc_read(codec, ALC5623_DAI_CONTROL); | ||
716 | iface &= ~ALC5623_DAI_I2S_DL_MASK; | ||
717 | |||
718 | /* bit size */ | ||
719 | switch (params_format(params)) { | ||
720 | case SNDRV_PCM_FORMAT_S16_LE: | ||
721 | iface |= ALC5623_DAI_I2S_DL_16; | ||
722 | break; | ||
723 | case SNDRV_PCM_FORMAT_S20_3LE: | ||
724 | iface |= ALC5623_DAI_I2S_DL_20; | ||
725 | break; | ||
726 | case SNDRV_PCM_FORMAT_S24_LE: | ||
727 | iface |= ALC5623_DAI_I2S_DL_24; | ||
728 | break; | ||
729 | case SNDRV_PCM_FORMAT_S32_LE: | ||
730 | iface |= ALC5623_DAI_I2S_DL_32; | ||
731 | break; | ||
732 | default: | ||
733 | return -EINVAL; | ||
734 | } | ||
735 | |||
736 | /* set iface & srate */ | ||
737 | snd_soc_write(codec, ALC5623_DAI_CONTROL, iface); | ||
738 | rate = params_rate(params); | ||
739 | coeff = get_coeff(codec, rate); | ||
740 | if (coeff < 0) | ||
741 | return -EINVAL; | ||
742 | |||
743 | coeff = coeff_div[coeff].regvalue; | ||
744 | dev_dbg(codec->dev, "%s: sysclk=%d,rate=%d,coeff=0x%04x\n", | ||
745 | __func__, alc5623->sysclk, rate, coeff); | ||
746 | snd_soc_write(codec, ALC5623_STEREO_AD_DA_CLK_CTRL, coeff); | ||
747 | |||
748 | return 0; | ||
749 | } | ||
750 | |||
751 | static int alc5623_mute(struct snd_soc_dai *dai, int mute) | ||
752 | { | ||
753 | struct snd_soc_codec *codec = dai->codec; | ||
754 | u16 hp_mute = ALC5623_MISC_M_DAC_L_INPUT | ALC5623_MISC_M_DAC_R_INPUT; | ||
755 | u16 mute_reg = snd_soc_read(codec, ALC5623_MISC_CTRL) & ~hp_mute; | ||
756 | |||
757 | if (mute) | ||
758 | mute_reg |= hp_mute; | ||
759 | |||
760 | return snd_soc_write(codec, ALC5623_MISC_CTRL, mute_reg); | ||
761 | } | ||
762 | |||
763 | #define ALC5623_ADD2_POWER_EN (ALC5623_PWR_ADD2_VREF \ | ||
764 | | ALC5623_PWR_ADD2_DAC_REF_CIR) | ||
765 | |||
766 | #define ALC5623_ADD3_POWER_EN (ALC5623_PWR_ADD3_MAIN_BIAS \ | ||
767 | | ALC5623_PWR_ADD3_MIC1_BOOST_AD) | ||
768 | |||
769 | #define ALC5623_ADD1_POWER_EN \ | ||
770 | (ALC5623_PWR_ADD1_SHORT_CURR_DET_EN | ALC5623_PWR_ADD1_SOFTGEN_EN \ | ||
771 | | ALC5623_PWR_ADD1_DEPOP_BUF_HP | ALC5623_PWR_ADD1_HP_OUT_AMP \ | ||
772 | | ALC5623_PWR_ADD1_HP_OUT_ENH_AMP) | ||
773 | |||
774 | #define ALC5623_ADD1_POWER_EN_5622 \ | ||
775 | (ALC5623_PWR_ADD1_SHORT_CURR_DET_EN \ | ||
776 | | ALC5623_PWR_ADD1_HP_OUT_AMP) | ||
777 | |||
778 | static void enable_power_depop(struct snd_soc_codec *codec) | ||
779 | { | ||
780 | struct alc5623_priv *alc5623 = snd_soc_codec_get_drvdata(codec); | ||
781 | |||
782 | snd_soc_update_bits(codec, ALC5623_PWR_MANAG_ADD1, | ||
783 | ALC5623_PWR_ADD1_SOFTGEN_EN, | ||
784 | ALC5623_PWR_ADD1_SOFTGEN_EN); | ||
785 | |||
786 | snd_soc_write(codec, ALC5623_PWR_MANAG_ADD3, ALC5623_ADD3_POWER_EN); | ||
787 | |||
788 | snd_soc_update_bits(codec, ALC5623_MISC_CTRL, | ||
789 | ALC5623_MISC_HP_DEPOP_MODE2_EN, | ||
790 | ALC5623_MISC_HP_DEPOP_MODE2_EN); | ||
791 | |||
792 | msleep(500); | ||
793 | |||
794 | snd_soc_write(codec, ALC5623_PWR_MANAG_ADD2, ALC5623_ADD2_POWER_EN); | ||
795 | |||
796 | /* avoid writing '1' into 5622 reserved bits */ | ||
797 | if (alc5623->id == 0x22) | ||
798 | snd_soc_write(codec, ALC5623_PWR_MANAG_ADD1, | ||
799 | ALC5623_ADD1_POWER_EN_5622); | ||
800 | else | ||
801 | snd_soc_write(codec, ALC5623_PWR_MANAG_ADD1, | ||
802 | ALC5623_ADD1_POWER_EN); | ||
803 | |||
804 | /* disable HP Depop2 */ | ||
805 | snd_soc_update_bits(codec, ALC5623_MISC_CTRL, | ||
806 | ALC5623_MISC_HP_DEPOP_MODE2_EN, | ||
807 | 0); | ||
808 | |||
809 | } | ||
810 | |||
811 | static int alc5623_set_bias_level(struct snd_soc_codec *codec, | ||
812 | enum snd_soc_bias_level level) | ||
813 | { | ||
814 | switch (level) { | ||
815 | case SND_SOC_BIAS_ON: | ||
816 | enable_power_depop(codec); | ||
817 | break; | ||
818 | case SND_SOC_BIAS_PREPARE: | ||
819 | break; | ||
820 | case SND_SOC_BIAS_STANDBY: | ||
821 | /* everything off except vref/vmid, */ | ||
822 | snd_soc_write(codec, ALC5623_PWR_MANAG_ADD2, | ||
823 | ALC5623_PWR_ADD2_VREF); | ||
824 | snd_soc_write(codec, ALC5623_PWR_MANAG_ADD3, | ||
825 | ALC5623_PWR_ADD3_MAIN_BIAS); | ||
826 | break; | ||
827 | case SND_SOC_BIAS_OFF: | ||
828 | /* everything off, dac mute, inactive */ | ||
829 | snd_soc_write(codec, ALC5623_PWR_MANAG_ADD2, 0); | ||
830 | snd_soc_write(codec, ALC5623_PWR_MANAG_ADD3, 0); | ||
831 | snd_soc_write(codec, ALC5623_PWR_MANAG_ADD1, 0); | ||
832 | break; | ||
833 | } | ||
834 | codec->dapm.bias_level = level; | ||
835 | return 0; | ||
836 | } | ||
837 | |||
838 | #define ALC5623_FORMATS (SNDRV_PCM_FMTBIT_S16_LE \ | ||
839 | | SNDRV_PCM_FMTBIT_S24_LE \ | ||
840 | | SNDRV_PCM_FMTBIT_S32_LE) | ||
841 | |||
842 | static struct snd_soc_dai_ops alc5623_dai_ops = { | ||
843 | .hw_params = alc5623_pcm_hw_params, | ||
844 | .digital_mute = alc5623_mute, | ||
845 | .set_fmt = alc5623_set_dai_fmt, | ||
846 | .set_sysclk = alc5623_set_dai_sysclk, | ||
847 | .set_pll = alc5623_set_dai_pll, | ||
848 | }; | ||
849 | |||
850 | static struct snd_soc_dai_driver alc5623_dai = { | ||
851 | .name = "alc5623-hifi", | ||
852 | .playback = { | ||
853 | .stream_name = "Playback", | ||
854 | .channels_min = 1, | ||
855 | .channels_max = 2, | ||
856 | .rate_min = 8000, | ||
857 | .rate_max = 48000, | ||
858 | .rates = SNDRV_PCM_RATE_8000_48000, | ||
859 | .formats = ALC5623_FORMATS,}, | ||
860 | .capture = { | ||
861 | .stream_name = "Capture", | ||
862 | .channels_min = 1, | ||
863 | .channels_max = 2, | ||
864 | .rate_min = 8000, | ||
865 | .rate_max = 48000, | ||
866 | .rates = SNDRV_PCM_RATE_8000_48000, | ||
867 | .formats = ALC5623_FORMATS,}, | ||
868 | |||
869 | .ops = &alc5623_dai_ops, | ||
870 | }; | ||
871 | |||
872 | static int alc5623_suspend(struct snd_soc_codec *codec, pm_message_t mesg) | ||
873 | { | ||
874 | alc5623_set_bias_level(codec, SND_SOC_BIAS_OFF); | ||
875 | return 0; | ||
876 | } | ||
877 | |||
878 | static int alc5623_resume(struct snd_soc_codec *codec) | ||
879 | { | ||
880 | int i, step = codec->driver->reg_cache_step; | ||
881 | u16 *cache = codec->reg_cache; | ||
882 | |||
883 | /* Sync reg_cache with the hardware */ | ||
884 | for (i = 2 ; i < codec->driver->reg_cache_size ; i += step) | ||
885 | snd_soc_write(codec, i, cache[i]); | ||
886 | |||
887 | alc5623_set_bias_level(codec, SND_SOC_BIAS_STANDBY); | ||
888 | |||
889 | /* charge alc5623 caps */ | ||
890 | if (codec->dapm.suspend_bias_level == SND_SOC_BIAS_ON) { | ||
891 | alc5623_set_bias_level(codec, SND_SOC_BIAS_STANDBY); | ||
892 | codec->dapm.bias_level = SND_SOC_BIAS_ON; | ||
893 | alc5623_set_bias_level(codec, codec->dapm.bias_level); | ||
894 | } | ||
895 | |||
896 | return 0; | ||
897 | } | ||
898 | |||
899 | static int alc5623_probe(struct snd_soc_codec *codec) | ||
900 | { | ||
901 | struct alc5623_priv *alc5623 = snd_soc_codec_get_drvdata(codec); | ||
902 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
903 | int ret; | ||
904 | |||
905 | ret = snd_soc_codec_set_cache_io(codec, 8, 16, alc5623->control_type); | ||
906 | if (ret < 0) { | ||
907 | dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret); | ||
908 | return ret; | ||
909 | } | ||
910 | |||
911 | alc5623_reset(codec); | ||
912 | alc5623_fill_cache(codec); | ||
913 | |||
914 | /* power on device */ | ||
915 | alc5623_set_bias_level(codec, SND_SOC_BIAS_STANDBY); | ||
916 | |||
917 | if (alc5623->add_ctrl) { | ||
918 | snd_soc_write(codec, ALC5623_ADD_CTRL_REG, | ||
919 | alc5623->add_ctrl); | ||
920 | } | ||
921 | |||
922 | if (alc5623->jack_det_ctrl) { | ||
923 | snd_soc_write(codec, ALC5623_JACK_DET_CTRL, | ||
924 | alc5623->jack_det_ctrl); | ||
925 | } | ||
926 | |||
927 | switch (alc5623->id) { | ||
928 | default: | ||
929 | case 0x21: | ||
930 | snd_soc_add_controls(codec, rt5621_vol_snd_controls, | ||
931 | ARRAY_SIZE(rt5621_vol_snd_controls)); | ||
932 | break; | ||
933 | case 0x22: | ||
934 | snd_soc_add_controls(codec, rt5622_vol_snd_controls, | ||
935 | ARRAY_SIZE(rt5622_vol_snd_controls)); | ||
936 | break; | ||
937 | case 0x23: | ||
938 | snd_soc_add_controls(codec, alc5623_vol_snd_controls, | ||
939 | ARRAY_SIZE(alc5623_vol_snd_controls)); | ||
940 | break; | ||
941 | } | ||
942 | |||
943 | snd_soc_add_controls(codec, alc5623_snd_controls, | ||
944 | ARRAY_SIZE(alc5623_snd_controls)); | ||
945 | |||
946 | snd_soc_dapm_new_controls(dapm, alc5623_dapm_widgets, | ||
947 | ARRAY_SIZE(alc5623_dapm_widgets)); | ||
948 | |||
949 | /* set up audio path interconnects */ | ||
950 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); | ||
951 | |||
952 | switch (alc5623->id) { | ||
953 | default: | ||
954 | case 0x21: | ||
955 | case 0x22: | ||
956 | snd_soc_dapm_new_controls(dapm, alc5623_dapm_amp_widgets, | ||
957 | ARRAY_SIZE(alc5623_dapm_amp_widgets)); | ||
958 | snd_soc_dapm_add_routes(dapm, intercon_amp_spk, | ||
959 | ARRAY_SIZE(intercon_amp_spk)); | ||
960 | break; | ||
961 | case 0x23: | ||
962 | snd_soc_dapm_add_routes(dapm, intercon_spk, | ||
963 | ARRAY_SIZE(intercon_spk)); | ||
964 | break; | ||
965 | } | ||
966 | |||
967 | return ret; | ||
968 | } | ||
969 | |||
970 | /* power down chip */ | ||
971 | static int alc5623_remove(struct snd_soc_codec *codec) | ||
972 | { | ||
973 | alc5623_set_bias_level(codec, SND_SOC_BIAS_OFF); | ||
974 | return 0; | ||
975 | } | ||
976 | |||
977 | static struct snd_soc_codec_driver soc_codec_device_alc5623 = { | ||
978 | .probe = alc5623_probe, | ||
979 | .remove = alc5623_remove, | ||
980 | .suspend = alc5623_suspend, | ||
981 | .resume = alc5623_resume, | ||
982 | .set_bias_level = alc5623_set_bias_level, | ||
983 | .reg_cache_size = ALC5623_VENDOR_ID2+2, | ||
984 | .reg_word_size = sizeof(u16), | ||
985 | .reg_cache_step = 2, | ||
986 | }; | ||
987 | |||
988 | /* | ||
989 | * ALC5623 2 wire address is determined by A1 pin | ||
990 | * state during powerup. | ||
991 | * low = 0x1a | ||
992 | * high = 0x1b | ||
993 | */ | ||
994 | static int alc5623_i2c_probe(struct i2c_client *client, | ||
995 | const struct i2c_device_id *id) | ||
996 | { | ||
997 | struct alc5623_platform_data *pdata; | ||
998 | struct alc5623_priv *alc5623; | ||
999 | int ret, vid1, vid2; | ||
1000 | |||
1001 | vid1 = i2c_smbus_read_word_data(client, ALC5623_VENDOR_ID1); | ||
1002 | if (vid1 < 0) { | ||
1003 | dev_err(&client->dev, "failed to read I2C\n"); | ||
1004 | return -EIO; | ||
1005 | } | ||
1006 | vid1 = ((vid1 & 0xff) << 8) | (vid1 >> 8); | ||
1007 | |||
1008 | vid2 = i2c_smbus_read_byte_data(client, ALC5623_VENDOR_ID2); | ||
1009 | if (vid2 < 0) { | ||
1010 | dev_err(&client->dev, "failed to read I2C\n"); | ||
1011 | return -EIO; | ||
1012 | } | ||
1013 | |||
1014 | if ((vid1 != 0x10ec) || (vid2 != id->driver_data)) { | ||
1015 | dev_err(&client->dev, "unknown or wrong codec\n"); | ||
1016 | dev_err(&client->dev, "Expected %x:%lx, got %x:%x\n", | ||
1017 | 0x10ec, id->driver_data, | ||
1018 | vid1, vid2); | ||
1019 | return -ENODEV; | ||
1020 | } | ||
1021 | |||
1022 | dev_dbg(&client->dev, "Found codec id : alc56%02x\n", vid2); | ||
1023 | |||
1024 | alc5623 = kzalloc(sizeof(struct alc5623_priv), GFP_KERNEL); | ||
1025 | if (alc5623 == NULL) | ||
1026 | return -ENOMEM; | ||
1027 | |||
1028 | pdata = client->dev.platform_data; | ||
1029 | if (pdata) { | ||
1030 | alc5623->add_ctrl = pdata->add_ctrl; | ||
1031 | alc5623->jack_det_ctrl = pdata->jack_det_ctrl; | ||
1032 | } | ||
1033 | |||
1034 | alc5623->id = vid2; | ||
1035 | switch (alc5623->id) { | ||
1036 | case 0x21: | ||
1037 | alc5623_dai.name = "alc5621-hifi"; | ||
1038 | break; | ||
1039 | case 0x22: | ||
1040 | alc5623_dai.name = "alc5622-hifi"; | ||
1041 | break; | ||
1042 | default: | ||
1043 | case 0x23: | ||
1044 | alc5623_dai.name = "alc5623-hifi"; | ||
1045 | break; | ||
1046 | } | ||
1047 | |||
1048 | i2c_set_clientdata(client, alc5623); | ||
1049 | alc5623->control_data = client; | ||
1050 | alc5623->control_type = SND_SOC_I2C; | ||
1051 | mutex_init(&alc5623->mutex); | ||
1052 | |||
1053 | ret = snd_soc_register_codec(&client->dev, | ||
1054 | &soc_codec_device_alc5623, &alc5623_dai, 1); | ||
1055 | if (ret != 0) { | ||
1056 | dev_err(&client->dev, "Failed to register codec: %d\n", ret); | ||
1057 | kfree(alc5623); | ||
1058 | } | ||
1059 | |||
1060 | return ret; | ||
1061 | } | ||
1062 | |||
1063 | static int alc5623_i2c_remove(struct i2c_client *client) | ||
1064 | { | ||
1065 | struct alc5623_priv *alc5623 = i2c_get_clientdata(client); | ||
1066 | |||
1067 | snd_soc_unregister_codec(&client->dev); | ||
1068 | kfree(alc5623); | ||
1069 | return 0; | ||
1070 | } | ||
1071 | |||
1072 | static const struct i2c_device_id alc5623_i2c_table[] = { | ||
1073 | {"alc5621", 0x21}, | ||
1074 | {"alc5622", 0x22}, | ||
1075 | {"alc5623", 0x23}, | ||
1076 | {} | ||
1077 | }; | ||
1078 | MODULE_DEVICE_TABLE(i2c, alc5623_i2c_table); | ||
1079 | |||
1080 | /* i2c codec control layer */ | ||
1081 | static struct i2c_driver alc5623_i2c_driver = { | ||
1082 | .driver = { | ||
1083 | .name = "alc562x-codec", | ||
1084 | .owner = THIS_MODULE, | ||
1085 | }, | ||
1086 | .probe = alc5623_i2c_probe, | ||
1087 | .remove = __devexit_p(alc5623_i2c_remove), | ||
1088 | .id_table = alc5623_i2c_table, | ||
1089 | }; | ||
1090 | |||
1091 | static int __init alc5623_modinit(void) | ||
1092 | { | ||
1093 | int ret; | ||
1094 | |||
1095 | ret = i2c_add_driver(&alc5623_i2c_driver); | ||
1096 | if (ret != 0) { | ||
1097 | printk(KERN_ERR "%s: can't add i2c driver", __func__); | ||
1098 | return ret; | ||
1099 | } | ||
1100 | |||
1101 | return ret; | ||
1102 | } | ||
1103 | module_init(alc5623_modinit); | ||
1104 | |||
1105 | static void __exit alc5623_modexit(void) | ||
1106 | { | ||
1107 | i2c_del_driver(&alc5623_i2c_driver); | ||
1108 | } | ||
1109 | module_exit(alc5623_modexit); | ||
1110 | |||
1111 | MODULE_DESCRIPTION("ASoC alc5621/2/3 driver"); | ||
1112 | MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>"); | ||
1113 | MODULE_LICENSE("GPL"); | ||
diff --git a/sound/soc/codecs/alc5623.h b/sound/soc/codecs/alc5623.h new file mode 100644 index 000000000000..f3d68260d425 --- /dev/null +++ b/sound/soc/codecs/alc5623.h | |||
@@ -0,0 +1,161 @@ | |||
1 | /* | ||
2 | * alc5623.h -- alc562[123] ALSA Soc Audio driver | ||
3 | * | ||
4 | * Copyright 2008 Realtek Microelectronics | ||
5 | * Copyright 2010 Arnaud Patard <arnaud.patard@rtp-net.org> | ||
6 | * | ||
7 | * Author: flove <flove@realtek.com> | ||
8 | * Arnaud Patard <arnaud.patard@rtp-net.org> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | * | ||
14 | */ | ||
15 | |||
16 | #ifndef _ALC5623_H | ||
17 | #define _ALC5623_H | ||
18 | |||
19 | #define ALC5623_RESET 0x00 | ||
20 | /* 5621 5622 5623 */ | ||
21 | /* speaker output vol 2 2 */ | ||
22 | /* line output vol 4 2 */ | ||
23 | /* HP output vol 4 0 4 */ | ||
24 | #define ALC5623_SPK_OUT_VOL 0x02 | ||
25 | #define ALC5623_HP_OUT_VOL 0x04 | ||
26 | #define ALC5623_MONO_AUX_OUT_VOL 0x06 | ||
27 | #define ALC5623_AUXIN_VOL 0x08 | ||
28 | #define ALC5623_LINE_IN_VOL 0x0A | ||
29 | #define ALC5623_STEREO_DAC_VOL 0x0C | ||
30 | #define ALC5623_MIC_VOL 0x0E | ||
31 | #define ALC5623_MIC_ROUTING_CTRL 0x10 | ||
32 | #define ALC5623_ADC_REC_GAIN 0x12 | ||
33 | #define ALC5623_ADC_REC_MIXER 0x14 | ||
34 | #define ALC5623_SOFT_VOL_CTRL_TIME 0x16 | ||
35 | /* ALC5623_OUTPUT_MIXER_CTRL : */ | ||
36 | /* same remark as for reg 2 line vs speaker */ | ||
37 | #define ALC5623_OUTPUT_MIXER_CTRL 0x1C | ||
38 | #define ALC5623_MIC_CTRL 0x22 | ||
39 | |||
40 | #define ALC5623_DAI_CONTROL 0x34 | ||
41 | #define ALC5623_DAI_SDP_MASTER_MODE (0 << 15) | ||
42 | #define ALC5623_DAI_SDP_SLAVE_MODE (1 << 15) | ||
43 | #define ALC5623_DAI_I2S_PCM_MODE (1 << 14) | ||
44 | #define ALC5623_DAI_MAIN_I2S_BCLK_POL_CTRL (1 << 7) | ||
45 | #define ALC5623_DAI_ADC_DATA_L_R_SWAP (1 << 5) | ||
46 | #define ALC5623_DAI_DAC_DATA_L_R_SWAP (1 << 4) | ||
47 | #define ALC5623_DAI_I2S_DL_MASK (3 << 2) | ||
48 | #define ALC5623_DAI_I2S_DL_32 (3 << 2) | ||
49 | #define ALC5623_DAI_I2S_DL_24 (2 << 2) | ||
50 | #define ALC5623_DAI_I2S_DL_20 (1 << 2) | ||
51 | #define ALC5623_DAI_I2S_DL_16 (0 << 2) | ||
52 | #define ALC5623_DAI_I2S_DF_PCM (3 << 0) | ||
53 | #define ALC5623_DAI_I2S_DF_LEFT (2 << 0) | ||
54 | #define ALC5623_DAI_I2S_DF_RIGHT (1 << 0) | ||
55 | #define ALC5623_DAI_I2S_DF_I2S (0 << 0) | ||
56 | |||
57 | #define ALC5623_STEREO_AD_DA_CLK_CTRL 0x36 | ||
58 | #define ALC5623_COMPANDING_CTRL 0x38 | ||
59 | |||
60 | #define ALC5623_PWR_MANAG_ADD1 0x3A | ||
61 | #define ALC5623_PWR_ADD1_MAIN_I2S_EN (1 << 15) | ||
62 | #define ALC5623_PWR_ADD1_ZC_DET_PD_EN (1 << 14) | ||
63 | #define ALC5623_PWR_ADD1_MIC1_BIAS_EN (1 << 11) | ||
64 | #define ALC5623_PWR_ADD1_SHORT_CURR_DET_EN (1 << 10) | ||
65 | #define ALC5623_PWR_ADD1_SOFTGEN_EN (1 << 8) /* rsvd on 5622 */ | ||
66 | #define ALC5623_PWR_ADD1_DEPOP_BUF_HP (1 << 6) /* rsvd on 5622 */ | ||
67 | #define ALC5623_PWR_ADD1_HP_OUT_AMP (1 << 5) | ||
68 | #define ALC5623_PWR_ADD1_HP_OUT_ENH_AMP (1 << 4) /* rsvd on 5622 */ | ||
69 | #define ALC5623_PWR_ADD1_DEPOP_BUF_AUX (1 << 2) | ||
70 | #define ALC5623_PWR_ADD1_AUX_OUT_AMP (1 << 1) | ||
71 | #define ALC5623_PWR_ADD1_AUX_OUT_ENH_AMP (1 << 0) /* rsvd on 5622 */ | ||
72 | |||
73 | #define ALC5623_PWR_MANAG_ADD2 0x3C | ||
74 | #define ALC5623_PWR_ADD2_LINEOUT (1 << 15) /* rt5623 */ | ||
75 | #define ALC5623_PWR_ADD2_CLASS_AB (1 << 15) /* rt5621 */ | ||
76 | #define ALC5623_PWR_ADD2_CLASS_D (1 << 14) /* rt5621 */ | ||
77 | #define ALC5623_PWR_ADD2_VREF (1 << 13) | ||
78 | #define ALC5623_PWR_ADD2_PLL (1 << 12) | ||
79 | #define ALC5623_PWR_ADD2_DAC_REF_CIR (1 << 10) | ||
80 | #define ALC5623_PWR_ADD2_L_DAC_CLK (1 << 9) | ||
81 | #define ALC5623_PWR_ADD2_R_DAC_CLK (1 << 8) | ||
82 | #define ALC5623_PWR_ADD2_L_ADC_CLK_GAIN (1 << 7) | ||
83 | #define ALC5623_PWR_ADD2_R_ADC_CLK_GAIN (1 << 6) | ||
84 | #define ALC5623_PWR_ADD2_L_HP_MIXER (1 << 5) | ||
85 | #define ALC5623_PWR_ADD2_R_HP_MIXER (1 << 4) | ||
86 | #define ALC5623_PWR_ADD2_SPK_MIXER (1 << 3) | ||
87 | #define ALC5623_PWR_ADD2_MONO_MIXER (1 << 2) | ||
88 | #define ALC5623_PWR_ADD2_L_ADC_REC_MIXER (1 << 1) | ||
89 | #define ALC5623_PWR_ADD2_R_ADC_REC_MIXER (1 << 0) | ||
90 | |||
91 | #define ALC5623_PWR_MANAG_ADD3 0x3E | ||
92 | #define ALC5623_PWR_ADD3_MAIN_BIAS (1 << 15) | ||
93 | #define ALC5623_PWR_ADD3_AUXOUT_L_VOL_AMP (1 << 14) | ||
94 | #define ALC5623_PWR_ADD3_AUXOUT_R_VOL_AMP (1 << 13) | ||
95 | #define ALC5623_PWR_ADD3_SPK_OUT (1 << 12) | ||
96 | #define ALC5623_PWR_ADD3_HP_L_OUT_VOL (1 << 10) | ||
97 | #define ALC5623_PWR_ADD3_HP_R_OUT_VOL (1 << 9) | ||
98 | #define ALC5623_PWR_ADD3_LINEIN_L_VOL (1 << 7) | ||
99 | #define ALC5623_PWR_ADD3_LINEIN_R_VOL (1 << 6) | ||
100 | #define ALC5623_PWR_ADD3_AUXIN_L_VOL (1 << 5) | ||
101 | #define ALC5623_PWR_ADD3_AUXIN_R_VOL (1 << 4) | ||
102 | #define ALC5623_PWR_ADD3_MIC1_FUN_CTRL (1 << 3) | ||
103 | #define ALC5623_PWR_ADD3_MIC2_FUN_CTRL (1 << 2) | ||
104 | #define ALC5623_PWR_ADD3_MIC1_BOOST_AD (1 << 1) | ||
105 | #define ALC5623_PWR_ADD3_MIC2_BOOST_AD (1 << 0) | ||
106 | |||
107 | #define ALC5623_ADD_CTRL_REG 0x40 | ||
108 | |||
109 | #define ALC5623_GLOBAL_CLK_CTRL_REG 0x42 | ||
110 | #define ALC5623_GBL_CLK_SYS_SOUR_SEL_PLL (1 << 15) | ||
111 | #define ALC5623_GBL_CLK_SYS_SOUR_SEL_MCLK (0 << 15) | ||
112 | #define ALC5623_GBL_CLK_PLL_SOUR_SEL_BITCLK (1 << 14) | ||
113 | #define ALC5623_GBL_CLK_PLL_SOUR_SEL_MCLK (0 << 14) | ||
114 | #define ALC5623_GBL_CLK_PLL_DIV_RATIO_DIV8 (3 << 1) | ||
115 | #define ALC5623_GBL_CLK_PLL_DIV_RATIO_DIV4 (2 << 1) | ||
116 | #define ALC5623_GBL_CLK_PLL_DIV_RATIO_DIV2 (1 << 1) | ||
117 | #define ALC5623_GBL_CLK_PLL_DIV_RATIO_DIV1 (0 << 1) | ||
118 | #define ALC5623_GBL_CLK_PLL_PRE_DIV2 (1 << 0) | ||
119 | #define ALC5623_GBL_CLK_PLL_PRE_DIV1 (0 << 0) | ||
120 | |||
121 | #define ALC5623_PLL_CTRL 0x44 | ||
122 | #define ALC5623_PLL_CTRL_N_VAL(n) (((n)&0xff) << 8) | ||
123 | #define ALC5623_PLL_CTRL_K_VAL(k) (((k)&0x7) << 4) | ||
124 | #define ALC5623_PLL_CTRL_M_VAL(m) ((m)&0xf) | ||
125 | |||
126 | #define ALC5623_GPIO_OUTPUT_PIN_CTRL 0x4A | ||
127 | #define ALC5623_GPIO_PIN_CONFIG 0x4C | ||
128 | #define ALC5623_GPIO_PIN_POLARITY 0x4E | ||
129 | #define ALC5623_GPIO_PIN_STICKY 0x50 | ||
130 | #define ALC5623_GPIO_PIN_WAKEUP 0x52 | ||
131 | #define ALC5623_GPIO_PIN_STATUS 0x54 | ||
132 | #define ALC5623_GPIO_PIN_SHARING 0x56 | ||
133 | #define ALC5623_OVER_CURR_STATUS 0x58 | ||
134 | #define ALC5623_JACK_DET_CTRL 0x5A | ||
135 | |||
136 | #define ALC5623_MISC_CTRL 0x5E | ||
137 | #define ALC5623_MISC_DISABLE_FAST_VREG (1 << 15) | ||
138 | #define ALC5623_MISC_SPK_CLASS_AB_OC_PD (1 << 13) /* 5621 */ | ||
139 | #define ALC5623_MISC_SPK_CLASS_AB_OC_DET (1 << 12) /* 5621 */ | ||
140 | #define ALC5623_MISC_HP_DEPOP_MODE3_EN (1 << 10) | ||
141 | #define ALC5623_MISC_HP_DEPOP_MODE2_EN (1 << 9) | ||
142 | #define ALC5623_MISC_HP_DEPOP_MODE1_EN (1 << 8) | ||
143 | #define ALC5623_MISC_AUXOUT_DEPOP_MODE3_EN (1 << 6) | ||
144 | #define ALC5623_MISC_AUXOUT_DEPOP_MODE2_EN (1 << 5) | ||
145 | #define ALC5623_MISC_AUXOUT_DEPOP_MODE1_EN (1 << 4) | ||
146 | #define ALC5623_MISC_M_DAC_L_INPUT (1 << 3) | ||
147 | #define ALC5623_MISC_M_DAC_R_INPUT (1 << 2) | ||
148 | #define ALC5623_MISC_IRQOUT_INV_CTRL (1 << 0) | ||
149 | |||
150 | #define ALC5623_PSEDUEO_SPATIAL_CTRL 0x60 | ||
151 | #define ALC5623_EQ_CTRL 0x62 | ||
152 | #define ALC5623_EQ_MODE_ENABLE 0x66 | ||
153 | #define ALC5623_AVC_CTRL 0x68 | ||
154 | #define ALC5623_HID_CTRL_INDEX 0x6A | ||
155 | #define ALC5623_HID_CTRL_DATA 0x6C | ||
156 | #define ALC5623_VENDOR_ID1 0x7C | ||
157 | #define ALC5623_VENDOR_ID2 0x7E | ||
158 | |||
159 | #define ALC5623_PLL_FR_MCLK 0 | ||
160 | #define ALC5623_PLL_FR_BCK 1 | ||
161 | #endif | ||
diff --git a/sound/soc/codecs/cq93vc.c b/sound/soc/codecs/cq93vc.c index 823643932dde..46dbfd067f79 100644 --- a/sound/soc/codecs/cq93vc.c +++ b/sound/soc/codecs/cq93vc.c | |||
@@ -36,8 +36,6 @@ | |||
36 | #include <sound/pcm.h> | 36 | #include <sound/pcm.h> |
37 | #include <sound/pcm_params.h> | 37 | #include <sound/pcm_params.h> |
38 | #include <sound/soc.h> | 38 | #include <sound/soc.h> |
39 | #include <sound/soc-dai.h> | ||
40 | #include <sound/soc-dapm.h> | ||
41 | #include <sound/initval.h> | 39 | #include <sound/initval.h> |
42 | 40 | ||
43 | #include <mach/dm365.h> | 41 | #include <mach/dm365.h> |
@@ -116,7 +114,7 @@ static int cq93vc_set_bias_level(struct snd_soc_codec *codec, | |||
116 | DAVINCI_VC_REG12_POWER_ALL_OFF); | 114 | DAVINCI_VC_REG12_POWER_ALL_OFF); |
117 | break; | 115 | break; |
118 | } | 116 | } |
119 | codec->bias_level = level; | 117 | codec->dapm.bias_level = level; |
120 | 118 | ||
121 | return 0; | 119 | return 0; |
122 | } | 120 | } |
diff --git a/sound/soc/codecs/cs42l51.c b/sound/soc/codecs/cs42l51.c index cb086eaf4e07..d4e60dc45bf6 100644 --- a/sound/soc/codecs/cs42l51.c +++ b/sound/soc/codecs/cs42l51.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <linux/slab.h> | 26 | #include <linux/slab.h> |
27 | #include <sound/core.h> | 27 | #include <sound/core.h> |
28 | #include <sound/soc.h> | 28 | #include <sound/soc.h> |
29 | #include <sound/soc-dapm.h> | ||
30 | #include <sound/tlv.h> | 29 | #include <sound/tlv.h> |
31 | #include <sound/initval.h> | 30 | #include <sound/initval.h> |
32 | #include <sound/pcm_params.h> | 31 | #include <sound/pcm_params.h> |
@@ -519,6 +518,7 @@ static struct snd_soc_dai_driver cs42l51_dai = { | |||
519 | static int cs42l51_probe(struct snd_soc_codec *codec) | 518 | static int cs42l51_probe(struct snd_soc_codec *codec) |
520 | { | 519 | { |
521 | struct cs42l51_private *cs42l51 = snd_soc_codec_get_drvdata(codec); | 520 | struct cs42l51_private *cs42l51 = snd_soc_codec_get_drvdata(codec); |
521 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
522 | int ret, reg; | 522 | int ret, reg; |
523 | 523 | ||
524 | codec->control_data = cs42l51->control_data; | 524 | codec->control_data = cs42l51->control_data; |
@@ -550,9 +550,9 @@ static int cs42l51_probe(struct snd_soc_codec *codec) | |||
550 | 550 | ||
551 | snd_soc_add_controls(codec, cs42l51_snd_controls, | 551 | snd_soc_add_controls(codec, cs42l51_snd_controls, |
552 | ARRAY_SIZE(cs42l51_snd_controls)); | 552 | ARRAY_SIZE(cs42l51_snd_controls)); |
553 | snd_soc_dapm_new_controls(codec, cs42l51_dapm_widgets, | 553 | snd_soc_dapm_new_controls(dapm, cs42l51_dapm_widgets, |
554 | ARRAY_SIZE(cs42l51_dapm_widgets)); | 554 | ARRAY_SIZE(cs42l51_dapm_widgets)); |
555 | snd_soc_dapm_add_routes(codec, cs42l51_routes, | 555 | snd_soc_dapm_add_routes(dapm, cs42l51_routes, |
556 | ARRAY_SIZE(cs42l51_routes)); | 556 | ARRAY_SIZE(cs42l51_routes)); |
557 | 557 | ||
558 | return 0; | 558 | return 0; |
diff --git a/sound/soc/codecs/cx20442.c b/sound/soc/codecs/cx20442.c index e8d27c8f9ba3..a9521acad99c 100644 --- a/sound/soc/codecs/cx20442.c +++ b/sound/soc/codecs/cx20442.c | |||
@@ -18,7 +18,7 @@ | |||
18 | 18 | ||
19 | #include <sound/core.h> | 19 | #include <sound/core.h> |
20 | #include <sound/initval.h> | 20 | #include <sound/initval.h> |
21 | #include <sound/soc-dapm.h> | 21 | #include <sound/soc.h> |
22 | 22 | ||
23 | #include "cx20442.h" | 23 | #include "cx20442.h" |
24 | 24 | ||
@@ -89,10 +89,11 @@ static const struct snd_soc_dapm_route cx20442_audio_map[] = { | |||
89 | 89 | ||
90 | static int cx20442_add_widgets(struct snd_soc_codec *codec) | 90 | static int cx20442_add_widgets(struct snd_soc_codec *codec) |
91 | { | 91 | { |
92 | snd_soc_dapm_new_controls(codec, cx20442_dapm_widgets, | 92 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
93 | ARRAY_SIZE(cx20442_dapm_widgets)); | ||
94 | 93 | ||
95 | snd_soc_dapm_add_routes(codec, cx20442_audio_map, | 94 | snd_soc_dapm_new_controls(dapm, cx20442_dapm_widgets, |
95 | ARRAY_SIZE(cx20442_dapm_widgets)); | ||
96 | snd_soc_dapm_add_routes(dapm, cx20442_audio_map, | ||
96 | ARRAY_SIZE(cx20442_audio_map)); | 97 | ARRAY_SIZE(cx20442_audio_map)); |
97 | 98 | ||
98 | return 0; | 99 | return 0; |
@@ -263,7 +264,7 @@ static void v253_close(struct tty_struct *tty) | |||
263 | /* Prevent the codec driver from further accessing the modem */ | 264 | /* Prevent the codec driver from further accessing the modem */ |
264 | codec->hw_write = NULL; | 265 | codec->hw_write = NULL; |
265 | cx20442->control_data = NULL; | 266 | cx20442->control_data = NULL; |
266 | codec->pop_time = 0; | 267 | codec->card->pop_time = 0; |
267 | } | 268 | } |
268 | 269 | ||
269 | /* Line discipline .hangup() */ | 270 | /* Line discipline .hangup() */ |
@@ -291,7 +292,7 @@ static void v253_receive(struct tty_struct *tty, | |||
291 | /* Set up codec driver access to modem controls */ | 292 | /* Set up codec driver access to modem controls */ |
292 | cx20442->control_data = tty; | 293 | cx20442->control_data = tty; |
293 | codec->hw_write = (hw_write_t)tty->ops->write; | 294 | codec->hw_write = (hw_write_t)tty->ops->write; |
294 | codec->pop_time = 1; | 295 | codec->card->pop_time = 1; |
295 | } | 296 | } |
296 | } | 297 | } |
297 | 298 | ||
@@ -348,7 +349,7 @@ static int cx20442_codec_probe(struct snd_soc_codec *codec) | |||
348 | 349 | ||
349 | cx20442->control_data = NULL; | 350 | cx20442->control_data = NULL; |
350 | codec->hw_write = NULL; | 351 | codec->hw_write = NULL; |
351 | codec->pop_time = 0; | 352 | codec->card->pop_time = 0; |
352 | 353 | ||
353 | return 0; | 354 | return 0; |
354 | } | 355 | } |
diff --git a/sound/soc/codecs/da7210.c b/sound/soc/codecs/da7210.c index 58bb9b994811..92fd9d7a9221 100644 --- a/sound/soc/codecs/da7210.c +++ b/sound/soc/codecs/da7210.c | |||
@@ -21,7 +21,7 @@ | |||
21 | #include <linux/slab.h> | 21 | #include <linux/slab.h> |
22 | #include <sound/pcm.h> | 22 | #include <sound/pcm.h> |
23 | #include <sound/pcm_params.h> | 23 | #include <sound/pcm_params.h> |
24 | #include <sound/soc-dapm.h> | 24 | #include <sound/soc.h> |
25 | #include <sound/initval.h> | 25 | #include <sound/initval.h> |
26 | #include <sound/tlv.h> | 26 | #include <sound/tlv.h> |
27 | 27 | ||
diff --git a/sound/soc/codecs/jz4740.c b/sound/soc/codecs/jz4740.c index 16253ec9b022..f7cd346fd727 100644 --- a/sound/soc/codecs/jz4740.c +++ b/sound/soc/codecs/jz4740.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include <sound/pcm.h> | 22 | #include <sound/pcm.h> |
23 | #include <sound/pcm_params.h> | 23 | #include <sound/pcm_params.h> |
24 | #include <sound/initval.h> | 24 | #include <sound/initval.h> |
25 | #include <sound/soc-dapm.h> | ||
26 | #include <sound/soc.h> | 25 | #include <sound/soc.h> |
27 | 26 | ||
28 | #define JZ4740_REG_CODEC_1 0x0 | 27 | #define JZ4740_REG_CODEC_1 0x0 |
@@ -266,7 +265,7 @@ static int jz4740_codec_set_bias_level(struct snd_soc_codec *codec, | |||
266 | break; | 265 | break; |
267 | case SND_SOC_BIAS_STANDBY: | 266 | case SND_SOC_BIAS_STANDBY: |
268 | /* The only way to clear the suspend flag is to reset the codec */ | 267 | /* The only way to clear the suspend flag is to reset the codec */ |
269 | if (codec->bias_level == SND_SOC_BIAS_OFF) | 268 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) |
270 | jz4740_codec_wakeup(codec); | 269 | jz4740_codec_wakeup(codec); |
271 | 270 | ||
272 | mask = JZ4740_CODEC_1_VREF_DISABLE | | 271 | mask = JZ4740_CODEC_1_VREF_DISABLE | |
@@ -288,23 +287,25 @@ static int jz4740_codec_set_bias_level(struct snd_soc_codec *codec, | |||
288 | break; | 287 | break; |
289 | } | 288 | } |
290 | 289 | ||
291 | codec->bias_level = level; | 290 | codec->dapm.bias_level = level; |
292 | 291 | ||
293 | return 0; | 292 | return 0; |
294 | } | 293 | } |
295 | 294 | ||
296 | static int jz4740_codec_dev_probe(struct snd_soc_codec *codec) | 295 | static int jz4740_codec_dev_probe(struct snd_soc_codec *codec) |
297 | { | 296 | { |
297 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
298 | |||
298 | snd_soc_update_bits(codec, JZ4740_REG_CODEC_1, | 299 | snd_soc_update_bits(codec, JZ4740_REG_CODEC_1, |
299 | JZ4740_CODEC_1_SW2_ENABLE, JZ4740_CODEC_1_SW2_ENABLE); | 300 | JZ4740_CODEC_1_SW2_ENABLE, JZ4740_CODEC_1_SW2_ENABLE); |
300 | 301 | ||
301 | snd_soc_add_controls(codec, jz4740_codec_controls, | 302 | snd_soc_add_controls(codec, jz4740_codec_controls, |
302 | ARRAY_SIZE(jz4740_codec_controls)); | 303 | ARRAY_SIZE(jz4740_codec_controls)); |
303 | 304 | ||
304 | snd_soc_dapm_new_controls(codec, jz4740_codec_dapm_widgets, | 305 | snd_soc_dapm_new_controls(dapm, jz4740_codec_dapm_widgets, |
305 | ARRAY_SIZE(jz4740_codec_dapm_widgets)); | 306 | ARRAY_SIZE(jz4740_codec_dapm_widgets)); |
306 | 307 | ||
307 | snd_soc_dapm_add_routes(codec, jz4740_codec_dapm_routes, | 308 | snd_soc_dapm_add_routes(dapm, jz4740_codec_dapm_routes, |
308 | ARRAY_SIZE(jz4740_codec_dapm_routes)); | 309 | ARRAY_SIZE(jz4740_codec_dapm_routes)); |
309 | 310 | ||
310 | snd_soc_dapm_new_widgets(codec); | 311 | snd_soc_dapm_new_widgets(codec); |
diff --git a/sound/soc/codecs/max98088.c b/sound/soc/codecs/max98088.c index 470cb93b1d1f..c44b5f70b5e0 100644 --- a/sound/soc/codecs/max98088.c +++ b/sound/soc/codecs/max98088.c | |||
@@ -20,7 +20,6 @@ | |||
20 | #include <sound/pcm.h> | 20 | #include <sound/pcm.h> |
21 | #include <sound/pcm_params.h> | 21 | #include <sound/pcm_params.h> |
22 | #include <sound/soc.h> | 22 | #include <sound/soc.h> |
23 | #include <sound/soc-dapm.h> | ||
24 | #include <sound/initval.h> | 23 | #include <sound/initval.h> |
25 | #include <sound/tlv.h> | 24 | #include <sound/tlv.h> |
26 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
@@ -1230,15 +1229,17 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
1230 | 1229 | ||
1231 | static int max98088_add_widgets(struct snd_soc_codec *codec) | 1230 | static int max98088_add_widgets(struct snd_soc_codec *codec) |
1232 | { | 1231 | { |
1233 | snd_soc_dapm_new_controls(codec, max98088_dapm_widgets, | 1232 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
1233 | |||
1234 | snd_soc_dapm_new_controls(dapm, max98088_dapm_widgets, | ||
1234 | ARRAY_SIZE(max98088_dapm_widgets)); | 1235 | ARRAY_SIZE(max98088_dapm_widgets)); |
1235 | 1236 | ||
1236 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 1237 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
1237 | 1238 | ||
1238 | snd_soc_add_controls(codec, max98088_snd_controls, | 1239 | snd_soc_add_controls(codec, max98088_snd_controls, |
1239 | ARRAY_SIZE(max98088_snd_controls)); | 1240 | ARRAY_SIZE(max98088_snd_controls)); |
1240 | 1241 | ||
1241 | snd_soc_dapm_new_widgets(codec); | 1242 | snd_soc_dapm_new_widgets(dapm); |
1242 | return 0; | 1243 | return 0; |
1243 | } | 1244 | } |
1244 | 1245 | ||
@@ -1623,7 +1624,7 @@ static int max98088_set_bias_level(struct snd_soc_codec *codec, | |||
1623 | break; | 1624 | break; |
1624 | 1625 | ||
1625 | case SND_SOC_BIAS_STANDBY: | 1626 | case SND_SOC_BIAS_STANDBY: |
1626 | if (codec->bias_level == SND_SOC_BIAS_OFF) | 1627 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) |
1627 | max98088_sync_cache(codec); | 1628 | max98088_sync_cache(codec); |
1628 | 1629 | ||
1629 | snd_soc_update_bits(codec, M98088_REG_4C_PWR_EN_IN, | 1630 | snd_soc_update_bits(codec, M98088_REG_4C_PWR_EN_IN, |
@@ -1636,7 +1637,7 @@ static int max98088_set_bias_level(struct snd_soc_codec *codec, | |||
1636 | codec->cache_sync = 1; | 1637 | codec->cache_sync = 1; |
1637 | break; | 1638 | break; |
1638 | } | 1639 | } |
1639 | codec->bias_level = level; | 1640 | codec->dapm.bias_level = level; |
1640 | return 0; | 1641 | return 0; |
1641 | } | 1642 | } |
1642 | 1643 | ||
diff --git a/sound/soc/codecs/ssm2602.c b/sound/soc/codecs/ssm2602.c index 6f38d619bf8a..2727befd158e 100644 --- a/sound/soc/codecs/ssm2602.c +++ b/sound/soc/codecs/ssm2602.c | |||
@@ -38,7 +38,6 @@ | |||
38 | #include <sound/pcm.h> | 38 | #include <sound/pcm.h> |
39 | #include <sound/pcm_params.h> | 39 | #include <sound/pcm_params.h> |
40 | #include <sound/soc.h> | 40 | #include <sound/soc.h> |
41 | #include <sound/soc-dapm.h> | ||
42 | #include <sound/initval.h> | 41 | #include <sound/initval.h> |
43 | 42 | ||
44 | #include "ssm2602.h" | 43 | #include "ssm2602.h" |
@@ -207,10 +206,11 @@ static const struct snd_soc_dapm_route audio_conn[] = { | |||
207 | 206 | ||
208 | static int ssm2602_add_widgets(struct snd_soc_codec *codec) | 207 | static int ssm2602_add_widgets(struct snd_soc_codec *codec) |
209 | { | 208 | { |
210 | snd_soc_dapm_new_controls(codec, ssm2602_dapm_widgets, | 209 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
211 | ARRAY_SIZE(ssm2602_dapm_widgets)); | ||
212 | 210 | ||
213 | snd_soc_dapm_add_routes(codec, audio_conn, ARRAY_SIZE(audio_conn)); | 211 | snd_soc_dapm_new_controls(dapm, ssm2602_dapm_widgets, |
212 | ARRAY_SIZE(ssm2602_dapm_widgets)); | ||
213 | snd_soc_dapm_add_routes(dapm, audio_conn, ARRAY_SIZE(audio_conn)); | ||
214 | 214 | ||
215 | return 0; | 215 | return 0; |
216 | } | 216 | } |
@@ -493,7 +493,7 @@ static int ssm2602_set_bias_level(struct snd_soc_codec *codec, | |||
493 | break; | 493 | break; |
494 | 494 | ||
495 | } | 495 | } |
496 | codec->bias_level = level; | 496 | codec->dapm.bias_level = level; |
497 | return 0; | 497 | return 0; |
498 | } | 498 | } |
499 | 499 | ||
diff --git a/sound/soc/codecs/stac9766.c b/sound/soc/codecs/stac9766.c index 061f9e5a497b..78b2b50271e2 100644 --- a/sound/soc/codecs/stac9766.c +++ b/sound/soc/codecs/stac9766.c | |||
@@ -236,7 +236,7 @@ static int stac9766_set_bias_level(struct snd_soc_codec *codec, | |||
236 | stac9766_ac97_write(codec, AC97_POWERDOWN, 0xffff); | 236 | stac9766_ac97_write(codec, AC97_POWERDOWN, 0xffff); |
237 | break; | 237 | break; |
238 | } | 238 | } |
239 | codec->bias_level = level; | 239 | codec->dapm.bias_level = level; |
240 | return 0; | 240 | return 0; |
241 | } | 241 | } |
242 | 242 | ||
diff --git a/sound/soc/codecs/tlv320aic23.c b/sound/soc/codecs/tlv320aic23.c index e8652b1ae326..54a30ef0ec8b 100644 --- a/sound/soc/codecs/tlv320aic23.c +++ b/sound/soc/codecs/tlv320aic23.c | |||
@@ -30,7 +30,6 @@ | |||
30 | #include <sound/pcm.h> | 30 | #include <sound/pcm.h> |
31 | #include <sound/pcm_params.h> | 31 | #include <sound/pcm_params.h> |
32 | #include <sound/soc.h> | 32 | #include <sound/soc.h> |
33 | #include <sound/soc-dapm.h> | ||
34 | #include <sound/tlv.h> | 33 | #include <sound/tlv.h> |
35 | #include <sound/initval.h> | 34 | #include <sound/initval.h> |
36 | 35 | ||
@@ -391,11 +390,12 @@ static int set_sample_rate_control(struct snd_soc_codec *codec, int mclk, | |||
391 | 390 | ||
392 | static int tlv320aic23_add_widgets(struct snd_soc_codec *codec) | 391 | static int tlv320aic23_add_widgets(struct snd_soc_codec *codec) |
393 | { | 392 | { |
394 | snd_soc_dapm_new_controls(codec, tlv320aic23_dapm_widgets, | 393 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
395 | ARRAY_SIZE(tlv320aic23_dapm_widgets)); | ||
396 | 394 | ||
395 | snd_soc_dapm_new_controls(dapm, tlv320aic23_dapm_widgets, | ||
396 | ARRAY_SIZE(tlv320aic23_dapm_widgets)); | ||
397 | /* set up audio path interconnects */ | 397 | /* set up audio path interconnects */ |
398 | snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); | 398 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); |
399 | 399 | ||
400 | return 0; | 400 | return 0; |
401 | } | 401 | } |
@@ -574,7 +574,7 @@ static int tlv320aic23_set_bias_level(struct snd_soc_codec *codec, | |||
574 | tlv320aic23_write(codec, TLV320AIC23_PWR, 0xffff); | 574 | tlv320aic23_write(codec, TLV320AIC23_PWR, 0xffff); |
575 | break; | 575 | break; |
576 | } | 576 | } |
577 | codec->bias_level = level; | 577 | codec->dapm.bias_level = level; |
578 | return 0; | 578 | return 0; |
579 | } | 579 | } |
580 | 580 | ||
diff --git a/sound/soc/codecs/tlv320aic26.c b/sound/soc/codecs/tlv320aic26.c index 6b7d71ec0004..68f0ae47f608 100644 --- a/sound/soc/codecs/tlv320aic26.c +++ b/sound/soc/codecs/tlv320aic26.c | |||
@@ -18,7 +18,6 @@ | |||
18 | #include <sound/pcm.h> | 18 | #include <sound/pcm.h> |
19 | #include <sound/pcm_params.h> | 19 | #include <sound/pcm_params.h> |
20 | #include <sound/soc.h> | 20 | #include <sound/soc.h> |
21 | #include <sound/soc-dapm.h> | ||
22 | #include <sound/initval.h> | 21 | #include <sound/initval.h> |
23 | 22 | ||
24 | #include "tlv320aic26.h" | 23 | #include "tlv320aic26.h" |
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c index fc687790188b..49b797ccc8d6 100644 --- a/sound/soc/codecs/tlv320aic3x.c +++ b/sound/soc/codecs/tlv320aic3x.c | |||
@@ -46,7 +46,6 @@ | |||
46 | #include <sound/pcm.h> | 46 | #include <sound/pcm.h> |
47 | #include <sound/pcm_params.h> | 47 | #include <sound/pcm_params.h> |
48 | #include <sound/soc.h> | 48 | #include <sound/soc.h> |
49 | #include <sound/soc-dapm.h> | ||
50 | #include <sound/initval.h> | 49 | #include <sound/initval.h> |
51 | #include <sound/tlv.h> | 50 | #include <sound/tlv.h> |
52 | #include <sound/tlv320aic3x.h> | 51 | #include <sound/tlv320aic3x.h> |
@@ -183,7 +182,7 @@ static int snd_soc_dapm_put_volsw_aic3x(struct snd_kcontrol *kcontrol, | |||
183 | 182 | ||
184 | if (snd_soc_test_bits(widget->codec, reg, val_mask, val)) { | 183 | if (snd_soc_test_bits(widget->codec, reg, val_mask, val)) { |
185 | /* find dapm widget path assoc with kcontrol */ | 184 | /* find dapm widget path assoc with kcontrol */ |
186 | list_for_each_entry(path, &widget->codec->dapm_paths, list) { | 185 | list_for_each_entry(path, &widget->dapm->paths, list) { |
187 | if (path->kcontrol != kcontrol) | 186 | if (path->kcontrol != kcontrol) |
188 | continue; | 187 | continue; |
189 | 188 | ||
@@ -199,7 +198,7 @@ static int snd_soc_dapm_put_volsw_aic3x(struct snd_kcontrol *kcontrol, | |||
199 | } | 198 | } |
200 | 199 | ||
201 | if (found) | 200 | if (found) |
202 | snd_soc_dapm_sync(widget->codec); | 201 | snd_soc_dapm_sync(widget->dapm); |
203 | } | 202 | } |
204 | 203 | ||
205 | ret = snd_soc_update_bits(widget->codec, reg, val_mask, val); | 204 | ret = snd_soc_update_bits(widget->codec, reg, val_mask, val); |
@@ -788,17 +787,19 @@ static const struct snd_soc_dapm_route intercon_3007[] = { | |||
788 | static int aic3x_add_widgets(struct snd_soc_codec *codec) | 787 | static int aic3x_add_widgets(struct snd_soc_codec *codec) |
789 | { | 788 | { |
790 | struct aic3x_priv *aic3x = snd_soc_codec_get_drvdata(codec); | 789 | struct aic3x_priv *aic3x = snd_soc_codec_get_drvdata(codec); |
790 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
791 | 791 | ||
792 | snd_soc_dapm_new_controls(codec, aic3x_dapm_widgets, | 792 | snd_soc_dapm_new_controls(dapm, aic3x_dapm_widgets, |
793 | ARRAY_SIZE(aic3x_dapm_widgets)); | 793 | ARRAY_SIZE(aic3x_dapm_widgets)); |
794 | 794 | ||
795 | /* set up audio path interconnects */ | 795 | /* set up audio path interconnects */ |
796 | snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); | 796 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); |
797 | 797 | ||
798 | if (aic3x->model == AIC3X_MODEL_3007) { | 798 | if (aic3x->model == AIC3X_MODEL_3007) { |
799 | snd_soc_dapm_new_controls(codec, aic3007_dapm_widgets, | 799 | snd_soc_dapm_new_controls(dapm, aic3007_dapm_widgets, |
800 | ARRAY_SIZE(aic3007_dapm_widgets)); | 800 | ARRAY_SIZE(aic3007_dapm_widgets)); |
801 | snd_soc_dapm_add_routes(codec, intercon_3007, ARRAY_SIZE(intercon_3007)); | 801 | snd_soc_dapm_add_routes(dapm, intercon_3007, |
802 | ARRAY_SIZE(intercon_3007)); | ||
802 | } | 803 | } |
803 | 804 | ||
804 | return 0; | 805 | return 0; |
@@ -1135,7 +1136,7 @@ static int aic3x_set_bias_level(struct snd_soc_codec *codec, | |||
1135 | case SND_SOC_BIAS_ON: | 1136 | case SND_SOC_BIAS_ON: |
1136 | break; | 1137 | break; |
1137 | case SND_SOC_BIAS_PREPARE: | 1138 | case SND_SOC_BIAS_PREPARE: |
1138 | if (codec->bias_level == SND_SOC_BIAS_STANDBY && | 1139 | if (codec->dapm.bias_level == SND_SOC_BIAS_STANDBY && |
1139 | aic3x->master) { | 1140 | aic3x->master) { |
1140 | /* enable pll */ | 1141 | /* enable pll */ |
1141 | reg = snd_soc_read(codec, AIC3X_PLL_PROGA_REG); | 1142 | reg = snd_soc_read(codec, AIC3X_PLL_PROGA_REG); |
@@ -1146,7 +1147,7 @@ static int aic3x_set_bias_level(struct snd_soc_codec *codec, | |||
1146 | case SND_SOC_BIAS_STANDBY: | 1147 | case SND_SOC_BIAS_STANDBY: |
1147 | if (!aic3x->power) | 1148 | if (!aic3x->power) |
1148 | aic3x_set_power(codec, 1); | 1149 | aic3x_set_power(codec, 1); |
1149 | if (codec->bias_level == SND_SOC_BIAS_PREPARE && | 1150 | if (codec->dapm.bias_level == SND_SOC_BIAS_PREPARE && |
1150 | aic3x->master) { | 1151 | aic3x->master) { |
1151 | /* disable pll */ | 1152 | /* disable pll */ |
1152 | reg = snd_soc_read(codec, AIC3X_PLL_PROGA_REG); | 1153 | reg = snd_soc_read(codec, AIC3X_PLL_PROGA_REG); |
@@ -1159,7 +1160,7 @@ static int aic3x_set_bias_level(struct snd_soc_codec *codec, | |||
1159 | aic3x_set_power(codec, 0); | 1160 | aic3x_set_power(codec, 0); |
1160 | break; | 1161 | break; |
1161 | } | 1162 | } |
1162 | codec->bias_level = level; | 1163 | codec->dapm.bias_level = level; |
1163 | 1164 | ||
1164 | return 0; | 1165 | return 0; |
1165 | } | 1166 | } |
@@ -1351,7 +1352,7 @@ static int aic3x_probe(struct snd_soc_codec *codec) | |||
1351 | 1352 | ||
1352 | codec->control_data = aic3x->control_data; | 1353 | codec->control_data = aic3x->control_data; |
1353 | aic3x->codec = codec; | 1354 | aic3x->codec = codec; |
1354 | codec->idle_bias_off = 1; | 1355 | codec->dapm.idle_bias_off = 1; |
1355 | 1356 | ||
1356 | ret = snd_soc_codec_set_cache_io(codec, 8, 8, aic3x->control_type); | 1357 | ret = snd_soc_codec_set_cache_io(codec, 8, 8, aic3x->control_type); |
1357 | if (ret != 0) { | 1358 | if (ret != 0) { |
@@ -1417,7 +1418,6 @@ err_get: | |||
1417 | if (aic3x->gpio_reset >= 0) | 1418 | if (aic3x->gpio_reset >= 0) |
1418 | gpio_free(aic3x->gpio_reset); | 1419 | gpio_free(aic3x->gpio_reset); |
1419 | err_gpio: | 1420 | err_gpio: |
1420 | kfree(aic3x); | ||
1421 | return ret; | 1421 | return ret; |
1422 | } | 1422 | } |
1423 | 1423 | ||
diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c index c5ab8c805771..ccb267f4e968 100644 --- a/sound/soc/codecs/tlv320dac33.c +++ b/sound/soc/codecs/tlv320dac33.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <sound/pcm.h> | 36 | #include <sound/pcm.h> |
37 | #include <sound/pcm_params.h> | 37 | #include <sound/pcm_params.h> |
38 | #include <sound/soc.h> | 38 | #include <sound/soc.h> |
39 | #include <sound/soc-dapm.h> | ||
40 | #include <sound/initval.h> | 39 | #include <sound/initval.h> |
41 | #include <sound/tlv.h> | 40 | #include <sound/tlv.h> |
42 | 41 | ||
@@ -628,11 +627,12 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
628 | 627 | ||
629 | static int dac33_add_widgets(struct snd_soc_codec *codec) | 628 | static int dac33_add_widgets(struct snd_soc_codec *codec) |
630 | { | 629 | { |
631 | snd_soc_dapm_new_controls(codec, dac33_dapm_widgets, | 630 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
632 | ARRAY_SIZE(dac33_dapm_widgets)); | ||
633 | 631 | ||
632 | snd_soc_dapm_new_controls(dapm, dac33_dapm_widgets, | ||
633 | ARRAY_SIZE(dac33_dapm_widgets)); | ||
634 | /* set up audio path interconnects */ | 634 | /* set up audio path interconnects */ |
635 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 635 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
636 | 636 | ||
637 | return 0; | 637 | return 0; |
638 | } | 638 | } |
@@ -649,7 +649,7 @@ static int dac33_set_bias_level(struct snd_soc_codec *codec, | |||
649 | case SND_SOC_BIAS_PREPARE: | 649 | case SND_SOC_BIAS_PREPARE: |
650 | break; | 650 | break; |
651 | case SND_SOC_BIAS_STANDBY: | 651 | case SND_SOC_BIAS_STANDBY: |
652 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 652 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
653 | /* Coming from OFF, switch on the codec */ | 653 | /* Coming from OFF, switch on the codec */ |
654 | ret = dac33_hard_power(codec, 1); | 654 | ret = dac33_hard_power(codec, 1); |
655 | if (ret != 0) | 655 | if (ret != 0) |
@@ -660,14 +660,14 @@ static int dac33_set_bias_level(struct snd_soc_codec *codec, | |||
660 | break; | 660 | break; |
661 | case SND_SOC_BIAS_OFF: | 661 | case SND_SOC_BIAS_OFF: |
662 | /* Do not power off, when the codec is already off */ | 662 | /* Do not power off, when the codec is already off */ |
663 | if (codec->bias_level == SND_SOC_BIAS_OFF) | 663 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) |
664 | return 0; | 664 | return 0; |
665 | ret = dac33_hard_power(codec, 0); | 665 | ret = dac33_hard_power(codec, 0); |
666 | if (ret != 0) | 666 | if (ret != 0) |
667 | return ret; | 667 | return ret; |
668 | break; | 668 | break; |
669 | } | 669 | } |
670 | codec->bias_level = level; | 670 | codec->dapm.bias_level = level; |
671 | 671 | ||
672 | return 0; | 672 | return 0; |
673 | } | 673 | } |
@@ -1415,7 +1415,7 @@ static int dac33_soc_probe(struct snd_soc_codec *codec) | |||
1415 | 1415 | ||
1416 | codec->control_data = dac33->control_data; | 1416 | codec->control_data = dac33->control_data; |
1417 | codec->hw_write = (hw_write_t) i2c_master_send; | 1417 | codec->hw_write = (hw_write_t) i2c_master_send; |
1418 | codec->idle_bias_off = 1; | 1418 | codec->dapm.idle_bias_off = 1; |
1419 | dac33->codec = codec; | 1419 | dac33->codec = codec; |
1420 | 1420 | ||
1421 | /* Read the tlv320dac33 ID registers */ | 1421 | /* Read the tlv320dac33 ID registers */ |
diff --git a/sound/soc/codecs/tpa6130a2.c b/sound/soc/codecs/tpa6130a2.c index ee4fb201de60..bfef3da95f58 100644 --- a/sound/soc/codecs/tpa6130a2.c +++ b/sound/soc/codecs/tpa6130a2.c | |||
@@ -29,7 +29,6 @@ | |||
29 | #include <linux/slab.h> | 29 | #include <linux/slab.h> |
30 | #include <sound/tpa6130a2-plat.h> | 30 | #include <sound/tpa6130a2-plat.h> |
31 | #include <sound/soc.h> | 31 | #include <sound/soc.h> |
32 | #include <sound/soc-dapm.h> | ||
33 | #include <sound/tlv.h> | 32 | #include <sound/tlv.h> |
34 | 33 | ||
35 | #include "tpa6130a2.h" | 34 | #include "tpa6130a2.h" |
@@ -388,16 +387,17 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
388 | int tpa6130a2_add_controls(struct snd_soc_codec *codec) | 387 | int tpa6130a2_add_controls(struct snd_soc_codec *codec) |
389 | { | 388 | { |
390 | struct tpa6130a2_data *data; | 389 | struct tpa6130a2_data *data; |
390 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
391 | 391 | ||
392 | if (tpa6130a2_client == NULL) | 392 | if (tpa6130a2_client == NULL) |
393 | return -ENODEV; | 393 | return -ENODEV; |
394 | 394 | ||
395 | data = i2c_get_clientdata(tpa6130a2_client); | 395 | data = i2c_get_clientdata(tpa6130a2_client); |
396 | 396 | ||
397 | snd_soc_dapm_new_controls(codec, tpa6130a2_dapm_widgets, | 397 | snd_soc_dapm_new_controls(dapm, tpa6130a2_dapm_widgets, |
398 | ARRAY_SIZE(tpa6130a2_dapm_widgets)); | 398 | ARRAY_SIZE(tpa6130a2_dapm_widgets)); |
399 | 399 | ||
400 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 400 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
401 | 401 | ||
402 | if (data->id == TPA6140A2) | 402 | if (data->id == TPA6140A2) |
403 | return snd_soc_add_controls(codec, tpa6140a2_controls, | 403 | return snd_soc_add_controls(codec, tpa6140a2_controls, |
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c index cbebec6ba1ba..0488d5514cd8 100644 --- a/sound/soc/codecs/twl4030.c +++ b/sound/soc/codecs/twl4030.c | |||
@@ -32,7 +32,6 @@ | |||
32 | #include <sound/pcm.h> | 32 | #include <sound/pcm.h> |
33 | #include <sound/pcm_params.h> | 33 | #include <sound/pcm_params.h> |
34 | #include <sound/soc.h> | 34 | #include <sound/soc.h> |
35 | #include <sound/soc-dapm.h> | ||
36 | #include <sound/initval.h> | 35 | #include <sound/initval.h> |
37 | #include <sound/tlv.h> | 36 | #include <sound/tlv.h> |
38 | 37 | ||
@@ -1621,10 +1620,11 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
1621 | 1620 | ||
1622 | static int twl4030_add_widgets(struct snd_soc_codec *codec) | 1621 | static int twl4030_add_widgets(struct snd_soc_codec *codec) |
1623 | { | 1622 | { |
1624 | snd_soc_dapm_new_controls(codec, twl4030_dapm_widgets, | 1623 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
1625 | ARRAY_SIZE(twl4030_dapm_widgets)); | ||
1626 | 1624 | ||
1627 | snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); | 1625 | snd_soc_dapm_new_controls(dapm, twl4030_dapm_widgets, |
1626 | ARRAY_SIZE(twl4030_dapm_widgets)); | ||
1627 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); | ||
1628 | 1628 | ||
1629 | return 0; | 1629 | return 0; |
1630 | } | 1630 | } |
@@ -1638,14 +1638,14 @@ static int twl4030_set_bias_level(struct snd_soc_codec *codec, | |||
1638 | case SND_SOC_BIAS_PREPARE: | 1638 | case SND_SOC_BIAS_PREPARE: |
1639 | break; | 1639 | break; |
1640 | case SND_SOC_BIAS_STANDBY: | 1640 | case SND_SOC_BIAS_STANDBY: |
1641 | if (codec->bias_level == SND_SOC_BIAS_OFF) | 1641 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) |
1642 | twl4030_codec_enable(codec, 1); | 1642 | twl4030_codec_enable(codec, 1); |
1643 | break; | 1643 | break; |
1644 | case SND_SOC_BIAS_OFF: | 1644 | case SND_SOC_BIAS_OFF: |
1645 | twl4030_codec_enable(codec, 0); | 1645 | twl4030_codec_enable(codec, 0); |
1646 | break; | 1646 | break; |
1647 | } | 1647 | } |
1648 | codec->bias_level = level; | 1648 | codec->dapm.bias_level = level; |
1649 | 1649 | ||
1650 | return 0; | 1650 | return 0; |
1651 | } | 1651 | } |
@@ -2245,7 +2245,7 @@ static int twl4030_soc_probe(struct snd_soc_codec *codec) | |||
2245 | snd_soc_codec_set_drvdata(codec, twl4030); | 2245 | snd_soc_codec_set_drvdata(codec, twl4030); |
2246 | /* Set the defaults, and power up the codec */ | 2246 | /* Set the defaults, and power up the codec */ |
2247 | twl4030->sysclk = twl4030_codec_get_mclk() / 1000; | 2247 | twl4030->sysclk = twl4030_codec_get_mclk() / 1000; |
2248 | codec->idle_bias_off = 1; | 2248 | codec->dapm.idle_bias_off = 1; |
2249 | 2249 | ||
2250 | twl4030_init_chip(codec); | 2250 | twl4030_init_chip(codec); |
2251 | 2251 | ||
diff --git a/sound/soc/codecs/twl6040.c b/sound/soc/codecs/twl6040.c index 10f6e5214511..b92f2b737e4c 100644 --- a/sound/soc/codecs/twl6040.c +++ b/sound/soc/codecs/twl6040.c | |||
@@ -34,7 +34,6 @@ | |||
34 | #include <sound/pcm.h> | 34 | #include <sound/pcm.h> |
35 | #include <sound/pcm_params.h> | 35 | #include <sound/pcm_params.h> |
36 | #include <sound/soc.h> | 36 | #include <sound/soc.h> |
37 | #include <sound/soc-dapm.h> | ||
38 | #include <sound/initval.h> | 37 | #include <sound/initval.h> |
39 | #include <sound/tlv.h> | 38 | #include <sound/tlv.h> |
40 | 39 | ||
@@ -641,12 +640,12 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
641 | 640 | ||
642 | static int twl6040_add_widgets(struct snd_soc_codec *codec) | 641 | static int twl6040_add_widgets(struct snd_soc_codec *codec) |
643 | { | 642 | { |
644 | snd_soc_dapm_new_controls(codec, twl6040_dapm_widgets, | 643 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
645 | ARRAY_SIZE(twl6040_dapm_widgets)); | ||
646 | |||
647 | snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); | ||
648 | 644 | ||
649 | snd_soc_dapm_new_widgets(codec); | 645 | snd_soc_dapm_new_controls(dapm, twl6040_dapm_widgets, |
646 | ARRAY_SIZE(twl6040_dapm_widgets)); | ||
647 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); | ||
648 | snd_soc_dapm_new_widgets(dapm); | ||
650 | 649 | ||
651 | return 0; | 650 | return 0; |
652 | } | 651 | } |
@@ -739,7 +738,7 @@ static int twl6040_set_bias_level(struct snd_soc_codec *codec, | |||
739 | break; | 738 | break; |
740 | } | 739 | } |
741 | 740 | ||
742 | codec->bias_level = level; | 741 | codec->dapm.bias_level = level; |
743 | 742 | ||
744 | return 0; | 743 | return 0; |
745 | } | 744 | } |
diff --git a/sound/soc/codecs/uda134x.c b/sound/soc/codecs/uda134x.c index 464f0cfa4c7a..e76847a9438b 100644 --- a/sound/soc/codecs/uda134x.c +++ b/sound/soc/codecs/uda134x.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <sound/pcm.h> | 19 | #include <sound/pcm.h> |
20 | #include <sound/pcm_params.h> | 20 | #include <sound/pcm_params.h> |
21 | #include <sound/soc.h> | 21 | #include <sound/soc.h> |
22 | #include <sound/soc-dapm.h> | ||
23 | #include <sound/initval.h> | 22 | #include <sound/initval.h> |
24 | 23 | ||
25 | #include <sound/uda134x.h> | 24 | #include <sound/uda134x.h> |
@@ -389,7 +388,7 @@ static int uda134x_set_bias_level(struct snd_soc_codec *codec, | |||
389 | pd->power(0); | 388 | pd->power(0); |
390 | break; | 389 | break; |
391 | } | 390 | } |
392 | codec->bias_level = level; | 391 | codec->dapm.bias_level = level; |
393 | return 0; | 392 | return 0; |
394 | } | 393 | } |
395 | 394 | ||
diff --git a/sound/soc/codecs/uda1380.c b/sound/soc/codecs/uda1380.c index 0c6c725736c6..800980e2e9ab 100644 --- a/sound/soc/codecs/uda1380.c +++ b/sound/soc/codecs/uda1380.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <sound/control.h> | 27 | #include <sound/control.h> |
28 | #include <sound/initval.h> | 28 | #include <sound/initval.h> |
29 | #include <sound/soc.h> | 29 | #include <sound/soc.h> |
30 | #include <sound/soc-dapm.h> | ||
31 | #include <sound/tlv.h> | 30 | #include <sound/tlv.h> |
32 | #include <sound/uda1380.h> | 31 | #include <sound/uda1380.h> |
33 | 32 | ||
@@ -414,10 +413,11 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
414 | 413 | ||
415 | static int uda1380_add_widgets(struct snd_soc_codec *codec) | 414 | static int uda1380_add_widgets(struct snd_soc_codec *codec) |
416 | { | 415 | { |
417 | snd_soc_dapm_new_controls(codec, uda1380_dapm_widgets, | 416 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
418 | ARRAY_SIZE(uda1380_dapm_widgets)); | ||
419 | 417 | ||
420 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 418 | snd_soc_dapm_new_controls(dapm, uda1380_dapm_widgets, |
419 | ARRAY_SIZE(uda1380_dapm_widgets)); | ||
420 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); | ||
421 | 421 | ||
422 | return 0; | 422 | return 0; |
423 | } | 423 | } |
@@ -603,7 +603,7 @@ static int uda1380_set_bias_level(struct snd_soc_codec *codec, | |||
603 | int reg; | 603 | int reg; |
604 | struct uda1380_platform_data *pdata = codec->dev->platform_data; | 604 | struct uda1380_platform_data *pdata = codec->dev->platform_data; |
605 | 605 | ||
606 | if (codec->bias_level == level) | 606 | if (codec->dapm.bias_level == level) |
607 | return 0; | 607 | return 0; |
608 | 608 | ||
609 | switch (level) { | 609 | switch (level) { |
@@ -613,7 +613,7 @@ static int uda1380_set_bias_level(struct snd_soc_codec *codec, | |||
613 | uda1380_write(codec, UDA1380_PM, R02_PON_BIAS | pm); | 613 | uda1380_write(codec, UDA1380_PM, R02_PON_BIAS | pm); |
614 | break; | 614 | break; |
615 | case SND_SOC_BIAS_STANDBY: | 615 | case SND_SOC_BIAS_STANDBY: |
616 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 616 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
617 | if (gpio_is_valid(pdata->gpio_power)) { | 617 | if (gpio_is_valid(pdata->gpio_power)) { |
618 | gpio_set_value(pdata->gpio_power, 1); | 618 | gpio_set_value(pdata->gpio_power, 1); |
619 | mdelay(1); | 619 | mdelay(1); |
@@ -636,7 +636,7 @@ static int uda1380_set_bias_level(struct snd_soc_codec *codec, | |||
636 | for (reg = UDA1380_MVOL; reg < UDA1380_CACHEREGNUM; reg++) | 636 | for (reg = UDA1380_MVOL; reg < UDA1380_CACHEREGNUM; reg++) |
637 | set_bit(reg - 0x10, &uda1380_cache_dirty); | 637 | set_bit(reg - 0x10, &uda1380_cache_dirty); |
638 | } | 638 | } |
639 | codec->bias_level = level; | 639 | codec->dapm.bias_level = level; |
640 | return 0; | 640 | return 0; |
641 | } | 641 | } |
642 | 642 | ||
diff --git a/sound/soc/codecs/wl1273.c b/sound/soc/codecs/wl1273.c index 0c47c788ccdf..d3ffa2f0122a 100644 --- a/sound/soc/codecs/wl1273.c +++ b/sound/soc/codecs/wl1273.c | |||
@@ -25,8 +25,7 @@ | |||
25 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
26 | #include <sound/pcm.h> | 26 | #include <sound/pcm.h> |
27 | #include <sound/pcm_params.h> | 27 | #include <sound/pcm_params.h> |
28 | #include <sound/soc-dai.h> | 28 | #include <sound/soc.h> |
29 | #include <sound/soc-dapm.h> | ||
30 | #include <sound/initval.h> | 29 | #include <sound/initval.h> |
31 | 30 | ||
32 | #include "wl1273.h" | 31 | #include "wl1273.h" |
diff --git a/sound/soc/codecs/wm2000.c b/sound/soc/codecs/wm2000.c index 4bcd168794e1..80ddf4fd23db 100644 --- a/sound/soc/codecs/wm2000.c +++ b/sound/soc/codecs/wm2000.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <sound/pcm.h> | 36 | #include <sound/pcm.h> |
37 | #include <sound/pcm_params.h> | 37 | #include <sound/pcm_params.h> |
38 | #include <sound/soc.h> | 38 | #include <sound/soc.h> |
39 | #include <sound/soc-dapm.h> | ||
40 | #include <sound/initval.h> | 39 | #include <sound/initval.h> |
41 | #include <sound/tlv.h> | 40 | #include <sound/tlv.h> |
42 | 41 | ||
@@ -705,6 +704,7 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
705 | /* Called from the machine driver */ | 704 | /* Called from the machine driver */ |
706 | int wm2000_add_controls(struct snd_soc_codec *codec) | 705 | int wm2000_add_controls(struct snd_soc_codec *codec) |
707 | { | 706 | { |
707 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
708 | int ret; | 708 | int ret; |
709 | 709 | ||
710 | if (!wm2000_i2c) { | 710 | if (!wm2000_i2c) { |
@@ -712,12 +712,12 @@ int wm2000_add_controls(struct snd_soc_codec *codec) | |||
712 | return -ENODEV; | 712 | return -ENODEV; |
713 | } | 713 | } |
714 | 714 | ||
715 | ret = snd_soc_dapm_new_controls(codec, wm2000_dapm_widgets, | 715 | ret = snd_soc_dapm_new_controls(dapm, wm2000_dapm_widgets, |
716 | ARRAY_SIZE(wm2000_dapm_widgets)); | 716 | ARRAY_SIZE(wm2000_dapm_widgets)); |
717 | if (ret < 0) | 717 | if (ret < 0) |
718 | return ret; | 718 | return ret; |
719 | 719 | ||
720 | ret = snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 720 | ret = snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
721 | if (ret < 0) | 721 | if (ret < 0) |
722 | return ret; | 722 | return ret; |
723 | 723 | ||
diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c index 7611add7f8c3..dc6912e9b667 100644 --- a/sound/soc/codecs/wm8350.c +++ b/sound/soc/codecs/wm8350.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <sound/pcm.h> | 24 | #include <sound/pcm.h> |
25 | #include <sound/pcm_params.h> | 25 | #include <sound/pcm_params.h> |
26 | #include <sound/soc.h> | 26 | #include <sound/soc.h> |
27 | #include <sound/soc-dapm.h> | ||
28 | #include <sound/initval.h> | 27 | #include <sound/initval.h> |
29 | #include <sound/tlv.h> | 28 | #include <sound/tlv.h> |
30 | 29 | ||
@@ -230,8 +229,9 @@ static inline int wm8350_out2_ramp_step(struct snd_soc_codec *codec) | |||
230 | */ | 229 | */ |
231 | static void wm8350_pga_work(struct work_struct *work) | 230 | static void wm8350_pga_work(struct work_struct *work) |
232 | { | 231 | { |
233 | struct snd_soc_codec *codec = | 232 | struct snd_soc_dapm_context *dapm = |
234 | container_of(work, struct snd_soc_codec, delayed_work.work); | 233 | container_of(work, struct snd_soc_dapm_context, delayed_work.work); |
234 | struct snd_soc_codec *codec = dapm->codec; | ||
235 | struct wm8350_data *wm8350_data = snd_soc_codec_get_drvdata(codec); | 235 | struct wm8350_data *wm8350_data = snd_soc_codec_get_drvdata(codec); |
236 | struct wm8350_output *out1 = &wm8350_data->out1, | 236 | struct wm8350_output *out1 = &wm8350_data->out1, |
237 | *out2 = &wm8350_data->out2; | 237 | *out2 = &wm8350_data->out2; |
@@ -302,8 +302,8 @@ static int pga_event(struct snd_soc_dapm_widget *w, | |||
302 | out->ramp = WM8350_RAMP_UP; | 302 | out->ramp = WM8350_RAMP_UP; |
303 | out->active = 1; | 303 | out->active = 1; |
304 | 304 | ||
305 | if (!delayed_work_pending(&codec->delayed_work)) | 305 | if (!delayed_work_pending(&codec->dapm.delayed_work)) |
306 | schedule_delayed_work(&codec->delayed_work, | 306 | schedule_delayed_work(&codec->dapm.delayed_work, |
307 | msecs_to_jiffies(1)); | 307 | msecs_to_jiffies(1)); |
308 | break; | 308 | break; |
309 | 309 | ||
@@ -311,8 +311,8 @@ static int pga_event(struct snd_soc_dapm_widget *w, | |||
311 | out->ramp = WM8350_RAMP_DOWN; | 311 | out->ramp = WM8350_RAMP_DOWN; |
312 | out->active = 0; | 312 | out->active = 0; |
313 | 313 | ||
314 | if (!delayed_work_pending(&codec->delayed_work)) | 314 | if (!delayed_work_pending(&codec->dapm.delayed_work)) |
315 | schedule_delayed_work(&codec->delayed_work, | 315 | schedule_delayed_work(&codec->dapm.delayed_work, |
316 | msecs_to_jiffies(1)); | 316 | msecs_to_jiffies(1)); |
317 | break; | 317 | break; |
318 | } | 318 | } |
@@ -786,9 +786,10 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
786 | 786 | ||
787 | static int wm8350_add_widgets(struct snd_soc_codec *codec) | 787 | static int wm8350_add_widgets(struct snd_soc_codec *codec) |
788 | { | 788 | { |
789 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
789 | int ret; | 790 | int ret; |
790 | 791 | ||
791 | ret = snd_soc_dapm_new_controls(codec, | 792 | ret = snd_soc_dapm_new_controls(dapm, |
792 | wm8350_dapm_widgets, | 793 | wm8350_dapm_widgets, |
793 | ARRAY_SIZE(wm8350_dapm_widgets)); | 794 | ARRAY_SIZE(wm8350_dapm_widgets)); |
794 | if (ret != 0) { | 795 | if (ret != 0) { |
@@ -797,7 +798,7 @@ static int wm8350_add_widgets(struct snd_soc_codec *codec) | |||
797 | } | 798 | } |
798 | 799 | ||
799 | /* set up audio paths */ | 800 | /* set up audio paths */ |
800 | ret = snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 801 | ret = snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
801 | if (ret != 0) { | 802 | if (ret != 0) { |
802 | dev_err(codec->dev, "DAPM route register failed\n"); | 803 | dev_err(codec->dev, "DAPM route register failed\n"); |
803 | return ret; | 804 | return ret; |
@@ -1184,7 +1185,7 @@ static int wm8350_set_bias_level(struct snd_soc_codec *codec, | |||
1184 | break; | 1185 | break; |
1185 | 1186 | ||
1186 | case SND_SOC_BIAS_STANDBY: | 1187 | case SND_SOC_BIAS_STANDBY: |
1187 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 1188 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
1188 | ret = regulator_bulk_enable(ARRAY_SIZE(priv->supplies), | 1189 | ret = regulator_bulk_enable(ARRAY_SIZE(priv->supplies), |
1189 | priv->supplies); | 1190 | priv->supplies); |
1190 | if (ret != 0) | 1191 | if (ret != 0) |
@@ -1317,7 +1318,7 @@ static int wm8350_set_bias_level(struct snd_soc_codec *codec, | |||
1317 | priv->supplies); | 1318 | priv->supplies); |
1318 | break; | 1319 | break; |
1319 | } | 1320 | } |
1320 | codec->bias_level = level; | 1321 | codec->dapm.bias_level = level; |
1321 | return 0; | 1322 | return 0; |
1322 | } | 1323 | } |
1323 | 1324 | ||
@@ -1550,7 +1551,7 @@ static int wm8350_codec_probe(struct snd_soc_codec *codec) | |||
1550 | /* Put the codec into reset if it wasn't already */ | 1551 | /* Put the codec into reset if it wasn't already */ |
1551 | wm8350_clear_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA); | 1552 | wm8350_clear_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA); |
1552 | 1553 | ||
1553 | INIT_DELAYED_WORK(&codec->delayed_work, wm8350_pga_work); | 1554 | INIT_DELAYED_WORK(&codec->dapm.delayed_work, wm8350_pga_work); |
1554 | 1555 | ||
1555 | /* Enable the codec */ | 1556 | /* Enable the codec */ |
1556 | wm8350_set_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA); | 1557 | wm8350_set_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA); |
@@ -1642,12 +1643,12 @@ static int wm8350_codec_remove(struct snd_soc_codec *codec) | |||
1642 | priv->mic.jack = NULL; | 1643 | priv->mic.jack = NULL; |
1643 | 1644 | ||
1644 | /* cancel any work waiting to be queued. */ | 1645 | /* cancel any work waiting to be queued. */ |
1645 | ret = cancel_delayed_work(&codec->delayed_work); | 1646 | ret = cancel_delayed_work(&codec->dapm.delayed_work); |
1646 | 1647 | ||
1647 | /* if there was any work waiting then we run it now and | 1648 | /* if there was any work waiting then we run it now and |
1648 | * wait for its completion */ | 1649 | * wait for its completion */ |
1649 | if (ret) { | 1650 | if (ret) { |
1650 | schedule_delayed_work(&codec->delayed_work, 0); | 1651 | schedule_delayed_work(&codec->dapm.delayed_work, 0); |
1651 | flush_scheduled_work(); | 1652 | flush_scheduled_work(); |
1652 | } | 1653 | } |
1653 | 1654 | ||
diff --git a/sound/soc/codecs/wm8400.c b/sound/soc/codecs/wm8400.c index 850299786e02..3c3bc079167e 100644 --- a/sound/soc/codecs/wm8400.c +++ b/sound/soc/codecs/wm8400.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <sound/pcm.h> | 26 | #include <sound/pcm.h> |
27 | #include <sound/pcm_params.h> | 27 | #include <sound/pcm_params.h> |
28 | #include <sound/soc.h> | 28 | #include <sound/soc.h> |
29 | #include <sound/soc-dapm.h> | ||
30 | #include <sound/initval.h> | 29 | #include <sound/initval.h> |
31 | #include <sound/tlv.h> | 30 | #include <sound/tlv.h> |
32 | 31 | ||
@@ -911,10 +910,11 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
911 | 910 | ||
912 | static int wm8400_add_widgets(struct snd_soc_codec *codec) | 911 | static int wm8400_add_widgets(struct snd_soc_codec *codec) |
913 | { | 912 | { |
914 | snd_soc_dapm_new_controls(codec, wm8400_dapm_widgets, | 913 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
915 | ARRAY_SIZE(wm8400_dapm_widgets)); | ||
916 | 914 | ||
917 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 915 | snd_soc_dapm_new_controls(dapm, wm8400_dapm_widgets, |
916 | ARRAY_SIZE(wm8400_dapm_widgets)); | ||
917 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); | ||
918 | 918 | ||
919 | return 0; | 919 | return 0; |
920 | } | 920 | } |
@@ -1219,7 +1219,7 @@ static int wm8400_set_bias_level(struct snd_soc_codec *codec, | |||
1219 | break; | 1219 | break; |
1220 | 1220 | ||
1221 | case SND_SOC_BIAS_STANDBY: | 1221 | case SND_SOC_BIAS_STANDBY: |
1222 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 1222 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
1223 | ret = regulator_bulk_enable(ARRAY_SIZE(power), | 1223 | ret = regulator_bulk_enable(ARRAY_SIZE(power), |
1224 | &power[0]); | 1224 | &power[0]); |
1225 | if (ret != 0) { | 1225 | if (ret != 0) { |
@@ -1306,7 +1306,7 @@ static int wm8400_set_bias_level(struct snd_soc_codec *codec, | |||
1306 | break; | 1306 | break; |
1307 | } | 1307 | } |
1308 | 1308 | ||
1309 | codec->bias_level = level; | 1309 | codec->dapm.bias_level = level; |
1310 | return 0; | 1310 | return 0; |
1311 | } | 1311 | } |
1312 | 1312 | ||
diff --git a/sound/soc/codecs/wm8510.c b/sound/soc/codecs/wm8510.c index 8f107095760e..db0dced74843 100644 --- a/sound/soc/codecs/wm8510.c +++ b/sound/soc/codecs/wm8510.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <sound/pcm.h> | 24 | #include <sound/pcm.h> |
25 | #include <sound/pcm_params.h> | 25 | #include <sound/pcm_params.h> |
26 | #include <sound/soc.h> | 26 | #include <sound/soc.h> |
27 | #include <sound/soc-dapm.h> | ||
28 | #include <sound/initval.h> | 27 | #include <sound/initval.h> |
29 | 28 | ||
30 | #include "wm8510.h" | 29 | #include "wm8510.h" |
@@ -216,10 +215,11 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
216 | 215 | ||
217 | static int wm8510_add_widgets(struct snd_soc_codec *codec) | 216 | static int wm8510_add_widgets(struct snd_soc_codec *codec) |
218 | { | 217 | { |
219 | snd_soc_dapm_new_controls(codec, wm8510_dapm_widgets, | 218 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
220 | ARRAY_SIZE(wm8510_dapm_widgets)); | ||
221 | 219 | ||
222 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 220 | snd_soc_dapm_new_controls(dapm, wm8510_dapm_widgets, |
221 | ARRAY_SIZE(wm8510_dapm_widgets)); | ||
222 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); | ||
223 | 223 | ||
224 | return 0; | 224 | return 0; |
225 | } | 225 | } |
@@ -478,7 +478,7 @@ static int wm8510_set_bias_level(struct snd_soc_codec *codec, | |||
478 | case SND_SOC_BIAS_STANDBY: | 478 | case SND_SOC_BIAS_STANDBY: |
479 | power1 |= WM8510_POWER1_BIASEN | WM8510_POWER1_BUFIOEN; | 479 | power1 |= WM8510_POWER1_BIASEN | WM8510_POWER1_BUFIOEN; |
480 | 480 | ||
481 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 481 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
482 | /* Initial cap charge at VMID 5k */ | 482 | /* Initial cap charge at VMID 5k */ |
483 | snd_soc_write(codec, WM8510_POWER1, power1 | 0x3); | 483 | snd_soc_write(codec, WM8510_POWER1, power1 | 0x3); |
484 | mdelay(100); | 484 | mdelay(100); |
@@ -495,7 +495,7 @@ static int wm8510_set_bias_level(struct snd_soc_codec *codec, | |||
495 | break; | 495 | break; |
496 | } | 496 | } |
497 | 497 | ||
498 | codec->bias_level = level; | 498 | codec->dapm.bias_level = level; |
499 | return 0; | 499 | return 0; |
500 | } | 500 | } |
501 | 501 | ||
diff --git a/sound/soc/codecs/wm8523.c b/sound/soc/codecs/wm8523.c index 9a433a5396cb..08f3189f4b3f 100644 --- a/sound/soc/codecs/wm8523.c +++ b/sound/soc/codecs/wm8523.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <sound/pcm.h> | 24 | #include <sound/pcm.h> |
25 | #include <sound/pcm_params.h> | 25 | #include <sound/pcm_params.h> |
26 | #include <sound/soc.h> | 26 | #include <sound/soc.h> |
27 | #include <sound/soc-dapm.h> | ||
28 | #include <sound/initval.h> | 27 | #include <sound/initval.h> |
29 | #include <sound/tlv.h> | 28 | #include <sound/tlv.h> |
30 | 29 | ||
@@ -110,10 +109,11 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
110 | 109 | ||
111 | static int wm8523_add_widgets(struct snd_soc_codec *codec) | 110 | static int wm8523_add_widgets(struct snd_soc_codec *codec) |
112 | { | 111 | { |
113 | snd_soc_dapm_new_controls(codec, wm8523_dapm_widgets, | 112 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
114 | ARRAY_SIZE(wm8523_dapm_widgets)); | ||
115 | 113 | ||
116 | snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); | 114 | snd_soc_dapm_new_controls(dapm, wm8523_dapm_widgets, |
115 | ARRAY_SIZE(wm8523_dapm_widgets)); | ||
116 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); | ||
117 | 117 | ||
118 | return 0; | 118 | return 0; |
119 | } | 119 | } |
@@ -327,7 +327,7 @@ static int wm8523_set_bias_level(struct snd_soc_codec *codec, | |||
327 | break; | 327 | break; |
328 | 328 | ||
329 | case SND_SOC_BIAS_STANDBY: | 329 | case SND_SOC_BIAS_STANDBY: |
330 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 330 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
331 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8523->supplies), | 331 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8523->supplies), |
332 | wm8523->supplies); | 332 | wm8523->supplies); |
333 | if (ret != 0) { | 333 | if (ret != 0) { |
@@ -366,7 +366,7 @@ static int wm8523_set_bias_level(struct snd_soc_codec *codec, | |||
366 | wm8523->supplies); | 366 | wm8523->supplies); |
367 | break; | 367 | break; |
368 | } | 368 | } |
369 | codec->bias_level = level; | 369 | codec->dapm.bias_level = level; |
370 | return 0; | 370 | return 0; |
371 | } | 371 | } |
372 | 372 | ||
diff --git a/sound/soc/codecs/wm8580.c b/sound/soc/codecs/wm8580.c index a2e0ed59b376..e2a927684b48 100644 --- a/sound/soc/codecs/wm8580.c +++ b/sound/soc/codecs/wm8580.c | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <sound/pcm.h> | 31 | #include <sound/pcm.h> |
32 | #include <sound/pcm_params.h> | 32 | #include <sound/pcm_params.h> |
33 | #include <sound/soc.h> | 33 | #include <sound/soc.h> |
34 | #include <sound/soc-dapm.h> | ||
35 | #include <sound/tlv.h> | 34 | #include <sound/tlv.h> |
36 | #include <sound/initval.h> | 35 | #include <sound/initval.h> |
37 | #include <asm/div64.h> | 36 | #include <asm/div64.h> |
@@ -302,10 +301,11 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
302 | 301 | ||
303 | static int wm8580_add_widgets(struct snd_soc_codec *codec) | 302 | static int wm8580_add_widgets(struct snd_soc_codec *codec) |
304 | { | 303 | { |
305 | snd_soc_dapm_new_controls(codec, wm8580_dapm_widgets, | 304 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
306 | ARRAY_SIZE(wm8580_dapm_widgets)); | ||
307 | 305 | ||
308 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 306 | snd_soc_dapm_new_controls(dapm, wm8580_dapm_widgets, |
307 | ARRAY_SIZE(wm8580_dapm_widgets)); | ||
308 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); | ||
309 | 309 | ||
310 | return 0; | 310 | return 0; |
311 | } | 311 | } |
@@ -767,7 +767,7 @@ static int wm8580_set_bias_level(struct snd_soc_codec *codec, | |||
767 | break; | 767 | break; |
768 | 768 | ||
769 | case SND_SOC_BIAS_STANDBY: | 769 | case SND_SOC_BIAS_STANDBY: |
770 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 770 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
771 | /* Power up and get individual control of the DACs */ | 771 | /* Power up and get individual control of the DACs */ |
772 | reg = snd_soc_read(codec, WM8580_PWRDN1); | 772 | reg = snd_soc_read(codec, WM8580_PWRDN1); |
773 | reg &= ~(WM8580_PWRDN1_PWDN | WM8580_PWRDN1_ALLDACPD); | 773 | reg &= ~(WM8580_PWRDN1_PWDN | WM8580_PWRDN1_ALLDACPD); |
@@ -785,7 +785,7 @@ static int wm8580_set_bias_level(struct snd_soc_codec *codec, | |||
785 | snd_soc_write(codec, WM8580_PWRDN1, reg | WM8580_PWRDN1_PWDN); | 785 | snd_soc_write(codec, WM8580_PWRDN1, reg | WM8580_PWRDN1_PWDN); |
786 | break; | 786 | break; |
787 | } | 787 | } |
788 | codec->bias_level = level; | 788 | codec->dapm.bias_level = level; |
789 | return 0; | 789 | return 0; |
790 | } | 790 | } |
791 | 791 | ||
@@ -905,7 +905,7 @@ static struct snd_soc_codec_driver soc_codec_dev_wm8580 = { | |||
905 | .set_bias_level = wm8580_set_bias_level, | 905 | .set_bias_level = wm8580_set_bias_level, |
906 | .reg_cache_size = ARRAY_SIZE(wm8580_reg), | 906 | .reg_cache_size = ARRAY_SIZE(wm8580_reg), |
907 | .reg_word_size = sizeof(u16), | 907 | .reg_word_size = sizeof(u16), |
908 | .reg_cache_default = &wm8580_reg, | 908 | .reg_cache_default = wm8580_reg, |
909 | }; | 909 | }; |
910 | 910 | ||
911 | #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) | 911 | #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) |
diff --git a/sound/soc/codecs/wm8711.c b/sound/soc/codecs/wm8711.c index 54fbd76c8bca..fec37ebfdb34 100644 --- a/sound/soc/codecs/wm8711.c +++ b/sound/soc/codecs/wm8711.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #include <sound/pcm.h> | 25 | #include <sound/pcm.h> |
26 | #include <sound/pcm_params.h> | 26 | #include <sound/pcm_params.h> |
27 | #include <sound/soc.h> | 27 | #include <sound/soc.h> |
28 | #include <sound/soc-dapm.h> | ||
29 | #include <sound/tlv.h> | 28 | #include <sound/tlv.h> |
30 | #include <sound/initval.h> | 29 | #include <sound/initval.h> |
31 | 30 | ||
@@ -93,10 +92,11 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
93 | 92 | ||
94 | static int wm8711_add_widgets(struct snd_soc_codec *codec) | 93 | static int wm8711_add_widgets(struct snd_soc_codec *codec) |
95 | { | 94 | { |
96 | snd_soc_dapm_new_controls(codec, wm8711_dapm_widgets, | 95 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
97 | ARRAY_SIZE(wm8711_dapm_widgets)); | ||
98 | 96 | ||
99 | snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); | 97 | snd_soc_dapm_new_controls(dapm, wm8711_dapm_widgets, |
98 | ARRAY_SIZE(wm8711_dapm_widgets)); | ||
99 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); | ||
100 | 100 | ||
101 | return 0; | 101 | return 0; |
102 | } | 102 | } |
@@ -318,7 +318,7 @@ static int wm8711_set_bias_level(struct snd_soc_codec *codec, | |||
318 | snd_soc_write(codec, WM8711_PWR, 0xffff); | 318 | snd_soc_write(codec, WM8711_PWR, 0xffff); |
319 | break; | 319 | break; |
320 | } | 320 | } |
321 | codec->bias_level = level; | 321 | codec->dapm.bias_level = level; |
322 | return 0; | 322 | return 0; |
323 | } | 323 | } |
324 | 324 | ||
diff --git a/sound/soc/codecs/wm8728.c b/sound/soc/codecs/wm8728.c index 075f35e4f4cb..736b0352d0a7 100644 --- a/sound/soc/codecs/wm8728.c +++ b/sound/soc/codecs/wm8728.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <sound/pcm.h> | 23 | #include <sound/pcm.h> |
24 | #include <sound/pcm_params.h> | 24 | #include <sound/pcm_params.h> |
25 | #include <sound/soc.h> | 25 | #include <sound/soc.h> |
26 | #include <sound/soc-dapm.h> | ||
27 | #include <sound/initval.h> | 26 | #include <sound/initval.h> |
28 | #include <sound/tlv.h> | 27 | #include <sound/tlv.h> |
29 | 28 | ||
@@ -73,10 +72,11 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
73 | 72 | ||
74 | static int wm8728_add_widgets(struct snd_soc_codec *codec) | 73 | static int wm8728_add_widgets(struct snd_soc_codec *codec) |
75 | { | 74 | { |
76 | snd_soc_dapm_new_controls(codec, wm8728_dapm_widgets, | 75 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
77 | ARRAY_SIZE(wm8728_dapm_widgets)); | ||
78 | 76 | ||
79 | snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); | 77 | snd_soc_dapm_new_controls(dapm, wm8728_dapm_widgets, |
78 | ARRAY_SIZE(wm8728_dapm_widgets)); | ||
79 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); | ||
80 | 80 | ||
81 | return 0; | 81 | return 0; |
82 | } | 82 | } |
@@ -180,7 +180,7 @@ static int wm8728_set_bias_level(struct snd_soc_codec *codec, | |||
180 | case SND_SOC_BIAS_ON: | 180 | case SND_SOC_BIAS_ON: |
181 | case SND_SOC_BIAS_PREPARE: | 181 | case SND_SOC_BIAS_PREPARE: |
182 | case SND_SOC_BIAS_STANDBY: | 182 | case SND_SOC_BIAS_STANDBY: |
183 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 183 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
184 | /* Power everything up... */ | 184 | /* Power everything up... */ |
185 | reg = snd_soc_read(codec, WM8728_DACCTL); | 185 | reg = snd_soc_read(codec, WM8728_DACCTL); |
186 | snd_soc_write(codec, WM8728_DACCTL, reg & ~0x4); | 186 | snd_soc_write(codec, WM8728_DACCTL, reg & ~0x4); |
@@ -197,7 +197,7 @@ static int wm8728_set_bias_level(struct snd_soc_codec *codec, | |||
197 | snd_soc_write(codec, WM8728_DACCTL, reg | 0x4); | 197 | snd_soc_write(codec, WM8728_DACCTL, reg | 0x4); |
198 | break; | 198 | break; |
199 | } | 199 | } |
200 | codec->bias_level = level; | 200 | codec->dapm.bias_level = level; |
201 | return 0; | 201 | return 0; |
202 | } | 202 | } |
203 | 203 | ||
diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c index 631385802eb4..a1041450d9bb 100644 --- a/sound/soc/codecs/wm8731.c +++ b/sound/soc/codecs/wm8731.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <sound/pcm.h> | 26 | #include <sound/pcm.h> |
27 | #include <sound/pcm_params.h> | 27 | #include <sound/pcm_params.h> |
28 | #include <sound/soc.h> | 28 | #include <sound/soc.h> |
29 | #include <sound/soc-dapm.h> | ||
30 | #include <sound/initval.h> | 29 | #include <sound/initval.h> |
31 | #include <sound/tlv.h> | 30 | #include <sound/tlv.h> |
32 | 31 | ||
@@ -165,10 +164,11 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
165 | 164 | ||
166 | static int wm8731_add_widgets(struct snd_soc_codec *codec) | 165 | static int wm8731_add_widgets(struct snd_soc_codec *codec) |
167 | { | 166 | { |
168 | snd_soc_dapm_new_controls(codec, wm8731_dapm_widgets, | 167 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
169 | ARRAY_SIZE(wm8731_dapm_widgets)); | ||
170 | 168 | ||
171 | snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); | 169 | snd_soc_dapm_new_controls(dapm, wm8731_dapm_widgets, |
170 | ARRAY_SIZE(wm8731_dapm_widgets)); | ||
171 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); | ||
172 | 172 | ||
173 | return 0; | 173 | return 0; |
174 | } | 174 | } |
@@ -319,7 +319,7 @@ static int wm8731_set_dai_sysclk(struct snd_soc_dai *codec_dai, | |||
319 | return -EINVAL; | 319 | return -EINVAL; |
320 | } | 320 | } |
321 | 321 | ||
322 | snd_soc_dapm_sync(codec); | 322 | snd_soc_dapm_sync(&codec->dapm); |
323 | 323 | ||
324 | return 0; | 324 | return 0; |
325 | } | 325 | } |
@@ -399,7 +399,7 @@ static int wm8731_set_bias_level(struct snd_soc_codec *codec, | |||
399 | case SND_SOC_BIAS_PREPARE: | 399 | case SND_SOC_BIAS_PREPARE: |
400 | break; | 400 | break; |
401 | case SND_SOC_BIAS_STANDBY: | 401 | case SND_SOC_BIAS_STANDBY: |
402 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 402 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
403 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8731->supplies), | 403 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8731->supplies), |
404 | wm8731->supplies); | 404 | wm8731->supplies); |
405 | if (ret != 0) | 405 | if (ret != 0) |
@@ -428,7 +428,7 @@ static int wm8731_set_bias_level(struct snd_soc_codec *codec, | |||
428 | wm8731->supplies); | 428 | wm8731->supplies); |
429 | break; | 429 | break; |
430 | } | 430 | } |
431 | codec->bias_level = level; | 431 | codec->dapm.bias_level = level; |
432 | return 0; | 432 | return 0; |
433 | } | 433 | } |
434 | 434 | ||
@@ -542,7 +542,6 @@ err_regulator_enable: | |||
542 | err_regulator_get: | 542 | err_regulator_get: |
543 | regulator_bulk_free(ARRAY_SIZE(wm8731->supplies), wm8731->supplies); | 543 | regulator_bulk_free(ARRAY_SIZE(wm8731->supplies), wm8731->supplies); |
544 | 544 | ||
545 | kfree(wm8731); | ||
546 | return ret; | 545 | return ret; |
547 | } | 546 | } |
548 | 547 | ||
diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c index 90e31e9aa6f7..35789b7dcacf 100644 --- a/sound/soc/codecs/wm8741.c +++ b/sound/soc/codecs/wm8741.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <sound/pcm.h> | 24 | #include <sound/pcm.h> |
25 | #include <sound/pcm_params.h> | 25 | #include <sound/pcm_params.h> |
26 | #include <sound/soc.h> | 26 | #include <sound/soc.h> |
27 | #include <sound/soc-dapm.h> | ||
28 | #include <sound/initval.h> | 27 | #include <sound/initval.h> |
29 | #include <sound/tlv.h> | 28 | #include <sound/tlv.h> |
30 | 29 | ||
@@ -95,10 +94,11 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
95 | 94 | ||
96 | static int wm8741_add_widgets(struct snd_soc_codec *codec) | 95 | static int wm8741_add_widgets(struct snd_soc_codec *codec) |
97 | { | 96 | { |
98 | snd_soc_dapm_new_controls(codec, wm8741_dapm_widgets, | 97 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
99 | ARRAY_SIZE(wm8741_dapm_widgets)); | ||
100 | 98 | ||
101 | snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); | 99 | snd_soc_dapm_new_controls(dapm, wm8741_dapm_widgets, |
100 | ARRAY_SIZE(wm8741_dapm_widgets)); | ||
101 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); | ||
102 | 102 | ||
103 | return 0; | 103 | return 0; |
104 | } | 104 | } |
@@ -455,7 +455,7 @@ static struct snd_soc_codec_driver soc_codec_dev_wm8741 = { | |||
455 | .resume = wm8741_resume, | 455 | .resume = wm8741_resume, |
456 | .reg_cache_size = ARRAY_SIZE(wm8741_reg_defaults), | 456 | .reg_cache_size = ARRAY_SIZE(wm8741_reg_defaults), |
457 | .reg_word_size = sizeof(u16), | 457 | .reg_word_size = sizeof(u16), |
458 | .reg_cache_default = &wm8741_reg_defaults, | 458 | .reg_cache_default = wm8741_reg_defaults, |
459 | }; | 459 | }; |
460 | 460 | ||
461 | #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) | 461 | #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) |
diff --git a/sound/soc/codecs/wm8750.c b/sound/soc/codecs/wm8750.c index 6c924cd2cfd4..51280e96d721 100644 --- a/sound/soc/codecs/wm8750.c +++ b/sound/soc/codecs/wm8750.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #include <sound/pcm.h> | 25 | #include <sound/pcm.h> |
26 | #include <sound/pcm_params.h> | 26 | #include <sound/pcm_params.h> |
27 | #include <sound/soc.h> | 27 | #include <sound/soc.h> |
28 | #include <sound/soc-dapm.h> | ||
29 | #include <sound/initval.h> | 28 | #include <sound/initval.h> |
30 | 29 | ||
31 | #include "wm8750.h" | 30 | #include "wm8750.h" |
@@ -399,10 +398,11 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
399 | 398 | ||
400 | static int wm8750_add_widgets(struct snd_soc_codec *codec) | 399 | static int wm8750_add_widgets(struct snd_soc_codec *codec) |
401 | { | 400 | { |
402 | snd_soc_dapm_new_controls(codec, wm8750_dapm_widgets, | 401 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
403 | ARRAY_SIZE(wm8750_dapm_widgets)); | ||
404 | 402 | ||
405 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 403 | snd_soc_dapm_new_controls(dapm, wm8750_dapm_widgets, |
404 | ARRAY_SIZE(wm8750_dapm_widgets)); | ||
405 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); | ||
406 | 406 | ||
407 | return 0; | 407 | return 0; |
408 | } | 408 | } |
@@ -615,7 +615,7 @@ static int wm8750_set_bias_level(struct snd_soc_codec *codec, | |||
615 | case SND_SOC_BIAS_PREPARE: | 615 | case SND_SOC_BIAS_PREPARE: |
616 | break; | 616 | break; |
617 | case SND_SOC_BIAS_STANDBY: | 617 | case SND_SOC_BIAS_STANDBY: |
618 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 618 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
619 | /* Set VMID to 5k */ | 619 | /* Set VMID to 5k */ |
620 | snd_soc_write(codec, WM8750_PWR1, pwr_reg | 0x01c1); | 620 | snd_soc_write(codec, WM8750_PWR1, pwr_reg | 0x01c1); |
621 | 621 | ||
@@ -630,7 +630,7 @@ static int wm8750_set_bias_level(struct snd_soc_codec *codec, | |||
630 | snd_soc_write(codec, WM8750_PWR1, 0x0001); | 630 | snd_soc_write(codec, WM8750_PWR1, 0x0001); |
631 | break; | 631 | break; |
632 | } | 632 | } |
633 | codec->bias_level = level; | 633 | codec->dapm.bias_level = level; |
634 | return 0; | 634 | return 0; |
635 | } | 635 | } |
636 | 636 | ||
diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c index 8f679a13f2bc..57bf9468d39a 100644 --- a/sound/soc/codecs/wm8753.c +++ b/sound/soc/codecs/wm8753.c | |||
@@ -45,7 +45,6 @@ | |||
45 | #include <sound/pcm.h> | 45 | #include <sound/pcm.h> |
46 | #include <sound/pcm_params.h> | 46 | #include <sound/pcm_params.h> |
47 | #include <sound/soc.h> | 47 | #include <sound/soc.h> |
48 | #include <sound/soc-dapm.h> | ||
49 | #include <sound/initval.h> | 48 | #include <sound/initval.h> |
50 | #include <sound/tlv.h> | 49 | #include <sound/tlv.h> |
51 | #include <asm/div64.h> | 50 | #include <asm/div64.h> |
@@ -670,10 +669,11 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
670 | 669 | ||
671 | static int wm8753_add_widgets(struct snd_soc_codec *codec) | 670 | static int wm8753_add_widgets(struct snd_soc_codec *codec) |
672 | { | 671 | { |
673 | snd_soc_dapm_new_controls(codec, wm8753_dapm_widgets, | 672 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
674 | ARRAY_SIZE(wm8753_dapm_widgets)); | ||
675 | 673 | ||
676 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 674 | snd_soc_dapm_new_controls(dapm, wm8753_dapm_widgets, |
675 | ARRAY_SIZE(wm8753_dapm_widgets)); | ||
676 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); | ||
677 | 677 | ||
678 | return 0; | 678 | return 0; |
679 | } | 679 | } |
@@ -1292,7 +1292,7 @@ static int wm8753_set_bias_level(struct snd_soc_codec *codec, | |||
1292 | wm8753_write(codec, WM8753_PWR1, 0x0001); | 1292 | wm8753_write(codec, WM8753_PWR1, 0x0001); |
1293 | break; | 1293 | break; |
1294 | } | 1294 | } |
1295 | codec->bias_level = level; | 1295 | codec->dapm.bias_level = level; |
1296 | return 0; | 1296 | return 0; |
1297 | } | 1297 | } |
1298 | 1298 | ||
@@ -1482,9 +1482,11 @@ static void wm8753_set_dai_mode(struct snd_soc_codec *codec, | |||
1482 | 1482 | ||
1483 | static void wm8753_work(struct work_struct *work) | 1483 | static void wm8753_work(struct work_struct *work) |
1484 | { | 1484 | { |
1485 | struct snd_soc_codec *codec = | 1485 | struct snd_soc_dapm_context *dapm = |
1486 | container_of(work, struct snd_soc_codec, delayed_work.work); | 1486 | container_of(work, struct snd_soc_dapm_context, |
1487 | wm8753_set_bias_level(codec, codec->bias_level); | 1487 | delayed_work.work); |
1488 | struct snd_soc_codec *codec = dapm->codec; | ||
1489 | wm8753_set_bias_level(codec, dapm->bias_level); | ||
1488 | } | 1490 | } |
1489 | 1491 | ||
1490 | static int wm8753_suspend(struct snd_soc_codec *codec, pm_message_t state) | 1492 | static int wm8753_suspend(struct snd_soc_codec *codec, pm_message_t state) |
@@ -1516,10 +1518,10 @@ static int wm8753_resume(struct snd_soc_codec *codec) | |||
1516 | wm8753_set_bias_level(codec, SND_SOC_BIAS_STANDBY); | 1518 | wm8753_set_bias_level(codec, SND_SOC_BIAS_STANDBY); |
1517 | 1519 | ||
1518 | /* charge wm8753 caps */ | 1520 | /* charge wm8753 caps */ |
1519 | if (codec->suspend_bias_level == SND_SOC_BIAS_ON) { | 1521 | if (codec->dapm.suspend_bias_level == SND_SOC_BIAS_ON) { |
1520 | wm8753_set_bias_level(codec, SND_SOC_BIAS_PREPARE); | 1522 | wm8753_set_bias_level(codec, SND_SOC_BIAS_PREPARE); |
1521 | codec->bias_level = SND_SOC_BIAS_ON; | 1523 | codec->dapm.bias_level = SND_SOC_BIAS_ON; |
1522 | schedule_delayed_work(&codec->delayed_work, | 1524 | schedule_delayed_work(&codec->dapm.delayed_work, |
1523 | msecs_to_jiffies(caps_charge)); | 1525 | msecs_to_jiffies(caps_charge)); |
1524 | } | 1526 | } |
1525 | 1527 | ||
@@ -1550,7 +1552,7 @@ static int wm8753_probe(struct snd_soc_codec *codec) | |||
1550 | struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec); | 1552 | struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec); |
1551 | int ret = 0, reg; | 1553 | int ret = 0, reg; |
1552 | 1554 | ||
1553 | INIT_DELAYED_WORK(&codec->delayed_work, wm8753_work); | 1555 | INIT_DELAYED_WORK(&codec->dapm.delayed_work, wm8753_work); |
1554 | 1556 | ||
1555 | ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8753->control_type); | 1557 | ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8753->control_type); |
1556 | if (ret < 0) { | 1558 | if (ret < 0) { |
@@ -1569,7 +1571,7 @@ static int wm8753_probe(struct snd_soc_codec *codec) | |||
1569 | 1571 | ||
1570 | /* charge output caps */ | 1572 | /* charge output caps */ |
1571 | wm8753_set_bias_level(codec, SND_SOC_BIAS_PREPARE); | 1573 | wm8753_set_bias_level(codec, SND_SOC_BIAS_PREPARE); |
1572 | schedule_delayed_work(&codec->delayed_work, | 1574 | schedule_delayed_work(&codec->dapm.delayed_work, |
1573 | msecs_to_jiffies(caps_charge)); | 1575 | msecs_to_jiffies(caps_charge)); |
1574 | 1576 | ||
1575 | /* set the update bits */ | 1577 | /* set the update bits */ |
@@ -1604,7 +1606,7 @@ static int wm8753_probe(struct snd_soc_codec *codec) | |||
1604 | /* power down chip */ | 1606 | /* power down chip */ |
1605 | static int wm8753_remove(struct snd_soc_codec *codec) | 1607 | static int wm8753_remove(struct snd_soc_codec *codec) |
1606 | { | 1608 | { |
1607 | run_delayed_work(&codec->delayed_work); | 1609 | run_delayed_work(&codec->dapm.delayed_work); |
1608 | wm8753_set_bias_level(codec, SND_SOC_BIAS_OFF); | 1610 | wm8753_set_bias_level(codec, SND_SOC_BIAS_OFF); |
1609 | 1611 | ||
1610 | return 0; | 1612 | return 0; |
diff --git a/sound/soc/codecs/wm8770.c b/sound/soc/codecs/wm8770.c new file mode 100644 index 000000000000..19b92baa9e8c --- /dev/null +++ b/sound/soc/codecs/wm8770.c | |||
@@ -0,0 +1,749 @@ | |||
1 | /* | ||
2 | * wm8770.c -- WM8770 ALSA SoC Audio driver | ||
3 | * | ||
4 | * Copyright 2010 Wolfson Microelectronics plc | ||
5 | * | ||
6 | * Author: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/module.h> | ||
14 | #include <linux/moduleparam.h> | ||
15 | #include <linux/init.h> | ||
16 | #include <linux/delay.h> | ||
17 | #include <linux/pm.h> | ||
18 | #include <linux/platform_device.h> | ||
19 | #include <linux/spi/spi.h> | ||
20 | #include <linux/regulator/consumer.h> | ||
21 | #include <linux/slab.h> | ||
22 | #include <sound/core.h> | ||
23 | #include <sound/pcm.h> | ||
24 | #include <sound/pcm_params.h> | ||
25 | #include <sound/soc.h> | ||
26 | #include <sound/initval.h> | ||
27 | #include <sound/tlv.h> | ||
28 | |||
29 | #include "wm8770.h" | ||
30 | |||
31 | #define WM8770_NUM_SUPPLIES 3 | ||
32 | static const char *wm8770_supply_names[WM8770_NUM_SUPPLIES] = { | ||
33 | "AVDD1", | ||
34 | "AVDD2", | ||
35 | "DVDD" | ||
36 | }; | ||
37 | |||
38 | static const u16 wm8770_reg_defs[WM8770_CACHEREGNUM] = { | ||
39 | 0x7f, 0x7f, 0x7f, 0x7f, | ||
40 | 0x7f, 0x7f, 0x7f, 0x7f, | ||
41 | 0x7f, 0xff, 0xff, 0xff, | ||
42 | 0xff, 0xff, 0xff, 0xff, | ||
43 | 0xff, 0xff, 0, 0x90, 0, | ||
44 | 0, 0x22, 0x22, 0x3e, | ||
45 | 0xc, 0xc, 0x100, 0x189, | ||
46 | 0x189, 0x8770 | ||
47 | }; | ||
48 | |||
49 | struct wm8770_priv { | ||
50 | enum snd_soc_control_type control_type; | ||
51 | struct regulator_bulk_data supplies[WM8770_NUM_SUPPLIES]; | ||
52 | struct notifier_block disable_nb[WM8770_NUM_SUPPLIES]; | ||
53 | struct snd_soc_codec *codec; | ||
54 | int sysclk; | ||
55 | }; | ||
56 | |||
57 | static int vout12supply_event(struct snd_soc_dapm_widget *w, | ||
58 | struct snd_kcontrol *kcontrol, int event); | ||
59 | static int vout34supply_event(struct snd_soc_dapm_widget *w, | ||
60 | struct snd_kcontrol *kcontrol, int event); | ||
61 | |||
62 | /* | ||
63 | * We can't use the same notifier block for more than one supply and | ||
64 | * there's no way I can see to get from a callback to the caller | ||
65 | * except container_of(). | ||
66 | */ | ||
67 | #define WM8770_REGULATOR_EVENT(n) \ | ||
68 | static int wm8770_regulator_event_##n(struct notifier_block *nb, \ | ||
69 | unsigned long event, void *data) \ | ||
70 | { \ | ||
71 | struct wm8770_priv *wm8770 = container_of(nb, struct wm8770_priv, \ | ||
72 | disable_nb[n]); \ | ||
73 | if (event & REGULATOR_EVENT_DISABLE) { \ | ||
74 | wm8770->codec->cache_sync = 1; \ | ||
75 | } \ | ||
76 | return 0; \ | ||
77 | } | ||
78 | |||
79 | WM8770_REGULATOR_EVENT(0) | ||
80 | WM8770_REGULATOR_EVENT(1) | ||
81 | WM8770_REGULATOR_EVENT(2) | ||
82 | |||
83 | static const DECLARE_TLV_DB_SCALE(adc_tlv, -1200, 100, 0); | ||
84 | static const DECLARE_TLV_DB_SCALE(dac_dig_tlv, -12750, 50, 1); | ||
85 | static const DECLARE_TLV_DB_SCALE(dac_alg_tlv, -12700, 100, 1); | ||
86 | |||
87 | static const char *dac_phase_text[][2] = { | ||
88 | { "DAC1 Normal", "DAC1 Inverted" }, | ||
89 | { "DAC2 Normal", "DAC2 Inverted" }, | ||
90 | { "DAC3 Normal", "DAC3 Inverted" }, | ||
91 | { "DAC4 Normal", "DAC4 Inverted" }, | ||
92 | }; | ||
93 | |||
94 | static const struct soc_enum dac_phase[] = { | ||
95 | SOC_ENUM_DOUBLE(WM8770_DACPHASE, 0, 1, 2, dac_phase_text[0]), | ||
96 | SOC_ENUM_DOUBLE(WM8770_DACPHASE, 2, 3, 2, dac_phase_text[1]), | ||
97 | SOC_ENUM_DOUBLE(WM8770_DACPHASE, 4, 5, 2, dac_phase_text[2]), | ||
98 | SOC_ENUM_DOUBLE(WM8770_DACPHASE, 6, 7, 2, dac_phase_text[3]), | ||
99 | }; | ||
100 | |||
101 | static const struct snd_kcontrol_new wm8770_snd_controls[] = { | ||
102 | /* global DAC playback controls */ | ||
103 | SOC_SINGLE_TLV("DAC Playback Volume", WM8770_MSDIGVOL, 0, 255, 0, | ||
104 | dac_dig_tlv), | ||
105 | SOC_SINGLE("DAC Playback Switch", WM8770_DACMUTE, 4, 1, 1), | ||
106 | SOC_SINGLE("DAC Playback ZC Switch", WM8770_DACCTRL1, 0, 1, 0), | ||
107 | |||
108 | /* global VOUT playback controls */ | ||
109 | SOC_SINGLE_TLV("VOUT Playback Volume", WM8770_MSALGVOL, 0, 127, 0, | ||
110 | dac_alg_tlv), | ||
111 | SOC_SINGLE("VOUT Playback ZC Switch", WM8770_MSALGVOL, 7, 1, 0), | ||
112 | |||
113 | /* VOUT1/2/3/4 specific controls */ | ||
114 | SOC_DOUBLE_R_TLV("VOUT1 Playback Volume", WM8770_VOUT1LVOL, | ||
115 | WM8770_VOUT1RVOL, 0, 127, 0, dac_alg_tlv), | ||
116 | SOC_DOUBLE_R("VOUT1 Playback ZC Switch", WM8770_VOUT1LVOL, | ||
117 | WM8770_VOUT1RVOL, 7, 1, 0), | ||
118 | SOC_DOUBLE_R_TLV("VOUT2 Playback Volume", WM8770_VOUT2LVOL, | ||
119 | WM8770_VOUT2RVOL, 0, 127, 0, dac_alg_tlv), | ||
120 | SOC_DOUBLE_R("VOUT2 Playback ZC Switch", WM8770_VOUT2LVOL, | ||
121 | WM8770_VOUT2RVOL, 7, 1, 0), | ||
122 | SOC_DOUBLE_R_TLV("VOUT3 Playback Volume", WM8770_VOUT3LVOL, | ||
123 | WM8770_VOUT3RVOL, 0, 127, 0, dac_alg_tlv), | ||
124 | SOC_DOUBLE_R("VOUT3 Playback ZC Switch", WM8770_VOUT3LVOL, | ||
125 | WM8770_VOUT3RVOL, 7, 1, 0), | ||
126 | SOC_DOUBLE_R_TLV("VOUT4 Playback Volume", WM8770_VOUT4LVOL, | ||
127 | WM8770_VOUT4RVOL, 0, 127, 0, dac_alg_tlv), | ||
128 | SOC_DOUBLE_R("VOUT4 Playback ZC Switch", WM8770_VOUT4LVOL, | ||
129 | WM8770_VOUT4RVOL, 7, 1, 0), | ||
130 | |||
131 | /* DAC1/2/3/4 specific controls */ | ||
132 | SOC_DOUBLE_R_TLV("DAC1 Playback Volume", WM8770_DAC1LVOL, | ||
133 | WM8770_DAC1RVOL, 0, 255, 0, dac_dig_tlv), | ||
134 | SOC_SINGLE("DAC1 Deemphasis Switch", WM8770_DACCTRL2, 0, 1, 0), | ||
135 | SOC_ENUM("DAC1 Phase", dac_phase[0]), | ||
136 | SOC_DOUBLE_R_TLV("DAC2 Playback Volume", WM8770_DAC2LVOL, | ||
137 | WM8770_DAC2RVOL, 0, 255, 0, dac_dig_tlv), | ||
138 | SOC_SINGLE("DAC2 Deemphasis Switch", WM8770_DACCTRL2, 1, 1, 0), | ||
139 | SOC_ENUM("DAC2 Phase", dac_phase[1]), | ||
140 | SOC_DOUBLE_R_TLV("DAC3 Playback Volume", WM8770_DAC3LVOL, | ||
141 | WM8770_DAC3RVOL, 0, 255, 0, dac_dig_tlv), | ||
142 | SOC_SINGLE("DAC3 Deemphasis Switch", WM8770_DACCTRL2, 2, 1, 0), | ||
143 | SOC_ENUM("DAC3 Phase", dac_phase[2]), | ||
144 | SOC_DOUBLE_R_TLV("DAC4 Playback Volume", WM8770_DAC4LVOL, | ||
145 | WM8770_DAC4RVOL, 0, 255, 0, dac_dig_tlv), | ||
146 | SOC_SINGLE("DAC4 Deemphasis Switch", WM8770_DACCTRL2, 3, 1, 0), | ||
147 | SOC_ENUM("DAC4 Phase", dac_phase[3]), | ||
148 | |||
149 | /* ADC specific controls */ | ||
150 | SOC_DOUBLE_R_TLV("Capture Volume", WM8770_ADCLCTRL, WM8770_ADCRCTRL, | ||
151 | 0, 31, 0, adc_tlv), | ||
152 | SOC_DOUBLE_R("Capture Switch", WM8770_ADCLCTRL, WM8770_ADCRCTRL, | ||
153 | 5, 1, 1), | ||
154 | |||
155 | /* other controls */ | ||
156 | SOC_SINGLE("ADC 128x Oversampling Switch", WM8770_MSTRCTRL, 3, 1, 0), | ||
157 | SOC_SINGLE("ADC Highpass Filter Switch", WM8770_IFACECTRL, 8, 1, 1) | ||
158 | }; | ||
159 | |||
160 | static const char *ain_text[] = { | ||
161 | "AIN1", "AIN2", "AIN3", "AIN4", | ||
162 | "AIN5", "AIN6", "AIN7", "AIN8" | ||
163 | }; | ||
164 | |||
165 | static const struct soc_enum ain_enum = | ||
166 | SOC_ENUM_DOUBLE(WM8770_ADCMUX, 0, 4, 8, ain_text); | ||
167 | |||
168 | static const struct snd_kcontrol_new ain_mux = | ||
169 | SOC_DAPM_ENUM("Capture Mux", ain_enum); | ||
170 | |||
171 | static const struct snd_kcontrol_new vout1_mix_controls[] = { | ||
172 | SOC_DAPM_SINGLE("DAC1 Switch", WM8770_OUTMUX1, 0, 1, 0), | ||
173 | SOC_DAPM_SINGLE("AUX1 Switch", WM8770_OUTMUX1, 1, 1, 0), | ||
174 | SOC_DAPM_SINGLE("Bypass Switch", WM8770_OUTMUX1, 2, 1, 0) | ||
175 | }; | ||
176 | |||
177 | static const struct snd_kcontrol_new vout2_mix_controls[] = { | ||
178 | SOC_DAPM_SINGLE("DAC2 Switch", WM8770_OUTMUX1, 3, 1, 0), | ||
179 | SOC_DAPM_SINGLE("AUX2 Switch", WM8770_OUTMUX1, 4, 1, 0), | ||
180 | SOC_DAPM_SINGLE("Bypass Switch", WM8770_OUTMUX1, 5, 1, 0) | ||
181 | }; | ||
182 | |||
183 | static const struct snd_kcontrol_new vout3_mix_controls[] = { | ||
184 | SOC_DAPM_SINGLE("DAC3 Switch", WM8770_OUTMUX2, 0, 1, 0), | ||
185 | SOC_DAPM_SINGLE("AUX3 Switch", WM8770_OUTMUX2, 1, 1, 0), | ||
186 | SOC_DAPM_SINGLE("Bypass Switch", WM8770_OUTMUX2, 2, 1, 0) | ||
187 | }; | ||
188 | |||
189 | static const struct snd_kcontrol_new vout4_mix_controls[] = { | ||
190 | SOC_DAPM_SINGLE("DAC4 Switch", WM8770_OUTMUX2, 3, 1, 0), | ||
191 | SOC_DAPM_SINGLE("Bypass Switch", WM8770_OUTMUX2, 4, 1, 0) | ||
192 | }; | ||
193 | |||
194 | static const struct snd_soc_dapm_widget wm8770_dapm_widgets[] = { | ||
195 | SND_SOC_DAPM_INPUT("AUX1"), | ||
196 | SND_SOC_DAPM_INPUT("AUX2"), | ||
197 | SND_SOC_DAPM_INPUT("AUX3"), | ||
198 | |||
199 | SND_SOC_DAPM_INPUT("AIN1"), | ||
200 | SND_SOC_DAPM_INPUT("AIN2"), | ||
201 | SND_SOC_DAPM_INPUT("AIN3"), | ||
202 | SND_SOC_DAPM_INPUT("AIN4"), | ||
203 | SND_SOC_DAPM_INPUT("AIN5"), | ||
204 | SND_SOC_DAPM_INPUT("AIN6"), | ||
205 | SND_SOC_DAPM_INPUT("AIN7"), | ||
206 | SND_SOC_DAPM_INPUT("AIN8"), | ||
207 | |||
208 | SND_SOC_DAPM_MUX("Capture Mux", WM8770_ADCMUX, 8, 1, &ain_mux), | ||
209 | |||
210 | SND_SOC_DAPM_ADC("ADC", "Capture", WM8770_PWDNCTRL, 1, 1), | ||
211 | |||
212 | SND_SOC_DAPM_DAC("DAC1", "Playback", WM8770_PWDNCTRL, 2, 1), | ||
213 | SND_SOC_DAPM_DAC("DAC2", "Playback", WM8770_PWDNCTRL, 3, 1), | ||
214 | SND_SOC_DAPM_DAC("DAC3", "Playback", WM8770_PWDNCTRL, 4, 1), | ||
215 | SND_SOC_DAPM_DAC("DAC4", "Playback", WM8770_PWDNCTRL, 5, 1), | ||
216 | |||
217 | SND_SOC_DAPM_SUPPLY("VOUT12 Supply", SND_SOC_NOPM, 0, 0, | ||
218 | vout12supply_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), | ||
219 | SND_SOC_DAPM_SUPPLY("VOUT34 Supply", SND_SOC_NOPM, 0, 0, | ||
220 | vout34supply_event, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), | ||
221 | |||
222 | SND_SOC_DAPM_MIXER("VOUT1 Mixer", SND_SOC_NOPM, 0, 0, | ||
223 | vout1_mix_controls, ARRAY_SIZE(vout1_mix_controls)), | ||
224 | SND_SOC_DAPM_MIXER("VOUT2 Mixer", SND_SOC_NOPM, 0, 0, | ||
225 | vout2_mix_controls, ARRAY_SIZE(vout2_mix_controls)), | ||
226 | SND_SOC_DAPM_MIXER("VOUT3 Mixer", SND_SOC_NOPM, 0, 0, | ||
227 | vout3_mix_controls, ARRAY_SIZE(vout3_mix_controls)), | ||
228 | SND_SOC_DAPM_MIXER("VOUT4 Mixer", SND_SOC_NOPM, 0, 0, | ||
229 | vout4_mix_controls, ARRAY_SIZE(vout4_mix_controls)), | ||
230 | |||
231 | SND_SOC_DAPM_OUTPUT("VOUT1"), | ||
232 | SND_SOC_DAPM_OUTPUT("VOUT2"), | ||
233 | SND_SOC_DAPM_OUTPUT("VOUT3"), | ||
234 | SND_SOC_DAPM_OUTPUT("VOUT4") | ||
235 | }; | ||
236 | |||
237 | static const struct snd_soc_dapm_route wm8770_intercon[] = { | ||
238 | { "Capture Mux", "AIN1", "AIN1" }, | ||
239 | { "Capture Mux", "AIN2", "AIN2" }, | ||
240 | { "Capture Mux", "AIN3", "AIN3" }, | ||
241 | { "Capture Mux", "AIN4", "AIN4" }, | ||
242 | { "Capture Mux", "AIN5", "AIN5" }, | ||
243 | { "Capture Mux", "AIN6", "AIN6" }, | ||
244 | { "Capture Mux", "AIN7", "AIN7" }, | ||
245 | { "Capture Mux", "AIN8", "AIN8" }, | ||
246 | |||
247 | { "ADC", NULL, "Capture Mux" }, | ||
248 | |||
249 | { "VOUT1 Mixer", NULL, "VOUT12 Supply" }, | ||
250 | { "VOUT1 Mixer", "DAC1 Switch", "DAC1" }, | ||
251 | { "VOUT1 Mixer", "AUX1 Switch", "AUX1" }, | ||
252 | { "VOUT1 Mixer", "Bypass Switch", "Capture Mux" }, | ||
253 | |||
254 | { "VOUT2 Mixer", NULL, "VOUT12 Supply" }, | ||
255 | { "VOUT2 Mixer", "DAC2 Switch", "DAC2" }, | ||
256 | { "VOUT2 Mixer", "AUX2 Switch", "AUX2" }, | ||
257 | { "VOUT2 Mixer", "Bypass Switch", "Capture Mux" }, | ||
258 | |||
259 | { "VOUT3 Mixer", NULL, "VOUT34 Supply" }, | ||
260 | { "VOUT3 Mixer", "DAC3 Switch", "DAC3" }, | ||
261 | { "VOUT3 Mixer", "AUX3 Switch", "AUX3" }, | ||
262 | { "VOUT3 Mixer", "Bypass Switch", "Capture Mux" }, | ||
263 | |||
264 | { "VOUT4 Mixer", NULL, "VOUT34 Supply" }, | ||
265 | { "VOUT4 Mixer", "DAC4 Switch", "DAC4" }, | ||
266 | { "VOUT4 Mixer", "Bypass Switch", "Capture Mux" }, | ||
267 | |||
268 | { "VOUT1", NULL, "VOUT1 Mixer" }, | ||
269 | { "VOUT2", NULL, "VOUT2 Mixer" }, | ||
270 | { "VOUT3", NULL, "VOUT3 Mixer" }, | ||
271 | { "VOUT4", NULL, "VOUT4 Mixer" } | ||
272 | }; | ||
273 | |||
274 | static int vout12supply_event(struct snd_soc_dapm_widget *w, | ||
275 | struct snd_kcontrol *kcontrol, int event) | ||
276 | { | ||
277 | struct snd_soc_codec *codec; | ||
278 | |||
279 | codec = w->codec; | ||
280 | |||
281 | switch (event) { | ||
282 | case SND_SOC_DAPM_PRE_PMU: | ||
283 | snd_soc_update_bits(codec, WM8770_OUTMUX1, 0x180, 0); | ||
284 | break; | ||
285 | case SND_SOC_DAPM_POST_PMD: | ||
286 | snd_soc_update_bits(codec, WM8770_OUTMUX1, 0x180, 0x180); | ||
287 | break; | ||
288 | } | ||
289 | |||
290 | return 0; | ||
291 | } | ||
292 | |||
293 | static int vout34supply_event(struct snd_soc_dapm_widget *w, | ||
294 | struct snd_kcontrol *kcontrol, int event) | ||
295 | { | ||
296 | struct snd_soc_codec *codec; | ||
297 | |||
298 | codec = w->codec; | ||
299 | |||
300 | switch (event) { | ||
301 | case SND_SOC_DAPM_PRE_PMU: | ||
302 | snd_soc_update_bits(codec, WM8770_OUTMUX2, 0x180, 0); | ||
303 | break; | ||
304 | case SND_SOC_DAPM_POST_PMD: | ||
305 | snd_soc_update_bits(codec, WM8770_OUTMUX2, 0x180, 0x180); | ||
306 | break; | ||
307 | } | ||
308 | |||
309 | return 0; | ||
310 | } | ||
311 | |||
312 | static int wm8770_reset(struct snd_soc_codec *codec) | ||
313 | { | ||
314 | return snd_soc_write(codec, WM8770_RESET, 0); | ||
315 | } | ||
316 | |||
317 | static int wm8770_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) | ||
318 | { | ||
319 | struct snd_soc_codec *codec; | ||
320 | int iface, master; | ||
321 | |||
322 | codec = dai->codec; | ||
323 | |||
324 | switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { | ||
325 | case SND_SOC_DAIFMT_CBM_CFM: | ||
326 | master = 0x100; | ||
327 | break; | ||
328 | case SND_SOC_DAIFMT_CBS_CFS: | ||
329 | master = 0; | ||
330 | break; | ||
331 | default: | ||
332 | return -EINVAL; | ||
333 | } | ||
334 | |||
335 | iface = 0; | ||
336 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { | ||
337 | case SND_SOC_DAIFMT_I2S: | ||
338 | iface |= 0x2; | ||
339 | break; | ||
340 | case SND_SOC_DAIFMT_RIGHT_J: | ||
341 | break; | ||
342 | case SND_SOC_DAIFMT_LEFT_J: | ||
343 | iface |= 0x1; | ||
344 | break; | ||
345 | default: | ||
346 | return -EINVAL; | ||
347 | } | ||
348 | |||
349 | switch (fmt & SND_SOC_DAIFMT_INV_MASK) { | ||
350 | case SND_SOC_DAIFMT_NB_NF: | ||
351 | break; | ||
352 | case SND_SOC_DAIFMT_IB_IF: | ||
353 | iface |= 0xc; | ||
354 | break; | ||
355 | case SND_SOC_DAIFMT_IB_NF: | ||
356 | iface |= 0x8; | ||
357 | break; | ||
358 | case SND_SOC_DAIFMT_NB_IF: | ||
359 | iface |= 0x4; | ||
360 | break; | ||
361 | default: | ||
362 | return -EINVAL; | ||
363 | } | ||
364 | |||
365 | snd_soc_update_bits(codec, WM8770_IFACECTRL, 0xf, iface); | ||
366 | snd_soc_update_bits(codec, WM8770_MSTRCTRL, 0x100, master); | ||
367 | |||
368 | return 0; | ||
369 | } | ||
370 | |||
371 | static const int mclk_ratios[] = { | ||
372 | 128, | ||
373 | 192, | ||
374 | 256, | ||
375 | 384, | ||
376 | 512, | ||
377 | 768 | ||
378 | }; | ||
379 | |||
380 | static int wm8770_hw_params(struct snd_pcm_substream *substream, | ||
381 | struct snd_pcm_hw_params *params, | ||
382 | struct snd_soc_dai *dai) | ||
383 | { | ||
384 | struct snd_soc_codec *codec; | ||
385 | struct wm8770_priv *wm8770; | ||
386 | int i; | ||
387 | int iface; | ||
388 | int shift; | ||
389 | int ratio; | ||
390 | |||
391 | codec = dai->codec; | ||
392 | wm8770 = snd_soc_codec_get_drvdata(codec); | ||
393 | |||
394 | iface = 0; | ||
395 | switch (params_format(params)) { | ||
396 | case SNDRV_PCM_FORMAT_S16_LE: | ||
397 | break; | ||
398 | case SNDRV_PCM_FORMAT_S20_3LE: | ||
399 | iface |= 0x10; | ||
400 | break; | ||
401 | case SNDRV_PCM_FORMAT_S24_LE: | ||
402 | iface |= 0x20; | ||
403 | break; | ||
404 | case SNDRV_PCM_FORMAT_S32_LE: | ||
405 | iface |= 0x30; | ||
406 | break; | ||
407 | } | ||
408 | |||
409 | switch (substream->stream) { | ||
410 | case SNDRV_PCM_STREAM_PLAYBACK: | ||
411 | i = 0; | ||
412 | shift = 4; | ||
413 | break; | ||
414 | case SNDRV_PCM_STREAM_CAPTURE: | ||
415 | i = 2; | ||
416 | shift = 0; | ||
417 | break; | ||
418 | default: | ||
419 | return -EINVAL; | ||
420 | } | ||
421 | |||
422 | /* Only need to set MCLK/LRCLK ratio if we're master */ | ||
423 | if (snd_soc_read(codec, WM8770_MSTRCTRL) & 0x100) { | ||
424 | for (; i < ARRAY_SIZE(mclk_ratios); ++i) { | ||
425 | ratio = wm8770->sysclk / params_rate(params); | ||
426 | if (ratio == mclk_ratios[i]) | ||
427 | break; | ||
428 | } | ||
429 | |||
430 | if (i == ARRAY_SIZE(mclk_ratios)) { | ||
431 | dev_err(codec->dev, | ||
432 | "Unable to configure MCLK ratio %d/%d\n", | ||
433 | wm8770->sysclk, params_rate(params)); | ||
434 | return -EINVAL; | ||
435 | } | ||
436 | |||
437 | dev_dbg(codec->dev, "MCLK is %dfs\n", mclk_ratios[i]); | ||
438 | |||
439 | snd_soc_update_bits(codec, WM8770_MSTRCTRL, 0x7 << shift, | ||
440 | i << shift); | ||
441 | } | ||
442 | |||
443 | snd_soc_update_bits(codec, WM8770_IFACECTRL, 0x30, iface); | ||
444 | |||
445 | return 0; | ||
446 | } | ||
447 | |||
448 | static int wm8770_mute(struct snd_soc_dai *dai, int mute) | ||
449 | { | ||
450 | struct snd_soc_codec *codec; | ||
451 | |||
452 | codec = dai->codec; | ||
453 | return snd_soc_update_bits(codec, WM8770_DACMUTE, 0x10, | ||
454 | !!mute << 4); | ||
455 | } | ||
456 | |||
457 | static int wm8770_set_sysclk(struct snd_soc_dai *dai, | ||
458 | int clk_id, unsigned int freq, int dir) | ||
459 | { | ||
460 | struct snd_soc_codec *codec; | ||
461 | struct wm8770_priv *wm8770; | ||
462 | |||
463 | codec = dai->codec; | ||
464 | wm8770 = snd_soc_codec_get_drvdata(codec); | ||
465 | wm8770->sysclk = freq; | ||
466 | return 0; | ||
467 | } | ||
468 | |||
469 | static void wm8770_sync_cache(struct snd_soc_codec *codec) | ||
470 | { | ||
471 | int i; | ||
472 | u16 *cache; | ||
473 | |||
474 | if (!codec->cache_sync) | ||
475 | return; | ||
476 | |||
477 | codec->cache_only = 0; | ||
478 | cache = codec->reg_cache; | ||
479 | for (i = 0; i < codec->driver->reg_cache_size; i++) { | ||
480 | if (i == WM8770_RESET || cache[i] == wm8770_reg_defs[i]) | ||
481 | continue; | ||
482 | snd_soc_write(codec, i, cache[i]); | ||
483 | } | ||
484 | codec->cache_sync = 0; | ||
485 | } | ||
486 | |||
487 | static int wm8770_set_bias_level(struct snd_soc_codec *codec, | ||
488 | enum snd_soc_bias_level level) | ||
489 | { | ||
490 | int ret; | ||
491 | struct wm8770_priv *wm8770; | ||
492 | |||
493 | wm8770 = snd_soc_codec_get_drvdata(codec); | ||
494 | |||
495 | switch (level) { | ||
496 | case SND_SOC_BIAS_ON: | ||
497 | break; | ||
498 | case SND_SOC_BIAS_PREPARE: | ||
499 | break; | ||
500 | case SND_SOC_BIAS_STANDBY: | ||
501 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { | ||
502 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8770->supplies), | ||
503 | wm8770->supplies); | ||
504 | if (ret) { | ||
505 | dev_err(codec->dev, | ||
506 | "Failed to enable supplies: %d\n", | ||
507 | ret); | ||
508 | return ret; | ||
509 | } | ||
510 | wm8770_sync_cache(codec); | ||
511 | /* global powerup */ | ||
512 | snd_soc_write(codec, WM8770_PWDNCTRL, 0); | ||
513 | } | ||
514 | break; | ||
515 | case SND_SOC_BIAS_OFF: | ||
516 | /* global powerdown */ | ||
517 | snd_soc_write(codec, WM8770_PWDNCTRL, 1); | ||
518 | regulator_bulk_disable(ARRAY_SIZE(wm8770->supplies), | ||
519 | wm8770->supplies); | ||
520 | break; | ||
521 | } | ||
522 | |||
523 | codec->dapm.bias_level = level; | ||
524 | return 0; | ||
525 | } | ||
526 | |||
527 | #define WM8770_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \ | ||
528 | SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE) | ||
529 | |||
530 | static struct snd_soc_dai_ops wm8770_dai_ops = { | ||
531 | .digital_mute = wm8770_mute, | ||
532 | .hw_params = wm8770_hw_params, | ||
533 | .set_fmt = wm8770_set_fmt, | ||
534 | .set_sysclk = wm8770_set_sysclk, | ||
535 | }; | ||
536 | |||
537 | static struct snd_soc_dai_driver wm8770_dai = { | ||
538 | .name = "wm8770-hifi", | ||
539 | .playback = { | ||
540 | .stream_name = "Playback", | ||
541 | .channels_min = 2, | ||
542 | .channels_max = 2, | ||
543 | .rates = SNDRV_PCM_RATE_8000_192000, | ||
544 | .formats = WM8770_FORMATS | ||
545 | }, | ||
546 | .capture = { | ||
547 | .stream_name = "Capture", | ||
548 | .channels_min = 2, | ||
549 | .channels_max = 2, | ||
550 | .rates = SNDRV_PCM_RATE_8000_96000, | ||
551 | .formats = WM8770_FORMATS | ||
552 | }, | ||
553 | .ops = &wm8770_dai_ops, | ||
554 | .symmetric_rates = 1 | ||
555 | }; | ||
556 | |||
557 | #ifdef CONFIG_PM | ||
558 | static int wm8770_suspend(struct snd_soc_codec *codec, pm_message_t state) | ||
559 | { | ||
560 | wm8770_set_bias_level(codec, SND_SOC_BIAS_OFF); | ||
561 | return 0; | ||
562 | } | ||
563 | |||
564 | static int wm8770_resume(struct snd_soc_codec *codec) | ||
565 | { | ||
566 | wm8770_set_bias_level(codec, SND_SOC_BIAS_STANDBY); | ||
567 | return 0; | ||
568 | } | ||
569 | #else | ||
570 | #define wm8770_suspend NULL | ||
571 | #define wm8770_resume NULL | ||
572 | #endif | ||
573 | |||
574 | static int wm8770_probe(struct snd_soc_codec *codec) | ||
575 | { | ||
576 | struct wm8770_priv *wm8770; | ||
577 | int ret; | ||
578 | int i; | ||
579 | |||
580 | wm8770 = snd_soc_codec_get_drvdata(codec); | ||
581 | wm8770->codec = codec; | ||
582 | |||
583 | codec->dapm.idle_bias_off = 1; | ||
584 | |||
585 | ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8770->control_type); | ||
586 | if (ret < 0) { | ||
587 | dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret); | ||
588 | return ret; | ||
589 | } | ||
590 | |||
591 | for (i = 0; i < ARRAY_SIZE(wm8770->supplies); i++) | ||
592 | wm8770->supplies[i].supply = wm8770_supply_names[i]; | ||
593 | |||
594 | ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(wm8770->supplies), | ||
595 | wm8770->supplies); | ||
596 | if (ret) { | ||
597 | dev_err(codec->dev, "Failed to request supplies: %d\n", ret); | ||
598 | return ret; | ||
599 | } | ||
600 | |||
601 | wm8770->disable_nb[0].notifier_call = wm8770_regulator_event_0; | ||
602 | wm8770->disable_nb[1].notifier_call = wm8770_regulator_event_1; | ||
603 | wm8770->disable_nb[2].notifier_call = wm8770_regulator_event_2; | ||
604 | |||
605 | /* This should really be moved into the regulator core */ | ||
606 | for (i = 0; i < ARRAY_SIZE(wm8770->supplies); i++) { | ||
607 | ret = regulator_register_notifier(wm8770->supplies[i].consumer, | ||
608 | &wm8770->disable_nb[i]); | ||
609 | if (ret) { | ||
610 | dev_err(codec->dev, | ||
611 | "Failed to register regulator notifier: %d\n", | ||
612 | ret); | ||
613 | } | ||
614 | } | ||
615 | |||
616 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8770->supplies), | ||
617 | wm8770->supplies); | ||
618 | if (ret) { | ||
619 | dev_err(codec->dev, "Failed to enable supplies: %d\n", ret); | ||
620 | goto err_reg_get; | ||
621 | } | ||
622 | |||
623 | ret = wm8770_reset(codec); | ||
624 | if (ret < 0) { | ||
625 | dev_err(codec->dev, "Failed to issue reset: %d\n", ret); | ||
626 | goto err_reg_enable; | ||
627 | } | ||
628 | |||
629 | wm8770_set_bias_level(codec, SND_SOC_BIAS_STANDBY); | ||
630 | |||
631 | /* latch the volume update bits */ | ||
632 | snd_soc_update_bits(codec, WM8770_MSDIGVOL, 0x100, 0x100); | ||
633 | snd_soc_update_bits(codec, WM8770_MSALGVOL, 0x100, 0x100); | ||
634 | snd_soc_update_bits(codec, WM8770_VOUT1RVOL, 0x100, 0x100); | ||
635 | snd_soc_update_bits(codec, WM8770_VOUT2RVOL, 0x100, 0x100); | ||
636 | snd_soc_update_bits(codec, WM8770_VOUT3RVOL, 0x100, 0x100); | ||
637 | snd_soc_update_bits(codec, WM8770_VOUT4RVOL, 0x100, 0x100); | ||
638 | snd_soc_update_bits(codec, WM8770_DAC1RVOL, 0x100, 0x100); | ||
639 | snd_soc_update_bits(codec, WM8770_DAC2RVOL, 0x100, 0x100); | ||
640 | snd_soc_update_bits(codec, WM8770_DAC3RVOL, 0x100, 0x100); | ||
641 | snd_soc_update_bits(codec, WM8770_DAC4RVOL, 0x100, 0x100); | ||
642 | |||
643 | /* mute all DACs */ | ||
644 | snd_soc_update_bits(codec, WM8770_DACMUTE, 0x10, 0x10); | ||
645 | |||
646 | snd_soc_add_controls(codec, wm8770_snd_controls, | ||
647 | ARRAY_SIZE(wm8770_snd_controls)); | ||
648 | snd_soc_dapm_new_controls(&codec->dapm, wm8770_dapm_widgets, | ||
649 | ARRAY_SIZE(wm8770_dapm_widgets)); | ||
650 | snd_soc_dapm_add_routes(&codec->dapm, wm8770_intercon, | ||
651 | ARRAY_SIZE(wm8770_intercon)); | ||
652 | return 0; | ||
653 | |||
654 | err_reg_enable: | ||
655 | regulator_bulk_disable(ARRAY_SIZE(wm8770->supplies), wm8770->supplies); | ||
656 | err_reg_get: | ||
657 | regulator_bulk_free(ARRAY_SIZE(wm8770->supplies), wm8770->supplies); | ||
658 | return ret; | ||
659 | } | ||
660 | |||
661 | static int wm8770_remove(struct snd_soc_codec *codec) | ||
662 | { | ||
663 | struct wm8770_priv *wm8770; | ||
664 | int i; | ||
665 | |||
666 | wm8770 = snd_soc_codec_get_drvdata(codec); | ||
667 | wm8770_set_bias_level(codec, SND_SOC_BIAS_OFF); | ||
668 | |||
669 | for (i = 0; i < ARRAY_SIZE(wm8770->supplies); ++i) | ||
670 | regulator_unregister_notifier(wm8770->supplies[i].consumer, | ||
671 | &wm8770->disable_nb[i]); | ||
672 | regulator_bulk_free(ARRAY_SIZE(wm8770->supplies), wm8770->supplies); | ||
673 | return 0; | ||
674 | } | ||
675 | |||
676 | static struct snd_soc_codec_driver soc_codec_dev_wm8770 = { | ||
677 | .probe = wm8770_probe, | ||
678 | .remove = wm8770_remove, | ||
679 | .suspend = wm8770_suspend, | ||
680 | .resume = wm8770_resume, | ||
681 | .set_bias_level = wm8770_set_bias_level, | ||
682 | .reg_cache_size = ARRAY_SIZE(wm8770_reg_defs), | ||
683 | .reg_word_size = sizeof (u16), | ||
684 | .reg_cache_default = wm8770_reg_defs | ||
685 | }; | ||
686 | |||
687 | #if defined(CONFIG_SPI_MASTER) | ||
688 | static int __devinit wm8770_spi_probe(struct spi_device *spi) | ||
689 | { | ||
690 | struct wm8770_priv *wm8770; | ||
691 | int ret; | ||
692 | |||
693 | wm8770 = kzalloc(sizeof(struct wm8770_priv), GFP_KERNEL); | ||
694 | if (!wm8770) | ||
695 | return -ENOMEM; | ||
696 | |||
697 | wm8770->control_type = SND_SOC_SPI; | ||
698 | spi_set_drvdata(spi, wm8770); | ||
699 | |||
700 | ret = snd_soc_register_codec(&spi->dev, | ||
701 | &soc_codec_dev_wm8770, &wm8770_dai, 1); | ||
702 | if (ret < 0) | ||
703 | kfree(wm8770); | ||
704 | return ret; | ||
705 | } | ||
706 | |||
707 | static int __devexit wm8770_spi_remove(struct spi_device *spi) | ||
708 | { | ||
709 | snd_soc_unregister_codec(&spi->dev); | ||
710 | kfree(spi_get_drvdata(spi)); | ||
711 | return 0; | ||
712 | } | ||
713 | |||
714 | static struct spi_driver wm8770_spi_driver = { | ||
715 | .driver = { | ||
716 | .name = "wm8770", | ||
717 | .owner = THIS_MODULE, | ||
718 | }, | ||
719 | .probe = wm8770_spi_probe, | ||
720 | .remove = __devexit_p(wm8770_spi_remove) | ||
721 | }; | ||
722 | #endif | ||
723 | |||
724 | static int __init wm8770_modinit(void) | ||
725 | { | ||
726 | int ret = 0; | ||
727 | |||
728 | #if defined(CONFIG_SPI_MASTER) | ||
729 | ret = spi_register_driver(&wm8770_spi_driver); | ||
730 | if (ret) { | ||
731 | printk(KERN_ERR "Failed to register wm8770 SPI driver: %d\n", | ||
732 | ret); | ||
733 | } | ||
734 | #endif | ||
735 | return ret; | ||
736 | } | ||
737 | module_init(wm8770_modinit); | ||
738 | |||
739 | static void __exit wm8770_exit(void) | ||
740 | { | ||
741 | #if defined(CONFIG_SPI_MASTER) | ||
742 | spi_unregister_driver(&wm8770_spi_driver); | ||
743 | #endif | ||
744 | } | ||
745 | module_exit(wm8770_exit); | ||
746 | |||
747 | MODULE_DESCRIPTION("ASoC WM8770 driver"); | ||
748 | MODULE_AUTHOR("Dimitris Papastamos <dp@opensource.wolfsonmicro.com>"); | ||
749 | MODULE_LICENSE("GPL"); | ||
diff --git a/sound/soc/codecs/wm8770.h b/sound/soc/codecs/wm8770.h new file mode 100644 index 000000000000..5f1b3bda6cc8 --- /dev/null +++ b/sound/soc/codecs/wm8770.h | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | * wm8770.h -- WM8770 ASoC driver | ||
3 | * | ||
4 | * Copyright 2010 Wolfson Microelectronics plc | ||
5 | * | ||
6 | * Author: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef _WM8770_H | ||
14 | #define _WM8770_H | ||
15 | |||
16 | /* Registers */ | ||
17 | #define WM8770_VOUT1LVOL 0 | ||
18 | #define WM8770_VOUT1RVOL 0x1 | ||
19 | #define WM8770_VOUT2LVOL 0x2 | ||
20 | #define WM8770_VOUT2RVOL 0x3 | ||
21 | #define WM8770_VOUT3LVOL 0x4 | ||
22 | #define WM8770_VOUT3RVOL 0x5 | ||
23 | #define WM8770_VOUT4LVOL 0x6 | ||
24 | #define WM8770_VOUT4RVOL 0x7 | ||
25 | #define WM8770_MSALGVOL 0x8 | ||
26 | #define WM8770_DAC1LVOL 0x9 | ||
27 | #define WM8770_DAC1RVOL 0xa | ||
28 | #define WM8770_DAC2LVOL 0xb | ||
29 | #define WM8770_DAC2RVOL 0xc | ||
30 | #define WM8770_DAC3LVOL 0xd | ||
31 | #define WM8770_DAC3RVOL 0xe | ||
32 | #define WM8770_DAC4LVOL 0xf | ||
33 | #define WM8770_DAC4RVOL 0x10 | ||
34 | #define WM8770_MSDIGVOL 0x11 | ||
35 | #define WM8770_DACPHASE 0x12 | ||
36 | #define WM8770_DACCTRL1 0x13 | ||
37 | #define WM8770_DACMUTE 0x14 | ||
38 | #define WM8770_DACCTRL2 0x15 | ||
39 | #define WM8770_IFACECTRL 0x16 | ||
40 | #define WM8770_MSTRCTRL 0x17 | ||
41 | #define WM8770_PWDNCTRL 0x18 | ||
42 | #define WM8770_ADCLCTRL 0x19 | ||
43 | #define WM8770_ADCRCTRL 0x1a | ||
44 | #define WM8770_ADCMUX 0x1b | ||
45 | #define WM8770_OUTMUX1 0x1c | ||
46 | #define WM8770_OUTMUX2 0x1d | ||
47 | #define WM8770_RESET 0x31 | ||
48 | |||
49 | #define WM8770_CACHEREGNUM 0x20 | ||
50 | |||
51 | #endif | ||
diff --git a/sound/soc/codecs/wm8776.c b/sound/soc/codecs/wm8776.c index 0132a27140ae..8e7953b1b790 100644 --- a/sound/soc/codecs/wm8776.c +++ b/sound/soc/codecs/wm8776.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #include <sound/pcm.h> | 25 | #include <sound/pcm.h> |
26 | #include <sound/pcm_params.h> | 26 | #include <sound/pcm_params.h> |
27 | #include <sound/soc.h> | 27 | #include <sound/soc.h> |
28 | #include <sound/soc-dapm.h> | ||
29 | #include <sound/initval.h> | 28 | #include <sound/initval.h> |
30 | #include <sound/tlv.h> | 29 | #include <sound/tlv.h> |
31 | 30 | ||
@@ -306,7 +305,7 @@ static int wm8776_set_bias_level(struct snd_soc_codec *codec, | |||
306 | case SND_SOC_BIAS_PREPARE: | 305 | case SND_SOC_BIAS_PREPARE: |
307 | break; | 306 | break; |
308 | case SND_SOC_BIAS_STANDBY: | 307 | case SND_SOC_BIAS_STANDBY: |
309 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 308 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
310 | /* Disable the global powerdown; DAPM does the rest */ | 309 | /* Disable the global powerdown; DAPM does the rest */ |
311 | snd_soc_update_bits(codec, WM8776_PWRDOWN, 1, 0); | 310 | snd_soc_update_bits(codec, WM8776_PWRDOWN, 1, 0); |
312 | } | 311 | } |
@@ -317,7 +316,7 @@ static int wm8776_set_bias_level(struct snd_soc_codec *codec, | |||
317 | break; | 316 | break; |
318 | } | 317 | } |
319 | 318 | ||
320 | codec->bias_level = level; | 319 | codec->dapm.bias_level = level; |
321 | return 0; | 320 | return 0; |
322 | } | 321 | } |
323 | 322 | ||
@@ -404,6 +403,7 @@ static int wm8776_resume(struct snd_soc_codec *codec) | |||
404 | static int wm8776_probe(struct snd_soc_codec *codec) | 403 | static int wm8776_probe(struct snd_soc_codec *codec) |
405 | { | 404 | { |
406 | struct wm8776_priv *wm8776 = snd_soc_codec_get_drvdata(codec); | 405 | struct wm8776_priv *wm8776 = snd_soc_codec_get_drvdata(codec); |
406 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
407 | int ret = 0; | 407 | int ret = 0; |
408 | 408 | ||
409 | ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8776->control_type); | 409 | ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8776->control_type); |
@@ -427,9 +427,9 @@ static int wm8776_probe(struct snd_soc_codec *codec) | |||
427 | 427 | ||
428 | snd_soc_add_controls(codec, wm8776_snd_controls, | 428 | snd_soc_add_controls(codec, wm8776_snd_controls, |
429 | ARRAY_SIZE(wm8776_snd_controls)); | 429 | ARRAY_SIZE(wm8776_snd_controls)); |
430 | snd_soc_dapm_new_controls(codec, wm8776_dapm_widgets, | 430 | snd_soc_dapm_new_controls(dapm, wm8776_dapm_widgets, |
431 | ARRAY_SIZE(wm8776_dapm_widgets)); | 431 | ARRAY_SIZE(wm8776_dapm_widgets)); |
432 | snd_soc_dapm_add_routes(codec, routes, ARRAY_SIZE(routes)); | 432 | snd_soc_dapm_add_routes(dapm, routes, ARRAY_SIZE(routes)); |
433 | 433 | ||
434 | return ret; | 434 | return ret; |
435 | } | 435 | } |
diff --git a/sound/soc/codecs/wm8804.c b/sound/soc/codecs/wm8804.c index 4599e8e95aa2..6dae1b40c9f7 100644 --- a/sound/soc/codecs/wm8804.c +++ b/sound/soc/codecs/wm8804.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <sound/pcm.h> | 23 | #include <sound/pcm.h> |
24 | #include <sound/pcm_params.h> | 24 | #include <sound/pcm_params.h> |
25 | #include <sound/soc.h> | 25 | #include <sound/soc.h> |
26 | #include <sound/soc-dapm.h> | ||
27 | #include <sound/initval.h> | 26 | #include <sound/initval.h> |
28 | #include <sound/tlv.h> | 27 | #include <sound/tlv.h> |
29 | 28 | ||
@@ -515,7 +514,7 @@ static int wm8804_set_bias_level(struct snd_soc_codec *codec, | |||
515 | snd_soc_update_bits(codec, WM8804_PWRDN, 0x9, 0); | 514 | snd_soc_update_bits(codec, WM8804_PWRDN, 0x9, 0); |
516 | break; | 515 | break; |
517 | case SND_SOC_BIAS_STANDBY: | 516 | case SND_SOC_BIAS_STANDBY: |
518 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 517 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
519 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8804->supplies), | 518 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8804->supplies), |
520 | wm8804->supplies); | 519 | wm8804->supplies); |
521 | if (ret) { | 520 | if (ret) { |
@@ -537,7 +536,7 @@ static int wm8804_set_bias_level(struct snd_soc_codec *codec, | |||
537 | break; | 536 | break; |
538 | } | 537 | } |
539 | 538 | ||
540 | codec->bias_level = level; | 539 | codec->dapm.bias_level = level; |
541 | return 0; | 540 | return 0; |
542 | } | 541 | } |
543 | 542 | ||
@@ -581,7 +580,7 @@ static int wm8804_probe(struct snd_soc_codec *codec) | |||
581 | wm8804 = snd_soc_codec_get_drvdata(codec); | 580 | wm8804 = snd_soc_codec_get_drvdata(codec); |
582 | wm8804->codec = codec; | 581 | wm8804->codec = codec; |
583 | 582 | ||
584 | codec->idle_bias_off = 1; | 583 | codec->dapm.idle_bias_off = 1; |
585 | 584 | ||
586 | ret = snd_soc_codec_set_cache_io(codec, 8, 8, wm8804->control_type); | 585 | ret = snd_soc_codec_set_cache_io(codec, 8, 8, wm8804->control_type); |
587 | if (ret < 0) { | 586 | if (ret < 0) { |
diff --git a/sound/soc/codecs/wm8900.c b/sound/soc/codecs/wm8900.c index aca4b1ea10bb..cfbaac1a0ead 100644 --- a/sound/soc/codecs/wm8900.c +++ b/sound/soc/codecs/wm8900.c | |||
@@ -30,7 +30,6 @@ | |||
30 | #include <sound/pcm.h> | 30 | #include <sound/pcm.h> |
31 | #include <sound/pcm_params.h> | 31 | #include <sound/pcm_params.h> |
32 | #include <sound/soc.h> | 32 | #include <sound/soc.h> |
33 | #include <sound/soc-dapm.h> | ||
34 | #include <sound/initval.h> | 33 | #include <sound/initval.h> |
35 | #include <sound/tlv.h> | 34 | #include <sound/tlv.h> |
36 | 35 | ||
@@ -611,10 +610,11 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
611 | 610 | ||
612 | static int wm8900_add_widgets(struct snd_soc_codec *codec) | 611 | static int wm8900_add_widgets(struct snd_soc_codec *codec) |
613 | { | 612 | { |
614 | snd_soc_dapm_new_controls(codec, wm8900_dapm_widgets, | 613 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
615 | ARRAY_SIZE(wm8900_dapm_widgets)); | ||
616 | 614 | ||
617 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 615 | snd_soc_dapm_new_controls(dapm, wm8900_dapm_widgets, |
616 | ARRAY_SIZE(wm8900_dapm_widgets)); | ||
617 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); | ||
618 | 618 | ||
619 | return 0; | 619 | return 0; |
620 | } | 620 | } |
@@ -1051,7 +1051,7 @@ static int wm8900_set_bias_level(struct snd_soc_codec *codec, | |||
1051 | 1051 | ||
1052 | case SND_SOC_BIAS_STANDBY: | 1052 | case SND_SOC_BIAS_STANDBY: |
1053 | /* Charge capacitors if initial power up */ | 1053 | /* Charge capacitors if initial power up */ |
1054 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 1054 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
1055 | /* STARTUP_BIAS_ENA on */ | 1055 | /* STARTUP_BIAS_ENA on */ |
1056 | snd_soc_write(codec, WM8900_REG_POWER1, | 1056 | snd_soc_write(codec, WM8900_REG_POWER1, |
1057 | WM8900_REG_POWER1_STARTUP_BIAS_ENA); | 1057 | WM8900_REG_POWER1_STARTUP_BIAS_ENA); |
@@ -1119,7 +1119,7 @@ static int wm8900_set_bias_level(struct snd_soc_codec *codec, | |||
1119 | WM8900_REG_POWER2_SYSCLK_ENA); | 1119 | WM8900_REG_POWER2_SYSCLK_ENA); |
1120 | break; | 1120 | break; |
1121 | } | 1121 | } |
1122 | codec->bias_level = level; | 1122 | codec->dapm.bias_level = level; |
1123 | return 0; | 1123 | return 0; |
1124 | } | 1124 | } |
1125 | 1125 | ||
diff --git a/sound/soc/codecs/wm8903.c b/sound/soc/codecs/wm8903.c index 622b60238a82..620793e51666 100644 --- a/sound/soc/codecs/wm8903.c +++ b/sound/soc/codecs/wm8903.c | |||
@@ -29,7 +29,6 @@ | |||
29 | #include <sound/pcm_params.h> | 29 | #include <sound/pcm_params.h> |
30 | #include <sound/tlv.h> | 30 | #include <sound/tlv.h> |
31 | #include <sound/soc.h> | 31 | #include <sound/soc.h> |
32 | #include <sound/soc-dapm.h> | ||
33 | #include <sound/initval.h> | 32 | #include <sound/initval.h> |
34 | #include <sound/wm8903.h> | 33 | #include <sound/wm8903.h> |
35 | 34 | ||
@@ -923,10 +922,11 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
923 | 922 | ||
924 | static int wm8903_add_widgets(struct snd_soc_codec *codec) | 923 | static int wm8903_add_widgets(struct snd_soc_codec *codec) |
925 | { | 924 | { |
926 | snd_soc_dapm_new_controls(codec, wm8903_dapm_widgets, | 925 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
927 | ARRAY_SIZE(wm8903_dapm_widgets)); | ||
928 | 926 | ||
929 | snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); | 927 | snd_soc_dapm_new_controls(dapm, wm8903_dapm_widgets, |
928 | ARRAY_SIZE(wm8903_dapm_widgets)); | ||
929 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); | ||
930 | 930 | ||
931 | return 0; | 931 | return 0; |
932 | } | 932 | } |
@@ -946,7 +946,7 @@ static int wm8903_set_bias_level(struct snd_soc_codec *codec, | |||
946 | break; | 946 | break; |
947 | 947 | ||
948 | case SND_SOC_BIAS_STANDBY: | 948 | case SND_SOC_BIAS_STANDBY: |
949 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 949 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
950 | snd_soc_write(codec, WM8903_CLOCK_RATES_2, | 950 | snd_soc_write(codec, WM8903_CLOCK_RATES_2, |
951 | WM8903_CLK_SYS_ENA); | 951 | WM8903_CLK_SYS_ENA); |
952 | 952 | ||
@@ -991,7 +991,7 @@ static int wm8903_set_bias_level(struct snd_soc_codec *codec, | |||
991 | break; | 991 | break; |
992 | } | 992 | } |
993 | 993 | ||
994 | codec->bias_level = level; | 994 | codec->dapm.bias_level = level; |
995 | 995 | ||
996 | return 0; | 996 | return 0; |
997 | } | 997 | } |
diff --git a/sound/soc/codecs/wm8904.c b/sound/soc/codecs/wm8904.c index 33be84e506ea..da9192890187 100644 --- a/sound/soc/codecs/wm8904.c +++ b/sound/soc/codecs/wm8904.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <sound/pcm.h> | 24 | #include <sound/pcm.h> |
25 | #include <sound/pcm_params.h> | 25 | #include <sound/pcm_params.h> |
26 | #include <sound/soc.h> | 26 | #include <sound/soc.h> |
27 | #include <sound/soc-dapm.h> | ||
28 | #include <sound/initval.h> | 27 | #include <sound/initval.h> |
29 | #include <sound/tlv.h> | 28 | #include <sound/tlv.h> |
30 | #include <sound/wm8904.h> | 29 | #include <sound/wm8904.h> |
@@ -1428,10 +1427,11 @@ static const struct snd_soc_dapm_route wm8912_intercon[] = { | |||
1428 | static int wm8904_add_widgets(struct snd_soc_codec *codec) | 1427 | static int wm8904_add_widgets(struct snd_soc_codec *codec) |
1429 | { | 1428 | { |
1430 | struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec); | 1429 | struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec); |
1430 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
1431 | 1431 | ||
1432 | snd_soc_dapm_new_controls(codec, wm8904_core_dapm_widgets, | 1432 | snd_soc_dapm_new_controls(dapm, wm8904_core_dapm_widgets, |
1433 | ARRAY_SIZE(wm8904_core_dapm_widgets)); | 1433 | ARRAY_SIZE(wm8904_core_dapm_widgets)); |
1434 | snd_soc_dapm_add_routes(codec, core_intercon, | 1434 | snd_soc_dapm_add_routes(dapm, core_intercon, |
1435 | ARRAY_SIZE(core_intercon)); | 1435 | ARRAY_SIZE(core_intercon)); |
1436 | 1436 | ||
1437 | switch (wm8904->devtype) { | 1437 | switch (wm8904->devtype) { |
@@ -1443,20 +1443,20 @@ static int wm8904_add_widgets(struct snd_soc_codec *codec) | |||
1443 | snd_soc_add_controls(codec, wm8904_snd_controls, | 1443 | snd_soc_add_controls(codec, wm8904_snd_controls, |
1444 | ARRAY_SIZE(wm8904_snd_controls)); | 1444 | ARRAY_SIZE(wm8904_snd_controls)); |
1445 | 1445 | ||
1446 | snd_soc_dapm_new_controls(codec, wm8904_adc_dapm_widgets, | 1446 | snd_soc_dapm_new_controls(dapm, wm8904_adc_dapm_widgets, |
1447 | ARRAY_SIZE(wm8904_adc_dapm_widgets)); | 1447 | ARRAY_SIZE(wm8904_adc_dapm_widgets)); |
1448 | snd_soc_dapm_new_controls(codec, wm8904_dac_dapm_widgets, | 1448 | snd_soc_dapm_new_controls(dapm, wm8904_dac_dapm_widgets, |
1449 | ARRAY_SIZE(wm8904_dac_dapm_widgets)); | 1449 | ARRAY_SIZE(wm8904_dac_dapm_widgets)); |
1450 | snd_soc_dapm_new_controls(codec, wm8904_dapm_widgets, | 1450 | snd_soc_dapm_new_controls(dapm, wm8904_dapm_widgets, |
1451 | ARRAY_SIZE(wm8904_dapm_widgets)); | 1451 | ARRAY_SIZE(wm8904_dapm_widgets)); |
1452 | 1452 | ||
1453 | snd_soc_dapm_add_routes(codec, core_intercon, | 1453 | snd_soc_dapm_add_routes(dapm, core_intercon, |
1454 | ARRAY_SIZE(core_intercon)); | 1454 | ARRAY_SIZE(core_intercon)); |
1455 | snd_soc_dapm_add_routes(codec, adc_intercon, | 1455 | snd_soc_dapm_add_routes(dapm, adc_intercon, |
1456 | ARRAY_SIZE(adc_intercon)); | 1456 | ARRAY_SIZE(adc_intercon)); |
1457 | snd_soc_dapm_add_routes(codec, dac_intercon, | 1457 | snd_soc_dapm_add_routes(dapm, dac_intercon, |
1458 | ARRAY_SIZE(dac_intercon)); | 1458 | ARRAY_SIZE(dac_intercon)); |
1459 | snd_soc_dapm_add_routes(codec, wm8904_intercon, | 1459 | snd_soc_dapm_add_routes(dapm, wm8904_intercon, |
1460 | ARRAY_SIZE(wm8904_intercon)); | 1460 | ARRAY_SIZE(wm8904_intercon)); |
1461 | break; | 1461 | break; |
1462 | 1462 | ||
@@ -1464,17 +1464,17 @@ static int wm8904_add_widgets(struct snd_soc_codec *codec) | |||
1464 | snd_soc_add_controls(codec, wm8904_dac_snd_controls, | 1464 | snd_soc_add_controls(codec, wm8904_dac_snd_controls, |
1465 | ARRAY_SIZE(wm8904_dac_snd_controls)); | 1465 | ARRAY_SIZE(wm8904_dac_snd_controls)); |
1466 | 1466 | ||
1467 | snd_soc_dapm_new_controls(codec, wm8904_dac_dapm_widgets, | 1467 | snd_soc_dapm_new_controls(dapm, wm8904_dac_dapm_widgets, |
1468 | ARRAY_SIZE(wm8904_dac_dapm_widgets)); | 1468 | ARRAY_SIZE(wm8904_dac_dapm_widgets)); |
1469 | 1469 | ||
1470 | snd_soc_dapm_add_routes(codec, dac_intercon, | 1470 | snd_soc_dapm_add_routes(dapm, dac_intercon, |
1471 | ARRAY_SIZE(dac_intercon)); | 1471 | ARRAY_SIZE(dac_intercon)); |
1472 | snd_soc_dapm_add_routes(codec, wm8912_intercon, | 1472 | snd_soc_dapm_add_routes(dapm, wm8912_intercon, |
1473 | ARRAY_SIZE(wm8912_intercon)); | 1473 | ARRAY_SIZE(wm8912_intercon)); |
1474 | break; | 1474 | break; |
1475 | } | 1475 | } |
1476 | 1476 | ||
1477 | snd_soc_dapm_new_widgets(codec); | 1477 | snd_soc_dapm_new_widgets(dapm); |
1478 | return 0; | 1478 | return 0; |
1479 | } | 1479 | } |
1480 | 1480 | ||
@@ -1590,7 +1590,7 @@ static int wm8904_hw_params(struct snd_pcm_substream *substream, | |||
1590 | - wm8904->fs); | 1590 | - wm8904->fs); |
1591 | for (i = 1; i < ARRAY_SIZE(clk_sys_rates); i++) { | 1591 | for (i = 1; i < ARRAY_SIZE(clk_sys_rates); i++) { |
1592 | cur_val = abs((wm8904->sysclk_rate / | 1592 | cur_val = abs((wm8904->sysclk_rate / |
1593 | clk_sys_rates[i].ratio) - wm8904->fs);; | 1593 | clk_sys_rates[i].ratio) - wm8904->fs); |
1594 | if (cur_val < best_val) { | 1594 | if (cur_val < best_val) { |
1595 | best = i; | 1595 | best = i; |
1596 | best_val = cur_val; | 1596 | best_val = cur_val; |
@@ -2139,7 +2139,7 @@ static int wm8904_set_bias_level(struct snd_soc_codec *codec, | |||
2139 | break; | 2139 | break; |
2140 | 2140 | ||
2141 | case SND_SOC_BIAS_STANDBY: | 2141 | case SND_SOC_BIAS_STANDBY: |
2142 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 2142 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
2143 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8904->supplies), | 2143 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8904->supplies), |
2144 | wm8904->supplies); | 2144 | wm8904->supplies); |
2145 | if (ret != 0) { | 2145 | if (ret != 0) { |
@@ -2198,7 +2198,7 @@ static int wm8904_set_bias_level(struct snd_soc_codec *codec, | |||
2198 | wm8904->supplies); | 2198 | wm8904->supplies); |
2199 | break; | 2199 | break; |
2200 | } | 2200 | } |
2201 | codec->bias_level = level; | 2201 | codec->dapm.bias_level = level; |
2202 | return 0; | 2202 | return 0; |
2203 | } | 2203 | } |
2204 | 2204 | ||
@@ -2373,7 +2373,7 @@ static int wm8904_probe(struct snd_soc_codec *codec) | |||
2373 | int ret, i; | 2373 | int ret, i; |
2374 | 2374 | ||
2375 | codec->cache_sync = 1; | 2375 | codec->cache_sync = 1; |
2376 | codec->idle_bias_off = 1; | 2376 | codec->dapm.idle_bias_off = 1; |
2377 | 2377 | ||
2378 | switch (wm8904->devtype) { | 2378 | switch (wm8904->devtype) { |
2379 | case WM8904: | 2379 | case WM8904: |
diff --git a/sound/soc/codecs/wm8940.c b/sound/soc/codecs/wm8940.c index 2cb16f895c46..381934fff4ec 100644 --- a/sound/soc/codecs/wm8940.c +++ b/sound/soc/codecs/wm8940.c | |||
@@ -35,7 +35,6 @@ | |||
35 | #include <sound/pcm.h> | 35 | #include <sound/pcm.h> |
36 | #include <sound/pcm_params.h> | 36 | #include <sound/pcm_params.h> |
37 | #include <sound/soc.h> | 37 | #include <sound/soc.h> |
38 | #include <sound/soc-dapm.h> | ||
39 | #include <sound/initval.h> | 38 | #include <sound/initval.h> |
40 | #include <sound/tlv.h> | 39 | #include <sound/tlv.h> |
41 | 40 | ||
@@ -291,13 +290,14 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
291 | 290 | ||
292 | static int wm8940_add_widgets(struct snd_soc_codec *codec) | 291 | static int wm8940_add_widgets(struct snd_soc_codec *codec) |
293 | { | 292 | { |
293 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
294 | int ret; | 294 | int ret; |
295 | 295 | ||
296 | ret = snd_soc_dapm_new_controls(codec, wm8940_dapm_widgets, | 296 | ret = snd_soc_dapm_new_controls(dapm, wm8940_dapm_widgets, |
297 | ARRAY_SIZE(wm8940_dapm_widgets)); | 297 | ARRAY_SIZE(wm8940_dapm_widgets)); |
298 | if (ret) | 298 | if (ret) |
299 | goto error_ret; | 299 | goto error_ret; |
300 | ret = snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 300 | ret = snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
301 | if (ret) | 301 | if (ret) |
302 | goto error_ret; | 302 | goto error_ret; |
303 | 303 | ||
@@ -735,7 +735,6 @@ static int wm8940_probe(struct snd_soc_codec *codec) | |||
735 | return ret; | 735 | return ret; |
736 | 736 | ||
737 | return ret; | 737 | return ret; |
738 | ; | ||
739 | } | 738 | } |
740 | 739 | ||
741 | static int wm8940_remove(struct snd_soc_codec *codec) | 740 | static int wm8940_remove(struct snd_soc_codec *codec) |
diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c index f89ad6c9a80b..6200beb082b2 100644 --- a/sound/soc/codecs/wm8955.c +++ b/sound/soc/codecs/wm8955.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <sound/pcm.h> | 23 | #include <sound/pcm.h> |
24 | #include <sound/pcm_params.h> | 24 | #include <sound/pcm_params.h> |
25 | #include <sound/soc.h> | 25 | #include <sound/soc.h> |
26 | #include <sound/soc-dapm.h> | ||
27 | #include <sound/initval.h> | 26 | #include <sound/initval.h> |
28 | #include <sound/tlv.h> | 27 | #include <sound/tlv.h> |
29 | #include <sound/wm8955.h> | 28 | #include <sound/wm8955.h> |
@@ -577,13 +576,14 @@ static const struct snd_soc_dapm_route wm8955_intercon[] = { | |||
577 | 576 | ||
578 | static int wm8955_add_widgets(struct snd_soc_codec *codec) | 577 | static int wm8955_add_widgets(struct snd_soc_codec *codec) |
579 | { | 578 | { |
579 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
580 | |||
580 | snd_soc_add_controls(codec, wm8955_snd_controls, | 581 | snd_soc_add_controls(codec, wm8955_snd_controls, |
581 | ARRAY_SIZE(wm8955_snd_controls)); | 582 | ARRAY_SIZE(wm8955_snd_controls)); |
582 | 583 | ||
583 | snd_soc_dapm_new_controls(codec, wm8955_dapm_widgets, | 584 | snd_soc_dapm_new_controls(dapm, wm8955_dapm_widgets, |
584 | ARRAY_SIZE(wm8955_dapm_widgets)); | 585 | ARRAY_SIZE(wm8955_dapm_widgets)); |
585 | 586 | snd_soc_dapm_add_routes(dapm, wm8955_intercon, | |
586 | snd_soc_dapm_add_routes(codec, wm8955_intercon, | ||
587 | ARRAY_SIZE(wm8955_intercon)); | 587 | ARRAY_SIZE(wm8955_intercon)); |
588 | 588 | ||
589 | return 0; | 589 | return 0; |
@@ -786,7 +786,7 @@ static int wm8955_set_bias_level(struct snd_soc_codec *codec, | |||
786 | break; | 786 | break; |
787 | 787 | ||
788 | case SND_SOC_BIAS_STANDBY: | 788 | case SND_SOC_BIAS_STANDBY: |
789 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 789 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
790 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8955->supplies), | 790 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8955->supplies), |
791 | wm8955->supplies); | 791 | wm8955->supplies); |
792 | if (ret != 0) { | 792 | if (ret != 0) { |
@@ -850,7 +850,7 @@ static int wm8955_set_bias_level(struct snd_soc_codec *codec, | |||
850 | wm8955->supplies); | 850 | wm8955->supplies); |
851 | break; | 851 | break; |
852 | } | 852 | } |
853 | codec->bias_level = level; | 853 | codec->dapm.bias_level = level; |
854 | return 0; | 854 | return 0; |
855 | } | 855 | } |
856 | 856 | ||
diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c index 8d5efb333c33..0bcf36ee29bc 100644 --- a/sound/soc/codecs/wm8960.c +++ b/sound/soc/codecs/wm8960.c | |||
@@ -20,7 +20,6 @@ | |||
20 | #include <sound/pcm.h> | 20 | #include <sound/pcm.h> |
21 | #include <sound/pcm_params.h> | 21 | #include <sound/pcm_params.h> |
22 | #include <sound/soc.h> | 22 | #include <sound/soc.h> |
23 | #include <sound/soc-dapm.h> | ||
24 | #include <sound/initval.h> | 23 | #include <sound/initval.h> |
25 | #include <sound/tlv.h> | 24 | #include <sound/tlv.h> |
26 | #include <sound/wm8960.h> | 25 | #include <sound/wm8960.h> |
@@ -388,27 +387,28 @@ static int wm8960_add_widgets(struct snd_soc_codec *codec) | |||
388 | { | 387 | { |
389 | struct wm8960_data *pdata = codec->dev->platform_data; | 388 | struct wm8960_data *pdata = codec->dev->platform_data; |
390 | struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec); | 389 | struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec); |
390 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
391 | struct snd_soc_dapm_widget *w; | 391 | struct snd_soc_dapm_widget *w; |
392 | 392 | ||
393 | snd_soc_dapm_new_controls(codec, wm8960_dapm_widgets, | 393 | snd_soc_dapm_new_controls(dapm, wm8960_dapm_widgets, |
394 | ARRAY_SIZE(wm8960_dapm_widgets)); | 394 | ARRAY_SIZE(wm8960_dapm_widgets)); |
395 | 395 | ||
396 | snd_soc_dapm_add_routes(codec, audio_paths, ARRAY_SIZE(audio_paths)); | 396 | snd_soc_dapm_add_routes(dapm, audio_paths, ARRAY_SIZE(audio_paths)); |
397 | 397 | ||
398 | /* In capless mode OUT3 is used to provide VMID for the | 398 | /* In capless mode OUT3 is used to provide VMID for the |
399 | * headphone outputs, otherwise it is used as a mono mixer. | 399 | * headphone outputs, otherwise it is used as a mono mixer. |
400 | */ | 400 | */ |
401 | if (pdata && pdata->capless) { | 401 | if (pdata && pdata->capless) { |
402 | snd_soc_dapm_new_controls(codec, wm8960_dapm_widgets_capless, | 402 | snd_soc_dapm_new_controls(dapm, wm8960_dapm_widgets_capless, |
403 | ARRAY_SIZE(wm8960_dapm_widgets_capless)); | 403 | ARRAY_SIZE(wm8960_dapm_widgets_capless)); |
404 | 404 | ||
405 | snd_soc_dapm_add_routes(codec, audio_paths_capless, | 405 | snd_soc_dapm_add_routes(dapm, audio_paths_capless, |
406 | ARRAY_SIZE(audio_paths_capless)); | 406 | ARRAY_SIZE(audio_paths_capless)); |
407 | } else { | 407 | } else { |
408 | snd_soc_dapm_new_controls(codec, wm8960_dapm_widgets_out3, | 408 | snd_soc_dapm_new_controls(dapm, wm8960_dapm_widgets_out3, |
409 | ARRAY_SIZE(wm8960_dapm_widgets_out3)); | 409 | ARRAY_SIZE(wm8960_dapm_widgets_out3)); |
410 | 410 | ||
411 | snd_soc_dapm_add_routes(codec, audio_paths_out3, | 411 | snd_soc_dapm_add_routes(dapm, audio_paths_out3, |
412 | ARRAY_SIZE(audio_paths_out3)); | 412 | ARRAY_SIZE(audio_paths_out3)); |
413 | } | 413 | } |
414 | 414 | ||
@@ -417,7 +417,7 @@ static int wm8960_add_widgets(struct snd_soc_codec *codec) | |||
417 | * list each time to find the desired power state do so now | 417 | * list each time to find the desired power state do so now |
418 | * and save the result. | 418 | * and save the result. |
419 | */ | 419 | */ |
420 | list_for_each_entry(w, &codec->dapm_widgets, list) { | 420 | list_for_each_entry(w, &codec->dapm.widgets, list) { |
421 | if (strcmp(w->name, "LOUT1 PGA") == 0) | 421 | if (strcmp(w->name, "LOUT1 PGA") == 0) |
422 | wm8960->lout1 = w; | 422 | wm8960->lout1 = w; |
423 | if (strcmp(w->name, "ROUT1 PGA") == 0) | 423 | if (strcmp(w->name, "ROUT1 PGA") == 0) |
@@ -572,7 +572,7 @@ static int wm8960_set_bias_level_out3(struct snd_soc_codec *codec, | |||
572 | break; | 572 | break; |
573 | 573 | ||
574 | case SND_SOC_BIAS_STANDBY: | 574 | case SND_SOC_BIAS_STANDBY: |
575 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 575 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
576 | /* Enable anti-pop features */ | 576 | /* Enable anti-pop features */ |
577 | snd_soc_write(codec, WM8960_APOP1, | 577 | snd_soc_write(codec, WM8960_APOP1, |
578 | WM8960_POBCTRL | WM8960_SOFT_ST | | 578 | WM8960_POBCTRL | WM8960_SOFT_ST | |
@@ -610,7 +610,7 @@ static int wm8960_set_bias_level_out3(struct snd_soc_codec *codec, | |||
610 | break; | 610 | break; |
611 | } | 611 | } |
612 | 612 | ||
613 | codec->bias_level = level; | 613 | codec->dapm.bias_level = level; |
614 | 614 | ||
615 | return 0; | 615 | return 0; |
616 | } | 616 | } |
@@ -626,7 +626,7 @@ static int wm8960_set_bias_level_capless(struct snd_soc_codec *codec, | |||
626 | break; | 626 | break; |
627 | 627 | ||
628 | case SND_SOC_BIAS_PREPARE: | 628 | case SND_SOC_BIAS_PREPARE: |
629 | switch (codec->bias_level) { | 629 | switch (codec->dapm.bias_level) { |
630 | case SND_SOC_BIAS_STANDBY: | 630 | case SND_SOC_BIAS_STANDBY: |
631 | /* Enable anti pop mode */ | 631 | /* Enable anti pop mode */ |
632 | snd_soc_update_bits(codec, WM8960_APOP1, | 632 | snd_soc_update_bits(codec, WM8960_APOP1, |
@@ -681,7 +681,7 @@ static int wm8960_set_bias_level_capless(struct snd_soc_codec *codec, | |||
681 | break; | 681 | break; |
682 | 682 | ||
683 | case SND_SOC_BIAS_STANDBY: | 683 | case SND_SOC_BIAS_STANDBY: |
684 | switch (codec->bias_level) { | 684 | switch (codec->dapm.bias_level) { |
685 | case SND_SOC_BIAS_PREPARE: | 685 | case SND_SOC_BIAS_PREPARE: |
686 | /* Disable HP discharge */ | 686 | /* Disable HP discharge */ |
687 | snd_soc_update_bits(codec, WM8960_APOP2, | 687 | snd_soc_update_bits(codec, WM8960_APOP2, |
@@ -705,7 +705,7 @@ static int wm8960_set_bias_level_capless(struct snd_soc_codec *codec, | |||
705 | break; | 705 | break; |
706 | } | 706 | } |
707 | 707 | ||
708 | codec->bias_level = level; | 708 | codec->dapm.bias_level = level; |
709 | 709 | ||
710 | return 0; | 710 | return 0; |
711 | } | 711 | } |
diff --git a/sound/soc/codecs/wm8961.c b/sound/soc/codecs/wm8961.c index 4f326f604104..a0bb972420b3 100644 --- a/sound/soc/codecs/wm8961.c +++ b/sound/soc/codecs/wm8961.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <sound/pcm.h> | 23 | #include <sound/pcm.h> |
24 | #include <sound/pcm_params.h> | 24 | #include <sound/pcm_params.h> |
25 | #include <sound/soc.h> | 25 | #include <sound/soc.h> |
26 | #include <sound/soc-dapm.h> | ||
27 | #include <sound/initval.h> | 26 | #include <sound/initval.h> |
28 | #include <sound/tlv.h> | 27 | #include <sound/tlv.h> |
29 | 28 | ||
@@ -882,7 +881,7 @@ static int wm8961_set_bias_level(struct snd_soc_codec *codec, | |||
882 | break; | 881 | break; |
883 | 882 | ||
884 | case SND_SOC_BIAS_PREPARE: | 883 | case SND_SOC_BIAS_PREPARE: |
885 | if (codec->bias_level == SND_SOC_BIAS_STANDBY) { | 884 | if (codec->dapm.bias_level == SND_SOC_BIAS_STANDBY) { |
886 | /* Enable bias generation */ | 885 | /* Enable bias generation */ |
887 | reg = snd_soc_read(codec, WM8961_ANTI_POP); | 886 | reg = snd_soc_read(codec, WM8961_ANTI_POP); |
888 | reg |= WM8961_BUFIOEN | WM8961_BUFDCOPEN; | 887 | reg |= WM8961_BUFIOEN | WM8961_BUFDCOPEN; |
@@ -897,7 +896,7 @@ static int wm8961_set_bias_level(struct snd_soc_codec *codec, | |||
897 | break; | 896 | break; |
898 | 897 | ||
899 | case SND_SOC_BIAS_STANDBY: | 898 | case SND_SOC_BIAS_STANDBY: |
900 | if (codec->bias_level == SND_SOC_BIAS_PREPARE) { | 899 | if (codec->dapm.bias_level == SND_SOC_BIAS_PREPARE) { |
901 | /* VREF off */ | 900 | /* VREF off */ |
902 | reg = snd_soc_read(codec, WM8961_PWR_MGMT_1); | 901 | reg = snd_soc_read(codec, WM8961_PWR_MGMT_1); |
903 | reg &= ~WM8961_VREF; | 902 | reg &= ~WM8961_VREF; |
@@ -919,7 +918,7 @@ static int wm8961_set_bias_level(struct snd_soc_codec *codec, | |||
919 | break; | 918 | break; |
920 | } | 919 | } |
921 | 920 | ||
922 | codec->bias_level = level; | 921 | codec->dapm.bias_level = level; |
923 | 922 | ||
924 | return 0; | 923 | return 0; |
925 | } | 924 | } |
@@ -959,6 +958,7 @@ static struct snd_soc_dai_driver wm8961_dai = { | |||
959 | 958 | ||
960 | static int wm8961_probe(struct snd_soc_codec *codec) | 959 | static int wm8961_probe(struct snd_soc_codec *codec) |
961 | { | 960 | { |
961 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
962 | int ret = 0; | 962 | int ret = 0; |
963 | u16 reg; | 963 | u16 reg; |
964 | 964 | ||
@@ -1024,9 +1024,9 @@ static int wm8961_probe(struct snd_soc_codec *codec) | |||
1024 | 1024 | ||
1025 | snd_soc_add_controls(codec, wm8961_snd_controls, | 1025 | snd_soc_add_controls(codec, wm8961_snd_controls, |
1026 | ARRAY_SIZE(wm8961_snd_controls)); | 1026 | ARRAY_SIZE(wm8961_snd_controls)); |
1027 | snd_soc_dapm_new_controls(codec, wm8961_dapm_widgets, | 1027 | snd_soc_dapm_new_controls(dapm, wm8961_dapm_widgets, |
1028 | ARRAY_SIZE(wm8961_dapm_widgets)); | 1028 | ARRAY_SIZE(wm8961_dapm_widgets)); |
1029 | snd_soc_dapm_add_routes(codec, audio_paths, ARRAY_SIZE(audio_paths)); | 1029 | snd_soc_dapm_add_routes(dapm, audio_paths, ARRAY_SIZE(audio_paths)); |
1030 | 1030 | ||
1031 | return 0; | 1031 | return 0; |
1032 | } | 1032 | } |
diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c index e8092745a207..cf4b2722648a 100644 --- a/sound/soc/codecs/wm8962.c +++ b/sound/soc/codecs/wm8962.c | |||
@@ -29,7 +29,6 @@ | |||
29 | #include <sound/pcm.h> | 29 | #include <sound/pcm.h> |
30 | #include <sound/pcm_params.h> | 30 | #include <sound/pcm_params.h> |
31 | #include <sound/soc.h> | 31 | #include <sound/soc.h> |
32 | #include <sound/soc-dapm.h> | ||
33 | #include <sound/initval.h> | 32 | #include <sound/initval.h> |
34 | #include <sound/tlv.h> | 33 | #include <sound/tlv.h> |
35 | #include <sound/wm8962.h> | 34 | #include <sound/wm8962.h> |
@@ -1958,7 +1957,7 @@ static int wm8962_readable_register(unsigned int reg) | |||
1958 | 1957 | ||
1959 | static int wm8962_reset(struct snd_soc_codec *codec) | 1958 | static int wm8962_reset(struct snd_soc_codec *codec) |
1960 | { | 1959 | { |
1961 | return snd_soc_write(codec, WM8962_SOFTWARE_RESET, 0); | 1960 | return snd_soc_write(codec, WM8962_SOFTWARE_RESET, 0x6243); |
1962 | } | 1961 | } |
1963 | 1962 | ||
1964 | static const DECLARE_TLV_DB_SCALE(inpga_tlv, -2325, 75, 0); | 1963 | static const DECLARE_TLV_DB_SCALE(inpga_tlv, -2325, 75, 0); |
@@ -2682,6 +2681,7 @@ static const struct snd_soc_dapm_route wm8962_spk_stereo_intercon[] = { | |||
2682 | static int wm8962_add_widgets(struct snd_soc_codec *codec) | 2681 | static int wm8962_add_widgets(struct snd_soc_codec *codec) |
2683 | { | 2682 | { |
2684 | struct wm8962_pdata *pdata = dev_get_platdata(codec->dev); | 2683 | struct wm8962_pdata *pdata = dev_get_platdata(codec->dev); |
2684 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
2685 | 2685 | ||
2686 | snd_soc_add_controls(codec, wm8962_snd_controls, | 2686 | snd_soc_add_controls(codec, wm8962_snd_controls, |
2687 | ARRAY_SIZE(wm8962_snd_controls)); | 2687 | ARRAY_SIZE(wm8962_snd_controls)); |
@@ -2693,26 +2693,26 @@ static int wm8962_add_widgets(struct snd_soc_codec *codec) | |||
2693 | ARRAY_SIZE(wm8962_spk_stereo_controls)); | 2693 | ARRAY_SIZE(wm8962_spk_stereo_controls)); |
2694 | 2694 | ||
2695 | 2695 | ||
2696 | snd_soc_dapm_new_controls(codec, wm8962_dapm_widgets, | 2696 | snd_soc_dapm_new_controls(dapm, wm8962_dapm_widgets, |
2697 | ARRAY_SIZE(wm8962_dapm_widgets)); | 2697 | ARRAY_SIZE(wm8962_dapm_widgets)); |
2698 | if (pdata && pdata->spk_mono) | 2698 | if (pdata && pdata->spk_mono) |
2699 | snd_soc_dapm_new_controls(codec, wm8962_dapm_spk_mono_widgets, | 2699 | snd_soc_dapm_new_controls(dapm, wm8962_dapm_spk_mono_widgets, |
2700 | ARRAY_SIZE(wm8962_dapm_spk_mono_widgets)); | 2700 | ARRAY_SIZE(wm8962_dapm_spk_mono_widgets)); |
2701 | else | 2701 | else |
2702 | snd_soc_dapm_new_controls(codec, wm8962_dapm_spk_stereo_widgets, | 2702 | snd_soc_dapm_new_controls(dapm, wm8962_dapm_spk_stereo_widgets, |
2703 | ARRAY_SIZE(wm8962_dapm_spk_stereo_widgets)); | 2703 | ARRAY_SIZE(wm8962_dapm_spk_stereo_widgets)); |
2704 | 2704 | ||
2705 | snd_soc_dapm_add_routes(codec, wm8962_intercon, | 2705 | snd_soc_dapm_add_routes(dapm, wm8962_intercon, |
2706 | ARRAY_SIZE(wm8962_intercon)); | 2706 | ARRAY_SIZE(wm8962_intercon)); |
2707 | if (pdata && pdata->spk_mono) | 2707 | if (pdata && pdata->spk_mono) |
2708 | snd_soc_dapm_add_routes(codec, wm8962_spk_mono_intercon, | 2708 | snd_soc_dapm_add_routes(dapm, wm8962_spk_mono_intercon, |
2709 | ARRAY_SIZE(wm8962_spk_mono_intercon)); | 2709 | ARRAY_SIZE(wm8962_spk_mono_intercon)); |
2710 | else | 2710 | else |
2711 | snd_soc_dapm_add_routes(codec, wm8962_spk_stereo_intercon, | 2711 | snd_soc_dapm_add_routes(dapm, wm8962_spk_stereo_intercon, |
2712 | ARRAY_SIZE(wm8962_spk_stereo_intercon)); | 2712 | ARRAY_SIZE(wm8962_spk_stereo_intercon)); |
2713 | 2713 | ||
2714 | 2714 | ||
2715 | snd_soc_dapm_disable_pin(codec, "Beep"); | 2715 | snd_soc_dapm_disable_pin(dapm, "Beep"); |
2716 | 2716 | ||
2717 | return 0; | 2717 | return 0; |
2718 | } | 2718 | } |
@@ -2819,7 +2819,7 @@ static int wm8962_set_bias_level(struct snd_soc_codec *codec, | |||
2819 | struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec); | 2819 | struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec); |
2820 | int ret; | 2820 | int ret; |
2821 | 2821 | ||
2822 | if (level == codec->bias_level) | 2822 | if (level == codec->dapm.bias_level) |
2823 | return 0; | 2823 | return 0; |
2824 | 2824 | ||
2825 | switch (level) { | 2825 | switch (level) { |
@@ -2833,7 +2833,7 @@ static int wm8962_set_bias_level(struct snd_soc_codec *codec, | |||
2833 | break; | 2833 | break; |
2834 | 2834 | ||
2835 | case SND_SOC_BIAS_STANDBY: | 2835 | case SND_SOC_BIAS_STANDBY: |
2836 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 2836 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
2837 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8962->supplies), | 2837 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8962->supplies), |
2838 | wm8962->supplies); | 2838 | wm8962->supplies); |
2839 | if (ret != 0) { | 2839 | if (ret != 0) { |
@@ -2883,7 +2883,7 @@ static int wm8962_set_bias_level(struct snd_soc_codec *codec, | |||
2883 | wm8962->supplies); | 2883 | wm8962->supplies); |
2884 | break; | 2884 | break; |
2885 | } | 2885 | } |
2886 | codec->bias_level = level; | 2886 | codec->dapm.bias_level = level; |
2887 | return 0; | 2887 | return 0; |
2888 | } | 2888 | } |
2889 | 2889 | ||
@@ -3353,6 +3353,8 @@ static irqreturn_t wm8962_irq(int irq, void *data) | |||
3353 | if (active & (WM8962_MICSCD_EINT | WM8962_MICD_EINT)) { | 3353 | if (active & (WM8962_MICSCD_EINT | WM8962_MICD_EINT)) { |
3354 | dev_dbg(codec->dev, "Microphone event detected\n"); | 3354 | dev_dbg(codec->dev, "Microphone event detected\n"); |
3355 | 3355 | ||
3356 | pm_wakeup_event(codec->dev, 300); | ||
3357 | |||
3356 | schedule_delayed_work(&wm8962->mic_work, | 3358 | schedule_delayed_work(&wm8962->mic_work, |
3357 | msecs_to_jiffies(250)); | 3359 | msecs_to_jiffies(250)); |
3358 | } | 3360 | } |
@@ -3439,6 +3441,7 @@ static void wm8962_beep_work(struct work_struct *work) | |||
3439 | struct wm8962_priv *wm8962 = | 3441 | struct wm8962_priv *wm8962 = |
3440 | container_of(work, struct wm8962_priv, beep_work); | 3442 | container_of(work, struct wm8962_priv, beep_work); |
3441 | struct snd_soc_codec *codec = wm8962->codec; | 3443 | struct snd_soc_codec *codec = wm8962->codec; |
3444 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
3442 | int i; | 3445 | int i; |
3443 | int reg = 0; | 3446 | int reg = 0; |
3444 | int best = 0; | 3447 | int best = 0; |
@@ -3455,16 +3458,16 @@ static void wm8962_beep_work(struct work_struct *work) | |||
3455 | 3458 | ||
3456 | reg = WM8962_BEEP_ENA | (best << WM8962_BEEP_RATE_SHIFT); | 3459 | reg = WM8962_BEEP_ENA | (best << WM8962_BEEP_RATE_SHIFT); |
3457 | 3460 | ||
3458 | snd_soc_dapm_enable_pin(codec, "Beep"); | 3461 | snd_soc_dapm_enable_pin(dapm, "Beep"); |
3459 | } else { | 3462 | } else { |
3460 | dev_dbg(codec->dev, "Disabling beep\n"); | 3463 | dev_dbg(codec->dev, "Disabling beep\n"); |
3461 | snd_soc_dapm_disable_pin(codec, "Beep"); | 3464 | snd_soc_dapm_disable_pin(dapm, "Beep"); |
3462 | } | 3465 | } |
3463 | 3466 | ||
3464 | snd_soc_update_bits(codec, WM8962_BEEP_GENERATOR_1, | 3467 | snd_soc_update_bits(codec, WM8962_BEEP_GENERATOR_1, |
3465 | WM8962_BEEP_ENA | WM8962_BEEP_RATE_MASK, reg); | 3468 | WM8962_BEEP_ENA | WM8962_BEEP_RATE_MASK, reg); |
3466 | 3469 | ||
3467 | snd_soc_dapm_sync(codec); | 3470 | snd_soc_dapm_sync(dapm); |
3468 | } | 3471 | } |
3469 | 3472 | ||
3470 | /* For usability define a way of injecting beep events for the device - | 3473 | /* For usability define a way of injecting beep events for the device - |
@@ -3711,7 +3714,7 @@ static int wm8962_probe(struct snd_soc_codec *codec) | |||
3711 | INIT_DELAYED_WORK(&wm8962->mic_work, wm8962_mic_work); | 3714 | INIT_DELAYED_WORK(&wm8962->mic_work, wm8962_mic_work); |
3712 | 3715 | ||
3713 | codec->cache_sync = 1; | 3716 | codec->cache_sync = 1; |
3714 | codec->idle_bias_off = 1; | 3717 | codec->dapm.idle_bias_off = 1; |
3715 | 3718 | ||
3716 | ret = snd_soc_codec_set_cache_io(codec, 16, 16, SND_SOC_I2C); | 3719 | ret = snd_soc_codec_set_cache_io(codec, 16, 16, SND_SOC_I2C); |
3717 | if (ret != 0) { | 3720 | if (ret != 0) { |
@@ -3870,7 +3873,6 @@ err_enable: | |||
3870 | err_get: | 3873 | err_get: |
3871 | regulator_bulk_free(ARRAY_SIZE(wm8962->supplies), wm8962->supplies); | 3874 | regulator_bulk_free(ARRAY_SIZE(wm8962->supplies), wm8962->supplies); |
3872 | err: | 3875 | err: |
3873 | kfree(wm8962); | ||
3874 | return ret; | 3876 | return ret; |
3875 | } | 3877 | } |
3876 | 3878 | ||
diff --git a/sound/soc/codecs/wm8971.c b/sound/soc/codecs/wm8971.c index 63f6dbf5d070..8805636bda53 100644 --- a/sound/soc/codecs/wm8971.c +++ b/sound/soc/codecs/wm8971.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #include <sound/pcm.h> | 25 | #include <sound/pcm.h> |
26 | #include <sound/pcm_params.h> | 26 | #include <sound/pcm_params.h> |
27 | #include <sound/soc.h> | 27 | #include <sound/soc.h> |
28 | #include <sound/soc-dapm.h> | ||
29 | #include <sound/initval.h> | 28 | #include <sound/initval.h> |
30 | 29 | ||
31 | #include "wm8971.h" | 30 | #include "wm8971.h" |
@@ -333,10 +332,11 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
333 | 332 | ||
334 | static int wm8971_add_widgets(struct snd_soc_codec *codec) | 333 | static int wm8971_add_widgets(struct snd_soc_codec *codec) |
335 | { | 334 | { |
336 | snd_soc_dapm_new_controls(codec, wm8971_dapm_widgets, | 335 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
337 | ARRAY_SIZE(wm8971_dapm_widgets)); | ||
338 | 336 | ||
339 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 337 | snd_soc_dapm_new_controls(dapm, wm8971_dapm_widgets, |
338 | ARRAY_SIZE(wm8971_dapm_widgets)); | ||
339 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); | ||
340 | 340 | ||
341 | return 0; | 341 | return 0; |
342 | } | 342 | } |
@@ -553,7 +553,7 @@ static int wm8971_set_bias_level(struct snd_soc_codec *codec, | |||
553 | snd_soc_write(codec, WM8971_PWR1, 0x0001); | 553 | snd_soc_write(codec, WM8971_PWR1, 0x0001); |
554 | break; | 554 | break; |
555 | } | 555 | } |
556 | codec->bias_level = level; | 556 | codec->dapm.bias_level = level; |
557 | return 0; | 557 | return 0; |
558 | } | 558 | } |
559 | 559 | ||
@@ -590,9 +590,11 @@ static struct snd_soc_dai_driver wm8971_dai = { | |||
590 | 590 | ||
591 | static void wm8971_work(struct work_struct *work) | 591 | static void wm8971_work(struct work_struct *work) |
592 | { | 592 | { |
593 | struct snd_soc_codec *codec = | 593 | struct snd_soc_dapm_context *dapm = |
594 | container_of(work, struct snd_soc_codec, delayed_work.work); | 594 | container_of(work, struct snd_soc_dapm_context, |
595 | wm8971_set_bias_level(codec, codec->bias_level); | 595 | delayed_work.work); |
596 | struct snd_soc_codec *codec = dapm->codec; | ||
597 | wm8971_set_bias_level(codec, codec->dapm.bias_level); | ||
596 | } | 598 | } |
597 | 599 | ||
598 | static int wm8971_suspend(struct snd_soc_codec *codec, pm_message_t state) | 600 | static int wm8971_suspend(struct snd_soc_codec *codec, pm_message_t state) |
@@ -620,11 +622,11 @@ static int wm8971_resume(struct snd_soc_codec *codec) | |||
620 | wm8971_set_bias_level(codec, SND_SOC_BIAS_STANDBY); | 622 | wm8971_set_bias_level(codec, SND_SOC_BIAS_STANDBY); |
621 | 623 | ||
622 | /* charge wm8971 caps */ | 624 | /* charge wm8971 caps */ |
623 | if (codec->suspend_bias_level == SND_SOC_BIAS_ON) { | 625 | if (codec->dapm.suspend_bias_level == SND_SOC_BIAS_ON) { |
624 | reg = snd_soc_read(codec, WM8971_PWR1) & 0xfe3e; | 626 | reg = snd_soc_read(codec, WM8971_PWR1) & 0xfe3e; |
625 | snd_soc_write(codec, WM8971_PWR1, reg | 0x01c0); | 627 | snd_soc_write(codec, WM8971_PWR1, reg | 0x01c0); |
626 | codec->bias_level = SND_SOC_BIAS_ON; | 628 | codec->dapm.bias_level = SND_SOC_BIAS_ON; |
627 | queue_delayed_work(wm8971_workq, &codec->delayed_work, | 629 | queue_delayed_work(wm8971_workq, &codec->dapm.delayed_work, |
628 | msecs_to_jiffies(1000)); | 630 | msecs_to_jiffies(1000)); |
629 | } | 631 | } |
630 | 632 | ||
@@ -643,7 +645,7 @@ static int wm8971_probe(struct snd_soc_codec *codec) | |||
643 | return ret; | 645 | return ret; |
644 | } | 646 | } |
645 | 647 | ||
646 | INIT_DELAYED_WORK(&codec->delayed_work, wm8971_work); | 648 | INIT_DELAYED_WORK(&codec->dapm.delayed_work, wm8971_work); |
647 | wm8971_workq = create_workqueue("wm8971"); | 649 | wm8971_workq = create_workqueue("wm8971"); |
648 | if (wm8971_workq == NULL) | 650 | if (wm8971_workq == NULL) |
649 | return -ENOMEM; | 651 | return -ENOMEM; |
@@ -653,8 +655,8 @@ static int wm8971_probe(struct snd_soc_codec *codec) | |||
653 | /* charge output caps - set vmid to 5k for quick power up */ | 655 | /* charge output caps - set vmid to 5k for quick power up */ |
654 | reg = snd_soc_read(codec, WM8971_PWR1) & 0xfe3e; | 656 | reg = snd_soc_read(codec, WM8971_PWR1) & 0xfe3e; |
655 | snd_soc_write(codec, WM8971_PWR1, reg | 0x01c0); | 657 | snd_soc_write(codec, WM8971_PWR1, reg | 0x01c0); |
656 | codec->bias_level = SND_SOC_BIAS_STANDBY; | 658 | codec->dapm.bias_level = SND_SOC_BIAS_STANDBY; |
657 | queue_delayed_work(wm8971_workq, &codec->delayed_work, | 659 | queue_delayed_work(wm8971_workq, &codec->dapm.delayed_work, |
658 | msecs_to_jiffies(1000)); | 660 | msecs_to_jiffies(1000)); |
659 | 661 | ||
660 | /* set the update bits */ | 662 | /* set the update bits */ |
diff --git a/sound/soc/codecs/wm8974.c b/sound/soc/codecs/wm8974.c index b4363f6d19b3..5d286427532a 100644 --- a/sound/soc/codecs/wm8974.c +++ b/sound/soc/codecs/wm8974.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <sound/pcm.h> | 23 | #include <sound/pcm.h> |
24 | #include <sound/pcm_params.h> | 24 | #include <sound/pcm_params.h> |
25 | #include <sound/soc.h> | 25 | #include <sound/soc.h> |
26 | #include <sound/soc-dapm.h> | ||
27 | #include <sound/initval.h> | 26 | #include <sound/initval.h> |
28 | #include <sound/tlv.h> | 27 | #include <sound/tlv.h> |
29 | 28 | ||
@@ -274,10 +273,11 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
274 | 273 | ||
275 | static int wm8974_add_widgets(struct snd_soc_codec *codec) | 274 | static int wm8974_add_widgets(struct snd_soc_codec *codec) |
276 | { | 275 | { |
277 | snd_soc_dapm_new_controls(codec, wm8974_dapm_widgets, | 276 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
278 | ARRAY_SIZE(wm8974_dapm_widgets)); | ||
279 | 277 | ||
280 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 278 | snd_soc_dapm_new_controls(dapm, wm8974_dapm_widgets, |
279 | ARRAY_SIZE(wm8974_dapm_widgets)); | ||
280 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); | ||
281 | 281 | ||
282 | return 0; | 282 | return 0; |
283 | } | 283 | } |
@@ -530,7 +530,7 @@ static int wm8974_set_bias_level(struct snd_soc_codec *codec, | |||
530 | case SND_SOC_BIAS_STANDBY: | 530 | case SND_SOC_BIAS_STANDBY: |
531 | power1 |= WM8974_POWER1_BIASEN | WM8974_POWER1_BUFIOEN; | 531 | power1 |= WM8974_POWER1_BIASEN | WM8974_POWER1_BUFIOEN; |
532 | 532 | ||
533 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 533 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
534 | /* Initial cap charge at VMID 5k */ | 534 | /* Initial cap charge at VMID 5k */ |
535 | snd_soc_write(codec, WM8974_POWER1, power1 | 0x3); | 535 | snd_soc_write(codec, WM8974_POWER1, power1 | 0x3); |
536 | mdelay(100); | 536 | mdelay(100); |
@@ -547,7 +547,7 @@ static int wm8974_set_bias_level(struct snd_soc_codec *codec, | |||
547 | break; | 547 | break; |
548 | } | 548 | } |
549 | 549 | ||
550 | codec->bias_level = level; | 550 | codec->dapm.bias_level = level; |
551 | return 0; | 551 | return 0; |
552 | } | 552 | } |
553 | 553 | ||
diff --git a/sound/soc/codecs/wm8978.c b/sound/soc/codecs/wm8978.c index 13b979a71a7c..a195af92b425 100644 --- a/sound/soc/codecs/wm8978.c +++ b/sound/soc/codecs/wm8978.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <sound/pcm.h> | 24 | #include <sound/pcm.h> |
25 | #include <sound/pcm_params.h> | 25 | #include <sound/pcm_params.h> |
26 | #include <sound/soc.h> | 26 | #include <sound/soc.h> |
27 | #include <sound/soc-dapm.h> | ||
28 | #include <sound/initval.h> | 27 | #include <sound/initval.h> |
29 | #include <sound/tlv.h> | 28 | #include <sound/tlv.h> |
30 | #include <asm/div64.h> | 29 | #include <asm/div64.h> |
@@ -355,11 +354,12 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
355 | 354 | ||
356 | static int wm8978_add_widgets(struct snd_soc_codec *codec) | 355 | static int wm8978_add_widgets(struct snd_soc_codec *codec) |
357 | { | 356 | { |
358 | snd_soc_dapm_new_controls(codec, wm8978_dapm_widgets, | 357 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
359 | ARRAY_SIZE(wm8978_dapm_widgets)); | ||
360 | 358 | ||
359 | snd_soc_dapm_new_controls(dapm, wm8978_dapm_widgets, | ||
360 | ARRAY_SIZE(wm8978_dapm_widgets)); | ||
361 | /* set up the WM8978 audio map */ | 361 | /* set up the WM8978 audio map */ |
362 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 362 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
363 | 363 | ||
364 | return 0; | 364 | return 0; |
365 | } | 365 | } |
@@ -837,7 +837,7 @@ static int wm8978_set_bias_level(struct snd_soc_codec *codec, | |||
837 | /* bit 3: enable bias, bit 2: enable I/O tie off buffer */ | 837 | /* bit 3: enable bias, bit 2: enable I/O tie off buffer */ |
838 | power1 |= 0xc; | 838 | power1 |= 0xc; |
839 | 839 | ||
840 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 840 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
841 | /* Initial cap charge at VMID 5k */ | 841 | /* Initial cap charge at VMID 5k */ |
842 | snd_soc_write(codec, WM8978_POWER_MANAGEMENT_1, | 842 | snd_soc_write(codec, WM8978_POWER_MANAGEMENT_1, |
843 | power1 | 0x3); | 843 | power1 | 0x3); |
@@ -857,7 +857,7 @@ static int wm8978_set_bias_level(struct snd_soc_codec *codec, | |||
857 | 857 | ||
858 | dev_dbg(codec->dev, "%s: %d, %x\n", __func__, level, power1); | 858 | dev_dbg(codec->dev, "%s: %d, %x\n", __func__, level, power1); |
859 | 859 | ||
860 | codec->bias_level = level; | 860 | codec->dapm.bias_level = level; |
861 | return 0; | 861 | return 0; |
862 | } | 862 | } |
863 | 863 | ||
diff --git a/sound/soc/codecs/wm8985.c b/sound/soc/codecs/wm8985.c index fd2e7cca1228..bae510acdec8 100644 --- a/sound/soc/codecs/wm8985.c +++ b/sound/soc/codecs/wm8985.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <sound/pcm.h> | 26 | #include <sound/pcm.h> |
27 | #include <sound/pcm_params.h> | 27 | #include <sound/pcm_params.h> |
28 | #include <sound/soc.h> | 28 | #include <sound/soc.h> |
29 | #include <sound/soc-dapm.h> | ||
30 | #include <sound/initval.h> | 29 | #include <sound/initval.h> |
31 | #include <sound/tlv.h> | 30 | #include <sound/tlv.h> |
32 | 31 | ||
@@ -533,10 +532,11 @@ static int eqmode_put(struct snd_kcontrol *kcontrol, | |||
533 | 532 | ||
534 | static int wm8985_add_widgets(struct snd_soc_codec *codec) | 533 | static int wm8985_add_widgets(struct snd_soc_codec *codec) |
535 | { | 534 | { |
536 | snd_soc_dapm_new_controls(codec, wm8985_dapm_widgets, | 535 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
537 | ARRAY_SIZE(wm8985_dapm_widgets)); | ||
538 | 536 | ||
539 | snd_soc_dapm_add_routes(codec, audio_map, | 537 | snd_soc_dapm_new_controls(dapm, wm8985_dapm_widgets, |
538 | ARRAY_SIZE(wm8985_dapm_widgets)); | ||
539 | snd_soc_dapm_add_routes(dapm, audio_map, | ||
540 | ARRAY_SIZE(audio_map)); | 540 | ARRAY_SIZE(audio_map)); |
541 | return 0; | 541 | return 0; |
542 | } | 542 | } |
@@ -879,7 +879,7 @@ static int wm8985_set_bias_level(struct snd_soc_codec *codec, | |||
879 | 1 << WM8985_VMIDSEL_SHIFT); | 879 | 1 << WM8985_VMIDSEL_SHIFT); |
880 | break; | 880 | break; |
881 | case SND_SOC_BIAS_STANDBY: | 881 | case SND_SOC_BIAS_STANDBY: |
882 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 882 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
883 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8985->supplies), | 883 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8985->supplies), |
884 | wm8985->supplies); | 884 | wm8985->supplies); |
885 | if (ret) { | 885 | if (ret) { |
@@ -939,7 +939,7 @@ static int wm8985_set_bias_level(struct snd_soc_codec *codec, | |||
939 | break; | 939 | break; |
940 | } | 940 | } |
941 | 941 | ||
942 | codec->bias_level = level; | 942 | codec->dapm.bias_level = level; |
943 | return 0; | 943 | return 0; |
944 | } | 944 | } |
945 | 945 | ||
diff --git a/sound/soc/codecs/wm8988.c b/sound/soc/codecs/wm8988.c index d7f259711970..65807b15a2cc 100644 --- a/sound/soc/codecs/wm8988.c +++ b/sound/soc/codecs/wm8988.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #include <sound/pcm_params.h> | 25 | #include <sound/pcm_params.h> |
26 | #include <sound/tlv.h> | 26 | #include <sound/tlv.h> |
27 | #include <sound/soc.h> | 27 | #include <sound/soc.h> |
28 | #include <sound/soc-dapm.h> | ||
29 | #include <sound/initval.h> | 28 | #include <sound/initval.h> |
30 | 29 | ||
31 | #include "wm8988.h" | 30 | #include "wm8988.h" |
@@ -677,7 +676,7 @@ static int wm8988_set_bias_level(struct snd_soc_codec *codec, | |||
677 | break; | 676 | break; |
678 | 677 | ||
679 | case SND_SOC_BIAS_STANDBY: | 678 | case SND_SOC_BIAS_STANDBY: |
680 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 679 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
681 | /* VREF, VMID=2x5k */ | 680 | /* VREF, VMID=2x5k */ |
682 | snd_soc_write(codec, WM8988_PWR1, pwr_reg | 0x1c1); | 681 | snd_soc_write(codec, WM8988_PWR1, pwr_reg | 0x1c1); |
683 | 682 | ||
@@ -693,7 +692,7 @@ static int wm8988_set_bias_level(struct snd_soc_codec *codec, | |||
693 | snd_soc_write(codec, WM8988_PWR1, 0x0000); | 692 | snd_soc_write(codec, WM8988_PWR1, 0x0000); |
694 | break; | 693 | break; |
695 | } | 694 | } |
696 | codec->bias_level = level; | 695 | codec->dapm.bias_level = level; |
697 | return 0; | 696 | return 0; |
698 | } | 697 | } |
699 | 698 | ||
@@ -759,6 +758,7 @@ static int wm8988_resume(struct snd_soc_codec *codec) | |||
759 | static int wm8988_probe(struct snd_soc_codec *codec) | 758 | static int wm8988_probe(struct snd_soc_codec *codec) |
760 | { | 759 | { |
761 | struct wm8988_priv *wm8988 = snd_soc_codec_get_drvdata(codec); | 760 | struct wm8988_priv *wm8988 = snd_soc_codec_get_drvdata(codec); |
761 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
762 | int ret = 0; | 762 | int ret = 0; |
763 | u16 reg; | 763 | u16 reg; |
764 | 764 | ||
@@ -790,9 +790,9 @@ static int wm8988_probe(struct snd_soc_codec *codec) | |||
790 | 790 | ||
791 | snd_soc_add_controls(codec, wm8988_snd_controls, | 791 | snd_soc_add_controls(codec, wm8988_snd_controls, |
792 | ARRAY_SIZE(wm8988_snd_controls)); | 792 | ARRAY_SIZE(wm8988_snd_controls)); |
793 | snd_soc_dapm_new_controls(codec, wm8988_dapm_widgets, | 793 | snd_soc_dapm_new_controls(dapm, wm8988_dapm_widgets, |
794 | ARRAY_SIZE(wm8988_dapm_widgets)); | 794 | ARRAY_SIZE(wm8988_dapm_widgets)); |
795 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 795 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
796 | 796 | ||
797 | return 0; | 797 | return 0; |
798 | } | 798 | } |
diff --git a/sound/soc/codecs/wm8990.c b/sound/soc/codecs/wm8990.c index 264828e4e67c..5c87a634fc04 100644 --- a/sound/soc/codecs/wm8990.c +++ b/sound/soc/codecs/wm8990.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <sound/pcm.h> | 23 | #include <sound/pcm.h> |
24 | #include <sound/pcm_params.h> | 24 | #include <sound/pcm_params.h> |
25 | #include <sound/soc.h> | 25 | #include <sound/soc.h> |
26 | #include <sound/soc-dapm.h> | ||
27 | #include <sound/initval.h> | 26 | #include <sound/initval.h> |
28 | #include <sound/tlv.h> | 27 | #include <sound/tlv.h> |
29 | #include <asm/div64.h> | 28 | #include <asm/div64.h> |
@@ -914,11 +913,12 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
914 | 913 | ||
915 | static int wm8990_add_widgets(struct snd_soc_codec *codec) | 914 | static int wm8990_add_widgets(struct snd_soc_codec *codec) |
916 | { | 915 | { |
917 | snd_soc_dapm_new_controls(codec, wm8990_dapm_widgets, | 916 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
918 | ARRAY_SIZE(wm8990_dapm_widgets)); | ||
919 | 917 | ||
918 | snd_soc_dapm_new_controls(dapm, wm8990_dapm_widgets, | ||
919 | ARRAY_SIZE(wm8990_dapm_widgets)); | ||
920 | /* set up the WM8990 audio map */ | 920 | /* set up the WM8990 audio map */ |
921 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 921 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
922 | 922 | ||
923 | return 0; | 923 | return 0; |
924 | } | 924 | } |
@@ -1170,7 +1170,7 @@ static int wm8990_set_bias_level(struct snd_soc_codec *codec, | |||
1170 | break; | 1170 | break; |
1171 | 1171 | ||
1172 | case SND_SOC_BIAS_STANDBY: | 1172 | case SND_SOC_BIAS_STANDBY: |
1173 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 1173 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
1174 | /* Enable all output discharge bits */ | 1174 | /* Enable all output discharge bits */ |
1175 | snd_soc_write(codec, WM8990_ANTIPOP1, WM8990_DIS_LLINE | | 1175 | snd_soc_write(codec, WM8990_ANTIPOP1, WM8990_DIS_LLINE | |
1176 | WM8990_DIS_RLINE | WM8990_DIS_OUT3 | | 1176 | WM8990_DIS_RLINE | WM8990_DIS_OUT3 | |
@@ -1266,7 +1266,7 @@ static int wm8990_set_bias_level(struct snd_soc_codec *codec, | |||
1266 | break; | 1266 | break; |
1267 | } | 1267 | } |
1268 | 1268 | ||
1269 | codec->bias_level = level; | 1269 | codec->dapm.bias_level = level; |
1270 | return 0; | 1270 | return 0; |
1271 | } | 1271 | } |
1272 | 1272 | ||
diff --git a/sound/soc/codecs/wm8993.c b/sound/soc/codecs/wm8993.c index 589e3fa24734..77b1d441c3d0 100644 --- a/sound/soc/codecs/wm8993.c +++ b/sound/soc/codecs/wm8993.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <sound/pcm_params.h> | 24 | #include <sound/pcm_params.h> |
25 | #include <sound/tlv.h> | 25 | #include <sound/tlv.h> |
26 | #include <sound/soc.h> | 26 | #include <sound/soc.h> |
27 | #include <sound/soc-dapm.h> | ||
28 | #include <sound/initval.h> | 27 | #include <sound/initval.h> |
29 | #include <sound/wm8993.h> | 28 | #include <sound/wm8993.h> |
30 | 29 | ||
@@ -735,6 +734,7 @@ static int class_w_put(struct snd_kcontrol *kcontrol, | |||
735 | 0); | 734 | 0); |
736 | } | 735 | } |
737 | wm8993->class_w_users++; | 736 | wm8993->class_w_users++; |
737 | wm8993->hubs_data.class_w = true; | ||
738 | } | 738 | } |
739 | 739 | ||
740 | /* Implement the change */ | 740 | /* Implement the change */ |
@@ -751,6 +751,7 @@ static int class_w_put(struct snd_kcontrol *kcontrol, | |||
751 | WM8993_CP_DYN_V); | 751 | WM8993_CP_DYN_V); |
752 | } | 752 | } |
753 | wm8993->class_w_users--; | 753 | wm8993->class_w_users--; |
754 | wm8993->hubs_data.class_w = false; | ||
754 | } | 755 | } |
755 | 756 | ||
756 | dev_dbg(codec->dev, "Indirect DAC use count now %d\n", | 757 | dev_dbg(codec->dev, "Indirect DAC use count now %d\n", |
@@ -968,7 +969,7 @@ static int wm8993_set_bias_level(struct snd_soc_codec *codec, | |||
968 | break; | 969 | break; |
969 | 970 | ||
970 | case SND_SOC_BIAS_STANDBY: | 971 | case SND_SOC_BIAS_STANDBY: |
971 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 972 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
972 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8993->supplies), | 973 | ret = regulator_bulk_enable(ARRAY_SIZE(wm8993->supplies), |
973 | wm8993->supplies); | 974 | wm8993->supplies); |
974 | if (ret != 0) | 975 | if (ret != 0) |
@@ -1043,7 +1044,7 @@ static int wm8993_set_bias_level(struct snd_soc_codec *codec, | |||
1043 | break; | 1044 | break; |
1044 | } | 1045 | } |
1045 | 1046 | ||
1046 | codec->bias_level = level; | 1047 | codec->dapm.bias_level = level; |
1047 | 1048 | ||
1048 | return 0; | 1049 | return 0; |
1049 | } | 1050 | } |
@@ -1225,7 +1226,7 @@ static int wm8993_hw_params(struct snd_pcm_substream *substream, | |||
1225 | - wm8993->fs); | 1226 | - wm8993->fs); |
1226 | for (i = 1; i < ARRAY_SIZE(clk_sys_rates); i++) { | 1227 | for (i = 1; i < ARRAY_SIZE(clk_sys_rates); i++) { |
1227 | cur_val = abs((wm8993->sysclk_rate / | 1228 | cur_val = abs((wm8993->sysclk_rate / |
1228 | clk_sys_rates[i].ratio) - wm8993->fs);; | 1229 | clk_sys_rates[i].ratio) - wm8993->fs); |
1229 | if (cur_val < best_val) { | 1230 | if (cur_val < best_val) { |
1230 | best = i; | 1231 | best = i; |
1231 | best_val = cur_val; | 1232 | best_val = cur_val; |
@@ -1422,6 +1423,7 @@ static struct snd_soc_dai_driver wm8993_dai = { | |||
1422 | static int wm8993_probe(struct snd_soc_codec *codec) | 1423 | static int wm8993_probe(struct snd_soc_codec *codec) |
1423 | { | 1424 | { |
1424 | struct wm8993_priv *wm8993 = snd_soc_codec_get_drvdata(codec); | 1425 | struct wm8993_priv *wm8993 = snd_soc_codec_get_drvdata(codec); |
1426 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
1425 | int ret, i, val; | 1427 | int ret, i, val; |
1426 | 1428 | ||
1427 | wm8993->hubs_data.hp_startup_mode = 1; | 1429 | wm8993->hubs_data.hp_startup_mode = 1; |
@@ -1503,11 +1505,11 @@ static int wm8993_probe(struct snd_soc_codec *codec) | |||
1503 | ARRAY_SIZE(wm8993_eq_controls)); | 1505 | ARRAY_SIZE(wm8993_eq_controls)); |
1504 | } | 1506 | } |
1505 | 1507 | ||
1506 | snd_soc_dapm_new_controls(codec, wm8993_dapm_widgets, | 1508 | snd_soc_dapm_new_controls(dapm, wm8993_dapm_widgets, |
1507 | ARRAY_SIZE(wm8993_dapm_widgets)); | 1509 | ARRAY_SIZE(wm8993_dapm_widgets)); |
1508 | wm_hubs_add_analogue_controls(codec); | 1510 | wm_hubs_add_analogue_controls(codec); |
1509 | 1511 | ||
1510 | snd_soc_dapm_add_routes(codec, routes, ARRAY_SIZE(routes)); | 1512 | snd_soc_dapm_add_routes(dapm, routes, ARRAY_SIZE(routes)); |
1511 | wm_hubs_add_analogue_routes(codec, wm8993->pdata.lineout1_diff, | 1513 | wm_hubs_add_analogue_routes(codec, wm8993->pdata.lineout1_diff, |
1512 | wm8993->pdata.lineout2_diff); | 1514 | wm8993->pdata.lineout2_diff); |
1513 | 1515 | ||
diff --git a/sound/soc/codecs/wm8994-tables.c b/sound/soc/codecs/wm8994-tables.c new file mode 100644 index 000000000000..7b935387aeef --- /dev/null +++ b/sound/soc/codecs/wm8994-tables.c | |||
@@ -0,0 +1,1575 @@ | |||
1 | #include "wm8994.h" | ||
2 | |||
3 | const struct wm8994_access_mask wm8994_access_masks[WM8994_CACHE_SIZE] = { | ||
4 | { 0xFFFF, 0xFFFF }, /* R0 - Software Reset */ | ||
5 | { 0x3B37, 0x3B37 }, /* R1 - Power Management (1) */ | ||
6 | { 0x6BF0, 0x6BF0 }, /* R2 - Power Management (2) */ | ||
7 | { 0x3FF0, 0x3FF0 }, /* R3 - Power Management (3) */ | ||
8 | { 0x3F3F, 0x3F3F }, /* R4 - Power Management (4) */ | ||
9 | { 0x3F0F, 0x3F0F }, /* R5 - Power Management (5) */ | ||
10 | { 0x003F, 0x003F }, /* R6 - Power Management (6) */ | ||
11 | { 0x0000, 0x0000 }, /* R7 */ | ||
12 | { 0x0000, 0x0000 }, /* R8 */ | ||
13 | { 0x0000, 0x0000 }, /* R9 */ | ||
14 | { 0x0000, 0x0000 }, /* R10 */ | ||
15 | { 0x0000, 0x0000 }, /* R11 */ | ||
16 | { 0x0000, 0x0000 }, /* R12 */ | ||
17 | { 0x0000, 0x0000 }, /* R13 */ | ||
18 | { 0x0000, 0x0000 }, /* R14 */ | ||
19 | { 0x0000, 0x0000 }, /* R15 */ | ||
20 | { 0x0000, 0x0000 }, /* R16 */ | ||
21 | { 0x0000, 0x0000 }, /* R17 */ | ||
22 | { 0x0000, 0x0000 }, /* R18 */ | ||
23 | { 0x0000, 0x0000 }, /* R19 */ | ||
24 | { 0x0000, 0x0000 }, /* R20 */ | ||
25 | { 0x01C0, 0x01C0 }, /* R21 - Input Mixer (1) */ | ||
26 | { 0x0000, 0x0000 }, /* R22 */ | ||
27 | { 0x0000, 0x0000 }, /* R23 */ | ||
28 | { 0x00DF, 0x01DF }, /* R24 - Left Line Input 1&2 Volume */ | ||
29 | { 0x00DF, 0x01DF }, /* R25 - Left Line Input 3&4 Volume */ | ||
30 | { 0x00DF, 0x01DF }, /* R26 - Right Line Input 1&2 Volume */ | ||
31 | { 0x00DF, 0x01DF }, /* R27 - Right Line Input 3&4 Volume */ | ||
32 | { 0x00FF, 0x01FF }, /* R28 - Left Output Volume */ | ||
33 | { 0x00FF, 0x01FF }, /* R29 - Right Output Volume */ | ||
34 | { 0x0077, 0x0077 }, /* R30 - Line Outputs Volume */ | ||
35 | { 0x0030, 0x0030 }, /* R31 - HPOUT2 Volume */ | ||
36 | { 0x00FF, 0x01FF }, /* R32 - Left OPGA Volume */ | ||
37 | { 0x00FF, 0x01FF }, /* R33 - Right OPGA Volume */ | ||
38 | { 0x007F, 0x007F }, /* R34 - SPKMIXL Attenuation */ | ||
39 | { 0x017F, 0x017F }, /* R35 - SPKMIXR Attenuation */ | ||
40 | { 0x003F, 0x003F }, /* R36 - SPKOUT Mixers */ | ||
41 | { 0x003F, 0x003F }, /* R37 - ClassD */ | ||
42 | { 0x00FF, 0x01FF }, /* R38 - Speaker Volume Left */ | ||
43 | { 0x00FF, 0x01FF }, /* R39 - Speaker Volume Right */ | ||
44 | { 0x00FF, 0x00FF }, /* R40 - Input Mixer (2) */ | ||
45 | { 0x01B7, 0x01B7 }, /* R41 - Input Mixer (3) */ | ||
46 | { 0x01B7, 0x01B7 }, /* R42 - Input Mixer (4) */ | ||
47 | { 0x01C7, 0x01C7 }, /* R43 - Input Mixer (5) */ | ||
48 | { 0x01C7, 0x01C7 }, /* R44 - Input Mixer (6) */ | ||
49 | { 0x01FF, 0x01FF }, /* R45 - Output Mixer (1) */ | ||
50 | { 0x01FF, 0x01FF }, /* R46 - Output Mixer (2) */ | ||
51 | { 0x0FFF, 0x0FFF }, /* R47 - Output Mixer (3) */ | ||
52 | { 0x0FFF, 0x0FFF }, /* R48 - Output Mixer (4) */ | ||
53 | { 0x0FFF, 0x0FFF }, /* R49 - Output Mixer (5) */ | ||
54 | { 0x0FFF, 0x0FFF }, /* R50 - Output Mixer (6) */ | ||
55 | { 0x0038, 0x0038 }, /* R51 - HPOUT2 Mixer */ | ||
56 | { 0x0077, 0x0077 }, /* R52 - Line Mixer (1) */ | ||
57 | { 0x0077, 0x0077 }, /* R53 - Line Mixer (2) */ | ||
58 | { 0x03FF, 0x03FF }, /* R54 - Speaker Mixer */ | ||
59 | { 0x00C1, 0x00C1 }, /* R55 - Additional Control */ | ||
60 | { 0x00F0, 0x00F0 }, /* R56 - AntiPOP (1) */ | ||
61 | { 0x01EF, 0x01EF }, /* R57 - AntiPOP (2) */ | ||
62 | { 0x00FF, 0x00FF }, /* R58 - MICBIAS */ | ||
63 | { 0x000F, 0x000F }, /* R59 - LDO 1 */ | ||
64 | { 0x0007, 0x0007 }, /* R60 - LDO 2 */ | ||
65 | { 0x0000, 0x0000 }, /* R61 */ | ||
66 | { 0x0000, 0x0000 }, /* R62 */ | ||
67 | { 0x0000, 0x0000 }, /* R63 */ | ||
68 | { 0x0000, 0x0000 }, /* R64 */ | ||
69 | { 0x0000, 0x0000 }, /* R65 */ | ||
70 | { 0x0000, 0x0000 }, /* R66 */ | ||
71 | { 0x0000, 0x0000 }, /* R67 */ | ||
72 | { 0x0000, 0x0000 }, /* R68 */ | ||
73 | { 0x0000, 0x0000 }, /* R69 */ | ||
74 | { 0x0000, 0x0000 }, /* R70 */ | ||
75 | { 0x0000, 0x0000 }, /* R71 */ | ||
76 | { 0x0000, 0x0000 }, /* R72 */ | ||
77 | { 0x0000, 0x0000 }, /* R73 */ | ||
78 | { 0x0000, 0x0000 }, /* R74 */ | ||
79 | { 0x0000, 0x0000 }, /* R75 */ | ||
80 | { 0x8000, 0x8000 }, /* R76 - Charge Pump (1) */ | ||
81 | { 0x0000, 0x0000 }, /* R77 */ | ||
82 | { 0x0000, 0x0000 }, /* R78 */ | ||
83 | { 0x0000, 0x0000 }, /* R79 */ | ||
84 | { 0x0000, 0x0000 }, /* R80 */ | ||
85 | { 0x0301, 0x0301 }, /* R81 - Class W (1) */ | ||
86 | { 0x0000, 0x0000 }, /* R82 */ | ||
87 | { 0x0000, 0x0000 }, /* R83 */ | ||
88 | { 0x333F, 0x333F }, /* R84 - DC Servo (1) */ | ||
89 | { 0x0FEF, 0x0FEF }, /* R85 - DC Servo (2) */ | ||
90 | { 0x0000, 0x0000 }, /* R86 */ | ||
91 | { 0xFFFF, 0xFFFF }, /* R87 - DC Servo (4) */ | ||
92 | { 0x0333, 0x0000 }, /* R88 - DC Servo Readback */ | ||
93 | { 0x0000, 0x0000 }, /* R89 */ | ||
94 | { 0x0000, 0x0000 }, /* R90 */ | ||
95 | { 0x0000, 0x0000 }, /* R91 */ | ||
96 | { 0x0000, 0x0000 }, /* R92 */ | ||
97 | { 0x0000, 0x0000 }, /* R93 */ | ||
98 | { 0x0000, 0x0000 }, /* R94 */ | ||
99 | { 0x0000, 0x0000 }, /* R95 */ | ||
100 | { 0x00EE, 0x00EE }, /* R96 - Analogue HP (1) */ | ||
101 | { 0x0000, 0x0000 }, /* R97 */ | ||
102 | { 0x0000, 0x0000 }, /* R98 */ | ||
103 | { 0x0000, 0x0000 }, /* R99 */ | ||
104 | { 0x0000, 0x0000 }, /* R100 */ | ||
105 | { 0x0000, 0x0000 }, /* R101 */ | ||
106 | { 0x0000, 0x0000 }, /* R102 */ | ||
107 | { 0x0000, 0x0000 }, /* R103 */ | ||
108 | { 0x0000, 0x0000 }, /* R104 */ | ||
109 | { 0x0000, 0x0000 }, /* R105 */ | ||
110 | { 0x0000, 0x0000 }, /* R106 */ | ||
111 | { 0x0000, 0x0000 }, /* R107 */ | ||
112 | { 0x0000, 0x0000 }, /* R108 */ | ||
113 | { 0x0000, 0x0000 }, /* R109 */ | ||
114 | { 0x0000, 0x0000 }, /* R110 */ | ||
115 | { 0x0000, 0x0000 }, /* R111 */ | ||
116 | { 0x0000, 0x0000 }, /* R112 */ | ||
117 | { 0x0000, 0x0000 }, /* R113 */ | ||
118 | { 0x0000, 0x0000 }, /* R114 */ | ||
119 | { 0x0000, 0x0000 }, /* R115 */ | ||
120 | { 0x0000, 0x0000 }, /* R116 */ | ||
121 | { 0x0000, 0x0000 }, /* R117 */ | ||
122 | { 0x0000, 0x0000 }, /* R118 */ | ||
123 | { 0x0000, 0x0000 }, /* R119 */ | ||
124 | { 0x0000, 0x0000 }, /* R120 */ | ||
125 | { 0x0000, 0x0000 }, /* R121 */ | ||
126 | { 0x0000, 0x0000 }, /* R122 */ | ||
127 | { 0x0000, 0x0000 }, /* R123 */ | ||
128 | { 0x0000, 0x0000 }, /* R124 */ | ||
129 | { 0x0000, 0x0000 }, /* R125 */ | ||
130 | { 0x0000, 0x0000 }, /* R126 */ | ||
131 | { 0x0000, 0x0000 }, /* R127 */ | ||
132 | { 0x0000, 0x0000 }, /* R128 */ | ||
133 | { 0x0000, 0x0000 }, /* R129 */ | ||
134 | { 0x0000, 0x0000 }, /* R130 */ | ||
135 | { 0x0000, 0x0000 }, /* R131 */ | ||
136 | { 0x0000, 0x0000 }, /* R132 */ | ||
137 | { 0x0000, 0x0000 }, /* R133 */ | ||
138 | { 0x0000, 0x0000 }, /* R134 */ | ||
139 | { 0x0000, 0x0000 }, /* R135 */ | ||
140 | { 0x0000, 0x0000 }, /* R136 */ | ||
141 | { 0x0000, 0x0000 }, /* R137 */ | ||
142 | { 0x0000, 0x0000 }, /* R138 */ | ||
143 | { 0x0000, 0x0000 }, /* R139 */ | ||
144 | { 0x0000, 0x0000 }, /* R140 */ | ||
145 | { 0x0000, 0x0000 }, /* R141 */ | ||
146 | { 0x0000, 0x0000 }, /* R142 */ | ||
147 | { 0x0000, 0x0000 }, /* R143 */ | ||
148 | { 0x0000, 0x0000 }, /* R144 */ | ||
149 | { 0x0000, 0x0000 }, /* R145 */ | ||
150 | { 0x0000, 0x0000 }, /* R146 */ | ||
151 | { 0x0000, 0x0000 }, /* R147 */ | ||
152 | { 0x0000, 0x0000 }, /* R148 */ | ||
153 | { 0x0000, 0x0000 }, /* R149 */ | ||
154 | { 0x0000, 0x0000 }, /* R150 */ | ||
155 | { 0x0000, 0x0000 }, /* R151 */ | ||
156 | { 0x0000, 0x0000 }, /* R152 */ | ||
157 | { 0x0000, 0x0000 }, /* R153 */ | ||
158 | { 0x0000, 0x0000 }, /* R154 */ | ||
159 | { 0x0000, 0x0000 }, /* R155 */ | ||
160 | { 0x0000, 0x0000 }, /* R156 */ | ||
161 | { 0x0000, 0x0000 }, /* R157 */ | ||
162 | { 0x0000, 0x0000 }, /* R158 */ | ||
163 | { 0x0000, 0x0000 }, /* R159 */ | ||
164 | { 0x0000, 0x0000 }, /* R160 */ | ||
165 | { 0x0000, 0x0000 }, /* R161 */ | ||
166 | { 0x0000, 0x0000 }, /* R162 */ | ||
167 | { 0x0000, 0x0000 }, /* R163 */ | ||
168 | { 0x0000, 0x0000 }, /* R164 */ | ||
169 | { 0x0000, 0x0000 }, /* R165 */ | ||
170 | { 0x0000, 0x0000 }, /* R166 */ | ||
171 | { 0x0000, 0x0000 }, /* R167 */ | ||
172 | { 0x0000, 0x0000 }, /* R168 */ | ||
173 | { 0x0000, 0x0000 }, /* R169 */ | ||
174 | { 0x0000, 0x0000 }, /* R170 */ | ||
175 | { 0x0000, 0x0000 }, /* R171 */ | ||
176 | { 0x0000, 0x0000 }, /* R172 */ | ||
177 | { 0x0000, 0x0000 }, /* R173 */ | ||
178 | { 0x0000, 0x0000 }, /* R174 */ | ||
179 | { 0x0000, 0x0000 }, /* R175 */ | ||
180 | { 0x0000, 0x0000 }, /* R176 */ | ||
181 | { 0x0000, 0x0000 }, /* R177 */ | ||
182 | { 0x0000, 0x0000 }, /* R178 */ | ||
183 | { 0x0000, 0x0000 }, /* R179 */ | ||
184 | { 0x0000, 0x0000 }, /* R180 */ | ||
185 | { 0x0000, 0x0000 }, /* R181 */ | ||
186 | { 0x0000, 0x0000 }, /* R182 */ | ||
187 | { 0x0000, 0x0000 }, /* R183 */ | ||
188 | { 0x0000, 0x0000 }, /* R184 */ | ||
189 | { 0x0000, 0x0000 }, /* R185 */ | ||
190 | { 0x0000, 0x0000 }, /* R186 */ | ||
191 | { 0x0000, 0x0000 }, /* R187 */ | ||
192 | { 0x0000, 0x0000 }, /* R188 */ | ||
193 | { 0x0000, 0x0000 }, /* R189 */ | ||
194 | { 0x0000, 0x0000 }, /* R190 */ | ||
195 | { 0x0000, 0x0000 }, /* R191 */ | ||
196 | { 0x0000, 0x0000 }, /* R192 */ | ||
197 | { 0x0000, 0x0000 }, /* R193 */ | ||
198 | { 0x0000, 0x0000 }, /* R194 */ | ||
199 | { 0x0000, 0x0000 }, /* R195 */ | ||
200 | { 0x0000, 0x0000 }, /* R196 */ | ||
201 | { 0x0000, 0x0000 }, /* R197 */ | ||
202 | { 0x0000, 0x0000 }, /* R198 */ | ||
203 | { 0x0000, 0x0000 }, /* R199 */ | ||
204 | { 0x0000, 0x0000 }, /* R200 */ | ||
205 | { 0x0000, 0x0000 }, /* R201 */ | ||
206 | { 0x0000, 0x0000 }, /* R202 */ | ||
207 | { 0x0000, 0x0000 }, /* R203 */ | ||
208 | { 0x0000, 0x0000 }, /* R204 */ | ||
209 | { 0x0000, 0x0000 }, /* R205 */ | ||
210 | { 0x0000, 0x0000 }, /* R206 */ | ||
211 | { 0x0000, 0x0000 }, /* R207 */ | ||
212 | { 0x0000, 0x0000 }, /* R208 */ | ||
213 | { 0x0000, 0x0000 }, /* R209 */ | ||
214 | { 0x0000, 0x0000 }, /* R210 */ | ||
215 | { 0x0000, 0x0000 }, /* R211 */ | ||
216 | { 0x0000, 0x0000 }, /* R212 */ | ||
217 | { 0x0000, 0x0000 }, /* R213 */ | ||
218 | { 0x0000, 0x0000 }, /* R214 */ | ||
219 | { 0x0000, 0x0000 }, /* R215 */ | ||
220 | { 0x0000, 0x0000 }, /* R216 */ | ||
221 | { 0x0000, 0x0000 }, /* R217 */ | ||
222 | { 0x0000, 0x0000 }, /* R218 */ | ||
223 | { 0x0000, 0x0000 }, /* R219 */ | ||
224 | { 0x0000, 0x0000 }, /* R220 */ | ||
225 | { 0x0000, 0x0000 }, /* R221 */ | ||
226 | { 0x0000, 0x0000 }, /* R222 */ | ||
227 | { 0x0000, 0x0000 }, /* R223 */ | ||
228 | { 0x0000, 0x0000 }, /* R224 */ | ||
229 | { 0x0000, 0x0000 }, /* R225 */ | ||
230 | { 0x0000, 0x0000 }, /* R226 */ | ||
231 | { 0x0000, 0x0000 }, /* R227 */ | ||
232 | { 0x0000, 0x0000 }, /* R228 */ | ||
233 | { 0x0000, 0x0000 }, /* R229 */ | ||
234 | { 0x0000, 0x0000 }, /* R230 */ | ||
235 | { 0x0000, 0x0000 }, /* R231 */ | ||
236 | { 0x0000, 0x0000 }, /* R232 */ | ||
237 | { 0x0000, 0x0000 }, /* R233 */ | ||
238 | { 0x0000, 0x0000 }, /* R234 */ | ||
239 | { 0x0000, 0x0000 }, /* R235 */ | ||
240 | { 0x0000, 0x0000 }, /* R236 */ | ||
241 | { 0x0000, 0x0000 }, /* R237 */ | ||
242 | { 0x0000, 0x0000 }, /* R238 */ | ||
243 | { 0x0000, 0x0000 }, /* R239 */ | ||
244 | { 0x0000, 0x0000 }, /* R240 */ | ||
245 | { 0x0000, 0x0000 }, /* R241 */ | ||
246 | { 0x0000, 0x0000 }, /* R242 */ | ||
247 | { 0x0000, 0x0000 }, /* R243 */ | ||
248 | { 0x0000, 0x0000 }, /* R244 */ | ||
249 | { 0x0000, 0x0000 }, /* R245 */ | ||
250 | { 0x0000, 0x0000 }, /* R246 */ | ||
251 | { 0x0000, 0x0000 }, /* R247 */ | ||
252 | { 0x0000, 0x0000 }, /* R248 */ | ||
253 | { 0x0000, 0x0000 }, /* R249 */ | ||
254 | { 0x0000, 0x0000 }, /* R250 */ | ||
255 | { 0x0000, 0x0000 }, /* R251 */ | ||
256 | { 0x0000, 0x0000 }, /* R252 */ | ||
257 | { 0x0000, 0x0000 }, /* R253 */ | ||
258 | { 0x0000, 0x0000 }, /* R254 */ | ||
259 | { 0x0000, 0x0000 }, /* R255 */ | ||
260 | { 0x000F, 0x0000 }, /* R256 - Chip Revision */ | ||
261 | { 0x0074, 0x0074 }, /* R257 - Control Interface */ | ||
262 | { 0x0000, 0x0000 }, /* R258 */ | ||
263 | { 0x0000, 0x0000 }, /* R259 */ | ||
264 | { 0x0000, 0x0000 }, /* R260 */ | ||
265 | { 0x0000, 0x0000 }, /* R261 */ | ||
266 | { 0x0000, 0x0000 }, /* R262 */ | ||
267 | { 0x0000, 0x0000 }, /* R263 */ | ||
268 | { 0x0000, 0x0000 }, /* R264 */ | ||
269 | { 0x0000, 0x0000 }, /* R265 */ | ||
270 | { 0x0000, 0x0000 }, /* R266 */ | ||
271 | { 0x0000, 0x0000 }, /* R267 */ | ||
272 | { 0x0000, 0x0000 }, /* R268 */ | ||
273 | { 0x0000, 0x0000 }, /* R269 */ | ||
274 | { 0x0000, 0x0000 }, /* R270 */ | ||
275 | { 0x0000, 0x0000 }, /* R271 */ | ||
276 | { 0x807F, 0x837F }, /* R272 - Write Sequencer Ctrl (1) */ | ||
277 | { 0x017F, 0x0000 }, /* R273 - Write Sequencer Ctrl (2) */ | ||
278 | { 0x0000, 0x0000 }, /* R274 */ | ||
279 | { 0x0000, 0x0000 }, /* R275 */ | ||
280 | { 0x0000, 0x0000 }, /* R276 */ | ||
281 | { 0x0000, 0x0000 }, /* R277 */ | ||
282 | { 0x0000, 0x0000 }, /* R278 */ | ||
283 | { 0x0000, 0x0000 }, /* R279 */ | ||
284 | { 0x0000, 0x0000 }, /* R280 */ | ||
285 | { 0x0000, 0x0000 }, /* R281 */ | ||
286 | { 0x0000, 0x0000 }, /* R282 */ | ||
287 | { 0x0000, 0x0000 }, /* R283 */ | ||
288 | { 0x0000, 0x0000 }, /* R284 */ | ||
289 | { 0x0000, 0x0000 }, /* R285 */ | ||
290 | { 0x0000, 0x0000 }, /* R286 */ | ||
291 | { 0x0000, 0x0000 }, /* R287 */ | ||
292 | { 0x0000, 0x0000 }, /* R288 */ | ||
293 | { 0x0000, 0x0000 }, /* R289 */ | ||
294 | { 0x0000, 0x0000 }, /* R290 */ | ||
295 | { 0x0000, 0x0000 }, /* R291 */ | ||
296 | { 0x0000, 0x0000 }, /* R292 */ | ||
297 | { 0x0000, 0x0000 }, /* R293 */ | ||
298 | { 0x0000, 0x0000 }, /* R294 */ | ||
299 | { 0x0000, 0x0000 }, /* R295 */ | ||
300 | { 0x0000, 0x0000 }, /* R296 */ | ||
301 | { 0x0000, 0x0000 }, /* R297 */ | ||
302 | { 0x0000, 0x0000 }, /* R298 */ | ||
303 | { 0x0000, 0x0000 }, /* R299 */ | ||
304 | { 0x0000, 0x0000 }, /* R300 */ | ||
305 | { 0x0000, 0x0000 }, /* R301 */ | ||
306 | { 0x0000, 0x0000 }, /* R302 */ | ||
307 | { 0x0000, 0x0000 }, /* R303 */ | ||
308 | { 0x0000, 0x0000 }, /* R304 */ | ||
309 | { 0x0000, 0x0000 }, /* R305 */ | ||
310 | { 0x0000, 0x0000 }, /* R306 */ | ||
311 | { 0x0000, 0x0000 }, /* R307 */ | ||
312 | { 0x0000, 0x0000 }, /* R308 */ | ||
313 | { 0x0000, 0x0000 }, /* R309 */ | ||
314 | { 0x0000, 0x0000 }, /* R310 */ | ||
315 | { 0x0000, 0x0000 }, /* R311 */ | ||
316 | { 0x0000, 0x0000 }, /* R312 */ | ||
317 | { 0x0000, 0x0000 }, /* R313 */ | ||
318 | { 0x0000, 0x0000 }, /* R314 */ | ||
319 | { 0x0000, 0x0000 }, /* R315 */ | ||
320 | { 0x0000, 0x0000 }, /* R316 */ | ||
321 | { 0x0000, 0x0000 }, /* R317 */ | ||
322 | { 0x0000, 0x0000 }, /* R318 */ | ||
323 | { 0x0000, 0x0000 }, /* R319 */ | ||
324 | { 0x0000, 0x0000 }, /* R320 */ | ||
325 | { 0x0000, 0x0000 }, /* R321 */ | ||
326 | { 0x0000, 0x0000 }, /* R322 */ | ||
327 | { 0x0000, 0x0000 }, /* R323 */ | ||
328 | { 0x0000, 0x0000 }, /* R324 */ | ||
329 | { 0x0000, 0x0000 }, /* R325 */ | ||
330 | { 0x0000, 0x0000 }, /* R326 */ | ||
331 | { 0x0000, 0x0000 }, /* R327 */ | ||
332 | { 0x0000, 0x0000 }, /* R328 */ | ||
333 | { 0x0000, 0x0000 }, /* R329 */ | ||
334 | { 0x0000, 0x0000 }, /* R330 */ | ||
335 | { 0x0000, 0x0000 }, /* R331 */ | ||
336 | { 0x0000, 0x0000 }, /* R332 */ | ||
337 | { 0x0000, 0x0000 }, /* R333 */ | ||
338 | { 0x0000, 0x0000 }, /* R334 */ | ||
339 | { 0x0000, 0x0000 }, /* R335 */ | ||
340 | { 0x0000, 0x0000 }, /* R336 */ | ||
341 | { 0x0000, 0x0000 }, /* R337 */ | ||
342 | { 0x0000, 0x0000 }, /* R338 */ | ||
343 | { 0x0000, 0x0000 }, /* R339 */ | ||
344 | { 0x0000, 0x0000 }, /* R340 */ | ||
345 | { 0x0000, 0x0000 }, /* R341 */ | ||
346 | { 0x0000, 0x0000 }, /* R342 */ | ||
347 | { 0x0000, 0x0000 }, /* R343 */ | ||
348 | { 0x0000, 0x0000 }, /* R344 */ | ||
349 | { 0x0000, 0x0000 }, /* R345 */ | ||
350 | { 0x0000, 0x0000 }, /* R346 */ | ||
351 | { 0x0000, 0x0000 }, /* R347 */ | ||
352 | { 0x0000, 0x0000 }, /* R348 */ | ||
353 | { 0x0000, 0x0000 }, /* R349 */ | ||
354 | { 0x0000, 0x0000 }, /* R350 */ | ||
355 | { 0x0000, 0x0000 }, /* R351 */ | ||
356 | { 0x0000, 0x0000 }, /* R352 */ | ||
357 | { 0x0000, 0x0000 }, /* R353 */ | ||
358 | { 0x0000, 0x0000 }, /* R354 */ | ||
359 | { 0x0000, 0x0000 }, /* R355 */ | ||
360 | { 0x0000, 0x0000 }, /* R356 */ | ||
361 | { 0x0000, 0x0000 }, /* R357 */ | ||
362 | { 0x0000, 0x0000 }, /* R358 */ | ||
363 | { 0x0000, 0x0000 }, /* R359 */ | ||
364 | { 0x0000, 0x0000 }, /* R360 */ | ||
365 | { 0x0000, 0x0000 }, /* R361 */ | ||
366 | { 0x0000, 0x0000 }, /* R362 */ | ||
367 | { 0x0000, 0x0000 }, /* R363 */ | ||
368 | { 0x0000, 0x0000 }, /* R364 */ | ||
369 | { 0x0000, 0x0000 }, /* R365 */ | ||
370 | { 0x0000, 0x0000 }, /* R366 */ | ||
371 | { 0x0000, 0x0000 }, /* R367 */ | ||
372 | { 0x0000, 0x0000 }, /* R368 */ | ||
373 | { 0x0000, 0x0000 }, /* R369 */ | ||
374 | { 0x0000, 0x0000 }, /* R370 */ | ||
375 | { 0x0000, 0x0000 }, /* R371 */ | ||
376 | { 0x0000, 0x0000 }, /* R372 */ | ||
377 | { 0x0000, 0x0000 }, /* R373 */ | ||
378 | { 0x0000, 0x0000 }, /* R374 */ | ||
379 | { 0x0000, 0x0000 }, /* R375 */ | ||
380 | { 0x0000, 0x0000 }, /* R376 */ | ||
381 | { 0x0000, 0x0000 }, /* R377 */ | ||
382 | { 0x0000, 0x0000 }, /* R378 */ | ||
383 | { 0x0000, 0x0000 }, /* R379 */ | ||
384 | { 0x0000, 0x0000 }, /* R380 */ | ||
385 | { 0x0000, 0x0000 }, /* R381 */ | ||
386 | { 0x0000, 0x0000 }, /* R382 */ | ||
387 | { 0x0000, 0x0000 }, /* R383 */ | ||
388 | { 0x0000, 0x0000 }, /* R384 */ | ||
389 | { 0x0000, 0x0000 }, /* R385 */ | ||
390 | { 0x0000, 0x0000 }, /* R386 */ | ||
391 | { 0x0000, 0x0000 }, /* R387 */ | ||
392 | { 0x0000, 0x0000 }, /* R388 */ | ||
393 | { 0x0000, 0x0000 }, /* R389 */ | ||
394 | { 0x0000, 0x0000 }, /* R390 */ | ||
395 | { 0x0000, 0x0000 }, /* R391 */ | ||
396 | { 0x0000, 0x0000 }, /* R392 */ | ||
397 | { 0x0000, 0x0000 }, /* R393 */ | ||
398 | { 0x0000, 0x0000 }, /* R394 */ | ||
399 | { 0x0000, 0x0000 }, /* R395 */ | ||
400 | { 0x0000, 0x0000 }, /* R396 */ | ||
401 | { 0x0000, 0x0000 }, /* R397 */ | ||
402 | { 0x0000, 0x0000 }, /* R398 */ | ||
403 | { 0x0000, 0x0000 }, /* R399 */ | ||
404 | { 0x0000, 0x0000 }, /* R400 */ | ||
405 | { 0x0000, 0x0000 }, /* R401 */ | ||
406 | { 0x0000, 0x0000 }, /* R402 */ | ||
407 | { 0x0000, 0x0000 }, /* R403 */ | ||
408 | { 0x0000, 0x0000 }, /* R404 */ | ||
409 | { 0x0000, 0x0000 }, /* R405 */ | ||
410 | { 0x0000, 0x0000 }, /* R406 */ | ||
411 | { 0x0000, 0x0000 }, /* R407 */ | ||
412 | { 0x0000, 0x0000 }, /* R408 */ | ||
413 | { 0x0000, 0x0000 }, /* R409 */ | ||
414 | { 0x0000, 0x0000 }, /* R410 */ | ||
415 | { 0x0000, 0x0000 }, /* R411 */ | ||
416 | { 0x0000, 0x0000 }, /* R412 */ | ||
417 | { 0x0000, 0x0000 }, /* R413 */ | ||
418 | { 0x0000, 0x0000 }, /* R414 */ | ||
419 | { 0x0000, 0x0000 }, /* R415 */ | ||
420 | { 0x0000, 0x0000 }, /* R416 */ | ||
421 | { 0x0000, 0x0000 }, /* R417 */ | ||
422 | { 0x0000, 0x0000 }, /* R418 */ | ||
423 | { 0x0000, 0x0000 }, /* R419 */ | ||
424 | { 0x0000, 0x0000 }, /* R420 */ | ||
425 | { 0x0000, 0x0000 }, /* R421 */ | ||
426 | { 0x0000, 0x0000 }, /* R422 */ | ||
427 | { 0x0000, 0x0000 }, /* R423 */ | ||
428 | { 0x0000, 0x0000 }, /* R424 */ | ||
429 | { 0x0000, 0x0000 }, /* R425 */ | ||
430 | { 0x0000, 0x0000 }, /* R426 */ | ||
431 | { 0x0000, 0x0000 }, /* R427 */ | ||
432 | { 0x0000, 0x0000 }, /* R428 */ | ||
433 | { 0x0000, 0x0000 }, /* R429 */ | ||
434 | { 0x0000, 0x0000 }, /* R430 */ | ||
435 | { 0x0000, 0x0000 }, /* R431 */ | ||
436 | { 0x0000, 0x0000 }, /* R432 */ | ||
437 | { 0x0000, 0x0000 }, /* R433 */ | ||
438 | { 0x0000, 0x0000 }, /* R434 */ | ||
439 | { 0x0000, 0x0000 }, /* R435 */ | ||
440 | { 0x0000, 0x0000 }, /* R436 */ | ||
441 | { 0x0000, 0x0000 }, /* R437 */ | ||
442 | { 0x0000, 0x0000 }, /* R438 */ | ||
443 | { 0x0000, 0x0000 }, /* R439 */ | ||
444 | { 0x0000, 0x0000 }, /* R440 */ | ||
445 | { 0x0000, 0x0000 }, /* R441 */ | ||
446 | { 0x0000, 0x0000 }, /* R442 */ | ||
447 | { 0x0000, 0x0000 }, /* R443 */ | ||
448 | { 0x0000, 0x0000 }, /* R444 */ | ||
449 | { 0x0000, 0x0000 }, /* R445 */ | ||
450 | { 0x0000, 0x0000 }, /* R446 */ | ||
451 | { 0x0000, 0x0000 }, /* R447 */ | ||
452 | { 0x0000, 0x0000 }, /* R448 */ | ||
453 | { 0x0000, 0x0000 }, /* R449 */ | ||
454 | { 0x0000, 0x0000 }, /* R450 */ | ||
455 | { 0x0000, 0x0000 }, /* R451 */ | ||
456 | { 0x0000, 0x0000 }, /* R452 */ | ||
457 | { 0x0000, 0x0000 }, /* R453 */ | ||
458 | { 0x0000, 0x0000 }, /* R454 */ | ||
459 | { 0x0000, 0x0000 }, /* R455 */ | ||
460 | { 0x0000, 0x0000 }, /* R456 */ | ||
461 | { 0x0000, 0x0000 }, /* R457 */ | ||
462 | { 0x0000, 0x0000 }, /* R458 */ | ||
463 | { 0x0000, 0x0000 }, /* R459 */ | ||
464 | { 0x0000, 0x0000 }, /* R460 */ | ||
465 | { 0x0000, 0x0000 }, /* R461 */ | ||
466 | { 0x0000, 0x0000 }, /* R462 */ | ||
467 | { 0x0000, 0x0000 }, /* R463 */ | ||
468 | { 0x0000, 0x0000 }, /* R464 */ | ||
469 | { 0x0000, 0x0000 }, /* R465 */ | ||
470 | { 0x0000, 0x0000 }, /* R466 */ | ||
471 | { 0x0000, 0x0000 }, /* R467 */ | ||
472 | { 0x0000, 0x0000 }, /* R468 */ | ||
473 | { 0x0000, 0x0000 }, /* R469 */ | ||
474 | { 0x0000, 0x0000 }, /* R470 */ | ||
475 | { 0x0000, 0x0000 }, /* R471 */ | ||
476 | { 0x0000, 0x0000 }, /* R472 */ | ||
477 | { 0x0000, 0x0000 }, /* R473 */ | ||
478 | { 0x0000, 0x0000 }, /* R474 */ | ||
479 | { 0x0000, 0x0000 }, /* R475 */ | ||
480 | { 0x0000, 0x0000 }, /* R476 */ | ||
481 | { 0x0000, 0x0000 }, /* R477 */ | ||
482 | { 0x0000, 0x0000 }, /* R478 */ | ||
483 | { 0x0000, 0x0000 }, /* R479 */ | ||
484 | { 0x0000, 0x0000 }, /* R480 */ | ||
485 | { 0x0000, 0x0000 }, /* R481 */ | ||
486 | { 0x0000, 0x0000 }, /* R482 */ | ||
487 | { 0x0000, 0x0000 }, /* R483 */ | ||
488 | { 0x0000, 0x0000 }, /* R484 */ | ||
489 | { 0x0000, 0x0000 }, /* R485 */ | ||
490 | { 0x0000, 0x0000 }, /* R486 */ | ||
491 | { 0x0000, 0x0000 }, /* R487 */ | ||
492 | { 0x0000, 0x0000 }, /* R488 */ | ||
493 | { 0x0000, 0x0000 }, /* R489 */ | ||
494 | { 0x0000, 0x0000 }, /* R490 */ | ||
495 | { 0x0000, 0x0000 }, /* R491 */ | ||
496 | { 0x0000, 0x0000 }, /* R492 */ | ||
497 | { 0x0000, 0x0000 }, /* R493 */ | ||
498 | { 0x0000, 0x0000 }, /* R494 */ | ||
499 | { 0x0000, 0x0000 }, /* R495 */ | ||
500 | { 0x0000, 0x0000 }, /* R496 */ | ||
501 | { 0x0000, 0x0000 }, /* R497 */ | ||
502 | { 0x0000, 0x0000 }, /* R498 */ | ||
503 | { 0x0000, 0x0000 }, /* R499 */ | ||
504 | { 0x0000, 0x0000 }, /* R500 */ | ||
505 | { 0x0000, 0x0000 }, /* R501 */ | ||
506 | { 0x0000, 0x0000 }, /* R502 */ | ||
507 | { 0x0000, 0x0000 }, /* R503 */ | ||
508 | { 0x0000, 0x0000 }, /* R504 */ | ||
509 | { 0x0000, 0x0000 }, /* R505 */ | ||
510 | { 0x0000, 0x0000 }, /* R506 */ | ||
511 | { 0x0000, 0x0000 }, /* R507 */ | ||
512 | { 0x0000, 0x0000 }, /* R508 */ | ||
513 | { 0x0000, 0x0000 }, /* R509 */ | ||
514 | { 0x0000, 0x0000 }, /* R510 */ | ||
515 | { 0x0000, 0x0000 }, /* R511 */ | ||
516 | { 0x001F, 0x001F }, /* R512 - AIF1 Clocking (1) */ | ||
517 | { 0x003F, 0x003F }, /* R513 - AIF1 Clocking (2) */ | ||
518 | { 0x0000, 0x0000 }, /* R514 */ | ||
519 | { 0x0000, 0x0000 }, /* R515 */ | ||
520 | { 0x001F, 0x001F }, /* R516 - AIF2 Clocking (1) */ | ||
521 | { 0x003F, 0x003F }, /* R517 - AIF2 Clocking (2) */ | ||
522 | { 0x0000, 0x0000 }, /* R518 */ | ||
523 | { 0x0000, 0x0000 }, /* R519 */ | ||
524 | { 0x001F, 0x001F }, /* R520 - Clocking (1) */ | ||
525 | { 0x0777, 0x0777 }, /* R521 - Clocking (2) */ | ||
526 | { 0x0000, 0x0000 }, /* R522 */ | ||
527 | { 0x0000, 0x0000 }, /* R523 */ | ||
528 | { 0x0000, 0x0000 }, /* R524 */ | ||
529 | { 0x0000, 0x0000 }, /* R525 */ | ||
530 | { 0x0000, 0x0000 }, /* R526 */ | ||
531 | { 0x0000, 0x0000 }, /* R527 */ | ||
532 | { 0x00FF, 0x00FF }, /* R528 - AIF1 Rate */ | ||
533 | { 0x00FF, 0x00FF }, /* R529 - AIF2 Rate */ | ||
534 | { 0x000F, 0x0000 }, /* R530 - Rate Status */ | ||
535 | { 0x0000, 0x0000 }, /* R531 */ | ||
536 | { 0x0000, 0x0000 }, /* R532 */ | ||
537 | { 0x0000, 0x0000 }, /* R533 */ | ||
538 | { 0x0000, 0x0000 }, /* R534 */ | ||
539 | { 0x0000, 0x0000 }, /* R535 */ | ||
540 | { 0x0000, 0x0000 }, /* R536 */ | ||
541 | { 0x0000, 0x0000 }, /* R537 */ | ||
542 | { 0x0000, 0x0000 }, /* R538 */ | ||
543 | { 0x0000, 0x0000 }, /* R539 */ | ||
544 | { 0x0000, 0x0000 }, /* R540 */ | ||
545 | { 0x0000, 0x0000 }, /* R541 */ | ||
546 | { 0x0000, 0x0000 }, /* R542 */ | ||
547 | { 0x0000, 0x0000 }, /* R543 */ | ||
548 | { 0x0007, 0x0007 }, /* R544 - FLL1 Control (1) */ | ||
549 | { 0x3F77, 0x3F77 }, /* R545 - FLL1 Control (2) */ | ||
550 | { 0xFFFF, 0xFFFF }, /* R546 - FLL1 Control (3) */ | ||
551 | { 0x7FEF, 0x7FEF }, /* R547 - FLL1 Control (4) */ | ||
552 | { 0x1FDB, 0x1FDB }, /* R548 - FLL1 Control (5) */ | ||
553 | { 0x0000, 0x0000 }, /* R549 */ | ||
554 | { 0x0000, 0x0000 }, /* R550 */ | ||
555 | { 0x0000, 0x0000 }, /* R551 */ | ||
556 | { 0x0000, 0x0000 }, /* R552 */ | ||
557 | { 0x0000, 0x0000 }, /* R553 */ | ||
558 | { 0x0000, 0x0000 }, /* R554 */ | ||
559 | { 0x0000, 0x0000 }, /* R555 */ | ||
560 | { 0x0000, 0x0000 }, /* R556 */ | ||
561 | { 0x0000, 0x0000 }, /* R557 */ | ||
562 | { 0x0000, 0x0000 }, /* R558 */ | ||
563 | { 0x0000, 0x0000 }, /* R559 */ | ||
564 | { 0x0000, 0x0000 }, /* R560 */ | ||
565 | { 0x0000, 0x0000 }, /* R561 */ | ||
566 | { 0x0000, 0x0000 }, /* R562 */ | ||
567 | { 0x0000, 0x0000 }, /* R563 */ | ||
568 | { 0x0000, 0x0000 }, /* R564 */ | ||
569 | { 0x0000, 0x0000 }, /* R565 */ | ||
570 | { 0x0000, 0x0000 }, /* R566 */ | ||
571 | { 0x0000, 0x0000 }, /* R567 */ | ||
572 | { 0x0000, 0x0000 }, /* R568 */ | ||
573 | { 0x0000, 0x0000 }, /* R569 */ | ||
574 | { 0x0000, 0x0000 }, /* R570 */ | ||
575 | { 0x0000, 0x0000 }, /* R571 */ | ||
576 | { 0x0000, 0x0000 }, /* R572 */ | ||
577 | { 0x0000, 0x0000 }, /* R573 */ | ||
578 | { 0x0000, 0x0000 }, /* R574 */ | ||
579 | { 0x0000, 0x0000 }, /* R575 */ | ||
580 | { 0x0007, 0x0007 }, /* R576 - FLL2 Control (1) */ | ||
581 | { 0x3F77, 0x3F77 }, /* R577 - FLL2 Control (2) */ | ||
582 | { 0xFFFF, 0xFFFF }, /* R578 - FLL2 Control (3) */ | ||
583 | { 0x7FEF, 0x7FEF }, /* R579 - FLL2 Control (4) */ | ||
584 | { 0x1FDB, 0x1FDB }, /* R580 - FLL2 Control (5) */ | ||
585 | { 0x0000, 0x0000 }, /* R581 */ | ||
586 | { 0x0000, 0x0000 }, /* R582 */ | ||
587 | { 0x0000, 0x0000 }, /* R583 */ | ||
588 | { 0x0000, 0x0000 }, /* R584 */ | ||
589 | { 0x0000, 0x0000 }, /* R585 */ | ||
590 | { 0x0000, 0x0000 }, /* R586 */ | ||
591 | { 0x0000, 0x0000 }, /* R587 */ | ||
592 | { 0x0000, 0x0000 }, /* R588 */ | ||
593 | { 0x0000, 0x0000 }, /* R589 */ | ||
594 | { 0x0000, 0x0000 }, /* R590 */ | ||
595 | { 0x0000, 0x0000 }, /* R591 */ | ||
596 | { 0x0000, 0x0000 }, /* R592 */ | ||
597 | { 0x0000, 0x0000 }, /* R593 */ | ||
598 | { 0x0000, 0x0000 }, /* R594 */ | ||
599 | { 0x0000, 0x0000 }, /* R595 */ | ||
600 | { 0x0000, 0x0000 }, /* R596 */ | ||
601 | { 0x0000, 0x0000 }, /* R597 */ | ||
602 | { 0x0000, 0x0000 }, /* R598 */ | ||
603 | { 0x0000, 0x0000 }, /* R599 */ | ||
604 | { 0x0000, 0x0000 }, /* R600 */ | ||
605 | { 0x0000, 0x0000 }, /* R601 */ | ||
606 | { 0x0000, 0x0000 }, /* R602 */ | ||
607 | { 0x0000, 0x0000 }, /* R603 */ | ||
608 | { 0x0000, 0x0000 }, /* R604 */ | ||
609 | { 0x0000, 0x0000 }, /* R605 */ | ||
610 | { 0x0000, 0x0000 }, /* R606 */ | ||
611 | { 0x0000, 0x0000 }, /* R607 */ | ||
612 | { 0x0000, 0x0000 }, /* R608 */ | ||
613 | { 0x0000, 0x0000 }, /* R609 */ | ||
614 | { 0x0000, 0x0000 }, /* R610 */ | ||
615 | { 0x0000, 0x0000 }, /* R611 */ | ||
616 | { 0x0000, 0x0000 }, /* R612 */ | ||
617 | { 0x0000, 0x0000 }, /* R613 */ | ||
618 | { 0x0000, 0x0000 }, /* R614 */ | ||
619 | { 0x0000, 0x0000 }, /* R615 */ | ||
620 | { 0x0000, 0x0000 }, /* R616 */ | ||
621 | { 0x0000, 0x0000 }, /* R617 */ | ||
622 | { 0x0000, 0x0000 }, /* R618 */ | ||
623 | { 0x0000, 0x0000 }, /* R619 */ | ||
624 | { 0x0000, 0x0000 }, /* R620 */ | ||
625 | { 0x0000, 0x0000 }, /* R621 */ | ||
626 | { 0x0000, 0x0000 }, /* R622 */ | ||
627 | { 0x0000, 0x0000 }, /* R623 */ | ||
628 | { 0x0000, 0x0000 }, /* R624 */ | ||
629 | { 0x0000, 0x0000 }, /* R625 */ | ||
630 | { 0x0000, 0x0000 }, /* R626 */ | ||
631 | { 0x0000, 0x0000 }, /* R627 */ | ||
632 | { 0x0000, 0x0000 }, /* R628 */ | ||
633 | { 0x0000, 0x0000 }, /* R629 */ | ||
634 | { 0x0000, 0x0000 }, /* R630 */ | ||
635 | { 0x0000, 0x0000 }, /* R631 */ | ||
636 | { 0x0000, 0x0000 }, /* R632 */ | ||
637 | { 0x0000, 0x0000 }, /* R633 */ | ||
638 | { 0x0000, 0x0000 }, /* R634 */ | ||
639 | { 0x0000, 0x0000 }, /* R635 */ | ||
640 | { 0x0000, 0x0000 }, /* R636 */ | ||
641 | { 0x0000, 0x0000 }, /* R637 */ | ||
642 | { 0x0000, 0x0000 }, /* R638 */ | ||
643 | { 0x0000, 0x0000 }, /* R639 */ | ||
644 | { 0x0000, 0x0000 }, /* R640 */ | ||
645 | { 0x0000, 0x0000 }, /* R641 */ | ||
646 | { 0x0000, 0x0000 }, /* R642 */ | ||
647 | { 0x0000, 0x0000 }, /* R643 */ | ||
648 | { 0x0000, 0x0000 }, /* R644 */ | ||
649 | { 0x0000, 0x0000 }, /* R645 */ | ||
650 | { 0x0000, 0x0000 }, /* R646 */ | ||
651 | { 0x0000, 0x0000 }, /* R647 */ | ||
652 | { 0x0000, 0x0000 }, /* R648 */ | ||
653 | { 0x0000, 0x0000 }, /* R649 */ | ||
654 | { 0x0000, 0x0000 }, /* R650 */ | ||
655 | { 0x0000, 0x0000 }, /* R651 */ | ||
656 | { 0x0000, 0x0000 }, /* R652 */ | ||
657 | { 0x0000, 0x0000 }, /* R653 */ | ||
658 | { 0x0000, 0x0000 }, /* R654 */ | ||
659 | { 0x0000, 0x0000 }, /* R655 */ | ||
660 | { 0x0000, 0x0000 }, /* R656 */ | ||
661 | { 0x0000, 0x0000 }, /* R657 */ | ||
662 | { 0x0000, 0x0000 }, /* R658 */ | ||
663 | { 0x0000, 0x0000 }, /* R659 */ | ||
664 | { 0x0000, 0x0000 }, /* R660 */ | ||
665 | { 0x0000, 0x0000 }, /* R661 */ | ||
666 | { 0x0000, 0x0000 }, /* R662 */ | ||
667 | { 0x0000, 0x0000 }, /* R663 */ | ||
668 | { 0x0000, 0x0000 }, /* R664 */ | ||
669 | { 0x0000, 0x0000 }, /* R665 */ | ||
670 | { 0x0000, 0x0000 }, /* R666 */ | ||
671 | { 0x0000, 0x0000 }, /* R667 */ | ||
672 | { 0x0000, 0x0000 }, /* R668 */ | ||
673 | { 0x0000, 0x0000 }, /* R669 */ | ||
674 | { 0x0000, 0x0000 }, /* R670 */ | ||
675 | { 0x0000, 0x0000 }, /* R671 */ | ||
676 | { 0x0000, 0x0000 }, /* R672 */ | ||
677 | { 0x0000, 0x0000 }, /* R673 */ | ||
678 | { 0x0000, 0x0000 }, /* R674 */ | ||
679 | { 0x0000, 0x0000 }, /* R675 */ | ||
680 | { 0x0000, 0x0000 }, /* R676 */ | ||
681 | { 0x0000, 0x0000 }, /* R677 */ | ||
682 | { 0x0000, 0x0000 }, /* R678 */ | ||
683 | { 0x0000, 0x0000 }, /* R679 */ | ||
684 | { 0x0000, 0x0000 }, /* R680 */ | ||
685 | { 0x0000, 0x0000 }, /* R681 */ | ||
686 | { 0x0000, 0x0000 }, /* R682 */ | ||
687 | { 0x0000, 0x0000 }, /* R683 */ | ||
688 | { 0x0000, 0x0000 }, /* R684 */ | ||
689 | { 0x0000, 0x0000 }, /* R685 */ | ||
690 | { 0x0000, 0x0000 }, /* R686 */ | ||
691 | { 0x0000, 0x0000 }, /* R687 */ | ||
692 | { 0x0000, 0x0000 }, /* R688 */ | ||
693 | { 0x0000, 0x0000 }, /* R689 */ | ||
694 | { 0x0000, 0x0000 }, /* R690 */ | ||
695 | { 0x0000, 0x0000 }, /* R691 */ | ||
696 | { 0x0000, 0x0000 }, /* R692 */ | ||
697 | { 0x0000, 0x0000 }, /* R693 */ | ||
698 | { 0x0000, 0x0000 }, /* R694 */ | ||
699 | { 0x0000, 0x0000 }, /* R695 */ | ||
700 | { 0x0000, 0x0000 }, /* R696 */ | ||
701 | { 0x0000, 0x0000 }, /* R697 */ | ||
702 | { 0x0000, 0x0000 }, /* R698 */ | ||
703 | { 0x0000, 0x0000 }, /* R699 */ | ||
704 | { 0x0000, 0x0000 }, /* R700 */ | ||
705 | { 0x0000, 0x0000 }, /* R701 */ | ||
706 | { 0x0000, 0x0000 }, /* R702 */ | ||
707 | { 0x0000, 0x0000 }, /* R703 */ | ||
708 | { 0x0000, 0x0000 }, /* R704 */ | ||
709 | { 0x0000, 0x0000 }, /* R705 */ | ||
710 | { 0x0000, 0x0000 }, /* R706 */ | ||
711 | { 0x0000, 0x0000 }, /* R707 */ | ||
712 | { 0x0000, 0x0000 }, /* R708 */ | ||
713 | { 0x0000, 0x0000 }, /* R709 */ | ||
714 | { 0x0000, 0x0000 }, /* R710 */ | ||
715 | { 0x0000, 0x0000 }, /* R711 */ | ||
716 | { 0x0000, 0x0000 }, /* R712 */ | ||
717 | { 0x0000, 0x0000 }, /* R713 */ | ||
718 | { 0x0000, 0x0000 }, /* R714 */ | ||
719 | { 0x0000, 0x0000 }, /* R715 */ | ||
720 | { 0x0000, 0x0000 }, /* R716 */ | ||
721 | { 0x0000, 0x0000 }, /* R717 */ | ||
722 | { 0x0000, 0x0000 }, /* R718 */ | ||
723 | { 0x0000, 0x0000 }, /* R719 */ | ||
724 | { 0x0000, 0x0000 }, /* R720 */ | ||
725 | { 0x0000, 0x0000 }, /* R721 */ | ||
726 | { 0x0000, 0x0000 }, /* R722 */ | ||
727 | { 0x0000, 0x0000 }, /* R723 */ | ||
728 | { 0x0000, 0x0000 }, /* R724 */ | ||
729 | { 0x0000, 0x0000 }, /* R725 */ | ||
730 | { 0x0000, 0x0000 }, /* R726 */ | ||
731 | { 0x0000, 0x0000 }, /* R727 */ | ||
732 | { 0x0000, 0x0000 }, /* R728 */ | ||
733 | { 0x0000, 0x0000 }, /* R729 */ | ||
734 | { 0x0000, 0x0000 }, /* R730 */ | ||
735 | { 0x0000, 0x0000 }, /* R731 */ | ||
736 | { 0x0000, 0x0000 }, /* R732 */ | ||
737 | { 0x0000, 0x0000 }, /* R733 */ | ||
738 | { 0x0000, 0x0000 }, /* R734 */ | ||
739 | { 0x0000, 0x0000 }, /* R735 */ | ||
740 | { 0x0000, 0x0000 }, /* R736 */ | ||
741 | { 0x0000, 0x0000 }, /* R737 */ | ||
742 | { 0x0000, 0x0000 }, /* R738 */ | ||
743 | { 0x0000, 0x0000 }, /* R739 */ | ||
744 | { 0x0000, 0x0000 }, /* R740 */ | ||
745 | { 0x0000, 0x0000 }, /* R741 */ | ||
746 | { 0x0000, 0x0000 }, /* R742 */ | ||
747 | { 0x0000, 0x0000 }, /* R743 */ | ||
748 | { 0x0000, 0x0000 }, /* R744 */ | ||
749 | { 0x0000, 0x0000 }, /* R745 */ | ||
750 | { 0x0000, 0x0000 }, /* R746 */ | ||
751 | { 0x0000, 0x0000 }, /* R747 */ | ||
752 | { 0x0000, 0x0000 }, /* R748 */ | ||
753 | { 0x0000, 0x0000 }, /* R749 */ | ||
754 | { 0x0000, 0x0000 }, /* R750 */ | ||
755 | { 0x0000, 0x0000 }, /* R751 */ | ||
756 | { 0x0000, 0x0000 }, /* R752 */ | ||
757 | { 0x0000, 0x0000 }, /* R753 */ | ||
758 | { 0x0000, 0x0000 }, /* R754 */ | ||
759 | { 0x0000, 0x0000 }, /* R755 */ | ||
760 | { 0x0000, 0x0000 }, /* R756 */ | ||
761 | { 0x0000, 0x0000 }, /* R757 */ | ||
762 | { 0x0000, 0x0000 }, /* R758 */ | ||
763 | { 0x0000, 0x0000 }, /* R759 */ | ||
764 | { 0x0000, 0x0000 }, /* R760 */ | ||
765 | { 0x0000, 0x0000 }, /* R761 */ | ||
766 | { 0x0000, 0x0000 }, /* R762 */ | ||
767 | { 0x0000, 0x0000 }, /* R763 */ | ||
768 | { 0x0000, 0x0000 }, /* R764 */ | ||
769 | { 0x0000, 0x0000 }, /* R765 */ | ||
770 | { 0x0000, 0x0000 }, /* R766 */ | ||
771 | { 0x0000, 0x0000 }, /* R767 */ | ||
772 | { 0xE1F8, 0xE1F8 }, /* R768 - AIF1 Control (1) */ | ||
773 | { 0xCD1F, 0xCD1F }, /* R769 - AIF1 Control (2) */ | ||
774 | { 0xF000, 0xF000 }, /* R770 - AIF1 Master/Slave */ | ||
775 | { 0x01F0, 0x01F0 }, /* R771 - AIF1 BCLK */ | ||
776 | { 0x0FFF, 0x0FFF }, /* R772 - AIF1ADC LRCLK */ | ||
777 | { 0x0FFF, 0x0FFF }, /* R773 - AIF1DAC LRCLK */ | ||
778 | { 0x0003, 0x0003 }, /* R774 - AIF1DAC Data */ | ||
779 | { 0x0003, 0x0003 }, /* R775 - AIF1ADC Data */ | ||
780 | { 0x0000, 0x0000 }, /* R776 */ | ||
781 | { 0x0000, 0x0000 }, /* R777 */ | ||
782 | { 0x0000, 0x0000 }, /* R778 */ | ||
783 | { 0x0000, 0x0000 }, /* R779 */ | ||
784 | { 0x0000, 0x0000 }, /* R780 */ | ||
785 | { 0x0000, 0x0000 }, /* R781 */ | ||
786 | { 0x0000, 0x0000 }, /* R782 */ | ||
787 | { 0x0000, 0x0000 }, /* R783 */ | ||
788 | { 0xF1F8, 0xF1F8 }, /* R784 - AIF2 Control (1) */ | ||
789 | { 0xFD1F, 0xFD1F }, /* R785 - AIF2 Control (2) */ | ||
790 | { 0xF000, 0xF000 }, /* R786 - AIF2 Master/Slave */ | ||
791 | { 0x01F0, 0x01F0 }, /* R787 - AIF2 BCLK */ | ||
792 | { 0x0FFF, 0x0FFF }, /* R788 - AIF2ADC LRCLK */ | ||
793 | { 0x0FFF, 0x0FFF }, /* R789 - AIF2DAC LRCLK */ | ||
794 | { 0x0003, 0x0003 }, /* R790 - AIF2DAC Data */ | ||
795 | { 0x0003, 0x0003 }, /* R791 - AIF2ADC Data */ | ||
796 | { 0x0000, 0x0000 }, /* R792 */ | ||
797 | { 0x0000, 0x0000 }, /* R793 */ | ||
798 | { 0x0000, 0x0000 }, /* R794 */ | ||
799 | { 0x0000, 0x0000 }, /* R795 */ | ||
800 | { 0x0000, 0x0000 }, /* R796 */ | ||
801 | { 0x0000, 0x0000 }, /* R797 */ | ||
802 | { 0x0000, 0x0000 }, /* R798 */ | ||
803 | { 0x0000, 0x0000 }, /* R799 */ | ||
804 | { 0x0000, 0x0000 }, /* R800 */ | ||
805 | { 0x0000, 0x0000 }, /* R801 */ | ||
806 | { 0x0000, 0x0000 }, /* R802 */ | ||
807 | { 0x0000, 0x0000 }, /* R803 */ | ||
808 | { 0x0000, 0x0000 }, /* R804 */ | ||
809 | { 0x0000, 0x0000 }, /* R805 */ | ||
810 | { 0x0000, 0x0000 }, /* R806 */ | ||
811 | { 0x0000, 0x0000 }, /* R807 */ | ||
812 | { 0x0000, 0x0000 }, /* R808 */ | ||
813 | { 0x0000, 0x0000 }, /* R809 */ | ||
814 | { 0x0000, 0x0000 }, /* R810 */ | ||
815 | { 0x0000, 0x0000 }, /* R811 */ | ||
816 | { 0x0000, 0x0000 }, /* R812 */ | ||
817 | { 0x0000, 0x0000 }, /* R813 */ | ||
818 | { 0x0000, 0x0000 }, /* R814 */ | ||
819 | { 0x0000, 0x0000 }, /* R815 */ | ||
820 | { 0x0000, 0x0000 }, /* R816 */ | ||
821 | { 0x0000, 0x0000 }, /* R817 */ | ||
822 | { 0x0000, 0x0000 }, /* R818 */ | ||
823 | { 0x0000, 0x0000 }, /* R819 */ | ||
824 | { 0x0000, 0x0000 }, /* R820 */ | ||
825 | { 0x0000, 0x0000 }, /* R821 */ | ||
826 | { 0x0000, 0x0000 }, /* R822 */ | ||
827 | { 0x0000, 0x0000 }, /* R823 */ | ||
828 | { 0x0000, 0x0000 }, /* R824 */ | ||
829 | { 0x0000, 0x0000 }, /* R825 */ | ||
830 | { 0x0000, 0x0000 }, /* R826 */ | ||
831 | { 0x0000, 0x0000 }, /* R827 */ | ||
832 | { 0x0000, 0x0000 }, /* R828 */ | ||
833 | { 0x0000, 0x0000 }, /* R829 */ | ||
834 | { 0x0000, 0x0000 }, /* R830 */ | ||
835 | { 0x0000, 0x0000 }, /* R831 */ | ||
836 | { 0x0000, 0x0000 }, /* R832 */ | ||
837 | { 0x0000, 0x0000 }, /* R833 */ | ||
838 | { 0x0000, 0x0000 }, /* R834 */ | ||
839 | { 0x0000, 0x0000 }, /* R835 */ | ||
840 | { 0x0000, 0x0000 }, /* R836 */ | ||
841 | { 0x0000, 0x0000 }, /* R837 */ | ||
842 | { 0x0000, 0x0000 }, /* R838 */ | ||
843 | { 0x0000, 0x0000 }, /* R839 */ | ||
844 | { 0x0000, 0x0000 }, /* R840 */ | ||
845 | { 0x0000, 0x0000 }, /* R841 */ | ||
846 | { 0x0000, 0x0000 }, /* R842 */ | ||
847 | { 0x0000, 0x0000 }, /* R843 */ | ||
848 | { 0x0000, 0x0000 }, /* R844 */ | ||
849 | { 0x0000, 0x0000 }, /* R845 */ | ||
850 | { 0x0000, 0x0000 }, /* R846 */ | ||
851 | { 0x0000, 0x0000 }, /* R847 */ | ||
852 | { 0x0000, 0x0000 }, /* R848 */ | ||
853 | { 0x0000, 0x0000 }, /* R849 */ | ||
854 | { 0x0000, 0x0000 }, /* R850 */ | ||
855 | { 0x0000, 0x0000 }, /* R851 */ | ||
856 | { 0x0000, 0x0000 }, /* R852 */ | ||
857 | { 0x0000, 0x0000 }, /* R853 */ | ||
858 | { 0x0000, 0x0000 }, /* R854 */ | ||
859 | { 0x0000, 0x0000 }, /* R855 */ | ||
860 | { 0x0000, 0x0000 }, /* R856 */ | ||
861 | { 0x0000, 0x0000 }, /* R857 */ | ||
862 | { 0x0000, 0x0000 }, /* R858 */ | ||
863 | { 0x0000, 0x0000 }, /* R859 */ | ||
864 | { 0x0000, 0x0000 }, /* R860 */ | ||
865 | { 0x0000, 0x0000 }, /* R861 */ | ||
866 | { 0x0000, 0x0000 }, /* R862 */ | ||
867 | { 0x0000, 0x0000 }, /* R863 */ | ||
868 | { 0x0000, 0x0000 }, /* R864 */ | ||
869 | { 0x0000, 0x0000 }, /* R865 */ | ||
870 | { 0x0000, 0x0000 }, /* R866 */ | ||
871 | { 0x0000, 0x0000 }, /* R867 */ | ||
872 | { 0x0000, 0x0000 }, /* R868 */ | ||
873 | { 0x0000, 0x0000 }, /* R869 */ | ||
874 | { 0x0000, 0x0000 }, /* R870 */ | ||
875 | { 0x0000, 0x0000 }, /* R871 */ | ||
876 | { 0x0000, 0x0000 }, /* R872 */ | ||
877 | { 0x0000, 0x0000 }, /* R873 */ | ||
878 | { 0x0000, 0x0000 }, /* R874 */ | ||
879 | { 0x0000, 0x0000 }, /* R875 */ | ||
880 | { 0x0000, 0x0000 }, /* R876 */ | ||
881 | { 0x0000, 0x0000 }, /* R877 */ | ||
882 | { 0x0000, 0x0000 }, /* R878 */ | ||
883 | { 0x0000, 0x0000 }, /* R879 */ | ||
884 | { 0x0000, 0x0000 }, /* R880 */ | ||
885 | { 0x0000, 0x0000 }, /* R881 */ | ||
886 | { 0x0000, 0x0000 }, /* R882 */ | ||
887 | { 0x0000, 0x0000 }, /* R883 */ | ||
888 | { 0x0000, 0x0000 }, /* R884 */ | ||
889 | { 0x0000, 0x0000 }, /* R885 */ | ||
890 | { 0x0000, 0x0000 }, /* R886 */ | ||
891 | { 0x0000, 0x0000 }, /* R887 */ | ||
892 | { 0x0000, 0x0000 }, /* R888 */ | ||
893 | { 0x0000, 0x0000 }, /* R889 */ | ||
894 | { 0x0000, 0x0000 }, /* R890 */ | ||
895 | { 0x0000, 0x0000 }, /* R891 */ | ||
896 | { 0x0000, 0x0000 }, /* R892 */ | ||
897 | { 0x0000, 0x0000 }, /* R893 */ | ||
898 | { 0x0000, 0x0000 }, /* R894 */ | ||
899 | { 0x0000, 0x0000 }, /* R895 */ | ||
900 | { 0x0000, 0x0000 }, /* R896 */ | ||
901 | { 0x0000, 0x0000 }, /* R897 */ | ||
902 | { 0x0000, 0x0000 }, /* R898 */ | ||
903 | { 0x0000, 0x0000 }, /* R899 */ | ||
904 | { 0x0000, 0x0000 }, /* R900 */ | ||
905 | { 0x0000, 0x0000 }, /* R901 */ | ||
906 | { 0x0000, 0x0000 }, /* R902 */ | ||
907 | { 0x0000, 0x0000 }, /* R903 */ | ||
908 | { 0x0000, 0x0000 }, /* R904 */ | ||
909 | { 0x0000, 0x0000 }, /* R905 */ | ||
910 | { 0x0000, 0x0000 }, /* R906 */ | ||
911 | { 0x0000, 0x0000 }, /* R907 */ | ||
912 | { 0x0000, 0x0000 }, /* R908 */ | ||
913 | { 0x0000, 0x0000 }, /* R909 */ | ||
914 | { 0x0000, 0x0000 }, /* R910 */ | ||
915 | { 0x0000, 0x0000 }, /* R911 */ | ||
916 | { 0x0000, 0x0000 }, /* R912 */ | ||
917 | { 0x0000, 0x0000 }, /* R913 */ | ||
918 | { 0x0000, 0x0000 }, /* R914 */ | ||
919 | { 0x0000, 0x0000 }, /* R915 */ | ||
920 | { 0x0000, 0x0000 }, /* R916 */ | ||
921 | { 0x0000, 0x0000 }, /* R917 */ | ||
922 | { 0x0000, 0x0000 }, /* R918 */ | ||
923 | { 0x0000, 0x0000 }, /* R919 */ | ||
924 | { 0x0000, 0x0000 }, /* R920 */ | ||
925 | { 0x0000, 0x0000 }, /* R921 */ | ||
926 | { 0x0000, 0x0000 }, /* R922 */ | ||
927 | { 0x0000, 0x0000 }, /* R923 */ | ||
928 | { 0x0000, 0x0000 }, /* R924 */ | ||
929 | { 0x0000, 0x0000 }, /* R925 */ | ||
930 | { 0x0000, 0x0000 }, /* R926 */ | ||
931 | { 0x0000, 0x0000 }, /* R927 */ | ||
932 | { 0x0000, 0x0000 }, /* R928 */ | ||
933 | { 0x0000, 0x0000 }, /* R929 */ | ||
934 | { 0x0000, 0x0000 }, /* R930 */ | ||
935 | { 0x0000, 0x0000 }, /* R931 */ | ||
936 | { 0x0000, 0x0000 }, /* R932 */ | ||
937 | { 0x0000, 0x0000 }, /* R933 */ | ||
938 | { 0x0000, 0x0000 }, /* R934 */ | ||
939 | { 0x0000, 0x0000 }, /* R935 */ | ||
940 | { 0x0000, 0x0000 }, /* R936 */ | ||
941 | { 0x0000, 0x0000 }, /* R937 */ | ||
942 | { 0x0000, 0x0000 }, /* R938 */ | ||
943 | { 0x0000, 0x0000 }, /* R939 */ | ||
944 | { 0x0000, 0x0000 }, /* R940 */ | ||
945 | { 0x0000, 0x0000 }, /* R941 */ | ||
946 | { 0x0000, 0x0000 }, /* R942 */ | ||
947 | { 0x0000, 0x0000 }, /* R943 */ | ||
948 | { 0x0000, 0x0000 }, /* R944 */ | ||
949 | { 0x0000, 0x0000 }, /* R945 */ | ||
950 | { 0x0000, 0x0000 }, /* R946 */ | ||
951 | { 0x0000, 0x0000 }, /* R947 */ | ||
952 | { 0x0000, 0x0000 }, /* R948 */ | ||
953 | { 0x0000, 0x0000 }, /* R949 */ | ||
954 | { 0x0000, 0x0000 }, /* R950 */ | ||
955 | { 0x0000, 0x0000 }, /* R951 */ | ||
956 | { 0x0000, 0x0000 }, /* R952 */ | ||
957 | { 0x0000, 0x0000 }, /* R953 */ | ||
958 | { 0x0000, 0x0000 }, /* R954 */ | ||
959 | { 0x0000, 0x0000 }, /* R955 */ | ||
960 | { 0x0000, 0x0000 }, /* R956 */ | ||
961 | { 0x0000, 0x0000 }, /* R957 */ | ||
962 | { 0x0000, 0x0000 }, /* R958 */ | ||
963 | { 0x0000, 0x0000 }, /* R959 */ | ||
964 | { 0x0000, 0x0000 }, /* R960 */ | ||
965 | { 0x0000, 0x0000 }, /* R961 */ | ||
966 | { 0x0000, 0x0000 }, /* R962 */ | ||
967 | { 0x0000, 0x0000 }, /* R963 */ | ||
968 | { 0x0000, 0x0000 }, /* R964 */ | ||
969 | { 0x0000, 0x0000 }, /* R965 */ | ||
970 | { 0x0000, 0x0000 }, /* R966 */ | ||
971 | { 0x0000, 0x0000 }, /* R967 */ | ||
972 | { 0x0000, 0x0000 }, /* R968 */ | ||
973 | { 0x0000, 0x0000 }, /* R969 */ | ||
974 | { 0x0000, 0x0000 }, /* R970 */ | ||
975 | { 0x0000, 0x0000 }, /* R971 */ | ||
976 | { 0x0000, 0x0000 }, /* R972 */ | ||
977 | { 0x0000, 0x0000 }, /* R973 */ | ||
978 | { 0x0000, 0x0000 }, /* R974 */ | ||
979 | { 0x0000, 0x0000 }, /* R975 */ | ||
980 | { 0x0000, 0x0000 }, /* R976 */ | ||
981 | { 0x0000, 0x0000 }, /* R977 */ | ||
982 | { 0x0000, 0x0000 }, /* R978 */ | ||
983 | { 0x0000, 0x0000 }, /* R979 */ | ||
984 | { 0x0000, 0x0000 }, /* R980 */ | ||
985 | { 0x0000, 0x0000 }, /* R981 */ | ||
986 | { 0x0000, 0x0000 }, /* R982 */ | ||
987 | { 0x0000, 0x0000 }, /* R983 */ | ||
988 | { 0x0000, 0x0000 }, /* R984 */ | ||
989 | { 0x0000, 0x0000 }, /* R985 */ | ||
990 | { 0x0000, 0x0000 }, /* R986 */ | ||
991 | { 0x0000, 0x0000 }, /* R987 */ | ||
992 | { 0x0000, 0x0000 }, /* R988 */ | ||
993 | { 0x0000, 0x0000 }, /* R989 */ | ||
994 | { 0x0000, 0x0000 }, /* R990 */ | ||
995 | { 0x0000, 0x0000 }, /* R991 */ | ||
996 | { 0x0000, 0x0000 }, /* R992 */ | ||
997 | { 0x0000, 0x0000 }, /* R993 */ | ||
998 | { 0x0000, 0x0000 }, /* R994 */ | ||
999 | { 0x0000, 0x0000 }, /* R995 */ | ||
1000 | { 0x0000, 0x0000 }, /* R996 */ | ||
1001 | { 0x0000, 0x0000 }, /* R997 */ | ||
1002 | { 0x0000, 0x0000 }, /* R998 */ | ||
1003 | { 0x0000, 0x0000 }, /* R999 */ | ||
1004 | { 0x0000, 0x0000 }, /* R1000 */ | ||
1005 | { 0x0000, 0x0000 }, /* R1001 */ | ||
1006 | { 0x0000, 0x0000 }, /* R1002 */ | ||
1007 | { 0x0000, 0x0000 }, /* R1003 */ | ||
1008 | { 0x0000, 0x0000 }, /* R1004 */ | ||
1009 | { 0x0000, 0x0000 }, /* R1005 */ | ||
1010 | { 0x0000, 0x0000 }, /* R1006 */ | ||
1011 | { 0x0000, 0x0000 }, /* R1007 */ | ||
1012 | { 0x0000, 0x0000 }, /* R1008 */ | ||
1013 | { 0x0000, 0x0000 }, /* R1009 */ | ||
1014 | { 0x0000, 0x0000 }, /* R1010 */ | ||
1015 | { 0x0000, 0x0000 }, /* R1011 */ | ||
1016 | { 0x0000, 0x0000 }, /* R1012 */ | ||
1017 | { 0x0000, 0x0000 }, /* R1013 */ | ||
1018 | { 0x0000, 0x0000 }, /* R1014 */ | ||
1019 | { 0x0000, 0x0000 }, /* R1015 */ | ||
1020 | { 0x0000, 0x0000 }, /* R1016 */ | ||
1021 | { 0x0000, 0x0000 }, /* R1017 */ | ||
1022 | { 0x0000, 0x0000 }, /* R1018 */ | ||
1023 | { 0x0000, 0x0000 }, /* R1019 */ | ||
1024 | { 0x0000, 0x0000 }, /* R1020 */ | ||
1025 | { 0x0000, 0x0000 }, /* R1021 */ | ||
1026 | { 0x0000, 0x0000 }, /* R1022 */ | ||
1027 | { 0x0000, 0x0000 }, /* R1023 */ | ||
1028 | { 0x00FF, 0x01FF }, /* R1024 - AIF1 ADC1 Left Volume */ | ||
1029 | { 0x00FF, 0x01FF }, /* R1025 - AIF1 ADC1 Right Volume */ | ||
1030 | { 0x00FF, 0x01FF }, /* R1026 - AIF1 DAC1 Left Volume */ | ||
1031 | { 0x00FF, 0x01FF }, /* R1027 - AIF1 DAC1 Right Volume */ | ||
1032 | { 0x00FF, 0x01FF }, /* R1028 - AIF1 ADC2 Left Volume */ | ||
1033 | { 0x00FF, 0x01FF }, /* R1029 - AIF1 ADC2 Right Volume */ | ||
1034 | { 0x00FF, 0x01FF }, /* R1030 - AIF1 DAC2 Left Volume */ | ||
1035 | { 0x00FF, 0x01FF }, /* R1031 - AIF1 DAC2 Right Volume */ | ||
1036 | { 0x0000, 0x0000 }, /* R1032 */ | ||
1037 | { 0x0000, 0x0000 }, /* R1033 */ | ||
1038 | { 0x0000, 0x0000 }, /* R1034 */ | ||
1039 | { 0x0000, 0x0000 }, /* R1035 */ | ||
1040 | { 0x0000, 0x0000 }, /* R1036 */ | ||
1041 | { 0x0000, 0x0000 }, /* R1037 */ | ||
1042 | { 0x0000, 0x0000 }, /* R1038 */ | ||
1043 | { 0x0000, 0x0000 }, /* R1039 */ | ||
1044 | { 0xF800, 0xF800 }, /* R1040 - AIF1 ADC1 Filters */ | ||
1045 | { 0x7800, 0x7800 }, /* R1041 - AIF1 ADC2 Filters */ | ||
1046 | { 0x0000, 0x0000 }, /* R1042 */ | ||
1047 | { 0x0000, 0x0000 }, /* R1043 */ | ||
1048 | { 0x0000, 0x0000 }, /* R1044 */ | ||
1049 | { 0x0000, 0x0000 }, /* R1045 */ | ||
1050 | { 0x0000, 0x0000 }, /* R1046 */ | ||
1051 | { 0x0000, 0x0000 }, /* R1047 */ | ||
1052 | { 0x0000, 0x0000 }, /* R1048 */ | ||
1053 | { 0x0000, 0x0000 }, /* R1049 */ | ||
1054 | { 0x0000, 0x0000 }, /* R1050 */ | ||
1055 | { 0x0000, 0x0000 }, /* R1051 */ | ||
1056 | { 0x0000, 0x0000 }, /* R1052 */ | ||
1057 | { 0x0000, 0x0000 }, /* R1053 */ | ||
1058 | { 0x0000, 0x0000 }, /* R1054 */ | ||
1059 | { 0x0000, 0x0000 }, /* R1055 */ | ||
1060 | { 0x02B6, 0x02B6 }, /* R1056 - AIF1 DAC1 Filters (1) */ | ||
1061 | { 0x3F00, 0x3F00 }, /* R1057 - AIF1 DAC1 Filters (2) */ | ||
1062 | { 0x02B6, 0x02B6 }, /* R1058 - AIF1 DAC2 Filters (1) */ | ||
1063 | { 0x3F00, 0x3F00 }, /* R1059 - AIF1 DAC2 Filters (2) */ | ||
1064 | { 0x0000, 0x0000 }, /* R1060 */ | ||
1065 | { 0x0000, 0x0000 }, /* R1061 */ | ||
1066 | { 0x0000, 0x0000 }, /* R1062 */ | ||
1067 | { 0x0000, 0x0000 }, /* R1063 */ | ||
1068 | { 0x0000, 0x0000 }, /* R1064 */ | ||
1069 | { 0x0000, 0x0000 }, /* R1065 */ | ||
1070 | { 0x0000, 0x0000 }, /* R1066 */ | ||
1071 | { 0x0000, 0x0000 }, /* R1067 */ | ||
1072 | { 0x0000, 0x0000 }, /* R1068 */ | ||
1073 | { 0x0000, 0x0000 }, /* R1069 */ | ||
1074 | { 0x0000, 0x0000 }, /* R1070 */ | ||
1075 | { 0x0000, 0x0000 }, /* R1071 */ | ||
1076 | { 0x0000, 0x0000 }, /* R1072 */ | ||
1077 | { 0x0000, 0x0000 }, /* R1073 */ | ||
1078 | { 0x0000, 0x0000 }, /* R1074 */ | ||
1079 | { 0x0000, 0x0000 }, /* R1075 */ | ||
1080 | { 0x0000, 0x0000 }, /* R1076 */ | ||
1081 | { 0x0000, 0x0000 }, /* R1077 */ | ||
1082 | { 0x0000, 0x0000 }, /* R1078 */ | ||
1083 | { 0x0000, 0x0000 }, /* R1079 */ | ||
1084 | { 0x0000, 0x0000 }, /* R1080 */ | ||
1085 | { 0x0000, 0x0000 }, /* R1081 */ | ||
1086 | { 0x0000, 0x0000 }, /* R1082 */ | ||
1087 | { 0x0000, 0x0000 }, /* R1083 */ | ||
1088 | { 0x0000, 0x0000 }, /* R1084 */ | ||
1089 | { 0x0000, 0x0000 }, /* R1085 */ | ||
1090 | { 0x0000, 0x0000 }, /* R1086 */ | ||
1091 | { 0x0000, 0x0000 }, /* R1087 */ | ||
1092 | { 0xFFFF, 0xFFFF }, /* R1088 - AIF1 DRC1 (1) */ | ||
1093 | { 0x1FFF, 0x1FFF }, /* R1089 - AIF1 DRC1 (2) */ | ||
1094 | { 0xFFFF, 0xFFFF }, /* R1090 - AIF1 DRC1 (3) */ | ||
1095 | { 0x07FF, 0x07FF }, /* R1091 - AIF1 DRC1 (4) */ | ||
1096 | { 0x03FF, 0x03FF }, /* R1092 - AIF1 DRC1 (5) */ | ||
1097 | { 0x0000, 0x0000 }, /* R1093 */ | ||
1098 | { 0x0000, 0x0000 }, /* R1094 */ | ||
1099 | { 0x0000, 0x0000 }, /* R1095 */ | ||
1100 | { 0x0000, 0x0000 }, /* R1096 */ | ||
1101 | { 0x0000, 0x0000 }, /* R1097 */ | ||
1102 | { 0x0000, 0x0000 }, /* R1098 */ | ||
1103 | { 0x0000, 0x0000 }, /* R1099 */ | ||
1104 | { 0x0000, 0x0000 }, /* R1100 */ | ||
1105 | { 0x0000, 0x0000 }, /* R1101 */ | ||
1106 | { 0x0000, 0x0000 }, /* R1102 */ | ||
1107 | { 0x0000, 0x0000 }, /* R1103 */ | ||
1108 | { 0xFFFF, 0xFFFF }, /* R1104 - AIF1 DRC2 (1) */ | ||
1109 | { 0x1FFF, 0x1FFF }, /* R1105 - AIF1 DRC2 (2) */ | ||
1110 | { 0xFFFF, 0xFFFF }, /* R1106 - AIF1 DRC2 (3) */ | ||
1111 | { 0x07FF, 0x07FF }, /* R1107 - AIF1 DRC2 (4) */ | ||
1112 | { 0x03FF, 0x03FF }, /* R1108 - AIF1 DRC2 (5) */ | ||
1113 | { 0x0000, 0x0000 }, /* R1109 */ | ||
1114 | { 0x0000, 0x0000 }, /* R1110 */ | ||
1115 | { 0x0000, 0x0000 }, /* R1111 */ | ||
1116 | { 0x0000, 0x0000 }, /* R1112 */ | ||
1117 | { 0x0000, 0x0000 }, /* R1113 */ | ||
1118 | { 0x0000, 0x0000 }, /* R1114 */ | ||
1119 | { 0x0000, 0x0000 }, /* R1115 */ | ||
1120 | { 0x0000, 0x0000 }, /* R1116 */ | ||
1121 | { 0x0000, 0x0000 }, /* R1117 */ | ||
1122 | { 0x0000, 0x0000 }, /* R1118 */ | ||
1123 | { 0x0000, 0x0000 }, /* R1119 */ | ||
1124 | { 0x0000, 0x0000 }, /* R1120 */ | ||
1125 | { 0x0000, 0x0000 }, /* R1121 */ | ||
1126 | { 0x0000, 0x0000 }, /* R1122 */ | ||
1127 | { 0x0000, 0x0000 }, /* R1123 */ | ||
1128 | { 0x0000, 0x0000 }, /* R1124 */ | ||
1129 | { 0x0000, 0x0000 }, /* R1125 */ | ||
1130 | { 0x0000, 0x0000 }, /* R1126 */ | ||
1131 | { 0x0000, 0x0000 }, /* R1127 */ | ||
1132 | { 0x0000, 0x0000 }, /* R1128 */ | ||
1133 | { 0x0000, 0x0000 }, /* R1129 */ | ||
1134 | { 0x0000, 0x0000 }, /* R1130 */ | ||
1135 | { 0x0000, 0x0000 }, /* R1131 */ | ||
1136 | { 0x0000, 0x0000 }, /* R1132 */ | ||
1137 | { 0x0000, 0x0000 }, /* R1133 */ | ||
1138 | { 0x0000, 0x0000 }, /* R1134 */ | ||
1139 | { 0x0000, 0x0000 }, /* R1135 */ | ||
1140 | { 0x0000, 0x0000 }, /* R1136 */ | ||
1141 | { 0x0000, 0x0000 }, /* R1137 */ | ||
1142 | { 0x0000, 0x0000 }, /* R1138 */ | ||
1143 | { 0x0000, 0x0000 }, /* R1139 */ | ||
1144 | { 0x0000, 0x0000 }, /* R1140 */ | ||
1145 | { 0x0000, 0x0000 }, /* R1141 */ | ||
1146 | { 0x0000, 0x0000 }, /* R1142 */ | ||
1147 | { 0x0000, 0x0000 }, /* R1143 */ | ||
1148 | { 0x0000, 0x0000 }, /* R1144 */ | ||
1149 | { 0x0000, 0x0000 }, /* R1145 */ | ||
1150 | { 0x0000, 0x0000 }, /* R1146 */ | ||
1151 | { 0x0000, 0x0000 }, /* R1147 */ | ||
1152 | { 0x0000, 0x0000 }, /* R1148 */ | ||
1153 | { 0x0000, 0x0000 }, /* R1149 */ | ||
1154 | { 0x0000, 0x0000 }, /* R1150 */ | ||
1155 | { 0x0000, 0x0000 }, /* R1151 */ | ||
1156 | { 0xFFFF, 0xFFFF }, /* R1152 - AIF1 DAC1 EQ Gains (1) */ | ||
1157 | { 0xFFC0, 0xFFC0 }, /* R1153 - AIF1 DAC1 EQ Gains (2) */ | ||
1158 | { 0xFFFF, 0xFFFF }, /* R1154 - AIF1 DAC1 EQ Band 1 A */ | ||
1159 | { 0xFFFF, 0xFFFF }, /* R1155 - AIF1 DAC1 EQ Band 1 B */ | ||
1160 | { 0xFFFF, 0xFFFF }, /* R1156 - AIF1 DAC1 EQ Band 1 PG */ | ||
1161 | { 0xFFFF, 0xFFFF }, /* R1157 - AIF1 DAC1 EQ Band 2 A */ | ||
1162 | { 0xFFFF, 0xFFFF }, /* R1158 - AIF1 DAC1 EQ Band 2 B */ | ||
1163 | { 0xFFFF, 0xFFFF }, /* R1159 - AIF1 DAC1 EQ Band 2 C */ | ||
1164 | { 0xFFFF, 0xFFFF }, /* R1160 - AIF1 DAC1 EQ Band 2 PG */ | ||
1165 | { 0xFFFF, 0xFFFF }, /* R1161 - AIF1 DAC1 EQ Band 3 A */ | ||
1166 | { 0xFFFF, 0xFFFF }, /* R1162 - AIF1 DAC1 EQ Band 3 B */ | ||
1167 | { 0xFFFF, 0xFFFF }, /* R1163 - AIF1 DAC1 EQ Band 3 C */ | ||
1168 | { 0xFFFF, 0xFFFF }, /* R1164 - AIF1 DAC1 EQ Band 3 PG */ | ||
1169 | { 0xFFFF, 0xFFFF }, /* R1165 - AIF1 DAC1 EQ Band 4 A */ | ||
1170 | { 0xFFFF, 0xFFFF }, /* R1166 - AIF1 DAC1 EQ Band 4 B */ | ||
1171 | { 0xFFFF, 0xFFFF }, /* R1167 - AIF1 DAC1 EQ Band 4 C */ | ||
1172 | { 0xFFFF, 0xFFFF }, /* R1168 - AIF1 DAC1 EQ Band 4 PG */ | ||
1173 | { 0xFFFF, 0xFFFF }, /* R1169 - AIF1 DAC1 EQ Band 5 A */ | ||
1174 | { 0xFFFF, 0xFFFF }, /* R1170 - AIF1 DAC1 EQ Band 5 B */ | ||
1175 | { 0xFFFF, 0xFFFF }, /* R1171 - AIF1 DAC1 EQ Band 5 PG */ | ||
1176 | { 0x0000, 0x0000 }, /* R1172 */ | ||
1177 | { 0x0000, 0x0000 }, /* R1173 */ | ||
1178 | { 0x0000, 0x0000 }, /* R1174 */ | ||
1179 | { 0x0000, 0x0000 }, /* R1175 */ | ||
1180 | { 0x0000, 0x0000 }, /* R1176 */ | ||
1181 | { 0x0000, 0x0000 }, /* R1177 */ | ||
1182 | { 0x0000, 0x0000 }, /* R1178 */ | ||
1183 | { 0x0000, 0x0000 }, /* R1179 */ | ||
1184 | { 0x0000, 0x0000 }, /* R1180 */ | ||
1185 | { 0x0000, 0x0000 }, /* R1181 */ | ||
1186 | { 0x0000, 0x0000 }, /* R1182 */ | ||
1187 | { 0x0000, 0x0000 }, /* R1183 */ | ||
1188 | { 0xFFFF, 0xFFFF }, /* R1184 - AIF1 DAC2 EQ Gains (1) */ | ||
1189 | { 0xFFC0, 0xFFC0 }, /* R1185 - AIF1 DAC2 EQ Gains (2) */ | ||
1190 | { 0xFFFF, 0xFFFF }, /* R1186 - AIF1 DAC2 EQ Band 1 A */ | ||
1191 | { 0xFFFF, 0xFFFF }, /* R1187 - AIF1 DAC2 EQ Band 1 B */ | ||
1192 | { 0xFFFF, 0xFFFF }, /* R1188 - AIF1 DAC2 EQ Band 1 PG */ | ||
1193 | { 0xFFFF, 0xFFFF }, /* R1189 - AIF1 DAC2 EQ Band 2 A */ | ||
1194 | { 0xFFFF, 0xFFFF }, /* R1190 - AIF1 DAC2 EQ Band 2 B */ | ||
1195 | { 0xFFFF, 0xFFFF }, /* R1191 - AIF1 DAC2 EQ Band 2 C */ | ||
1196 | { 0xFFFF, 0xFFFF }, /* R1192 - AIF1 DAC2 EQ Band 2 PG */ | ||
1197 | { 0xFFFF, 0xFFFF }, /* R1193 - AIF1 DAC2 EQ Band 3 A */ | ||
1198 | { 0xFFFF, 0xFFFF }, /* R1194 - AIF1 DAC2 EQ Band 3 B */ | ||
1199 | { 0xFFFF, 0xFFFF }, /* R1195 - AIF1 DAC2 EQ Band 3 C */ | ||
1200 | { 0xFFFF, 0xFFFF }, /* R1196 - AIF1 DAC2 EQ Band 3 PG */ | ||
1201 | { 0xFFFF, 0xFFFF }, /* R1197 - AIF1 DAC2 EQ Band 4 A */ | ||
1202 | { 0xFFFF, 0xFFFF }, /* R1198 - AIF1 DAC2 EQ Band 4 B */ | ||
1203 | { 0xFFFF, 0xFFFF }, /* R1199 - AIF1 DAC2 EQ Band 4 C */ | ||
1204 | { 0xFFFF, 0xFFFF }, /* R1200 - AIF1 DAC2 EQ Band 4 PG */ | ||
1205 | { 0xFFFF, 0xFFFF }, /* R1201 - AIF1 DAC2 EQ Band 5 A */ | ||
1206 | { 0xFFFF, 0xFFFF }, /* R1202 - AIF1 DAC2 EQ Band 5 B */ | ||
1207 | { 0xFFFF, 0xFFFF }, /* R1203 - AIF1 DAC2 EQ Band 5 PG */ | ||
1208 | { 0x0000, 0x0000 }, /* R1204 */ | ||
1209 | { 0x0000, 0x0000 }, /* R1205 */ | ||
1210 | { 0x0000, 0x0000 }, /* R1206 */ | ||
1211 | { 0x0000, 0x0000 }, /* R1207 */ | ||
1212 | { 0x0000, 0x0000 }, /* R1208 */ | ||
1213 | { 0x0000, 0x0000 }, /* R1209 */ | ||
1214 | { 0x0000, 0x0000 }, /* R1210 */ | ||
1215 | { 0x0000, 0x0000 }, /* R1211 */ | ||
1216 | { 0x0000, 0x0000 }, /* R1212 */ | ||
1217 | { 0x0000, 0x0000 }, /* R1213 */ | ||
1218 | { 0x0000, 0x0000 }, /* R1214 */ | ||
1219 | { 0x0000, 0x0000 }, /* R1215 */ | ||
1220 | { 0x0000, 0x0000 }, /* R1216 */ | ||
1221 | { 0x0000, 0x0000 }, /* R1217 */ | ||
1222 | { 0x0000, 0x0000 }, /* R1218 */ | ||
1223 | { 0x0000, 0x0000 }, /* R1219 */ | ||
1224 | { 0x0000, 0x0000 }, /* R1220 */ | ||
1225 | { 0x0000, 0x0000 }, /* R1221 */ | ||
1226 | { 0x0000, 0x0000 }, /* R1222 */ | ||
1227 | { 0x0000, 0x0000 }, /* R1223 */ | ||
1228 | { 0x0000, 0x0000 }, /* R1224 */ | ||
1229 | { 0x0000, 0x0000 }, /* R1225 */ | ||
1230 | { 0x0000, 0x0000 }, /* R1226 */ | ||
1231 | { 0x0000, 0x0000 }, /* R1227 */ | ||
1232 | { 0x0000, 0x0000 }, /* R1228 */ | ||
1233 | { 0x0000, 0x0000 }, /* R1229 */ | ||
1234 | { 0x0000, 0x0000 }, /* R1230 */ | ||
1235 | { 0x0000, 0x0000 }, /* R1231 */ | ||
1236 | { 0x0000, 0x0000 }, /* R1232 */ | ||
1237 | { 0x0000, 0x0000 }, /* R1233 */ | ||
1238 | { 0x0000, 0x0000 }, /* R1234 */ | ||
1239 | { 0x0000, 0x0000 }, /* R1235 */ | ||
1240 | { 0x0000, 0x0000 }, /* R1236 */ | ||
1241 | { 0x0000, 0x0000 }, /* R1237 */ | ||
1242 | { 0x0000, 0x0000 }, /* R1238 */ | ||
1243 | { 0x0000, 0x0000 }, /* R1239 */ | ||
1244 | { 0x0000, 0x0000 }, /* R1240 */ | ||
1245 | { 0x0000, 0x0000 }, /* R1241 */ | ||
1246 | { 0x0000, 0x0000 }, /* R1242 */ | ||
1247 | { 0x0000, 0x0000 }, /* R1243 */ | ||
1248 | { 0x0000, 0x0000 }, /* R1244 */ | ||
1249 | { 0x0000, 0x0000 }, /* R1245 */ | ||
1250 | { 0x0000, 0x0000 }, /* R1246 */ | ||
1251 | { 0x0000, 0x0000 }, /* R1247 */ | ||
1252 | { 0x0000, 0x0000 }, /* R1248 */ | ||
1253 | { 0x0000, 0x0000 }, /* R1249 */ | ||
1254 | { 0x0000, 0x0000 }, /* R1250 */ | ||
1255 | { 0x0000, 0x0000 }, /* R1251 */ | ||
1256 | { 0x0000, 0x0000 }, /* R1252 */ | ||
1257 | { 0x0000, 0x0000 }, /* R1253 */ | ||
1258 | { 0x0000, 0x0000 }, /* R1254 */ | ||
1259 | { 0x0000, 0x0000 }, /* R1255 */ | ||
1260 | { 0x0000, 0x0000 }, /* R1256 */ | ||
1261 | { 0x0000, 0x0000 }, /* R1257 */ | ||
1262 | { 0x0000, 0x0000 }, /* R1258 */ | ||
1263 | { 0x0000, 0x0000 }, /* R1259 */ | ||
1264 | { 0x0000, 0x0000 }, /* R1260 */ | ||
1265 | { 0x0000, 0x0000 }, /* R1261 */ | ||
1266 | { 0x0000, 0x0000 }, /* R1262 */ | ||
1267 | { 0x0000, 0x0000 }, /* R1263 */ | ||
1268 | { 0x0000, 0x0000 }, /* R1264 */ | ||
1269 | { 0x0000, 0x0000 }, /* R1265 */ | ||
1270 | { 0x0000, 0x0000 }, /* R1266 */ | ||
1271 | { 0x0000, 0x0000 }, /* R1267 */ | ||
1272 | { 0x0000, 0x0000 }, /* R1268 */ | ||
1273 | { 0x0000, 0x0000 }, /* R1269 */ | ||
1274 | { 0x0000, 0x0000 }, /* R1270 */ | ||
1275 | { 0x0000, 0x0000 }, /* R1271 */ | ||
1276 | { 0x0000, 0x0000 }, /* R1272 */ | ||
1277 | { 0x0000, 0x0000 }, /* R1273 */ | ||
1278 | { 0x0000, 0x0000 }, /* R1274 */ | ||
1279 | { 0x0000, 0x0000 }, /* R1275 */ | ||
1280 | { 0x0000, 0x0000 }, /* R1276 */ | ||
1281 | { 0x0000, 0x0000 }, /* R1277 */ | ||
1282 | { 0x0000, 0x0000 }, /* R1278 */ | ||
1283 | { 0x0000, 0x0000 }, /* R1279 */ | ||
1284 | { 0x00FF, 0x01FF }, /* R1280 - AIF2 ADC Left Volume */ | ||
1285 | { 0x00FF, 0x01FF }, /* R1281 - AIF2 ADC Right Volume */ | ||
1286 | { 0x00FF, 0x01FF }, /* R1282 - AIF2 DAC Left Volume */ | ||
1287 | { 0x00FF, 0x01FF }, /* R1283 - AIF2 DAC Right Volume */ | ||
1288 | { 0x0000, 0x0000 }, /* R1284 */ | ||
1289 | { 0x0000, 0x0000 }, /* R1285 */ | ||
1290 | { 0x0000, 0x0000 }, /* R1286 */ | ||
1291 | { 0x0000, 0x0000 }, /* R1287 */ | ||
1292 | { 0x0000, 0x0000 }, /* R1288 */ | ||
1293 | { 0x0000, 0x0000 }, /* R1289 */ | ||
1294 | { 0x0000, 0x0000 }, /* R1290 */ | ||
1295 | { 0x0000, 0x0000 }, /* R1291 */ | ||
1296 | { 0x0000, 0x0000 }, /* R1292 */ | ||
1297 | { 0x0000, 0x0000 }, /* R1293 */ | ||
1298 | { 0x0000, 0x0000 }, /* R1294 */ | ||
1299 | { 0x0000, 0x0000 }, /* R1295 */ | ||
1300 | { 0xF800, 0xF800 }, /* R1296 - AIF2 ADC Filters */ | ||
1301 | { 0x0000, 0x0000 }, /* R1297 */ | ||
1302 | { 0x0000, 0x0000 }, /* R1298 */ | ||
1303 | { 0x0000, 0x0000 }, /* R1299 */ | ||
1304 | { 0x0000, 0x0000 }, /* R1300 */ | ||
1305 | { 0x0000, 0x0000 }, /* R1301 */ | ||
1306 | { 0x0000, 0x0000 }, /* R1302 */ | ||
1307 | { 0x0000, 0x0000 }, /* R1303 */ | ||
1308 | { 0x0000, 0x0000 }, /* R1304 */ | ||
1309 | { 0x0000, 0x0000 }, /* R1305 */ | ||
1310 | { 0x0000, 0x0000 }, /* R1306 */ | ||
1311 | { 0x0000, 0x0000 }, /* R1307 */ | ||
1312 | { 0x0000, 0x0000 }, /* R1308 */ | ||
1313 | { 0x0000, 0x0000 }, /* R1309 */ | ||
1314 | { 0x0000, 0x0000 }, /* R1310 */ | ||
1315 | { 0x0000, 0x0000 }, /* R1311 */ | ||
1316 | { 0x02B6, 0x02B6 }, /* R1312 - AIF2 DAC Filters (1) */ | ||
1317 | { 0x3F00, 0x3F00 }, /* R1313 - AIF2 DAC Filters (2) */ | ||
1318 | { 0x0000, 0x0000 }, /* R1314 */ | ||
1319 | { 0x0000, 0x0000 }, /* R1315 */ | ||
1320 | { 0x0000, 0x0000 }, /* R1316 */ | ||
1321 | { 0x0000, 0x0000 }, /* R1317 */ | ||
1322 | { 0x0000, 0x0000 }, /* R1318 */ | ||
1323 | { 0x0000, 0x0000 }, /* R1319 */ | ||
1324 | { 0x0000, 0x0000 }, /* R1320 */ | ||
1325 | { 0x0000, 0x0000 }, /* R1321 */ | ||
1326 | { 0x0000, 0x0000 }, /* R1322 */ | ||
1327 | { 0x0000, 0x0000 }, /* R1323 */ | ||
1328 | { 0x0000, 0x0000 }, /* R1324 */ | ||
1329 | { 0x0000, 0x0000 }, /* R1325 */ | ||
1330 | { 0x0000, 0x0000 }, /* R1326 */ | ||
1331 | { 0x0000, 0x0000 }, /* R1327 */ | ||
1332 | { 0x0000, 0x0000 }, /* R1328 */ | ||
1333 | { 0x0000, 0x0000 }, /* R1329 */ | ||
1334 | { 0x0000, 0x0000 }, /* R1330 */ | ||
1335 | { 0x0000, 0x0000 }, /* R1331 */ | ||
1336 | { 0x0000, 0x0000 }, /* R1332 */ | ||
1337 | { 0x0000, 0x0000 }, /* R1333 */ | ||
1338 | { 0x0000, 0x0000 }, /* R1334 */ | ||
1339 | { 0x0000, 0x0000 }, /* R1335 */ | ||
1340 | { 0x0000, 0x0000 }, /* R1336 */ | ||
1341 | { 0x0000, 0x0000 }, /* R1337 */ | ||
1342 | { 0x0000, 0x0000 }, /* R1338 */ | ||
1343 | { 0x0000, 0x0000 }, /* R1339 */ | ||
1344 | { 0x0000, 0x0000 }, /* R1340 */ | ||
1345 | { 0x0000, 0x0000 }, /* R1341 */ | ||
1346 | { 0x0000, 0x0000 }, /* R1342 */ | ||
1347 | { 0x0000, 0x0000 }, /* R1343 */ | ||
1348 | { 0xFFFF, 0xFFFF }, /* R1344 - AIF2 DRC (1) */ | ||
1349 | { 0x1FFF, 0x1FFF }, /* R1345 - AIF2 DRC (2) */ | ||
1350 | { 0xFFFF, 0xFFFF }, /* R1346 - AIF2 DRC (3) */ | ||
1351 | { 0x07FF, 0x07FF }, /* R1347 - AIF2 DRC (4) */ | ||
1352 | { 0x03FF, 0x03FF }, /* R1348 - AIF2 DRC (5) */ | ||
1353 | { 0x0000, 0x0000 }, /* R1349 */ | ||
1354 | { 0x0000, 0x0000 }, /* R1350 */ | ||
1355 | { 0x0000, 0x0000 }, /* R1351 */ | ||
1356 | { 0x0000, 0x0000 }, /* R1352 */ | ||
1357 | { 0x0000, 0x0000 }, /* R1353 */ | ||
1358 | { 0x0000, 0x0000 }, /* R1354 */ | ||
1359 | { 0x0000, 0x0000 }, /* R1355 */ | ||
1360 | { 0x0000, 0x0000 }, /* R1356 */ | ||
1361 | { 0x0000, 0x0000 }, /* R1357 */ | ||
1362 | { 0x0000, 0x0000 }, /* R1358 */ | ||
1363 | { 0x0000, 0x0000 }, /* R1359 */ | ||
1364 | { 0x0000, 0x0000 }, /* R1360 */ | ||
1365 | { 0x0000, 0x0000 }, /* R1361 */ | ||
1366 | { 0x0000, 0x0000 }, /* R1362 */ | ||
1367 | { 0x0000, 0x0000 }, /* R1363 */ | ||
1368 | { 0x0000, 0x0000 }, /* R1364 */ | ||
1369 | { 0x0000, 0x0000 }, /* R1365 */ | ||
1370 | { 0x0000, 0x0000 }, /* R1366 */ | ||
1371 | { 0x0000, 0x0000 }, /* R1367 */ | ||
1372 | { 0x0000, 0x0000 }, /* R1368 */ | ||
1373 | { 0x0000, 0x0000 }, /* R1369 */ | ||
1374 | { 0x0000, 0x0000 }, /* R1370 */ | ||
1375 | { 0x0000, 0x0000 }, /* R1371 */ | ||
1376 | { 0x0000, 0x0000 }, /* R1372 */ | ||
1377 | { 0x0000, 0x0000 }, /* R1373 */ | ||
1378 | { 0x0000, 0x0000 }, /* R1374 */ | ||
1379 | { 0x0000, 0x0000 }, /* R1375 */ | ||
1380 | { 0x0000, 0x0000 }, /* R1376 */ | ||
1381 | { 0x0000, 0x0000 }, /* R1377 */ | ||
1382 | { 0x0000, 0x0000 }, /* R1378 */ | ||
1383 | { 0x0000, 0x0000 }, /* R1379 */ | ||
1384 | { 0x0000, 0x0000 }, /* R1380 */ | ||
1385 | { 0x0000, 0x0000 }, /* R1381 */ | ||
1386 | { 0x0000, 0x0000 }, /* R1382 */ | ||
1387 | { 0x0000, 0x0000 }, /* R1383 */ | ||
1388 | { 0x0000, 0x0000 }, /* R1384 */ | ||
1389 | { 0x0000, 0x0000 }, /* R1385 */ | ||
1390 | { 0x0000, 0x0000 }, /* R1386 */ | ||
1391 | { 0x0000, 0x0000 }, /* R1387 */ | ||
1392 | { 0x0000, 0x0000 }, /* R1388 */ | ||
1393 | { 0x0000, 0x0000 }, /* R1389 */ | ||
1394 | { 0x0000, 0x0000 }, /* R1390 */ | ||
1395 | { 0x0000, 0x0000 }, /* R1391 */ | ||
1396 | { 0x0000, 0x0000 }, /* R1392 */ | ||
1397 | { 0x0000, 0x0000 }, /* R1393 */ | ||
1398 | { 0x0000, 0x0000 }, /* R1394 */ | ||
1399 | { 0x0000, 0x0000 }, /* R1395 */ | ||
1400 | { 0x0000, 0x0000 }, /* R1396 */ | ||
1401 | { 0x0000, 0x0000 }, /* R1397 */ | ||
1402 | { 0x0000, 0x0000 }, /* R1398 */ | ||
1403 | { 0x0000, 0x0000 }, /* R1399 */ | ||
1404 | { 0x0000, 0x0000 }, /* R1400 */ | ||
1405 | { 0x0000, 0x0000 }, /* R1401 */ | ||
1406 | { 0x0000, 0x0000 }, /* R1402 */ | ||
1407 | { 0x0000, 0x0000 }, /* R1403 */ | ||
1408 | { 0x0000, 0x0000 }, /* R1404 */ | ||
1409 | { 0x0000, 0x0000 }, /* R1405 */ | ||
1410 | { 0x0000, 0x0000 }, /* R1406 */ | ||
1411 | { 0x0000, 0x0000 }, /* R1407 */ | ||
1412 | { 0xFFFF, 0xFFFF }, /* R1408 - AIF2 EQ Gains (1) */ | ||
1413 | { 0xFFC0, 0xFFC0 }, /* R1409 - AIF2 EQ Gains (2) */ | ||
1414 | { 0xFFFF, 0xFFFF }, /* R1410 - AIF2 EQ Band 1 A */ | ||
1415 | { 0xFFFF, 0xFFFF }, /* R1411 - AIF2 EQ Band 1 B */ | ||
1416 | { 0xFFFF, 0xFFFF }, /* R1412 - AIF2 EQ Band 1 PG */ | ||
1417 | { 0xFFFF, 0xFFFF }, /* R1413 - AIF2 EQ Band 2 A */ | ||
1418 | { 0xFFFF, 0xFFFF }, /* R1414 - AIF2 EQ Band 2 B */ | ||
1419 | { 0xFFFF, 0xFFFF }, /* R1415 - AIF2 EQ Band 2 C */ | ||
1420 | { 0xFFFF, 0xFFFF }, /* R1416 - AIF2 EQ Band 2 PG */ | ||
1421 | { 0xFFFF, 0xFFFF }, /* R1417 - AIF2 EQ Band 3 A */ | ||
1422 | { 0xFFFF, 0xFFFF }, /* R1418 - AIF2 EQ Band 3 B */ | ||
1423 | { 0xFFFF, 0xFFFF }, /* R1419 - AIF2 EQ Band 3 C */ | ||
1424 | { 0xFFFF, 0xFFFF }, /* R1420 - AIF2 EQ Band 3 PG */ | ||
1425 | { 0xFFFF, 0xFFFF }, /* R1421 - AIF2 EQ Band 4 A */ | ||
1426 | { 0xFFFF, 0xFFFF }, /* R1422 - AIF2 EQ Band 4 B */ | ||
1427 | { 0xFFFF, 0xFFFF }, /* R1423 - AIF2 EQ Band 4 C */ | ||
1428 | { 0xFFFF, 0xFFFF }, /* R1424 - AIF2 EQ Band 4 PG */ | ||
1429 | { 0xFFFF, 0xFFFF }, /* R1425 - AIF2 EQ Band 5 A */ | ||
1430 | { 0xFFFF, 0xFFFF }, /* R1426 - AIF2 EQ Band 5 B */ | ||
1431 | { 0xFFFF, 0xFFFF }, /* R1427 - AIF2 EQ Band 5 PG */ | ||
1432 | { 0x0000, 0x0000 }, /* R1428 */ | ||
1433 | { 0x0000, 0x0000 }, /* R1429 */ | ||
1434 | { 0x0000, 0x0000 }, /* R1430 */ | ||
1435 | { 0x0000, 0x0000 }, /* R1431 */ | ||
1436 | { 0x0000, 0x0000 }, /* R1432 */ | ||
1437 | { 0x0000, 0x0000 }, /* R1433 */ | ||
1438 | { 0x0000, 0x0000 }, /* R1434 */ | ||
1439 | { 0x0000, 0x0000 }, /* R1435 */ | ||
1440 | { 0x0000, 0x0000 }, /* R1436 */ | ||
1441 | { 0x0000, 0x0000 }, /* R1437 */ | ||
1442 | { 0x0000, 0x0000 }, /* R1438 */ | ||
1443 | { 0x0000, 0x0000 }, /* R1439 */ | ||
1444 | { 0x0000, 0x0000 }, /* R1440 */ | ||
1445 | { 0x0000, 0x0000 }, /* R1441 */ | ||
1446 | { 0x0000, 0x0000 }, /* R1442 */ | ||
1447 | { 0x0000, 0x0000 }, /* R1443 */ | ||
1448 | { 0x0000, 0x0000 }, /* R1444 */ | ||
1449 | { 0x0000, 0x0000 }, /* R1445 */ | ||
1450 | { 0x0000, 0x0000 }, /* R1446 */ | ||
1451 | { 0x0000, 0x0000 }, /* R1447 */ | ||
1452 | { 0x0000, 0x0000 }, /* R1448 */ | ||
1453 | { 0x0000, 0x0000 }, /* R1449 */ | ||
1454 | { 0x0000, 0x0000 }, /* R1450 */ | ||
1455 | { 0x0000, 0x0000 }, /* R1451 */ | ||
1456 | { 0x0000, 0x0000 }, /* R1452 */ | ||
1457 | { 0x0000, 0x0000 }, /* R1453 */ | ||
1458 | { 0x0000, 0x0000 }, /* R1454 */ | ||
1459 | { 0x0000, 0x0000 }, /* R1455 */ | ||
1460 | { 0x0000, 0x0000 }, /* R1456 */ | ||
1461 | { 0x0000, 0x0000 }, /* R1457 */ | ||
1462 | { 0x0000, 0x0000 }, /* R1458 */ | ||
1463 | { 0x0000, 0x0000 }, /* R1459 */ | ||
1464 | { 0x0000, 0x0000 }, /* R1460 */ | ||
1465 | { 0x0000, 0x0000 }, /* R1461 */ | ||
1466 | { 0x0000, 0x0000 }, /* R1462 */ | ||
1467 | { 0x0000, 0x0000 }, /* R1463 */ | ||
1468 | { 0x0000, 0x0000 }, /* R1464 */ | ||
1469 | { 0x0000, 0x0000 }, /* R1465 */ | ||
1470 | { 0x0000, 0x0000 }, /* R1466 */ | ||
1471 | { 0x0000, 0x0000 }, /* R1467 */ | ||
1472 | { 0x0000, 0x0000 }, /* R1468 */ | ||
1473 | { 0x0000, 0x0000 }, /* R1469 */ | ||
1474 | { 0x0000, 0x0000 }, /* R1470 */ | ||
1475 | { 0x0000, 0x0000 }, /* R1471 */ | ||
1476 | { 0x0000, 0x0000 }, /* R1472 */ | ||
1477 | { 0x0000, 0x0000 }, /* R1473 */ | ||
1478 | { 0x0000, 0x0000 }, /* R1474 */ | ||
1479 | { 0x0000, 0x0000 }, /* R1475 */ | ||
1480 | { 0x0000, 0x0000 }, /* R1476 */ | ||
1481 | { 0x0000, 0x0000 }, /* R1477 */ | ||
1482 | { 0x0000, 0x0000 }, /* R1478 */ | ||
1483 | { 0x0000, 0x0000 }, /* R1479 */ | ||
1484 | { 0x0000, 0x0000 }, /* R1480 */ | ||
1485 | { 0x0000, 0x0000 }, /* R1481 */ | ||
1486 | { 0x0000, 0x0000 }, /* R1482 */ | ||
1487 | { 0x0000, 0x0000 }, /* R1483 */ | ||
1488 | { 0x0000, 0x0000 }, /* R1484 */ | ||
1489 | { 0x0000, 0x0000 }, /* R1485 */ | ||
1490 | { 0x0000, 0x0000 }, /* R1486 */ | ||
1491 | { 0x0000, 0x0000 }, /* R1487 */ | ||
1492 | { 0x0000, 0x0000 }, /* R1488 */ | ||
1493 | { 0x0000, 0x0000 }, /* R1489 */ | ||
1494 | { 0x0000, 0x0000 }, /* R1490 */ | ||
1495 | { 0x0000, 0x0000 }, /* R1491 */ | ||
1496 | { 0x0000, 0x0000 }, /* R1492 */ | ||
1497 | { 0x0000, 0x0000 }, /* R1493 */ | ||
1498 | { 0x0000, 0x0000 }, /* R1494 */ | ||
1499 | { 0x0000, 0x0000 }, /* R1495 */ | ||
1500 | { 0x0000, 0x0000 }, /* R1496 */ | ||
1501 | { 0x0000, 0x0000 }, /* R1497 */ | ||
1502 | { 0x0000, 0x0000 }, /* R1498 */ | ||
1503 | { 0x0000, 0x0000 }, /* R1499 */ | ||
1504 | { 0x0000, 0x0000 }, /* R1500 */ | ||
1505 | { 0x0000, 0x0000 }, /* R1501 */ | ||
1506 | { 0x0000, 0x0000 }, /* R1502 */ | ||
1507 | { 0x0000, 0x0000 }, /* R1503 */ | ||
1508 | { 0x0000, 0x0000 }, /* R1504 */ | ||
1509 | { 0x0000, 0x0000 }, /* R1505 */ | ||
1510 | { 0x0000, 0x0000 }, /* R1506 */ | ||
1511 | { 0x0000, 0x0000 }, /* R1507 */ | ||
1512 | { 0x0000, 0x0000 }, /* R1508 */ | ||
1513 | { 0x0000, 0x0000 }, /* R1509 */ | ||
1514 | { 0x0000, 0x0000 }, /* R1510 */ | ||
1515 | { 0x0000, 0x0000 }, /* R1511 */ | ||
1516 | { 0x0000, 0x0000 }, /* R1512 */ | ||
1517 | { 0x0000, 0x0000 }, /* R1513 */ | ||
1518 | { 0x0000, 0x0000 }, /* R1514 */ | ||
1519 | { 0x0000, 0x0000 }, /* R1515 */ | ||
1520 | { 0x0000, 0x0000 }, /* R1516 */ | ||
1521 | { 0x0000, 0x0000 }, /* R1517 */ | ||
1522 | { 0x0000, 0x0000 }, /* R1518 */ | ||
1523 | { 0x0000, 0x0000 }, /* R1519 */ | ||
1524 | { 0x0000, 0x0000 }, /* R1520 */ | ||
1525 | { 0x0000, 0x0000 }, /* R1521 */ | ||
1526 | { 0x0000, 0x0000 }, /* R1522 */ | ||
1527 | { 0x0000, 0x0000 }, /* R1523 */ | ||
1528 | { 0x0000, 0x0000 }, /* R1524 */ | ||
1529 | { 0x0000, 0x0000 }, /* R1525 */ | ||
1530 | { 0x0000, 0x0000 }, /* R1526 */ | ||
1531 | { 0x0000, 0x0000 }, /* R1527 */ | ||
1532 | { 0x0000, 0x0000 }, /* R1528 */ | ||
1533 | { 0x0000, 0x0000 }, /* R1529 */ | ||
1534 | { 0x0000, 0x0000 }, /* R1530 */ | ||
1535 | { 0x0000, 0x0000 }, /* R1531 */ | ||
1536 | { 0x0000, 0x0000 }, /* R1532 */ | ||
1537 | { 0x0000, 0x0000 }, /* R1533 */ | ||
1538 | { 0x0000, 0x0000 }, /* R1534 */ | ||
1539 | { 0x0000, 0x0000 }, /* R1535 */ | ||
1540 | { 0x01EF, 0x01EF }, /* R1536 - DAC1 Mixer Volumes */ | ||
1541 | { 0x0037, 0x0037 }, /* R1537 - DAC1 Left Mixer Routing */ | ||
1542 | { 0x0037, 0x0037 }, /* R1538 - DAC1 Right Mixer Routing */ | ||
1543 | { 0x01EF, 0x01EF }, /* R1539 - DAC2 Mixer Volumes */ | ||
1544 | { 0x0037, 0x0037 }, /* R1540 - DAC2 Left Mixer Routing */ | ||
1545 | { 0x0037, 0x0037 }, /* R1541 - DAC2 Right Mixer Routing */ | ||
1546 | { 0x0003, 0x0003 }, /* R1542 - AIF1 ADC1 Left Mixer Routing */ | ||
1547 | { 0x0003, 0x0003 }, /* R1543 - AIF1 ADC1 Right Mixer Routing */ | ||
1548 | { 0x0003, 0x0003 }, /* R1544 - AIF1 ADC2 Left Mixer Routing */ | ||
1549 | { 0x0003, 0x0003 }, /* R1545 - AIF1 ADC2 Right mixer Routing */ | ||
1550 | { 0x0000, 0x0000 }, /* R1546 */ | ||
1551 | { 0x0000, 0x0000 }, /* R1547 */ | ||
1552 | { 0x0000, 0x0000 }, /* R1548 */ | ||
1553 | { 0x0000, 0x0000 }, /* R1549 */ | ||
1554 | { 0x0000, 0x0000 }, /* R1550 */ | ||
1555 | { 0x0000, 0x0000 }, /* R1551 */ | ||
1556 | { 0x02FF, 0x03FF }, /* R1552 - DAC1 Left Volume */ | ||
1557 | { 0x02FF, 0x03FF }, /* R1553 - DAC1 Right Volume */ | ||
1558 | { 0x02FF, 0x03FF }, /* R1554 - DAC2 Left Volume */ | ||
1559 | { 0x02FF, 0x03FF }, /* R1555 - DAC2 Right Volume */ | ||
1560 | { 0x0003, 0x0003 }, /* R1556 - DAC Softmute */ | ||
1561 | { 0x0000, 0x0000 }, /* R1557 */ | ||
1562 | { 0x0000, 0x0000 }, /* R1558 */ | ||
1563 | { 0x0000, 0x0000 }, /* R1559 */ | ||
1564 | { 0x0000, 0x0000 }, /* R1560 */ | ||
1565 | { 0x0000, 0x0000 }, /* R1561 */ | ||
1566 | { 0x0000, 0x0000 }, /* R1562 */ | ||
1567 | { 0x0000, 0x0000 }, /* R1563 */ | ||
1568 | { 0x0000, 0x0000 }, /* R1564 */ | ||
1569 | { 0x0000, 0x0000 }, /* R1565 */ | ||
1570 | { 0x0000, 0x0000 }, /* R1566 */ | ||
1571 | { 0x0000, 0x0000 }, /* R1567 */ | ||
1572 | { 0x0003, 0x0003 }, /* R1568 - Oversampling */ | ||
1573 | { 0x03C3, 0x03C3 }, /* R1569 - Sidetone */ | ||
1574 | }; | ||
1575 | |||
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index ea3ee9fde2b1..63a3895b021a 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <sound/pcm.h> | 24 | #include <sound/pcm.h> |
25 | #include <sound/pcm_params.h> | 25 | #include <sound/pcm_params.h> |
26 | #include <sound/soc.h> | 26 | #include <sound/soc.h> |
27 | #include <sound/soc-dapm.h> | ||
28 | #include <sound/initval.h> | 27 | #include <sound/initval.h> |
29 | #include <sound/tlv.h> | 28 | #include <sound/tlv.h> |
30 | 29 | ||
@@ -98,1582 +97,6 @@ struct wm8994_priv { | |||
98 | struct wm8994_pdata *pdata; | 97 | struct wm8994_pdata *pdata; |
99 | }; | 98 | }; |
100 | 99 | ||
101 | static const struct { | ||
102 | unsigned short readable; /* Mask of readable bits */ | ||
103 | unsigned short writable; /* Mask of writable bits */ | ||
104 | } access_masks[] = { | ||
105 | { 0xFFFF, 0xFFFF }, /* R0 - Software Reset */ | ||
106 | { 0x3B37, 0x3B37 }, /* R1 - Power Management (1) */ | ||
107 | { 0x6BF0, 0x6BF0 }, /* R2 - Power Management (2) */ | ||
108 | { 0x3FF0, 0x3FF0 }, /* R3 - Power Management (3) */ | ||
109 | { 0x3F3F, 0x3F3F }, /* R4 - Power Management (4) */ | ||
110 | { 0x3F0F, 0x3F0F }, /* R5 - Power Management (5) */ | ||
111 | { 0x003F, 0x003F }, /* R6 - Power Management (6) */ | ||
112 | { 0x0000, 0x0000 }, /* R7 */ | ||
113 | { 0x0000, 0x0000 }, /* R8 */ | ||
114 | { 0x0000, 0x0000 }, /* R9 */ | ||
115 | { 0x0000, 0x0000 }, /* R10 */ | ||
116 | { 0x0000, 0x0000 }, /* R11 */ | ||
117 | { 0x0000, 0x0000 }, /* R12 */ | ||
118 | { 0x0000, 0x0000 }, /* R13 */ | ||
119 | { 0x0000, 0x0000 }, /* R14 */ | ||
120 | { 0x0000, 0x0000 }, /* R15 */ | ||
121 | { 0x0000, 0x0000 }, /* R16 */ | ||
122 | { 0x0000, 0x0000 }, /* R17 */ | ||
123 | { 0x0000, 0x0000 }, /* R18 */ | ||
124 | { 0x0000, 0x0000 }, /* R19 */ | ||
125 | { 0x0000, 0x0000 }, /* R20 */ | ||
126 | { 0x01C0, 0x01C0 }, /* R21 - Input Mixer (1) */ | ||
127 | { 0x0000, 0x0000 }, /* R22 */ | ||
128 | { 0x0000, 0x0000 }, /* R23 */ | ||
129 | { 0x00DF, 0x01DF }, /* R24 - Left Line Input 1&2 Volume */ | ||
130 | { 0x00DF, 0x01DF }, /* R25 - Left Line Input 3&4 Volume */ | ||
131 | { 0x00DF, 0x01DF }, /* R26 - Right Line Input 1&2 Volume */ | ||
132 | { 0x00DF, 0x01DF }, /* R27 - Right Line Input 3&4 Volume */ | ||
133 | { 0x00FF, 0x01FF }, /* R28 - Left Output Volume */ | ||
134 | { 0x00FF, 0x01FF }, /* R29 - Right Output Volume */ | ||
135 | { 0x0077, 0x0077 }, /* R30 - Line Outputs Volume */ | ||
136 | { 0x0030, 0x0030 }, /* R31 - HPOUT2 Volume */ | ||
137 | { 0x00FF, 0x01FF }, /* R32 - Left OPGA Volume */ | ||
138 | { 0x00FF, 0x01FF }, /* R33 - Right OPGA Volume */ | ||
139 | { 0x007F, 0x007F }, /* R34 - SPKMIXL Attenuation */ | ||
140 | { 0x017F, 0x017F }, /* R35 - SPKMIXR Attenuation */ | ||
141 | { 0x003F, 0x003F }, /* R36 - SPKOUT Mixers */ | ||
142 | { 0x003F, 0x003F }, /* R37 - ClassD */ | ||
143 | { 0x00FF, 0x01FF }, /* R38 - Speaker Volume Left */ | ||
144 | { 0x00FF, 0x01FF }, /* R39 - Speaker Volume Right */ | ||
145 | { 0x00FF, 0x00FF }, /* R40 - Input Mixer (2) */ | ||
146 | { 0x01B7, 0x01B7 }, /* R41 - Input Mixer (3) */ | ||
147 | { 0x01B7, 0x01B7 }, /* R42 - Input Mixer (4) */ | ||
148 | { 0x01C7, 0x01C7 }, /* R43 - Input Mixer (5) */ | ||
149 | { 0x01C7, 0x01C7 }, /* R44 - Input Mixer (6) */ | ||
150 | { 0x01FF, 0x01FF }, /* R45 - Output Mixer (1) */ | ||
151 | { 0x01FF, 0x01FF }, /* R46 - Output Mixer (2) */ | ||
152 | { 0x0FFF, 0x0FFF }, /* R47 - Output Mixer (3) */ | ||
153 | { 0x0FFF, 0x0FFF }, /* R48 - Output Mixer (4) */ | ||
154 | { 0x0FFF, 0x0FFF }, /* R49 - Output Mixer (5) */ | ||
155 | { 0x0FFF, 0x0FFF }, /* R50 - Output Mixer (6) */ | ||
156 | { 0x0038, 0x0038 }, /* R51 - HPOUT2 Mixer */ | ||
157 | { 0x0077, 0x0077 }, /* R52 - Line Mixer (1) */ | ||
158 | { 0x0077, 0x0077 }, /* R53 - Line Mixer (2) */ | ||
159 | { 0x03FF, 0x03FF }, /* R54 - Speaker Mixer */ | ||
160 | { 0x00C1, 0x00C1 }, /* R55 - Additional Control */ | ||
161 | { 0x00F0, 0x00F0 }, /* R56 - AntiPOP (1) */ | ||
162 | { 0x01EF, 0x01EF }, /* R57 - AntiPOP (2) */ | ||
163 | { 0x00FF, 0x00FF }, /* R58 - MICBIAS */ | ||
164 | { 0x000F, 0x000F }, /* R59 - LDO 1 */ | ||
165 | { 0x0007, 0x0007 }, /* R60 - LDO 2 */ | ||
166 | { 0x0000, 0x0000 }, /* R61 */ | ||
167 | { 0x0000, 0x0000 }, /* R62 */ | ||
168 | { 0x0000, 0x0000 }, /* R63 */ | ||
169 | { 0x0000, 0x0000 }, /* R64 */ | ||
170 | { 0x0000, 0x0000 }, /* R65 */ | ||
171 | { 0x0000, 0x0000 }, /* R66 */ | ||
172 | { 0x0000, 0x0000 }, /* R67 */ | ||
173 | { 0x0000, 0x0000 }, /* R68 */ | ||
174 | { 0x0000, 0x0000 }, /* R69 */ | ||
175 | { 0x0000, 0x0000 }, /* R70 */ | ||
176 | { 0x0000, 0x0000 }, /* R71 */ | ||
177 | { 0x0000, 0x0000 }, /* R72 */ | ||
178 | { 0x0000, 0x0000 }, /* R73 */ | ||
179 | { 0x0000, 0x0000 }, /* R74 */ | ||
180 | { 0x0000, 0x0000 }, /* R75 */ | ||
181 | { 0x8000, 0x8000 }, /* R76 - Charge Pump (1) */ | ||
182 | { 0x0000, 0x0000 }, /* R77 */ | ||
183 | { 0x0000, 0x0000 }, /* R78 */ | ||
184 | { 0x0000, 0x0000 }, /* R79 */ | ||
185 | { 0x0000, 0x0000 }, /* R80 */ | ||
186 | { 0x0301, 0x0301 }, /* R81 - Class W (1) */ | ||
187 | { 0x0000, 0x0000 }, /* R82 */ | ||
188 | { 0x0000, 0x0000 }, /* R83 */ | ||
189 | { 0x333F, 0x333F }, /* R84 - DC Servo (1) */ | ||
190 | { 0x0FEF, 0x0FEF }, /* R85 - DC Servo (2) */ | ||
191 | { 0x0000, 0x0000 }, /* R86 */ | ||
192 | { 0xFFFF, 0xFFFF }, /* R87 - DC Servo (4) */ | ||
193 | { 0x0333, 0x0000 }, /* R88 - DC Servo Readback */ | ||
194 | { 0x0000, 0x0000 }, /* R89 */ | ||
195 | { 0x0000, 0x0000 }, /* R90 */ | ||
196 | { 0x0000, 0x0000 }, /* R91 */ | ||
197 | { 0x0000, 0x0000 }, /* R92 */ | ||
198 | { 0x0000, 0x0000 }, /* R93 */ | ||
199 | { 0x0000, 0x0000 }, /* R94 */ | ||
200 | { 0x0000, 0x0000 }, /* R95 */ | ||
201 | { 0x00EE, 0x00EE }, /* R96 - Analogue HP (1) */ | ||
202 | { 0x0000, 0x0000 }, /* R97 */ | ||
203 | { 0x0000, 0x0000 }, /* R98 */ | ||
204 | { 0x0000, 0x0000 }, /* R99 */ | ||
205 | { 0x0000, 0x0000 }, /* R100 */ | ||
206 | { 0x0000, 0x0000 }, /* R101 */ | ||
207 | { 0x0000, 0x0000 }, /* R102 */ | ||
208 | { 0x0000, 0x0000 }, /* R103 */ | ||
209 | { 0x0000, 0x0000 }, /* R104 */ | ||
210 | { 0x0000, 0x0000 }, /* R105 */ | ||
211 | { 0x0000, 0x0000 }, /* R106 */ | ||
212 | { 0x0000, 0x0000 }, /* R107 */ | ||
213 | { 0x0000, 0x0000 }, /* R108 */ | ||
214 | { 0x0000, 0x0000 }, /* R109 */ | ||
215 | { 0x0000, 0x0000 }, /* R110 */ | ||
216 | { 0x0000, 0x0000 }, /* R111 */ | ||
217 | { 0x0000, 0x0000 }, /* R112 */ | ||
218 | { 0x0000, 0x0000 }, /* R113 */ | ||
219 | { 0x0000, 0x0000 }, /* R114 */ | ||
220 | { 0x0000, 0x0000 }, /* R115 */ | ||
221 | { 0x0000, 0x0000 }, /* R116 */ | ||
222 | { 0x0000, 0x0000 }, /* R117 */ | ||
223 | { 0x0000, 0x0000 }, /* R118 */ | ||
224 | { 0x0000, 0x0000 }, /* R119 */ | ||
225 | { 0x0000, 0x0000 }, /* R120 */ | ||
226 | { 0x0000, 0x0000 }, /* R121 */ | ||
227 | { 0x0000, 0x0000 }, /* R122 */ | ||
228 | { 0x0000, 0x0000 }, /* R123 */ | ||
229 | { 0x0000, 0x0000 }, /* R124 */ | ||
230 | { 0x0000, 0x0000 }, /* R125 */ | ||
231 | { 0x0000, 0x0000 }, /* R126 */ | ||
232 | { 0x0000, 0x0000 }, /* R127 */ | ||
233 | { 0x0000, 0x0000 }, /* R128 */ | ||
234 | { 0x0000, 0x0000 }, /* R129 */ | ||
235 | { 0x0000, 0x0000 }, /* R130 */ | ||
236 | { 0x0000, 0x0000 }, /* R131 */ | ||
237 | { 0x0000, 0x0000 }, /* R132 */ | ||
238 | { 0x0000, 0x0000 }, /* R133 */ | ||
239 | { 0x0000, 0x0000 }, /* R134 */ | ||
240 | { 0x0000, 0x0000 }, /* R135 */ | ||
241 | { 0x0000, 0x0000 }, /* R136 */ | ||
242 | { 0x0000, 0x0000 }, /* R137 */ | ||
243 | { 0x0000, 0x0000 }, /* R138 */ | ||
244 | { 0x0000, 0x0000 }, /* R139 */ | ||
245 | { 0x0000, 0x0000 }, /* R140 */ | ||
246 | { 0x0000, 0x0000 }, /* R141 */ | ||
247 | { 0x0000, 0x0000 }, /* R142 */ | ||
248 | { 0x0000, 0x0000 }, /* R143 */ | ||
249 | { 0x0000, 0x0000 }, /* R144 */ | ||
250 | { 0x0000, 0x0000 }, /* R145 */ | ||
251 | { 0x0000, 0x0000 }, /* R146 */ | ||
252 | { 0x0000, 0x0000 }, /* R147 */ | ||
253 | { 0x0000, 0x0000 }, /* R148 */ | ||
254 | { 0x0000, 0x0000 }, /* R149 */ | ||
255 | { 0x0000, 0x0000 }, /* R150 */ | ||
256 | { 0x0000, 0x0000 }, /* R151 */ | ||
257 | { 0x0000, 0x0000 }, /* R152 */ | ||
258 | { 0x0000, 0x0000 }, /* R153 */ | ||
259 | { 0x0000, 0x0000 }, /* R154 */ | ||
260 | { 0x0000, 0x0000 }, /* R155 */ | ||
261 | { 0x0000, 0x0000 }, /* R156 */ | ||
262 | { 0x0000, 0x0000 }, /* R157 */ | ||
263 | { 0x0000, 0x0000 }, /* R158 */ | ||
264 | { 0x0000, 0x0000 }, /* R159 */ | ||
265 | { 0x0000, 0x0000 }, /* R160 */ | ||
266 | { 0x0000, 0x0000 }, /* R161 */ | ||
267 | { 0x0000, 0x0000 }, /* R162 */ | ||
268 | { 0x0000, 0x0000 }, /* R163 */ | ||
269 | { 0x0000, 0x0000 }, /* R164 */ | ||
270 | { 0x0000, 0x0000 }, /* R165 */ | ||
271 | { 0x0000, 0x0000 }, /* R166 */ | ||
272 | { 0x0000, 0x0000 }, /* R167 */ | ||
273 | { 0x0000, 0x0000 }, /* R168 */ | ||
274 | { 0x0000, 0x0000 }, /* R169 */ | ||
275 | { 0x0000, 0x0000 }, /* R170 */ | ||
276 | { 0x0000, 0x0000 }, /* R171 */ | ||
277 | { 0x0000, 0x0000 }, /* R172 */ | ||
278 | { 0x0000, 0x0000 }, /* R173 */ | ||
279 | { 0x0000, 0x0000 }, /* R174 */ | ||
280 | { 0x0000, 0x0000 }, /* R175 */ | ||
281 | { 0x0000, 0x0000 }, /* R176 */ | ||
282 | { 0x0000, 0x0000 }, /* R177 */ | ||
283 | { 0x0000, 0x0000 }, /* R178 */ | ||
284 | { 0x0000, 0x0000 }, /* R179 */ | ||
285 | { 0x0000, 0x0000 }, /* R180 */ | ||
286 | { 0x0000, 0x0000 }, /* R181 */ | ||
287 | { 0x0000, 0x0000 }, /* R182 */ | ||
288 | { 0x0000, 0x0000 }, /* R183 */ | ||
289 | { 0x0000, 0x0000 }, /* R184 */ | ||
290 | { 0x0000, 0x0000 }, /* R185 */ | ||
291 | { 0x0000, 0x0000 }, /* R186 */ | ||
292 | { 0x0000, 0x0000 }, /* R187 */ | ||
293 | { 0x0000, 0x0000 }, /* R188 */ | ||
294 | { 0x0000, 0x0000 }, /* R189 */ | ||
295 | { 0x0000, 0x0000 }, /* R190 */ | ||
296 | { 0x0000, 0x0000 }, /* R191 */ | ||
297 | { 0x0000, 0x0000 }, /* R192 */ | ||
298 | { 0x0000, 0x0000 }, /* R193 */ | ||
299 | { 0x0000, 0x0000 }, /* R194 */ | ||
300 | { 0x0000, 0x0000 }, /* R195 */ | ||
301 | { 0x0000, 0x0000 }, /* R196 */ | ||
302 | { 0x0000, 0x0000 }, /* R197 */ | ||
303 | { 0x0000, 0x0000 }, /* R198 */ | ||
304 | { 0x0000, 0x0000 }, /* R199 */ | ||
305 | { 0x0000, 0x0000 }, /* R200 */ | ||
306 | { 0x0000, 0x0000 }, /* R201 */ | ||
307 | { 0x0000, 0x0000 }, /* R202 */ | ||
308 | { 0x0000, 0x0000 }, /* R203 */ | ||
309 | { 0x0000, 0x0000 }, /* R204 */ | ||
310 | { 0x0000, 0x0000 }, /* R205 */ | ||
311 | { 0x0000, 0x0000 }, /* R206 */ | ||
312 | { 0x0000, 0x0000 }, /* R207 */ | ||
313 | { 0x0000, 0x0000 }, /* R208 */ | ||
314 | { 0x0000, 0x0000 }, /* R209 */ | ||
315 | { 0x0000, 0x0000 }, /* R210 */ | ||
316 | { 0x0000, 0x0000 }, /* R211 */ | ||
317 | { 0x0000, 0x0000 }, /* R212 */ | ||
318 | { 0x0000, 0x0000 }, /* R213 */ | ||
319 | { 0x0000, 0x0000 }, /* R214 */ | ||
320 | { 0x0000, 0x0000 }, /* R215 */ | ||
321 | { 0x0000, 0x0000 }, /* R216 */ | ||
322 | { 0x0000, 0x0000 }, /* R217 */ | ||
323 | { 0x0000, 0x0000 }, /* R218 */ | ||
324 | { 0x0000, 0x0000 }, /* R219 */ | ||
325 | { 0x0000, 0x0000 }, /* R220 */ | ||
326 | { 0x0000, 0x0000 }, /* R221 */ | ||
327 | { 0x0000, 0x0000 }, /* R222 */ | ||
328 | { 0x0000, 0x0000 }, /* R223 */ | ||
329 | { 0x0000, 0x0000 }, /* R224 */ | ||
330 | { 0x0000, 0x0000 }, /* R225 */ | ||
331 | { 0x0000, 0x0000 }, /* R226 */ | ||
332 | { 0x0000, 0x0000 }, /* R227 */ | ||
333 | { 0x0000, 0x0000 }, /* R228 */ | ||
334 | { 0x0000, 0x0000 }, /* R229 */ | ||
335 | { 0x0000, 0x0000 }, /* R230 */ | ||
336 | { 0x0000, 0x0000 }, /* R231 */ | ||
337 | { 0x0000, 0x0000 }, /* R232 */ | ||
338 | { 0x0000, 0x0000 }, /* R233 */ | ||
339 | { 0x0000, 0x0000 }, /* R234 */ | ||
340 | { 0x0000, 0x0000 }, /* R235 */ | ||
341 | { 0x0000, 0x0000 }, /* R236 */ | ||
342 | { 0x0000, 0x0000 }, /* R237 */ | ||
343 | { 0x0000, 0x0000 }, /* R238 */ | ||
344 | { 0x0000, 0x0000 }, /* R239 */ | ||
345 | { 0x0000, 0x0000 }, /* R240 */ | ||
346 | { 0x0000, 0x0000 }, /* R241 */ | ||
347 | { 0x0000, 0x0000 }, /* R242 */ | ||
348 | { 0x0000, 0x0000 }, /* R243 */ | ||
349 | { 0x0000, 0x0000 }, /* R244 */ | ||
350 | { 0x0000, 0x0000 }, /* R245 */ | ||
351 | { 0x0000, 0x0000 }, /* R246 */ | ||
352 | { 0x0000, 0x0000 }, /* R247 */ | ||
353 | { 0x0000, 0x0000 }, /* R248 */ | ||
354 | { 0x0000, 0x0000 }, /* R249 */ | ||
355 | { 0x0000, 0x0000 }, /* R250 */ | ||
356 | { 0x0000, 0x0000 }, /* R251 */ | ||
357 | { 0x0000, 0x0000 }, /* R252 */ | ||
358 | { 0x0000, 0x0000 }, /* R253 */ | ||
359 | { 0x0000, 0x0000 }, /* R254 */ | ||
360 | { 0x0000, 0x0000 }, /* R255 */ | ||
361 | { 0x000F, 0x0000 }, /* R256 - Chip Revision */ | ||
362 | { 0x0074, 0x0074 }, /* R257 - Control Interface */ | ||
363 | { 0x0000, 0x0000 }, /* R258 */ | ||
364 | { 0x0000, 0x0000 }, /* R259 */ | ||
365 | { 0x0000, 0x0000 }, /* R260 */ | ||
366 | { 0x0000, 0x0000 }, /* R261 */ | ||
367 | { 0x0000, 0x0000 }, /* R262 */ | ||
368 | { 0x0000, 0x0000 }, /* R263 */ | ||
369 | { 0x0000, 0x0000 }, /* R264 */ | ||
370 | { 0x0000, 0x0000 }, /* R265 */ | ||
371 | { 0x0000, 0x0000 }, /* R266 */ | ||
372 | { 0x0000, 0x0000 }, /* R267 */ | ||
373 | { 0x0000, 0x0000 }, /* R268 */ | ||
374 | { 0x0000, 0x0000 }, /* R269 */ | ||
375 | { 0x0000, 0x0000 }, /* R270 */ | ||
376 | { 0x0000, 0x0000 }, /* R271 */ | ||
377 | { 0x807F, 0x837F }, /* R272 - Write Sequencer Ctrl (1) */ | ||
378 | { 0x017F, 0x0000 }, /* R273 - Write Sequencer Ctrl (2) */ | ||
379 | { 0x0000, 0x0000 }, /* R274 */ | ||
380 | { 0x0000, 0x0000 }, /* R275 */ | ||
381 | { 0x0000, 0x0000 }, /* R276 */ | ||
382 | { 0x0000, 0x0000 }, /* R277 */ | ||
383 | { 0x0000, 0x0000 }, /* R278 */ | ||
384 | { 0x0000, 0x0000 }, /* R279 */ | ||
385 | { 0x0000, 0x0000 }, /* R280 */ | ||
386 | { 0x0000, 0x0000 }, /* R281 */ | ||
387 | { 0x0000, 0x0000 }, /* R282 */ | ||
388 | { 0x0000, 0x0000 }, /* R283 */ | ||
389 | { 0x0000, 0x0000 }, /* R284 */ | ||
390 | { 0x0000, 0x0000 }, /* R285 */ | ||
391 | { 0x0000, 0x0000 }, /* R286 */ | ||
392 | { 0x0000, 0x0000 }, /* R287 */ | ||
393 | { 0x0000, 0x0000 }, /* R288 */ | ||
394 | { 0x0000, 0x0000 }, /* R289 */ | ||
395 | { 0x0000, 0x0000 }, /* R290 */ | ||
396 | { 0x0000, 0x0000 }, /* R291 */ | ||
397 | { 0x0000, 0x0000 }, /* R292 */ | ||
398 | { 0x0000, 0x0000 }, /* R293 */ | ||
399 | { 0x0000, 0x0000 }, /* R294 */ | ||
400 | { 0x0000, 0x0000 }, /* R295 */ | ||
401 | { 0x0000, 0x0000 }, /* R296 */ | ||
402 | { 0x0000, 0x0000 }, /* R297 */ | ||
403 | { 0x0000, 0x0000 }, /* R298 */ | ||
404 | { 0x0000, 0x0000 }, /* R299 */ | ||
405 | { 0x0000, 0x0000 }, /* R300 */ | ||
406 | { 0x0000, 0x0000 }, /* R301 */ | ||
407 | { 0x0000, 0x0000 }, /* R302 */ | ||
408 | { 0x0000, 0x0000 }, /* R303 */ | ||
409 | { 0x0000, 0x0000 }, /* R304 */ | ||
410 | { 0x0000, 0x0000 }, /* R305 */ | ||
411 | { 0x0000, 0x0000 }, /* R306 */ | ||
412 | { 0x0000, 0x0000 }, /* R307 */ | ||
413 | { 0x0000, 0x0000 }, /* R308 */ | ||
414 | { 0x0000, 0x0000 }, /* R309 */ | ||
415 | { 0x0000, 0x0000 }, /* R310 */ | ||
416 | { 0x0000, 0x0000 }, /* R311 */ | ||
417 | { 0x0000, 0x0000 }, /* R312 */ | ||
418 | { 0x0000, 0x0000 }, /* R313 */ | ||
419 | { 0x0000, 0x0000 }, /* R314 */ | ||
420 | { 0x0000, 0x0000 }, /* R315 */ | ||
421 | { 0x0000, 0x0000 }, /* R316 */ | ||
422 | { 0x0000, 0x0000 }, /* R317 */ | ||
423 | { 0x0000, 0x0000 }, /* R318 */ | ||
424 | { 0x0000, 0x0000 }, /* R319 */ | ||
425 | { 0x0000, 0x0000 }, /* R320 */ | ||
426 | { 0x0000, 0x0000 }, /* R321 */ | ||
427 | { 0x0000, 0x0000 }, /* R322 */ | ||
428 | { 0x0000, 0x0000 }, /* R323 */ | ||
429 | { 0x0000, 0x0000 }, /* R324 */ | ||
430 | { 0x0000, 0x0000 }, /* R325 */ | ||
431 | { 0x0000, 0x0000 }, /* R326 */ | ||
432 | { 0x0000, 0x0000 }, /* R327 */ | ||
433 | { 0x0000, 0x0000 }, /* R328 */ | ||
434 | { 0x0000, 0x0000 }, /* R329 */ | ||
435 | { 0x0000, 0x0000 }, /* R330 */ | ||
436 | { 0x0000, 0x0000 }, /* R331 */ | ||
437 | { 0x0000, 0x0000 }, /* R332 */ | ||
438 | { 0x0000, 0x0000 }, /* R333 */ | ||
439 | { 0x0000, 0x0000 }, /* R334 */ | ||
440 | { 0x0000, 0x0000 }, /* R335 */ | ||
441 | { 0x0000, 0x0000 }, /* R336 */ | ||
442 | { 0x0000, 0x0000 }, /* R337 */ | ||
443 | { 0x0000, 0x0000 }, /* R338 */ | ||
444 | { 0x0000, 0x0000 }, /* R339 */ | ||
445 | { 0x0000, 0x0000 }, /* R340 */ | ||
446 | { 0x0000, 0x0000 }, /* R341 */ | ||
447 | { 0x0000, 0x0000 }, /* R342 */ | ||
448 | { 0x0000, 0x0000 }, /* R343 */ | ||
449 | { 0x0000, 0x0000 }, /* R344 */ | ||
450 | { 0x0000, 0x0000 }, /* R345 */ | ||
451 | { 0x0000, 0x0000 }, /* R346 */ | ||
452 | { 0x0000, 0x0000 }, /* R347 */ | ||
453 | { 0x0000, 0x0000 }, /* R348 */ | ||
454 | { 0x0000, 0x0000 }, /* R349 */ | ||
455 | { 0x0000, 0x0000 }, /* R350 */ | ||
456 | { 0x0000, 0x0000 }, /* R351 */ | ||
457 | { 0x0000, 0x0000 }, /* R352 */ | ||
458 | { 0x0000, 0x0000 }, /* R353 */ | ||
459 | { 0x0000, 0x0000 }, /* R354 */ | ||
460 | { 0x0000, 0x0000 }, /* R355 */ | ||
461 | { 0x0000, 0x0000 }, /* R356 */ | ||
462 | { 0x0000, 0x0000 }, /* R357 */ | ||
463 | { 0x0000, 0x0000 }, /* R358 */ | ||
464 | { 0x0000, 0x0000 }, /* R359 */ | ||
465 | { 0x0000, 0x0000 }, /* R360 */ | ||
466 | { 0x0000, 0x0000 }, /* R361 */ | ||
467 | { 0x0000, 0x0000 }, /* R362 */ | ||
468 | { 0x0000, 0x0000 }, /* R363 */ | ||
469 | { 0x0000, 0x0000 }, /* R364 */ | ||
470 | { 0x0000, 0x0000 }, /* R365 */ | ||
471 | { 0x0000, 0x0000 }, /* R366 */ | ||
472 | { 0x0000, 0x0000 }, /* R367 */ | ||
473 | { 0x0000, 0x0000 }, /* R368 */ | ||
474 | { 0x0000, 0x0000 }, /* R369 */ | ||
475 | { 0x0000, 0x0000 }, /* R370 */ | ||
476 | { 0x0000, 0x0000 }, /* R371 */ | ||
477 | { 0x0000, 0x0000 }, /* R372 */ | ||
478 | { 0x0000, 0x0000 }, /* R373 */ | ||
479 | { 0x0000, 0x0000 }, /* R374 */ | ||
480 | { 0x0000, 0x0000 }, /* R375 */ | ||
481 | { 0x0000, 0x0000 }, /* R376 */ | ||
482 | { 0x0000, 0x0000 }, /* R377 */ | ||
483 | { 0x0000, 0x0000 }, /* R378 */ | ||
484 | { 0x0000, 0x0000 }, /* R379 */ | ||
485 | { 0x0000, 0x0000 }, /* R380 */ | ||
486 | { 0x0000, 0x0000 }, /* R381 */ | ||
487 | { 0x0000, 0x0000 }, /* R382 */ | ||
488 | { 0x0000, 0x0000 }, /* R383 */ | ||
489 | { 0x0000, 0x0000 }, /* R384 */ | ||
490 | { 0x0000, 0x0000 }, /* R385 */ | ||
491 | { 0x0000, 0x0000 }, /* R386 */ | ||
492 | { 0x0000, 0x0000 }, /* R387 */ | ||
493 | { 0x0000, 0x0000 }, /* R388 */ | ||
494 | { 0x0000, 0x0000 }, /* R389 */ | ||
495 | { 0x0000, 0x0000 }, /* R390 */ | ||
496 | { 0x0000, 0x0000 }, /* R391 */ | ||
497 | { 0x0000, 0x0000 }, /* R392 */ | ||
498 | { 0x0000, 0x0000 }, /* R393 */ | ||
499 | { 0x0000, 0x0000 }, /* R394 */ | ||
500 | { 0x0000, 0x0000 }, /* R395 */ | ||
501 | { 0x0000, 0x0000 }, /* R396 */ | ||
502 | { 0x0000, 0x0000 }, /* R397 */ | ||
503 | { 0x0000, 0x0000 }, /* R398 */ | ||
504 | { 0x0000, 0x0000 }, /* R399 */ | ||
505 | { 0x0000, 0x0000 }, /* R400 */ | ||
506 | { 0x0000, 0x0000 }, /* R401 */ | ||
507 | { 0x0000, 0x0000 }, /* R402 */ | ||
508 | { 0x0000, 0x0000 }, /* R403 */ | ||
509 | { 0x0000, 0x0000 }, /* R404 */ | ||
510 | { 0x0000, 0x0000 }, /* R405 */ | ||
511 | { 0x0000, 0x0000 }, /* R406 */ | ||
512 | { 0x0000, 0x0000 }, /* R407 */ | ||
513 | { 0x0000, 0x0000 }, /* R408 */ | ||
514 | { 0x0000, 0x0000 }, /* R409 */ | ||
515 | { 0x0000, 0x0000 }, /* R410 */ | ||
516 | { 0x0000, 0x0000 }, /* R411 */ | ||
517 | { 0x0000, 0x0000 }, /* R412 */ | ||
518 | { 0x0000, 0x0000 }, /* R413 */ | ||
519 | { 0x0000, 0x0000 }, /* R414 */ | ||
520 | { 0x0000, 0x0000 }, /* R415 */ | ||
521 | { 0x0000, 0x0000 }, /* R416 */ | ||
522 | { 0x0000, 0x0000 }, /* R417 */ | ||
523 | { 0x0000, 0x0000 }, /* R418 */ | ||
524 | { 0x0000, 0x0000 }, /* R419 */ | ||
525 | { 0x0000, 0x0000 }, /* R420 */ | ||
526 | { 0x0000, 0x0000 }, /* R421 */ | ||
527 | { 0x0000, 0x0000 }, /* R422 */ | ||
528 | { 0x0000, 0x0000 }, /* R423 */ | ||
529 | { 0x0000, 0x0000 }, /* R424 */ | ||
530 | { 0x0000, 0x0000 }, /* R425 */ | ||
531 | { 0x0000, 0x0000 }, /* R426 */ | ||
532 | { 0x0000, 0x0000 }, /* R427 */ | ||
533 | { 0x0000, 0x0000 }, /* R428 */ | ||
534 | { 0x0000, 0x0000 }, /* R429 */ | ||
535 | { 0x0000, 0x0000 }, /* R430 */ | ||
536 | { 0x0000, 0x0000 }, /* R431 */ | ||
537 | { 0x0000, 0x0000 }, /* R432 */ | ||
538 | { 0x0000, 0x0000 }, /* R433 */ | ||
539 | { 0x0000, 0x0000 }, /* R434 */ | ||
540 | { 0x0000, 0x0000 }, /* R435 */ | ||
541 | { 0x0000, 0x0000 }, /* R436 */ | ||
542 | { 0x0000, 0x0000 }, /* R437 */ | ||
543 | { 0x0000, 0x0000 }, /* R438 */ | ||
544 | { 0x0000, 0x0000 }, /* R439 */ | ||
545 | { 0x0000, 0x0000 }, /* R440 */ | ||
546 | { 0x0000, 0x0000 }, /* R441 */ | ||
547 | { 0x0000, 0x0000 }, /* R442 */ | ||
548 | { 0x0000, 0x0000 }, /* R443 */ | ||
549 | { 0x0000, 0x0000 }, /* R444 */ | ||
550 | { 0x0000, 0x0000 }, /* R445 */ | ||
551 | { 0x0000, 0x0000 }, /* R446 */ | ||
552 | { 0x0000, 0x0000 }, /* R447 */ | ||
553 | { 0x0000, 0x0000 }, /* R448 */ | ||
554 | { 0x0000, 0x0000 }, /* R449 */ | ||
555 | { 0x0000, 0x0000 }, /* R450 */ | ||
556 | { 0x0000, 0x0000 }, /* R451 */ | ||
557 | { 0x0000, 0x0000 }, /* R452 */ | ||
558 | { 0x0000, 0x0000 }, /* R453 */ | ||
559 | { 0x0000, 0x0000 }, /* R454 */ | ||
560 | { 0x0000, 0x0000 }, /* R455 */ | ||
561 | { 0x0000, 0x0000 }, /* R456 */ | ||
562 | { 0x0000, 0x0000 }, /* R457 */ | ||
563 | { 0x0000, 0x0000 }, /* R458 */ | ||
564 | { 0x0000, 0x0000 }, /* R459 */ | ||
565 | { 0x0000, 0x0000 }, /* R460 */ | ||
566 | { 0x0000, 0x0000 }, /* R461 */ | ||
567 | { 0x0000, 0x0000 }, /* R462 */ | ||
568 | { 0x0000, 0x0000 }, /* R463 */ | ||
569 | { 0x0000, 0x0000 }, /* R464 */ | ||
570 | { 0x0000, 0x0000 }, /* R465 */ | ||
571 | { 0x0000, 0x0000 }, /* R466 */ | ||
572 | { 0x0000, 0x0000 }, /* R467 */ | ||
573 | { 0x0000, 0x0000 }, /* R468 */ | ||
574 | { 0x0000, 0x0000 }, /* R469 */ | ||
575 | { 0x0000, 0x0000 }, /* R470 */ | ||
576 | { 0x0000, 0x0000 }, /* R471 */ | ||
577 | { 0x0000, 0x0000 }, /* R472 */ | ||
578 | { 0x0000, 0x0000 }, /* R473 */ | ||
579 | { 0x0000, 0x0000 }, /* R474 */ | ||
580 | { 0x0000, 0x0000 }, /* R475 */ | ||
581 | { 0x0000, 0x0000 }, /* R476 */ | ||
582 | { 0x0000, 0x0000 }, /* R477 */ | ||
583 | { 0x0000, 0x0000 }, /* R478 */ | ||
584 | { 0x0000, 0x0000 }, /* R479 */ | ||
585 | { 0x0000, 0x0000 }, /* R480 */ | ||
586 | { 0x0000, 0x0000 }, /* R481 */ | ||
587 | { 0x0000, 0x0000 }, /* R482 */ | ||
588 | { 0x0000, 0x0000 }, /* R483 */ | ||
589 | { 0x0000, 0x0000 }, /* R484 */ | ||
590 | { 0x0000, 0x0000 }, /* R485 */ | ||
591 | { 0x0000, 0x0000 }, /* R486 */ | ||
592 | { 0x0000, 0x0000 }, /* R487 */ | ||
593 | { 0x0000, 0x0000 }, /* R488 */ | ||
594 | { 0x0000, 0x0000 }, /* R489 */ | ||
595 | { 0x0000, 0x0000 }, /* R490 */ | ||
596 | { 0x0000, 0x0000 }, /* R491 */ | ||
597 | { 0x0000, 0x0000 }, /* R492 */ | ||
598 | { 0x0000, 0x0000 }, /* R493 */ | ||
599 | { 0x0000, 0x0000 }, /* R494 */ | ||
600 | { 0x0000, 0x0000 }, /* R495 */ | ||
601 | { 0x0000, 0x0000 }, /* R496 */ | ||
602 | { 0x0000, 0x0000 }, /* R497 */ | ||
603 | { 0x0000, 0x0000 }, /* R498 */ | ||
604 | { 0x0000, 0x0000 }, /* R499 */ | ||
605 | { 0x0000, 0x0000 }, /* R500 */ | ||
606 | { 0x0000, 0x0000 }, /* R501 */ | ||
607 | { 0x0000, 0x0000 }, /* R502 */ | ||
608 | { 0x0000, 0x0000 }, /* R503 */ | ||
609 | { 0x0000, 0x0000 }, /* R504 */ | ||
610 | { 0x0000, 0x0000 }, /* R505 */ | ||
611 | { 0x0000, 0x0000 }, /* R506 */ | ||
612 | { 0x0000, 0x0000 }, /* R507 */ | ||
613 | { 0x0000, 0x0000 }, /* R508 */ | ||
614 | { 0x0000, 0x0000 }, /* R509 */ | ||
615 | { 0x0000, 0x0000 }, /* R510 */ | ||
616 | { 0x0000, 0x0000 }, /* R511 */ | ||
617 | { 0x001F, 0x001F }, /* R512 - AIF1 Clocking (1) */ | ||
618 | { 0x003F, 0x003F }, /* R513 - AIF1 Clocking (2) */ | ||
619 | { 0x0000, 0x0000 }, /* R514 */ | ||
620 | { 0x0000, 0x0000 }, /* R515 */ | ||
621 | { 0x001F, 0x001F }, /* R516 - AIF2 Clocking (1) */ | ||
622 | { 0x003F, 0x003F }, /* R517 - AIF2 Clocking (2) */ | ||
623 | { 0x0000, 0x0000 }, /* R518 */ | ||
624 | { 0x0000, 0x0000 }, /* R519 */ | ||
625 | { 0x001F, 0x001F }, /* R520 - Clocking (1) */ | ||
626 | { 0x0777, 0x0777 }, /* R521 - Clocking (2) */ | ||
627 | { 0x0000, 0x0000 }, /* R522 */ | ||
628 | { 0x0000, 0x0000 }, /* R523 */ | ||
629 | { 0x0000, 0x0000 }, /* R524 */ | ||
630 | { 0x0000, 0x0000 }, /* R525 */ | ||
631 | { 0x0000, 0x0000 }, /* R526 */ | ||
632 | { 0x0000, 0x0000 }, /* R527 */ | ||
633 | { 0x00FF, 0x00FF }, /* R528 - AIF1 Rate */ | ||
634 | { 0x00FF, 0x00FF }, /* R529 - AIF2 Rate */ | ||
635 | { 0x000F, 0x0000 }, /* R530 - Rate Status */ | ||
636 | { 0x0000, 0x0000 }, /* R531 */ | ||
637 | { 0x0000, 0x0000 }, /* R532 */ | ||
638 | { 0x0000, 0x0000 }, /* R533 */ | ||
639 | { 0x0000, 0x0000 }, /* R534 */ | ||
640 | { 0x0000, 0x0000 }, /* R535 */ | ||
641 | { 0x0000, 0x0000 }, /* R536 */ | ||
642 | { 0x0000, 0x0000 }, /* R537 */ | ||
643 | { 0x0000, 0x0000 }, /* R538 */ | ||
644 | { 0x0000, 0x0000 }, /* R539 */ | ||
645 | { 0x0000, 0x0000 }, /* R540 */ | ||
646 | { 0x0000, 0x0000 }, /* R541 */ | ||
647 | { 0x0000, 0x0000 }, /* R542 */ | ||
648 | { 0x0000, 0x0000 }, /* R543 */ | ||
649 | { 0x0007, 0x0007 }, /* R544 - FLL1 Control (1) */ | ||
650 | { 0x3F77, 0x3F77 }, /* R545 - FLL1 Control (2) */ | ||
651 | { 0xFFFF, 0xFFFF }, /* R546 - FLL1 Control (3) */ | ||
652 | { 0x7FEF, 0x7FEF }, /* R547 - FLL1 Control (4) */ | ||
653 | { 0x1FDB, 0x1FDB }, /* R548 - FLL1 Control (5) */ | ||
654 | { 0x0000, 0x0000 }, /* R549 */ | ||
655 | { 0x0000, 0x0000 }, /* R550 */ | ||
656 | { 0x0000, 0x0000 }, /* R551 */ | ||
657 | { 0x0000, 0x0000 }, /* R552 */ | ||
658 | { 0x0000, 0x0000 }, /* R553 */ | ||
659 | { 0x0000, 0x0000 }, /* R554 */ | ||
660 | { 0x0000, 0x0000 }, /* R555 */ | ||
661 | { 0x0000, 0x0000 }, /* R556 */ | ||
662 | { 0x0000, 0x0000 }, /* R557 */ | ||
663 | { 0x0000, 0x0000 }, /* R558 */ | ||
664 | { 0x0000, 0x0000 }, /* R559 */ | ||
665 | { 0x0000, 0x0000 }, /* R560 */ | ||
666 | { 0x0000, 0x0000 }, /* R561 */ | ||
667 | { 0x0000, 0x0000 }, /* R562 */ | ||
668 | { 0x0000, 0x0000 }, /* R563 */ | ||
669 | { 0x0000, 0x0000 }, /* R564 */ | ||
670 | { 0x0000, 0x0000 }, /* R565 */ | ||
671 | { 0x0000, 0x0000 }, /* R566 */ | ||
672 | { 0x0000, 0x0000 }, /* R567 */ | ||
673 | { 0x0000, 0x0000 }, /* R568 */ | ||
674 | { 0x0000, 0x0000 }, /* R569 */ | ||
675 | { 0x0000, 0x0000 }, /* R570 */ | ||
676 | { 0x0000, 0x0000 }, /* R571 */ | ||
677 | { 0x0000, 0x0000 }, /* R572 */ | ||
678 | { 0x0000, 0x0000 }, /* R573 */ | ||
679 | { 0x0000, 0x0000 }, /* R574 */ | ||
680 | { 0x0000, 0x0000 }, /* R575 */ | ||
681 | { 0x0007, 0x0007 }, /* R576 - FLL2 Control (1) */ | ||
682 | { 0x3F77, 0x3F77 }, /* R577 - FLL2 Control (2) */ | ||
683 | { 0xFFFF, 0xFFFF }, /* R578 - FLL2 Control (3) */ | ||
684 | { 0x7FEF, 0x7FEF }, /* R579 - FLL2 Control (4) */ | ||
685 | { 0x1FDB, 0x1FDB }, /* R580 - FLL2 Control (5) */ | ||
686 | { 0x0000, 0x0000 }, /* R581 */ | ||
687 | { 0x0000, 0x0000 }, /* R582 */ | ||
688 | { 0x0000, 0x0000 }, /* R583 */ | ||
689 | { 0x0000, 0x0000 }, /* R584 */ | ||
690 | { 0x0000, 0x0000 }, /* R585 */ | ||
691 | { 0x0000, 0x0000 }, /* R586 */ | ||
692 | { 0x0000, 0x0000 }, /* R587 */ | ||
693 | { 0x0000, 0x0000 }, /* R588 */ | ||
694 | { 0x0000, 0x0000 }, /* R589 */ | ||
695 | { 0x0000, 0x0000 }, /* R590 */ | ||
696 | { 0x0000, 0x0000 }, /* R591 */ | ||
697 | { 0x0000, 0x0000 }, /* R592 */ | ||
698 | { 0x0000, 0x0000 }, /* R593 */ | ||
699 | { 0x0000, 0x0000 }, /* R594 */ | ||
700 | { 0x0000, 0x0000 }, /* R595 */ | ||
701 | { 0x0000, 0x0000 }, /* R596 */ | ||
702 | { 0x0000, 0x0000 }, /* R597 */ | ||
703 | { 0x0000, 0x0000 }, /* R598 */ | ||
704 | { 0x0000, 0x0000 }, /* R599 */ | ||
705 | { 0x0000, 0x0000 }, /* R600 */ | ||
706 | { 0x0000, 0x0000 }, /* R601 */ | ||
707 | { 0x0000, 0x0000 }, /* R602 */ | ||
708 | { 0x0000, 0x0000 }, /* R603 */ | ||
709 | { 0x0000, 0x0000 }, /* R604 */ | ||
710 | { 0x0000, 0x0000 }, /* R605 */ | ||
711 | { 0x0000, 0x0000 }, /* R606 */ | ||
712 | { 0x0000, 0x0000 }, /* R607 */ | ||
713 | { 0x0000, 0x0000 }, /* R608 */ | ||
714 | { 0x0000, 0x0000 }, /* R609 */ | ||
715 | { 0x0000, 0x0000 }, /* R610 */ | ||
716 | { 0x0000, 0x0000 }, /* R611 */ | ||
717 | { 0x0000, 0x0000 }, /* R612 */ | ||
718 | { 0x0000, 0x0000 }, /* R613 */ | ||
719 | { 0x0000, 0x0000 }, /* R614 */ | ||
720 | { 0x0000, 0x0000 }, /* R615 */ | ||
721 | { 0x0000, 0x0000 }, /* R616 */ | ||
722 | { 0x0000, 0x0000 }, /* R617 */ | ||
723 | { 0x0000, 0x0000 }, /* R618 */ | ||
724 | { 0x0000, 0x0000 }, /* R619 */ | ||
725 | { 0x0000, 0x0000 }, /* R620 */ | ||
726 | { 0x0000, 0x0000 }, /* R621 */ | ||
727 | { 0x0000, 0x0000 }, /* R622 */ | ||
728 | { 0x0000, 0x0000 }, /* R623 */ | ||
729 | { 0x0000, 0x0000 }, /* R624 */ | ||
730 | { 0x0000, 0x0000 }, /* R625 */ | ||
731 | { 0x0000, 0x0000 }, /* R626 */ | ||
732 | { 0x0000, 0x0000 }, /* R627 */ | ||
733 | { 0x0000, 0x0000 }, /* R628 */ | ||
734 | { 0x0000, 0x0000 }, /* R629 */ | ||
735 | { 0x0000, 0x0000 }, /* R630 */ | ||
736 | { 0x0000, 0x0000 }, /* R631 */ | ||
737 | { 0x0000, 0x0000 }, /* R632 */ | ||
738 | { 0x0000, 0x0000 }, /* R633 */ | ||
739 | { 0x0000, 0x0000 }, /* R634 */ | ||
740 | { 0x0000, 0x0000 }, /* R635 */ | ||
741 | { 0x0000, 0x0000 }, /* R636 */ | ||
742 | { 0x0000, 0x0000 }, /* R637 */ | ||
743 | { 0x0000, 0x0000 }, /* R638 */ | ||
744 | { 0x0000, 0x0000 }, /* R639 */ | ||
745 | { 0x0000, 0x0000 }, /* R640 */ | ||
746 | { 0x0000, 0x0000 }, /* R641 */ | ||
747 | { 0x0000, 0x0000 }, /* R642 */ | ||
748 | { 0x0000, 0x0000 }, /* R643 */ | ||
749 | { 0x0000, 0x0000 }, /* R644 */ | ||
750 | { 0x0000, 0x0000 }, /* R645 */ | ||
751 | { 0x0000, 0x0000 }, /* R646 */ | ||
752 | { 0x0000, 0x0000 }, /* R647 */ | ||
753 | { 0x0000, 0x0000 }, /* R648 */ | ||
754 | { 0x0000, 0x0000 }, /* R649 */ | ||
755 | { 0x0000, 0x0000 }, /* R650 */ | ||
756 | { 0x0000, 0x0000 }, /* R651 */ | ||
757 | { 0x0000, 0x0000 }, /* R652 */ | ||
758 | { 0x0000, 0x0000 }, /* R653 */ | ||
759 | { 0x0000, 0x0000 }, /* R654 */ | ||
760 | { 0x0000, 0x0000 }, /* R655 */ | ||
761 | { 0x0000, 0x0000 }, /* R656 */ | ||
762 | { 0x0000, 0x0000 }, /* R657 */ | ||
763 | { 0x0000, 0x0000 }, /* R658 */ | ||
764 | { 0x0000, 0x0000 }, /* R659 */ | ||
765 | { 0x0000, 0x0000 }, /* R660 */ | ||
766 | { 0x0000, 0x0000 }, /* R661 */ | ||
767 | { 0x0000, 0x0000 }, /* R662 */ | ||
768 | { 0x0000, 0x0000 }, /* R663 */ | ||
769 | { 0x0000, 0x0000 }, /* R664 */ | ||
770 | { 0x0000, 0x0000 }, /* R665 */ | ||
771 | { 0x0000, 0x0000 }, /* R666 */ | ||
772 | { 0x0000, 0x0000 }, /* R667 */ | ||
773 | { 0x0000, 0x0000 }, /* R668 */ | ||
774 | { 0x0000, 0x0000 }, /* R669 */ | ||
775 | { 0x0000, 0x0000 }, /* R670 */ | ||
776 | { 0x0000, 0x0000 }, /* R671 */ | ||
777 | { 0x0000, 0x0000 }, /* R672 */ | ||
778 | { 0x0000, 0x0000 }, /* R673 */ | ||
779 | { 0x0000, 0x0000 }, /* R674 */ | ||
780 | { 0x0000, 0x0000 }, /* R675 */ | ||
781 | { 0x0000, 0x0000 }, /* R676 */ | ||
782 | { 0x0000, 0x0000 }, /* R677 */ | ||
783 | { 0x0000, 0x0000 }, /* R678 */ | ||
784 | { 0x0000, 0x0000 }, /* R679 */ | ||
785 | { 0x0000, 0x0000 }, /* R680 */ | ||
786 | { 0x0000, 0x0000 }, /* R681 */ | ||
787 | { 0x0000, 0x0000 }, /* R682 */ | ||
788 | { 0x0000, 0x0000 }, /* R683 */ | ||
789 | { 0x0000, 0x0000 }, /* R684 */ | ||
790 | { 0x0000, 0x0000 }, /* R685 */ | ||
791 | { 0x0000, 0x0000 }, /* R686 */ | ||
792 | { 0x0000, 0x0000 }, /* R687 */ | ||
793 | { 0x0000, 0x0000 }, /* R688 */ | ||
794 | { 0x0000, 0x0000 }, /* R689 */ | ||
795 | { 0x0000, 0x0000 }, /* R690 */ | ||
796 | { 0x0000, 0x0000 }, /* R691 */ | ||
797 | { 0x0000, 0x0000 }, /* R692 */ | ||
798 | { 0x0000, 0x0000 }, /* R693 */ | ||
799 | { 0x0000, 0x0000 }, /* R694 */ | ||
800 | { 0x0000, 0x0000 }, /* R695 */ | ||
801 | { 0x0000, 0x0000 }, /* R696 */ | ||
802 | { 0x0000, 0x0000 }, /* R697 */ | ||
803 | { 0x0000, 0x0000 }, /* R698 */ | ||
804 | { 0x0000, 0x0000 }, /* R699 */ | ||
805 | { 0x0000, 0x0000 }, /* R700 */ | ||
806 | { 0x0000, 0x0000 }, /* R701 */ | ||
807 | { 0x0000, 0x0000 }, /* R702 */ | ||
808 | { 0x0000, 0x0000 }, /* R703 */ | ||
809 | { 0x0000, 0x0000 }, /* R704 */ | ||
810 | { 0x0000, 0x0000 }, /* R705 */ | ||
811 | { 0x0000, 0x0000 }, /* R706 */ | ||
812 | { 0x0000, 0x0000 }, /* R707 */ | ||
813 | { 0x0000, 0x0000 }, /* R708 */ | ||
814 | { 0x0000, 0x0000 }, /* R709 */ | ||
815 | { 0x0000, 0x0000 }, /* R710 */ | ||
816 | { 0x0000, 0x0000 }, /* R711 */ | ||
817 | { 0x0000, 0x0000 }, /* R712 */ | ||
818 | { 0x0000, 0x0000 }, /* R713 */ | ||
819 | { 0x0000, 0x0000 }, /* R714 */ | ||
820 | { 0x0000, 0x0000 }, /* R715 */ | ||
821 | { 0x0000, 0x0000 }, /* R716 */ | ||
822 | { 0x0000, 0x0000 }, /* R717 */ | ||
823 | { 0x0000, 0x0000 }, /* R718 */ | ||
824 | { 0x0000, 0x0000 }, /* R719 */ | ||
825 | { 0x0000, 0x0000 }, /* R720 */ | ||
826 | { 0x0000, 0x0000 }, /* R721 */ | ||
827 | { 0x0000, 0x0000 }, /* R722 */ | ||
828 | { 0x0000, 0x0000 }, /* R723 */ | ||
829 | { 0x0000, 0x0000 }, /* R724 */ | ||
830 | { 0x0000, 0x0000 }, /* R725 */ | ||
831 | { 0x0000, 0x0000 }, /* R726 */ | ||
832 | { 0x0000, 0x0000 }, /* R727 */ | ||
833 | { 0x0000, 0x0000 }, /* R728 */ | ||
834 | { 0x0000, 0x0000 }, /* R729 */ | ||
835 | { 0x0000, 0x0000 }, /* R730 */ | ||
836 | { 0x0000, 0x0000 }, /* R731 */ | ||
837 | { 0x0000, 0x0000 }, /* R732 */ | ||
838 | { 0x0000, 0x0000 }, /* R733 */ | ||
839 | { 0x0000, 0x0000 }, /* R734 */ | ||
840 | { 0x0000, 0x0000 }, /* R735 */ | ||
841 | { 0x0000, 0x0000 }, /* R736 */ | ||
842 | { 0x0000, 0x0000 }, /* R737 */ | ||
843 | { 0x0000, 0x0000 }, /* R738 */ | ||
844 | { 0x0000, 0x0000 }, /* R739 */ | ||
845 | { 0x0000, 0x0000 }, /* R740 */ | ||
846 | { 0x0000, 0x0000 }, /* R741 */ | ||
847 | { 0x0000, 0x0000 }, /* R742 */ | ||
848 | { 0x0000, 0x0000 }, /* R743 */ | ||
849 | { 0x0000, 0x0000 }, /* R744 */ | ||
850 | { 0x0000, 0x0000 }, /* R745 */ | ||
851 | { 0x0000, 0x0000 }, /* R746 */ | ||
852 | { 0x0000, 0x0000 }, /* R747 */ | ||
853 | { 0x0000, 0x0000 }, /* R748 */ | ||
854 | { 0x0000, 0x0000 }, /* R749 */ | ||
855 | { 0x0000, 0x0000 }, /* R750 */ | ||
856 | { 0x0000, 0x0000 }, /* R751 */ | ||
857 | { 0x0000, 0x0000 }, /* R752 */ | ||
858 | { 0x0000, 0x0000 }, /* R753 */ | ||
859 | { 0x0000, 0x0000 }, /* R754 */ | ||
860 | { 0x0000, 0x0000 }, /* R755 */ | ||
861 | { 0x0000, 0x0000 }, /* R756 */ | ||
862 | { 0x0000, 0x0000 }, /* R757 */ | ||
863 | { 0x0000, 0x0000 }, /* R758 */ | ||
864 | { 0x0000, 0x0000 }, /* R759 */ | ||
865 | { 0x0000, 0x0000 }, /* R760 */ | ||
866 | { 0x0000, 0x0000 }, /* R761 */ | ||
867 | { 0x0000, 0x0000 }, /* R762 */ | ||
868 | { 0x0000, 0x0000 }, /* R763 */ | ||
869 | { 0x0000, 0x0000 }, /* R764 */ | ||
870 | { 0x0000, 0x0000 }, /* R765 */ | ||
871 | { 0x0000, 0x0000 }, /* R766 */ | ||
872 | { 0x0000, 0x0000 }, /* R767 */ | ||
873 | { 0xE1F8, 0xE1F8 }, /* R768 - AIF1 Control (1) */ | ||
874 | { 0xCD1F, 0xCD1F }, /* R769 - AIF1 Control (2) */ | ||
875 | { 0xF000, 0xF000 }, /* R770 - AIF1 Master/Slave */ | ||
876 | { 0x01F0, 0x01F0 }, /* R771 - AIF1 BCLK */ | ||
877 | { 0x0FFF, 0x0FFF }, /* R772 - AIF1ADC LRCLK */ | ||
878 | { 0x0FFF, 0x0FFF }, /* R773 - AIF1DAC LRCLK */ | ||
879 | { 0x0003, 0x0003 }, /* R774 - AIF1DAC Data */ | ||
880 | { 0x0003, 0x0003 }, /* R775 - AIF1ADC Data */ | ||
881 | { 0x0000, 0x0000 }, /* R776 */ | ||
882 | { 0x0000, 0x0000 }, /* R777 */ | ||
883 | { 0x0000, 0x0000 }, /* R778 */ | ||
884 | { 0x0000, 0x0000 }, /* R779 */ | ||
885 | { 0x0000, 0x0000 }, /* R780 */ | ||
886 | { 0x0000, 0x0000 }, /* R781 */ | ||
887 | { 0x0000, 0x0000 }, /* R782 */ | ||
888 | { 0x0000, 0x0000 }, /* R783 */ | ||
889 | { 0xF1F8, 0xF1F8 }, /* R784 - AIF2 Control (1) */ | ||
890 | { 0xFD1F, 0xFD1F }, /* R785 - AIF2 Control (2) */ | ||
891 | { 0xF000, 0xF000 }, /* R786 - AIF2 Master/Slave */ | ||
892 | { 0x01F0, 0x01F0 }, /* R787 - AIF2 BCLK */ | ||
893 | { 0x0FFF, 0x0FFF }, /* R788 - AIF2ADC LRCLK */ | ||
894 | { 0x0FFF, 0x0FFF }, /* R789 - AIF2DAC LRCLK */ | ||
895 | { 0x0003, 0x0003 }, /* R790 - AIF2DAC Data */ | ||
896 | { 0x0003, 0x0003 }, /* R791 - AIF2ADC Data */ | ||
897 | { 0x0000, 0x0000 }, /* R792 */ | ||
898 | { 0x0000, 0x0000 }, /* R793 */ | ||
899 | { 0x0000, 0x0000 }, /* R794 */ | ||
900 | { 0x0000, 0x0000 }, /* R795 */ | ||
901 | { 0x0000, 0x0000 }, /* R796 */ | ||
902 | { 0x0000, 0x0000 }, /* R797 */ | ||
903 | { 0x0000, 0x0000 }, /* R798 */ | ||
904 | { 0x0000, 0x0000 }, /* R799 */ | ||
905 | { 0x0000, 0x0000 }, /* R800 */ | ||
906 | { 0x0000, 0x0000 }, /* R801 */ | ||
907 | { 0x0000, 0x0000 }, /* R802 */ | ||
908 | { 0x0000, 0x0000 }, /* R803 */ | ||
909 | { 0x0000, 0x0000 }, /* R804 */ | ||
910 | { 0x0000, 0x0000 }, /* R805 */ | ||
911 | { 0x0000, 0x0000 }, /* R806 */ | ||
912 | { 0x0000, 0x0000 }, /* R807 */ | ||
913 | { 0x0000, 0x0000 }, /* R808 */ | ||
914 | { 0x0000, 0x0000 }, /* R809 */ | ||
915 | { 0x0000, 0x0000 }, /* R810 */ | ||
916 | { 0x0000, 0x0000 }, /* R811 */ | ||
917 | { 0x0000, 0x0000 }, /* R812 */ | ||
918 | { 0x0000, 0x0000 }, /* R813 */ | ||
919 | { 0x0000, 0x0000 }, /* R814 */ | ||
920 | { 0x0000, 0x0000 }, /* R815 */ | ||
921 | { 0x0000, 0x0000 }, /* R816 */ | ||
922 | { 0x0000, 0x0000 }, /* R817 */ | ||
923 | { 0x0000, 0x0000 }, /* R818 */ | ||
924 | { 0x0000, 0x0000 }, /* R819 */ | ||
925 | { 0x0000, 0x0000 }, /* R820 */ | ||
926 | { 0x0000, 0x0000 }, /* R821 */ | ||
927 | { 0x0000, 0x0000 }, /* R822 */ | ||
928 | { 0x0000, 0x0000 }, /* R823 */ | ||
929 | { 0x0000, 0x0000 }, /* R824 */ | ||
930 | { 0x0000, 0x0000 }, /* R825 */ | ||
931 | { 0x0000, 0x0000 }, /* R826 */ | ||
932 | { 0x0000, 0x0000 }, /* R827 */ | ||
933 | { 0x0000, 0x0000 }, /* R828 */ | ||
934 | { 0x0000, 0x0000 }, /* R829 */ | ||
935 | { 0x0000, 0x0000 }, /* R830 */ | ||
936 | { 0x0000, 0x0000 }, /* R831 */ | ||
937 | { 0x0000, 0x0000 }, /* R832 */ | ||
938 | { 0x0000, 0x0000 }, /* R833 */ | ||
939 | { 0x0000, 0x0000 }, /* R834 */ | ||
940 | { 0x0000, 0x0000 }, /* R835 */ | ||
941 | { 0x0000, 0x0000 }, /* R836 */ | ||
942 | { 0x0000, 0x0000 }, /* R837 */ | ||
943 | { 0x0000, 0x0000 }, /* R838 */ | ||
944 | { 0x0000, 0x0000 }, /* R839 */ | ||
945 | { 0x0000, 0x0000 }, /* R840 */ | ||
946 | { 0x0000, 0x0000 }, /* R841 */ | ||
947 | { 0x0000, 0x0000 }, /* R842 */ | ||
948 | { 0x0000, 0x0000 }, /* R843 */ | ||
949 | { 0x0000, 0x0000 }, /* R844 */ | ||
950 | { 0x0000, 0x0000 }, /* R845 */ | ||
951 | { 0x0000, 0x0000 }, /* R846 */ | ||
952 | { 0x0000, 0x0000 }, /* R847 */ | ||
953 | { 0x0000, 0x0000 }, /* R848 */ | ||
954 | { 0x0000, 0x0000 }, /* R849 */ | ||
955 | { 0x0000, 0x0000 }, /* R850 */ | ||
956 | { 0x0000, 0x0000 }, /* R851 */ | ||
957 | { 0x0000, 0x0000 }, /* R852 */ | ||
958 | { 0x0000, 0x0000 }, /* R853 */ | ||
959 | { 0x0000, 0x0000 }, /* R854 */ | ||
960 | { 0x0000, 0x0000 }, /* R855 */ | ||
961 | { 0x0000, 0x0000 }, /* R856 */ | ||
962 | { 0x0000, 0x0000 }, /* R857 */ | ||
963 | { 0x0000, 0x0000 }, /* R858 */ | ||
964 | { 0x0000, 0x0000 }, /* R859 */ | ||
965 | { 0x0000, 0x0000 }, /* R860 */ | ||
966 | { 0x0000, 0x0000 }, /* R861 */ | ||
967 | { 0x0000, 0x0000 }, /* R862 */ | ||
968 | { 0x0000, 0x0000 }, /* R863 */ | ||
969 | { 0x0000, 0x0000 }, /* R864 */ | ||
970 | { 0x0000, 0x0000 }, /* R865 */ | ||
971 | { 0x0000, 0x0000 }, /* R866 */ | ||
972 | { 0x0000, 0x0000 }, /* R867 */ | ||
973 | { 0x0000, 0x0000 }, /* R868 */ | ||
974 | { 0x0000, 0x0000 }, /* R869 */ | ||
975 | { 0x0000, 0x0000 }, /* R870 */ | ||
976 | { 0x0000, 0x0000 }, /* R871 */ | ||
977 | { 0x0000, 0x0000 }, /* R872 */ | ||
978 | { 0x0000, 0x0000 }, /* R873 */ | ||
979 | { 0x0000, 0x0000 }, /* R874 */ | ||
980 | { 0x0000, 0x0000 }, /* R875 */ | ||
981 | { 0x0000, 0x0000 }, /* R876 */ | ||
982 | { 0x0000, 0x0000 }, /* R877 */ | ||
983 | { 0x0000, 0x0000 }, /* R878 */ | ||
984 | { 0x0000, 0x0000 }, /* R879 */ | ||
985 | { 0x0000, 0x0000 }, /* R880 */ | ||
986 | { 0x0000, 0x0000 }, /* R881 */ | ||
987 | { 0x0000, 0x0000 }, /* R882 */ | ||
988 | { 0x0000, 0x0000 }, /* R883 */ | ||
989 | { 0x0000, 0x0000 }, /* R884 */ | ||
990 | { 0x0000, 0x0000 }, /* R885 */ | ||
991 | { 0x0000, 0x0000 }, /* R886 */ | ||
992 | { 0x0000, 0x0000 }, /* R887 */ | ||
993 | { 0x0000, 0x0000 }, /* R888 */ | ||
994 | { 0x0000, 0x0000 }, /* R889 */ | ||
995 | { 0x0000, 0x0000 }, /* R890 */ | ||
996 | { 0x0000, 0x0000 }, /* R891 */ | ||
997 | { 0x0000, 0x0000 }, /* R892 */ | ||
998 | { 0x0000, 0x0000 }, /* R893 */ | ||
999 | { 0x0000, 0x0000 }, /* R894 */ | ||
1000 | { 0x0000, 0x0000 }, /* R895 */ | ||
1001 | { 0x0000, 0x0000 }, /* R896 */ | ||
1002 | { 0x0000, 0x0000 }, /* R897 */ | ||
1003 | { 0x0000, 0x0000 }, /* R898 */ | ||
1004 | { 0x0000, 0x0000 }, /* R899 */ | ||
1005 | { 0x0000, 0x0000 }, /* R900 */ | ||
1006 | { 0x0000, 0x0000 }, /* R901 */ | ||
1007 | { 0x0000, 0x0000 }, /* R902 */ | ||
1008 | { 0x0000, 0x0000 }, /* R903 */ | ||
1009 | { 0x0000, 0x0000 }, /* R904 */ | ||
1010 | { 0x0000, 0x0000 }, /* R905 */ | ||
1011 | { 0x0000, 0x0000 }, /* R906 */ | ||
1012 | { 0x0000, 0x0000 }, /* R907 */ | ||
1013 | { 0x0000, 0x0000 }, /* R908 */ | ||
1014 | { 0x0000, 0x0000 }, /* R909 */ | ||
1015 | { 0x0000, 0x0000 }, /* R910 */ | ||
1016 | { 0x0000, 0x0000 }, /* R911 */ | ||
1017 | { 0x0000, 0x0000 }, /* R912 */ | ||
1018 | { 0x0000, 0x0000 }, /* R913 */ | ||
1019 | { 0x0000, 0x0000 }, /* R914 */ | ||
1020 | { 0x0000, 0x0000 }, /* R915 */ | ||
1021 | { 0x0000, 0x0000 }, /* R916 */ | ||
1022 | { 0x0000, 0x0000 }, /* R917 */ | ||
1023 | { 0x0000, 0x0000 }, /* R918 */ | ||
1024 | { 0x0000, 0x0000 }, /* R919 */ | ||
1025 | { 0x0000, 0x0000 }, /* R920 */ | ||
1026 | { 0x0000, 0x0000 }, /* R921 */ | ||
1027 | { 0x0000, 0x0000 }, /* R922 */ | ||
1028 | { 0x0000, 0x0000 }, /* R923 */ | ||
1029 | { 0x0000, 0x0000 }, /* R924 */ | ||
1030 | { 0x0000, 0x0000 }, /* R925 */ | ||
1031 | { 0x0000, 0x0000 }, /* R926 */ | ||
1032 | { 0x0000, 0x0000 }, /* R927 */ | ||
1033 | { 0x0000, 0x0000 }, /* R928 */ | ||
1034 | { 0x0000, 0x0000 }, /* R929 */ | ||
1035 | { 0x0000, 0x0000 }, /* R930 */ | ||
1036 | { 0x0000, 0x0000 }, /* R931 */ | ||
1037 | { 0x0000, 0x0000 }, /* R932 */ | ||
1038 | { 0x0000, 0x0000 }, /* R933 */ | ||
1039 | { 0x0000, 0x0000 }, /* R934 */ | ||
1040 | { 0x0000, 0x0000 }, /* R935 */ | ||
1041 | { 0x0000, 0x0000 }, /* R936 */ | ||
1042 | { 0x0000, 0x0000 }, /* R937 */ | ||
1043 | { 0x0000, 0x0000 }, /* R938 */ | ||
1044 | { 0x0000, 0x0000 }, /* R939 */ | ||
1045 | { 0x0000, 0x0000 }, /* R940 */ | ||
1046 | { 0x0000, 0x0000 }, /* R941 */ | ||
1047 | { 0x0000, 0x0000 }, /* R942 */ | ||
1048 | { 0x0000, 0x0000 }, /* R943 */ | ||
1049 | { 0x0000, 0x0000 }, /* R944 */ | ||
1050 | { 0x0000, 0x0000 }, /* R945 */ | ||
1051 | { 0x0000, 0x0000 }, /* R946 */ | ||
1052 | { 0x0000, 0x0000 }, /* R947 */ | ||
1053 | { 0x0000, 0x0000 }, /* R948 */ | ||
1054 | { 0x0000, 0x0000 }, /* R949 */ | ||
1055 | { 0x0000, 0x0000 }, /* R950 */ | ||
1056 | { 0x0000, 0x0000 }, /* R951 */ | ||
1057 | { 0x0000, 0x0000 }, /* R952 */ | ||
1058 | { 0x0000, 0x0000 }, /* R953 */ | ||
1059 | { 0x0000, 0x0000 }, /* R954 */ | ||
1060 | { 0x0000, 0x0000 }, /* R955 */ | ||
1061 | { 0x0000, 0x0000 }, /* R956 */ | ||
1062 | { 0x0000, 0x0000 }, /* R957 */ | ||
1063 | { 0x0000, 0x0000 }, /* R958 */ | ||
1064 | { 0x0000, 0x0000 }, /* R959 */ | ||
1065 | { 0x0000, 0x0000 }, /* R960 */ | ||
1066 | { 0x0000, 0x0000 }, /* R961 */ | ||
1067 | { 0x0000, 0x0000 }, /* R962 */ | ||
1068 | { 0x0000, 0x0000 }, /* R963 */ | ||
1069 | { 0x0000, 0x0000 }, /* R964 */ | ||
1070 | { 0x0000, 0x0000 }, /* R965 */ | ||
1071 | { 0x0000, 0x0000 }, /* R966 */ | ||
1072 | { 0x0000, 0x0000 }, /* R967 */ | ||
1073 | { 0x0000, 0x0000 }, /* R968 */ | ||
1074 | { 0x0000, 0x0000 }, /* R969 */ | ||
1075 | { 0x0000, 0x0000 }, /* R970 */ | ||
1076 | { 0x0000, 0x0000 }, /* R971 */ | ||
1077 | { 0x0000, 0x0000 }, /* R972 */ | ||
1078 | { 0x0000, 0x0000 }, /* R973 */ | ||
1079 | { 0x0000, 0x0000 }, /* R974 */ | ||
1080 | { 0x0000, 0x0000 }, /* R975 */ | ||
1081 | { 0x0000, 0x0000 }, /* R976 */ | ||
1082 | { 0x0000, 0x0000 }, /* R977 */ | ||
1083 | { 0x0000, 0x0000 }, /* R978 */ | ||
1084 | { 0x0000, 0x0000 }, /* R979 */ | ||
1085 | { 0x0000, 0x0000 }, /* R980 */ | ||
1086 | { 0x0000, 0x0000 }, /* R981 */ | ||
1087 | { 0x0000, 0x0000 }, /* R982 */ | ||
1088 | { 0x0000, 0x0000 }, /* R983 */ | ||
1089 | { 0x0000, 0x0000 }, /* R984 */ | ||
1090 | { 0x0000, 0x0000 }, /* R985 */ | ||
1091 | { 0x0000, 0x0000 }, /* R986 */ | ||
1092 | { 0x0000, 0x0000 }, /* R987 */ | ||
1093 | { 0x0000, 0x0000 }, /* R988 */ | ||
1094 | { 0x0000, 0x0000 }, /* R989 */ | ||
1095 | { 0x0000, 0x0000 }, /* R990 */ | ||
1096 | { 0x0000, 0x0000 }, /* R991 */ | ||
1097 | { 0x0000, 0x0000 }, /* R992 */ | ||
1098 | { 0x0000, 0x0000 }, /* R993 */ | ||
1099 | { 0x0000, 0x0000 }, /* R994 */ | ||
1100 | { 0x0000, 0x0000 }, /* R995 */ | ||
1101 | { 0x0000, 0x0000 }, /* R996 */ | ||
1102 | { 0x0000, 0x0000 }, /* R997 */ | ||
1103 | { 0x0000, 0x0000 }, /* R998 */ | ||
1104 | { 0x0000, 0x0000 }, /* R999 */ | ||
1105 | { 0x0000, 0x0000 }, /* R1000 */ | ||
1106 | { 0x0000, 0x0000 }, /* R1001 */ | ||
1107 | { 0x0000, 0x0000 }, /* R1002 */ | ||
1108 | { 0x0000, 0x0000 }, /* R1003 */ | ||
1109 | { 0x0000, 0x0000 }, /* R1004 */ | ||
1110 | { 0x0000, 0x0000 }, /* R1005 */ | ||
1111 | { 0x0000, 0x0000 }, /* R1006 */ | ||
1112 | { 0x0000, 0x0000 }, /* R1007 */ | ||
1113 | { 0x0000, 0x0000 }, /* R1008 */ | ||
1114 | { 0x0000, 0x0000 }, /* R1009 */ | ||
1115 | { 0x0000, 0x0000 }, /* R1010 */ | ||
1116 | { 0x0000, 0x0000 }, /* R1011 */ | ||
1117 | { 0x0000, 0x0000 }, /* R1012 */ | ||
1118 | { 0x0000, 0x0000 }, /* R1013 */ | ||
1119 | { 0x0000, 0x0000 }, /* R1014 */ | ||
1120 | { 0x0000, 0x0000 }, /* R1015 */ | ||
1121 | { 0x0000, 0x0000 }, /* R1016 */ | ||
1122 | { 0x0000, 0x0000 }, /* R1017 */ | ||
1123 | { 0x0000, 0x0000 }, /* R1018 */ | ||
1124 | { 0x0000, 0x0000 }, /* R1019 */ | ||
1125 | { 0x0000, 0x0000 }, /* R1020 */ | ||
1126 | { 0x0000, 0x0000 }, /* R1021 */ | ||
1127 | { 0x0000, 0x0000 }, /* R1022 */ | ||
1128 | { 0x0000, 0x0000 }, /* R1023 */ | ||
1129 | { 0x00FF, 0x01FF }, /* R1024 - AIF1 ADC1 Left Volume */ | ||
1130 | { 0x00FF, 0x01FF }, /* R1025 - AIF1 ADC1 Right Volume */ | ||
1131 | { 0x00FF, 0x01FF }, /* R1026 - AIF1 DAC1 Left Volume */ | ||
1132 | { 0x00FF, 0x01FF }, /* R1027 - AIF1 DAC1 Right Volume */ | ||
1133 | { 0x00FF, 0x01FF }, /* R1028 - AIF1 ADC2 Left Volume */ | ||
1134 | { 0x00FF, 0x01FF }, /* R1029 - AIF1 ADC2 Right Volume */ | ||
1135 | { 0x00FF, 0x01FF }, /* R1030 - AIF1 DAC2 Left Volume */ | ||
1136 | { 0x00FF, 0x01FF }, /* R1031 - AIF1 DAC2 Right Volume */ | ||
1137 | { 0x0000, 0x0000 }, /* R1032 */ | ||
1138 | { 0x0000, 0x0000 }, /* R1033 */ | ||
1139 | { 0x0000, 0x0000 }, /* R1034 */ | ||
1140 | { 0x0000, 0x0000 }, /* R1035 */ | ||
1141 | { 0x0000, 0x0000 }, /* R1036 */ | ||
1142 | { 0x0000, 0x0000 }, /* R1037 */ | ||
1143 | { 0x0000, 0x0000 }, /* R1038 */ | ||
1144 | { 0x0000, 0x0000 }, /* R1039 */ | ||
1145 | { 0xF800, 0xF800 }, /* R1040 - AIF1 ADC1 Filters */ | ||
1146 | { 0x7800, 0x7800 }, /* R1041 - AIF1 ADC2 Filters */ | ||
1147 | { 0x0000, 0x0000 }, /* R1042 */ | ||
1148 | { 0x0000, 0x0000 }, /* R1043 */ | ||
1149 | { 0x0000, 0x0000 }, /* R1044 */ | ||
1150 | { 0x0000, 0x0000 }, /* R1045 */ | ||
1151 | { 0x0000, 0x0000 }, /* R1046 */ | ||
1152 | { 0x0000, 0x0000 }, /* R1047 */ | ||
1153 | { 0x0000, 0x0000 }, /* R1048 */ | ||
1154 | { 0x0000, 0x0000 }, /* R1049 */ | ||
1155 | { 0x0000, 0x0000 }, /* R1050 */ | ||
1156 | { 0x0000, 0x0000 }, /* R1051 */ | ||
1157 | { 0x0000, 0x0000 }, /* R1052 */ | ||
1158 | { 0x0000, 0x0000 }, /* R1053 */ | ||
1159 | { 0x0000, 0x0000 }, /* R1054 */ | ||
1160 | { 0x0000, 0x0000 }, /* R1055 */ | ||
1161 | { 0x02B6, 0x02B6 }, /* R1056 - AIF1 DAC1 Filters (1) */ | ||
1162 | { 0x3F00, 0x3F00 }, /* R1057 - AIF1 DAC1 Filters (2) */ | ||
1163 | { 0x02B6, 0x02B6 }, /* R1058 - AIF1 DAC2 Filters (1) */ | ||
1164 | { 0x3F00, 0x3F00 }, /* R1059 - AIF1 DAC2 Filters (2) */ | ||
1165 | { 0x0000, 0x0000 }, /* R1060 */ | ||
1166 | { 0x0000, 0x0000 }, /* R1061 */ | ||
1167 | { 0x0000, 0x0000 }, /* R1062 */ | ||
1168 | { 0x0000, 0x0000 }, /* R1063 */ | ||
1169 | { 0x0000, 0x0000 }, /* R1064 */ | ||
1170 | { 0x0000, 0x0000 }, /* R1065 */ | ||
1171 | { 0x0000, 0x0000 }, /* R1066 */ | ||
1172 | { 0x0000, 0x0000 }, /* R1067 */ | ||
1173 | { 0x0000, 0x0000 }, /* R1068 */ | ||
1174 | { 0x0000, 0x0000 }, /* R1069 */ | ||
1175 | { 0x0000, 0x0000 }, /* R1070 */ | ||
1176 | { 0x0000, 0x0000 }, /* R1071 */ | ||
1177 | { 0x0000, 0x0000 }, /* R1072 */ | ||
1178 | { 0x0000, 0x0000 }, /* R1073 */ | ||
1179 | { 0x0000, 0x0000 }, /* R1074 */ | ||
1180 | { 0x0000, 0x0000 }, /* R1075 */ | ||
1181 | { 0x0000, 0x0000 }, /* R1076 */ | ||
1182 | { 0x0000, 0x0000 }, /* R1077 */ | ||
1183 | { 0x0000, 0x0000 }, /* R1078 */ | ||
1184 | { 0x0000, 0x0000 }, /* R1079 */ | ||
1185 | { 0x0000, 0x0000 }, /* R1080 */ | ||
1186 | { 0x0000, 0x0000 }, /* R1081 */ | ||
1187 | { 0x0000, 0x0000 }, /* R1082 */ | ||
1188 | { 0x0000, 0x0000 }, /* R1083 */ | ||
1189 | { 0x0000, 0x0000 }, /* R1084 */ | ||
1190 | { 0x0000, 0x0000 }, /* R1085 */ | ||
1191 | { 0x0000, 0x0000 }, /* R1086 */ | ||
1192 | { 0x0000, 0x0000 }, /* R1087 */ | ||
1193 | { 0xFFFF, 0xFFFF }, /* R1088 - AIF1 DRC1 (1) */ | ||
1194 | { 0x1FFF, 0x1FFF }, /* R1089 - AIF1 DRC1 (2) */ | ||
1195 | { 0xFFFF, 0xFFFF }, /* R1090 - AIF1 DRC1 (3) */ | ||
1196 | { 0x07FF, 0x07FF }, /* R1091 - AIF1 DRC1 (4) */ | ||
1197 | { 0x03FF, 0x03FF }, /* R1092 - AIF1 DRC1 (5) */ | ||
1198 | { 0x0000, 0x0000 }, /* R1093 */ | ||
1199 | { 0x0000, 0x0000 }, /* R1094 */ | ||
1200 | { 0x0000, 0x0000 }, /* R1095 */ | ||
1201 | { 0x0000, 0x0000 }, /* R1096 */ | ||
1202 | { 0x0000, 0x0000 }, /* R1097 */ | ||
1203 | { 0x0000, 0x0000 }, /* R1098 */ | ||
1204 | { 0x0000, 0x0000 }, /* R1099 */ | ||
1205 | { 0x0000, 0x0000 }, /* R1100 */ | ||
1206 | { 0x0000, 0x0000 }, /* R1101 */ | ||
1207 | { 0x0000, 0x0000 }, /* R1102 */ | ||
1208 | { 0x0000, 0x0000 }, /* R1103 */ | ||
1209 | { 0xFFFF, 0xFFFF }, /* R1104 - AIF1 DRC2 (1) */ | ||
1210 | { 0x1FFF, 0x1FFF }, /* R1105 - AIF1 DRC2 (2) */ | ||
1211 | { 0xFFFF, 0xFFFF }, /* R1106 - AIF1 DRC2 (3) */ | ||
1212 | { 0x07FF, 0x07FF }, /* R1107 - AIF1 DRC2 (4) */ | ||
1213 | { 0x03FF, 0x03FF }, /* R1108 - AIF1 DRC2 (5) */ | ||
1214 | { 0x0000, 0x0000 }, /* R1109 */ | ||
1215 | { 0x0000, 0x0000 }, /* R1110 */ | ||
1216 | { 0x0000, 0x0000 }, /* R1111 */ | ||
1217 | { 0x0000, 0x0000 }, /* R1112 */ | ||
1218 | { 0x0000, 0x0000 }, /* R1113 */ | ||
1219 | { 0x0000, 0x0000 }, /* R1114 */ | ||
1220 | { 0x0000, 0x0000 }, /* R1115 */ | ||
1221 | { 0x0000, 0x0000 }, /* R1116 */ | ||
1222 | { 0x0000, 0x0000 }, /* R1117 */ | ||
1223 | { 0x0000, 0x0000 }, /* R1118 */ | ||
1224 | { 0x0000, 0x0000 }, /* R1119 */ | ||
1225 | { 0x0000, 0x0000 }, /* R1120 */ | ||
1226 | { 0x0000, 0x0000 }, /* R1121 */ | ||
1227 | { 0x0000, 0x0000 }, /* R1122 */ | ||
1228 | { 0x0000, 0x0000 }, /* R1123 */ | ||
1229 | { 0x0000, 0x0000 }, /* R1124 */ | ||
1230 | { 0x0000, 0x0000 }, /* R1125 */ | ||
1231 | { 0x0000, 0x0000 }, /* R1126 */ | ||
1232 | { 0x0000, 0x0000 }, /* R1127 */ | ||
1233 | { 0x0000, 0x0000 }, /* R1128 */ | ||
1234 | { 0x0000, 0x0000 }, /* R1129 */ | ||
1235 | { 0x0000, 0x0000 }, /* R1130 */ | ||
1236 | { 0x0000, 0x0000 }, /* R1131 */ | ||
1237 | { 0x0000, 0x0000 }, /* R1132 */ | ||
1238 | { 0x0000, 0x0000 }, /* R1133 */ | ||
1239 | { 0x0000, 0x0000 }, /* R1134 */ | ||
1240 | { 0x0000, 0x0000 }, /* R1135 */ | ||
1241 | { 0x0000, 0x0000 }, /* R1136 */ | ||
1242 | { 0x0000, 0x0000 }, /* R1137 */ | ||
1243 | { 0x0000, 0x0000 }, /* R1138 */ | ||
1244 | { 0x0000, 0x0000 }, /* R1139 */ | ||
1245 | { 0x0000, 0x0000 }, /* R1140 */ | ||
1246 | { 0x0000, 0x0000 }, /* R1141 */ | ||
1247 | { 0x0000, 0x0000 }, /* R1142 */ | ||
1248 | { 0x0000, 0x0000 }, /* R1143 */ | ||
1249 | { 0x0000, 0x0000 }, /* R1144 */ | ||
1250 | { 0x0000, 0x0000 }, /* R1145 */ | ||
1251 | { 0x0000, 0x0000 }, /* R1146 */ | ||
1252 | { 0x0000, 0x0000 }, /* R1147 */ | ||
1253 | { 0x0000, 0x0000 }, /* R1148 */ | ||
1254 | { 0x0000, 0x0000 }, /* R1149 */ | ||
1255 | { 0x0000, 0x0000 }, /* R1150 */ | ||
1256 | { 0x0000, 0x0000 }, /* R1151 */ | ||
1257 | { 0xFFFF, 0xFFFF }, /* R1152 - AIF1 DAC1 EQ Gains (1) */ | ||
1258 | { 0xFFC0, 0xFFC0 }, /* R1153 - AIF1 DAC1 EQ Gains (2) */ | ||
1259 | { 0xFFFF, 0xFFFF }, /* R1154 - AIF1 DAC1 EQ Band 1 A */ | ||
1260 | { 0xFFFF, 0xFFFF }, /* R1155 - AIF1 DAC1 EQ Band 1 B */ | ||
1261 | { 0xFFFF, 0xFFFF }, /* R1156 - AIF1 DAC1 EQ Band 1 PG */ | ||
1262 | { 0xFFFF, 0xFFFF }, /* R1157 - AIF1 DAC1 EQ Band 2 A */ | ||
1263 | { 0xFFFF, 0xFFFF }, /* R1158 - AIF1 DAC1 EQ Band 2 B */ | ||
1264 | { 0xFFFF, 0xFFFF }, /* R1159 - AIF1 DAC1 EQ Band 2 C */ | ||
1265 | { 0xFFFF, 0xFFFF }, /* R1160 - AIF1 DAC1 EQ Band 2 PG */ | ||
1266 | { 0xFFFF, 0xFFFF }, /* R1161 - AIF1 DAC1 EQ Band 3 A */ | ||
1267 | { 0xFFFF, 0xFFFF }, /* R1162 - AIF1 DAC1 EQ Band 3 B */ | ||
1268 | { 0xFFFF, 0xFFFF }, /* R1163 - AIF1 DAC1 EQ Band 3 C */ | ||
1269 | { 0xFFFF, 0xFFFF }, /* R1164 - AIF1 DAC1 EQ Band 3 PG */ | ||
1270 | { 0xFFFF, 0xFFFF }, /* R1165 - AIF1 DAC1 EQ Band 4 A */ | ||
1271 | { 0xFFFF, 0xFFFF }, /* R1166 - AIF1 DAC1 EQ Band 4 B */ | ||
1272 | { 0xFFFF, 0xFFFF }, /* R1167 - AIF1 DAC1 EQ Band 4 C */ | ||
1273 | { 0xFFFF, 0xFFFF }, /* R1168 - AIF1 DAC1 EQ Band 4 PG */ | ||
1274 | { 0xFFFF, 0xFFFF }, /* R1169 - AIF1 DAC1 EQ Band 5 A */ | ||
1275 | { 0xFFFF, 0xFFFF }, /* R1170 - AIF1 DAC1 EQ Band 5 B */ | ||
1276 | { 0xFFFF, 0xFFFF }, /* R1171 - AIF1 DAC1 EQ Band 5 PG */ | ||
1277 | { 0x0000, 0x0000 }, /* R1172 */ | ||
1278 | { 0x0000, 0x0000 }, /* R1173 */ | ||
1279 | { 0x0000, 0x0000 }, /* R1174 */ | ||
1280 | { 0x0000, 0x0000 }, /* R1175 */ | ||
1281 | { 0x0000, 0x0000 }, /* R1176 */ | ||
1282 | { 0x0000, 0x0000 }, /* R1177 */ | ||
1283 | { 0x0000, 0x0000 }, /* R1178 */ | ||
1284 | { 0x0000, 0x0000 }, /* R1179 */ | ||
1285 | { 0x0000, 0x0000 }, /* R1180 */ | ||
1286 | { 0x0000, 0x0000 }, /* R1181 */ | ||
1287 | { 0x0000, 0x0000 }, /* R1182 */ | ||
1288 | { 0x0000, 0x0000 }, /* R1183 */ | ||
1289 | { 0xFFFF, 0xFFFF }, /* R1184 - AIF1 DAC2 EQ Gains (1) */ | ||
1290 | { 0xFFC0, 0xFFC0 }, /* R1185 - AIF1 DAC2 EQ Gains (2) */ | ||
1291 | { 0xFFFF, 0xFFFF }, /* R1186 - AIF1 DAC2 EQ Band 1 A */ | ||
1292 | { 0xFFFF, 0xFFFF }, /* R1187 - AIF1 DAC2 EQ Band 1 B */ | ||
1293 | { 0xFFFF, 0xFFFF }, /* R1188 - AIF1 DAC2 EQ Band 1 PG */ | ||
1294 | { 0xFFFF, 0xFFFF }, /* R1189 - AIF1 DAC2 EQ Band 2 A */ | ||
1295 | { 0xFFFF, 0xFFFF }, /* R1190 - AIF1 DAC2 EQ Band 2 B */ | ||
1296 | { 0xFFFF, 0xFFFF }, /* R1191 - AIF1 DAC2 EQ Band 2 C */ | ||
1297 | { 0xFFFF, 0xFFFF }, /* R1192 - AIF1 DAC2 EQ Band 2 PG */ | ||
1298 | { 0xFFFF, 0xFFFF }, /* R1193 - AIF1 DAC2 EQ Band 3 A */ | ||
1299 | { 0xFFFF, 0xFFFF }, /* R1194 - AIF1 DAC2 EQ Band 3 B */ | ||
1300 | { 0xFFFF, 0xFFFF }, /* R1195 - AIF1 DAC2 EQ Band 3 C */ | ||
1301 | { 0xFFFF, 0xFFFF }, /* R1196 - AIF1 DAC2 EQ Band 3 PG */ | ||
1302 | { 0xFFFF, 0xFFFF }, /* R1197 - AIF1 DAC2 EQ Band 4 A */ | ||
1303 | { 0xFFFF, 0xFFFF }, /* R1198 - AIF1 DAC2 EQ Band 4 B */ | ||
1304 | { 0xFFFF, 0xFFFF }, /* R1199 - AIF1 DAC2 EQ Band 4 C */ | ||
1305 | { 0xFFFF, 0xFFFF }, /* R1200 - AIF1 DAC2 EQ Band 4 PG */ | ||
1306 | { 0xFFFF, 0xFFFF }, /* R1201 - AIF1 DAC2 EQ Band 5 A */ | ||
1307 | { 0xFFFF, 0xFFFF }, /* R1202 - AIF1 DAC2 EQ Band 5 B */ | ||
1308 | { 0xFFFF, 0xFFFF }, /* R1203 - AIF1 DAC2 EQ Band 5 PG */ | ||
1309 | { 0x0000, 0x0000 }, /* R1204 */ | ||
1310 | { 0x0000, 0x0000 }, /* R1205 */ | ||
1311 | { 0x0000, 0x0000 }, /* R1206 */ | ||
1312 | { 0x0000, 0x0000 }, /* R1207 */ | ||
1313 | { 0x0000, 0x0000 }, /* R1208 */ | ||
1314 | { 0x0000, 0x0000 }, /* R1209 */ | ||
1315 | { 0x0000, 0x0000 }, /* R1210 */ | ||
1316 | { 0x0000, 0x0000 }, /* R1211 */ | ||
1317 | { 0x0000, 0x0000 }, /* R1212 */ | ||
1318 | { 0x0000, 0x0000 }, /* R1213 */ | ||
1319 | { 0x0000, 0x0000 }, /* R1214 */ | ||
1320 | { 0x0000, 0x0000 }, /* R1215 */ | ||
1321 | { 0x0000, 0x0000 }, /* R1216 */ | ||
1322 | { 0x0000, 0x0000 }, /* R1217 */ | ||
1323 | { 0x0000, 0x0000 }, /* R1218 */ | ||
1324 | { 0x0000, 0x0000 }, /* R1219 */ | ||
1325 | { 0x0000, 0x0000 }, /* R1220 */ | ||
1326 | { 0x0000, 0x0000 }, /* R1221 */ | ||
1327 | { 0x0000, 0x0000 }, /* R1222 */ | ||
1328 | { 0x0000, 0x0000 }, /* R1223 */ | ||
1329 | { 0x0000, 0x0000 }, /* R1224 */ | ||
1330 | { 0x0000, 0x0000 }, /* R1225 */ | ||
1331 | { 0x0000, 0x0000 }, /* R1226 */ | ||
1332 | { 0x0000, 0x0000 }, /* R1227 */ | ||
1333 | { 0x0000, 0x0000 }, /* R1228 */ | ||
1334 | { 0x0000, 0x0000 }, /* R1229 */ | ||
1335 | { 0x0000, 0x0000 }, /* R1230 */ | ||
1336 | { 0x0000, 0x0000 }, /* R1231 */ | ||
1337 | { 0x0000, 0x0000 }, /* R1232 */ | ||
1338 | { 0x0000, 0x0000 }, /* R1233 */ | ||
1339 | { 0x0000, 0x0000 }, /* R1234 */ | ||
1340 | { 0x0000, 0x0000 }, /* R1235 */ | ||
1341 | { 0x0000, 0x0000 }, /* R1236 */ | ||
1342 | { 0x0000, 0x0000 }, /* R1237 */ | ||
1343 | { 0x0000, 0x0000 }, /* R1238 */ | ||
1344 | { 0x0000, 0x0000 }, /* R1239 */ | ||
1345 | { 0x0000, 0x0000 }, /* R1240 */ | ||
1346 | { 0x0000, 0x0000 }, /* R1241 */ | ||
1347 | { 0x0000, 0x0000 }, /* R1242 */ | ||
1348 | { 0x0000, 0x0000 }, /* R1243 */ | ||
1349 | { 0x0000, 0x0000 }, /* R1244 */ | ||
1350 | { 0x0000, 0x0000 }, /* R1245 */ | ||
1351 | { 0x0000, 0x0000 }, /* R1246 */ | ||
1352 | { 0x0000, 0x0000 }, /* R1247 */ | ||
1353 | { 0x0000, 0x0000 }, /* R1248 */ | ||
1354 | { 0x0000, 0x0000 }, /* R1249 */ | ||
1355 | { 0x0000, 0x0000 }, /* R1250 */ | ||
1356 | { 0x0000, 0x0000 }, /* R1251 */ | ||
1357 | { 0x0000, 0x0000 }, /* R1252 */ | ||
1358 | { 0x0000, 0x0000 }, /* R1253 */ | ||
1359 | { 0x0000, 0x0000 }, /* R1254 */ | ||
1360 | { 0x0000, 0x0000 }, /* R1255 */ | ||
1361 | { 0x0000, 0x0000 }, /* R1256 */ | ||
1362 | { 0x0000, 0x0000 }, /* R1257 */ | ||
1363 | { 0x0000, 0x0000 }, /* R1258 */ | ||
1364 | { 0x0000, 0x0000 }, /* R1259 */ | ||
1365 | { 0x0000, 0x0000 }, /* R1260 */ | ||
1366 | { 0x0000, 0x0000 }, /* R1261 */ | ||
1367 | { 0x0000, 0x0000 }, /* R1262 */ | ||
1368 | { 0x0000, 0x0000 }, /* R1263 */ | ||
1369 | { 0x0000, 0x0000 }, /* R1264 */ | ||
1370 | { 0x0000, 0x0000 }, /* R1265 */ | ||
1371 | { 0x0000, 0x0000 }, /* R1266 */ | ||
1372 | { 0x0000, 0x0000 }, /* R1267 */ | ||
1373 | { 0x0000, 0x0000 }, /* R1268 */ | ||
1374 | { 0x0000, 0x0000 }, /* R1269 */ | ||
1375 | { 0x0000, 0x0000 }, /* R1270 */ | ||
1376 | { 0x0000, 0x0000 }, /* R1271 */ | ||
1377 | { 0x0000, 0x0000 }, /* R1272 */ | ||
1378 | { 0x0000, 0x0000 }, /* R1273 */ | ||
1379 | { 0x0000, 0x0000 }, /* R1274 */ | ||
1380 | { 0x0000, 0x0000 }, /* R1275 */ | ||
1381 | { 0x0000, 0x0000 }, /* R1276 */ | ||
1382 | { 0x0000, 0x0000 }, /* R1277 */ | ||
1383 | { 0x0000, 0x0000 }, /* R1278 */ | ||
1384 | { 0x0000, 0x0000 }, /* R1279 */ | ||
1385 | { 0x00FF, 0x01FF }, /* R1280 - AIF2 ADC Left Volume */ | ||
1386 | { 0x00FF, 0x01FF }, /* R1281 - AIF2 ADC Right Volume */ | ||
1387 | { 0x00FF, 0x01FF }, /* R1282 - AIF2 DAC Left Volume */ | ||
1388 | { 0x00FF, 0x01FF }, /* R1283 - AIF2 DAC Right Volume */ | ||
1389 | { 0x0000, 0x0000 }, /* R1284 */ | ||
1390 | { 0x0000, 0x0000 }, /* R1285 */ | ||
1391 | { 0x0000, 0x0000 }, /* R1286 */ | ||
1392 | { 0x0000, 0x0000 }, /* R1287 */ | ||
1393 | { 0x0000, 0x0000 }, /* R1288 */ | ||
1394 | { 0x0000, 0x0000 }, /* R1289 */ | ||
1395 | { 0x0000, 0x0000 }, /* R1290 */ | ||
1396 | { 0x0000, 0x0000 }, /* R1291 */ | ||
1397 | { 0x0000, 0x0000 }, /* R1292 */ | ||
1398 | { 0x0000, 0x0000 }, /* R1293 */ | ||
1399 | { 0x0000, 0x0000 }, /* R1294 */ | ||
1400 | { 0x0000, 0x0000 }, /* R1295 */ | ||
1401 | { 0xF800, 0xF800 }, /* R1296 - AIF2 ADC Filters */ | ||
1402 | { 0x0000, 0x0000 }, /* R1297 */ | ||
1403 | { 0x0000, 0x0000 }, /* R1298 */ | ||
1404 | { 0x0000, 0x0000 }, /* R1299 */ | ||
1405 | { 0x0000, 0x0000 }, /* R1300 */ | ||
1406 | { 0x0000, 0x0000 }, /* R1301 */ | ||
1407 | { 0x0000, 0x0000 }, /* R1302 */ | ||
1408 | { 0x0000, 0x0000 }, /* R1303 */ | ||
1409 | { 0x0000, 0x0000 }, /* R1304 */ | ||
1410 | { 0x0000, 0x0000 }, /* R1305 */ | ||
1411 | { 0x0000, 0x0000 }, /* R1306 */ | ||
1412 | { 0x0000, 0x0000 }, /* R1307 */ | ||
1413 | { 0x0000, 0x0000 }, /* R1308 */ | ||
1414 | { 0x0000, 0x0000 }, /* R1309 */ | ||
1415 | { 0x0000, 0x0000 }, /* R1310 */ | ||
1416 | { 0x0000, 0x0000 }, /* R1311 */ | ||
1417 | { 0x02B6, 0x02B6 }, /* R1312 - AIF2 DAC Filters (1) */ | ||
1418 | { 0x3F00, 0x3F00 }, /* R1313 - AIF2 DAC Filters (2) */ | ||
1419 | { 0x0000, 0x0000 }, /* R1314 */ | ||
1420 | { 0x0000, 0x0000 }, /* R1315 */ | ||
1421 | { 0x0000, 0x0000 }, /* R1316 */ | ||
1422 | { 0x0000, 0x0000 }, /* R1317 */ | ||
1423 | { 0x0000, 0x0000 }, /* R1318 */ | ||
1424 | { 0x0000, 0x0000 }, /* R1319 */ | ||
1425 | { 0x0000, 0x0000 }, /* R1320 */ | ||
1426 | { 0x0000, 0x0000 }, /* R1321 */ | ||
1427 | { 0x0000, 0x0000 }, /* R1322 */ | ||
1428 | { 0x0000, 0x0000 }, /* R1323 */ | ||
1429 | { 0x0000, 0x0000 }, /* R1324 */ | ||
1430 | { 0x0000, 0x0000 }, /* R1325 */ | ||
1431 | { 0x0000, 0x0000 }, /* R1326 */ | ||
1432 | { 0x0000, 0x0000 }, /* R1327 */ | ||
1433 | { 0x0000, 0x0000 }, /* R1328 */ | ||
1434 | { 0x0000, 0x0000 }, /* R1329 */ | ||
1435 | { 0x0000, 0x0000 }, /* R1330 */ | ||
1436 | { 0x0000, 0x0000 }, /* R1331 */ | ||
1437 | { 0x0000, 0x0000 }, /* R1332 */ | ||
1438 | { 0x0000, 0x0000 }, /* R1333 */ | ||
1439 | { 0x0000, 0x0000 }, /* R1334 */ | ||
1440 | { 0x0000, 0x0000 }, /* R1335 */ | ||
1441 | { 0x0000, 0x0000 }, /* R1336 */ | ||
1442 | { 0x0000, 0x0000 }, /* R1337 */ | ||
1443 | { 0x0000, 0x0000 }, /* R1338 */ | ||
1444 | { 0x0000, 0x0000 }, /* R1339 */ | ||
1445 | { 0x0000, 0x0000 }, /* R1340 */ | ||
1446 | { 0x0000, 0x0000 }, /* R1341 */ | ||
1447 | { 0x0000, 0x0000 }, /* R1342 */ | ||
1448 | { 0x0000, 0x0000 }, /* R1343 */ | ||
1449 | { 0xFFFF, 0xFFFF }, /* R1344 - AIF2 DRC (1) */ | ||
1450 | { 0x1FFF, 0x1FFF }, /* R1345 - AIF2 DRC (2) */ | ||
1451 | { 0xFFFF, 0xFFFF }, /* R1346 - AIF2 DRC (3) */ | ||
1452 | { 0x07FF, 0x07FF }, /* R1347 - AIF2 DRC (4) */ | ||
1453 | { 0x03FF, 0x03FF }, /* R1348 - AIF2 DRC (5) */ | ||
1454 | { 0x0000, 0x0000 }, /* R1349 */ | ||
1455 | { 0x0000, 0x0000 }, /* R1350 */ | ||
1456 | { 0x0000, 0x0000 }, /* R1351 */ | ||
1457 | { 0x0000, 0x0000 }, /* R1352 */ | ||
1458 | { 0x0000, 0x0000 }, /* R1353 */ | ||
1459 | { 0x0000, 0x0000 }, /* R1354 */ | ||
1460 | { 0x0000, 0x0000 }, /* R1355 */ | ||
1461 | { 0x0000, 0x0000 }, /* R1356 */ | ||
1462 | { 0x0000, 0x0000 }, /* R1357 */ | ||
1463 | { 0x0000, 0x0000 }, /* R1358 */ | ||
1464 | { 0x0000, 0x0000 }, /* R1359 */ | ||
1465 | { 0x0000, 0x0000 }, /* R1360 */ | ||
1466 | { 0x0000, 0x0000 }, /* R1361 */ | ||
1467 | { 0x0000, 0x0000 }, /* R1362 */ | ||
1468 | { 0x0000, 0x0000 }, /* R1363 */ | ||
1469 | { 0x0000, 0x0000 }, /* R1364 */ | ||
1470 | { 0x0000, 0x0000 }, /* R1365 */ | ||
1471 | { 0x0000, 0x0000 }, /* R1366 */ | ||
1472 | { 0x0000, 0x0000 }, /* R1367 */ | ||
1473 | { 0x0000, 0x0000 }, /* R1368 */ | ||
1474 | { 0x0000, 0x0000 }, /* R1369 */ | ||
1475 | { 0x0000, 0x0000 }, /* R1370 */ | ||
1476 | { 0x0000, 0x0000 }, /* R1371 */ | ||
1477 | { 0x0000, 0x0000 }, /* R1372 */ | ||
1478 | { 0x0000, 0x0000 }, /* R1373 */ | ||
1479 | { 0x0000, 0x0000 }, /* R1374 */ | ||
1480 | { 0x0000, 0x0000 }, /* R1375 */ | ||
1481 | { 0x0000, 0x0000 }, /* R1376 */ | ||
1482 | { 0x0000, 0x0000 }, /* R1377 */ | ||
1483 | { 0x0000, 0x0000 }, /* R1378 */ | ||
1484 | { 0x0000, 0x0000 }, /* R1379 */ | ||
1485 | { 0x0000, 0x0000 }, /* R1380 */ | ||
1486 | { 0x0000, 0x0000 }, /* R1381 */ | ||
1487 | { 0x0000, 0x0000 }, /* R1382 */ | ||
1488 | { 0x0000, 0x0000 }, /* R1383 */ | ||
1489 | { 0x0000, 0x0000 }, /* R1384 */ | ||
1490 | { 0x0000, 0x0000 }, /* R1385 */ | ||
1491 | { 0x0000, 0x0000 }, /* R1386 */ | ||
1492 | { 0x0000, 0x0000 }, /* R1387 */ | ||
1493 | { 0x0000, 0x0000 }, /* R1388 */ | ||
1494 | { 0x0000, 0x0000 }, /* R1389 */ | ||
1495 | { 0x0000, 0x0000 }, /* R1390 */ | ||
1496 | { 0x0000, 0x0000 }, /* R1391 */ | ||
1497 | { 0x0000, 0x0000 }, /* R1392 */ | ||
1498 | { 0x0000, 0x0000 }, /* R1393 */ | ||
1499 | { 0x0000, 0x0000 }, /* R1394 */ | ||
1500 | { 0x0000, 0x0000 }, /* R1395 */ | ||
1501 | { 0x0000, 0x0000 }, /* R1396 */ | ||
1502 | { 0x0000, 0x0000 }, /* R1397 */ | ||
1503 | { 0x0000, 0x0000 }, /* R1398 */ | ||
1504 | { 0x0000, 0x0000 }, /* R1399 */ | ||
1505 | { 0x0000, 0x0000 }, /* R1400 */ | ||
1506 | { 0x0000, 0x0000 }, /* R1401 */ | ||
1507 | { 0x0000, 0x0000 }, /* R1402 */ | ||
1508 | { 0x0000, 0x0000 }, /* R1403 */ | ||
1509 | { 0x0000, 0x0000 }, /* R1404 */ | ||
1510 | { 0x0000, 0x0000 }, /* R1405 */ | ||
1511 | { 0x0000, 0x0000 }, /* R1406 */ | ||
1512 | { 0x0000, 0x0000 }, /* R1407 */ | ||
1513 | { 0xFFFF, 0xFFFF }, /* R1408 - AIF2 EQ Gains (1) */ | ||
1514 | { 0xFFC0, 0xFFC0 }, /* R1409 - AIF2 EQ Gains (2) */ | ||
1515 | { 0xFFFF, 0xFFFF }, /* R1410 - AIF2 EQ Band 1 A */ | ||
1516 | { 0xFFFF, 0xFFFF }, /* R1411 - AIF2 EQ Band 1 B */ | ||
1517 | { 0xFFFF, 0xFFFF }, /* R1412 - AIF2 EQ Band 1 PG */ | ||
1518 | { 0xFFFF, 0xFFFF }, /* R1413 - AIF2 EQ Band 2 A */ | ||
1519 | { 0xFFFF, 0xFFFF }, /* R1414 - AIF2 EQ Band 2 B */ | ||
1520 | { 0xFFFF, 0xFFFF }, /* R1415 - AIF2 EQ Band 2 C */ | ||
1521 | { 0xFFFF, 0xFFFF }, /* R1416 - AIF2 EQ Band 2 PG */ | ||
1522 | { 0xFFFF, 0xFFFF }, /* R1417 - AIF2 EQ Band 3 A */ | ||
1523 | { 0xFFFF, 0xFFFF }, /* R1418 - AIF2 EQ Band 3 B */ | ||
1524 | { 0xFFFF, 0xFFFF }, /* R1419 - AIF2 EQ Band 3 C */ | ||
1525 | { 0xFFFF, 0xFFFF }, /* R1420 - AIF2 EQ Band 3 PG */ | ||
1526 | { 0xFFFF, 0xFFFF }, /* R1421 - AIF2 EQ Band 4 A */ | ||
1527 | { 0xFFFF, 0xFFFF }, /* R1422 - AIF2 EQ Band 4 B */ | ||
1528 | { 0xFFFF, 0xFFFF }, /* R1423 - AIF2 EQ Band 4 C */ | ||
1529 | { 0xFFFF, 0xFFFF }, /* R1424 - AIF2 EQ Band 4 PG */ | ||
1530 | { 0xFFFF, 0xFFFF }, /* R1425 - AIF2 EQ Band 5 A */ | ||
1531 | { 0xFFFF, 0xFFFF }, /* R1426 - AIF2 EQ Band 5 B */ | ||
1532 | { 0xFFFF, 0xFFFF }, /* R1427 - AIF2 EQ Band 5 PG */ | ||
1533 | { 0x0000, 0x0000 }, /* R1428 */ | ||
1534 | { 0x0000, 0x0000 }, /* R1429 */ | ||
1535 | { 0x0000, 0x0000 }, /* R1430 */ | ||
1536 | { 0x0000, 0x0000 }, /* R1431 */ | ||
1537 | { 0x0000, 0x0000 }, /* R1432 */ | ||
1538 | { 0x0000, 0x0000 }, /* R1433 */ | ||
1539 | { 0x0000, 0x0000 }, /* R1434 */ | ||
1540 | { 0x0000, 0x0000 }, /* R1435 */ | ||
1541 | { 0x0000, 0x0000 }, /* R1436 */ | ||
1542 | { 0x0000, 0x0000 }, /* R1437 */ | ||
1543 | { 0x0000, 0x0000 }, /* R1438 */ | ||
1544 | { 0x0000, 0x0000 }, /* R1439 */ | ||
1545 | { 0x0000, 0x0000 }, /* R1440 */ | ||
1546 | { 0x0000, 0x0000 }, /* R1441 */ | ||
1547 | { 0x0000, 0x0000 }, /* R1442 */ | ||
1548 | { 0x0000, 0x0000 }, /* R1443 */ | ||
1549 | { 0x0000, 0x0000 }, /* R1444 */ | ||
1550 | { 0x0000, 0x0000 }, /* R1445 */ | ||
1551 | { 0x0000, 0x0000 }, /* R1446 */ | ||
1552 | { 0x0000, 0x0000 }, /* R1447 */ | ||
1553 | { 0x0000, 0x0000 }, /* R1448 */ | ||
1554 | { 0x0000, 0x0000 }, /* R1449 */ | ||
1555 | { 0x0000, 0x0000 }, /* R1450 */ | ||
1556 | { 0x0000, 0x0000 }, /* R1451 */ | ||
1557 | { 0x0000, 0x0000 }, /* R1452 */ | ||
1558 | { 0x0000, 0x0000 }, /* R1453 */ | ||
1559 | { 0x0000, 0x0000 }, /* R1454 */ | ||
1560 | { 0x0000, 0x0000 }, /* R1455 */ | ||
1561 | { 0x0000, 0x0000 }, /* R1456 */ | ||
1562 | { 0x0000, 0x0000 }, /* R1457 */ | ||
1563 | { 0x0000, 0x0000 }, /* R1458 */ | ||
1564 | { 0x0000, 0x0000 }, /* R1459 */ | ||
1565 | { 0x0000, 0x0000 }, /* R1460 */ | ||
1566 | { 0x0000, 0x0000 }, /* R1461 */ | ||
1567 | { 0x0000, 0x0000 }, /* R1462 */ | ||
1568 | { 0x0000, 0x0000 }, /* R1463 */ | ||
1569 | { 0x0000, 0x0000 }, /* R1464 */ | ||
1570 | { 0x0000, 0x0000 }, /* R1465 */ | ||
1571 | { 0x0000, 0x0000 }, /* R1466 */ | ||
1572 | { 0x0000, 0x0000 }, /* R1467 */ | ||
1573 | { 0x0000, 0x0000 }, /* R1468 */ | ||
1574 | { 0x0000, 0x0000 }, /* R1469 */ | ||
1575 | { 0x0000, 0x0000 }, /* R1470 */ | ||
1576 | { 0x0000, 0x0000 }, /* R1471 */ | ||
1577 | { 0x0000, 0x0000 }, /* R1472 */ | ||
1578 | { 0x0000, 0x0000 }, /* R1473 */ | ||
1579 | { 0x0000, 0x0000 }, /* R1474 */ | ||
1580 | { 0x0000, 0x0000 }, /* R1475 */ | ||
1581 | { 0x0000, 0x0000 }, /* R1476 */ | ||
1582 | { 0x0000, 0x0000 }, /* R1477 */ | ||
1583 | { 0x0000, 0x0000 }, /* R1478 */ | ||
1584 | { 0x0000, 0x0000 }, /* R1479 */ | ||
1585 | { 0x0000, 0x0000 }, /* R1480 */ | ||
1586 | { 0x0000, 0x0000 }, /* R1481 */ | ||
1587 | { 0x0000, 0x0000 }, /* R1482 */ | ||
1588 | { 0x0000, 0x0000 }, /* R1483 */ | ||
1589 | { 0x0000, 0x0000 }, /* R1484 */ | ||
1590 | { 0x0000, 0x0000 }, /* R1485 */ | ||
1591 | { 0x0000, 0x0000 }, /* R1486 */ | ||
1592 | { 0x0000, 0x0000 }, /* R1487 */ | ||
1593 | { 0x0000, 0x0000 }, /* R1488 */ | ||
1594 | { 0x0000, 0x0000 }, /* R1489 */ | ||
1595 | { 0x0000, 0x0000 }, /* R1490 */ | ||
1596 | { 0x0000, 0x0000 }, /* R1491 */ | ||
1597 | { 0x0000, 0x0000 }, /* R1492 */ | ||
1598 | { 0x0000, 0x0000 }, /* R1493 */ | ||
1599 | { 0x0000, 0x0000 }, /* R1494 */ | ||
1600 | { 0x0000, 0x0000 }, /* R1495 */ | ||
1601 | { 0x0000, 0x0000 }, /* R1496 */ | ||
1602 | { 0x0000, 0x0000 }, /* R1497 */ | ||
1603 | { 0x0000, 0x0000 }, /* R1498 */ | ||
1604 | { 0x0000, 0x0000 }, /* R1499 */ | ||
1605 | { 0x0000, 0x0000 }, /* R1500 */ | ||
1606 | { 0x0000, 0x0000 }, /* R1501 */ | ||
1607 | { 0x0000, 0x0000 }, /* R1502 */ | ||
1608 | { 0x0000, 0x0000 }, /* R1503 */ | ||
1609 | { 0x0000, 0x0000 }, /* R1504 */ | ||
1610 | { 0x0000, 0x0000 }, /* R1505 */ | ||
1611 | { 0x0000, 0x0000 }, /* R1506 */ | ||
1612 | { 0x0000, 0x0000 }, /* R1507 */ | ||
1613 | { 0x0000, 0x0000 }, /* R1508 */ | ||
1614 | { 0x0000, 0x0000 }, /* R1509 */ | ||
1615 | { 0x0000, 0x0000 }, /* R1510 */ | ||
1616 | { 0x0000, 0x0000 }, /* R1511 */ | ||
1617 | { 0x0000, 0x0000 }, /* R1512 */ | ||
1618 | { 0x0000, 0x0000 }, /* R1513 */ | ||
1619 | { 0x0000, 0x0000 }, /* R1514 */ | ||
1620 | { 0x0000, 0x0000 }, /* R1515 */ | ||
1621 | { 0x0000, 0x0000 }, /* R1516 */ | ||
1622 | { 0x0000, 0x0000 }, /* R1517 */ | ||
1623 | { 0x0000, 0x0000 }, /* R1518 */ | ||
1624 | { 0x0000, 0x0000 }, /* R1519 */ | ||
1625 | { 0x0000, 0x0000 }, /* R1520 */ | ||
1626 | { 0x0000, 0x0000 }, /* R1521 */ | ||
1627 | { 0x0000, 0x0000 }, /* R1522 */ | ||
1628 | { 0x0000, 0x0000 }, /* R1523 */ | ||
1629 | { 0x0000, 0x0000 }, /* R1524 */ | ||
1630 | { 0x0000, 0x0000 }, /* R1525 */ | ||
1631 | { 0x0000, 0x0000 }, /* R1526 */ | ||
1632 | { 0x0000, 0x0000 }, /* R1527 */ | ||
1633 | { 0x0000, 0x0000 }, /* R1528 */ | ||
1634 | { 0x0000, 0x0000 }, /* R1529 */ | ||
1635 | { 0x0000, 0x0000 }, /* R1530 */ | ||
1636 | { 0x0000, 0x0000 }, /* R1531 */ | ||
1637 | { 0x0000, 0x0000 }, /* R1532 */ | ||
1638 | { 0x0000, 0x0000 }, /* R1533 */ | ||
1639 | { 0x0000, 0x0000 }, /* R1534 */ | ||
1640 | { 0x0000, 0x0000 }, /* R1535 */ | ||
1641 | { 0x01EF, 0x01EF }, /* R1536 - DAC1 Mixer Volumes */ | ||
1642 | { 0x0037, 0x0037 }, /* R1537 - DAC1 Left Mixer Routing */ | ||
1643 | { 0x0037, 0x0037 }, /* R1538 - DAC1 Right Mixer Routing */ | ||
1644 | { 0x01EF, 0x01EF }, /* R1539 - DAC2 Mixer Volumes */ | ||
1645 | { 0x0037, 0x0037 }, /* R1540 - DAC2 Left Mixer Routing */ | ||
1646 | { 0x0037, 0x0037 }, /* R1541 - DAC2 Right Mixer Routing */ | ||
1647 | { 0x0003, 0x0003 }, /* R1542 - AIF1 ADC1 Left Mixer Routing */ | ||
1648 | { 0x0003, 0x0003 }, /* R1543 - AIF1 ADC1 Right Mixer Routing */ | ||
1649 | { 0x0003, 0x0003 }, /* R1544 - AIF1 ADC2 Left Mixer Routing */ | ||
1650 | { 0x0003, 0x0003 }, /* R1545 - AIF1 ADC2 Right mixer Routing */ | ||
1651 | { 0x0000, 0x0000 }, /* R1546 */ | ||
1652 | { 0x0000, 0x0000 }, /* R1547 */ | ||
1653 | { 0x0000, 0x0000 }, /* R1548 */ | ||
1654 | { 0x0000, 0x0000 }, /* R1549 */ | ||
1655 | { 0x0000, 0x0000 }, /* R1550 */ | ||
1656 | { 0x0000, 0x0000 }, /* R1551 */ | ||
1657 | { 0x02FF, 0x03FF }, /* R1552 - DAC1 Left Volume */ | ||
1658 | { 0x02FF, 0x03FF }, /* R1553 - DAC1 Right Volume */ | ||
1659 | { 0x02FF, 0x03FF }, /* R1554 - DAC2 Left Volume */ | ||
1660 | { 0x02FF, 0x03FF }, /* R1555 - DAC2 Right Volume */ | ||
1661 | { 0x0003, 0x0003 }, /* R1556 - DAC Softmute */ | ||
1662 | { 0x0000, 0x0000 }, /* R1557 */ | ||
1663 | { 0x0000, 0x0000 }, /* R1558 */ | ||
1664 | { 0x0000, 0x0000 }, /* R1559 */ | ||
1665 | { 0x0000, 0x0000 }, /* R1560 */ | ||
1666 | { 0x0000, 0x0000 }, /* R1561 */ | ||
1667 | { 0x0000, 0x0000 }, /* R1562 */ | ||
1668 | { 0x0000, 0x0000 }, /* R1563 */ | ||
1669 | { 0x0000, 0x0000 }, /* R1564 */ | ||
1670 | { 0x0000, 0x0000 }, /* R1565 */ | ||
1671 | { 0x0000, 0x0000 }, /* R1566 */ | ||
1672 | { 0x0000, 0x0000 }, /* R1567 */ | ||
1673 | { 0x0003, 0x0003 }, /* R1568 - Oversampling */ | ||
1674 | { 0x03C3, 0x03C3 }, /* R1569 - Sidetone */ | ||
1675 | }; | ||
1676 | |||
1677 | static int wm8994_readable(unsigned int reg) | 100 | static int wm8994_readable(unsigned int reg) |
1678 | { | 101 | { |
1679 | switch (reg) { | 102 | switch (reg) { |
@@ -1696,9 +119,9 @@ static int wm8994_readable(unsigned int reg) | |||
1696 | break; | 119 | break; |
1697 | } | 120 | } |
1698 | 121 | ||
1699 | if (reg >= ARRAY_SIZE(access_masks)) | 122 | if (reg >= WM8994_CACHE_SIZE) |
1700 | return 0; | 123 | return 0; |
1701 | return access_masks[reg].readable != 0; | 124 | return wm8994_access_masks[reg].readable != 0; |
1702 | } | 125 | } |
1703 | 126 | ||
1704 | static int wm8994_volatile(unsigned int reg) | 127 | static int wm8994_volatile(unsigned int reg) |
@@ -1730,8 +153,6 @@ static int wm8994_write(struct snd_soc_codec *codec, unsigned int reg, | |||
1730 | if (!wm8994_volatile(reg)) | 153 | if (!wm8994_volatile(reg)) |
1731 | wm8994->reg_cache[reg] = value; | 154 | wm8994->reg_cache[reg] = value; |
1732 | 155 | ||
1733 | dev_dbg(codec->dev, "0x%x = 0x%x\n", reg, value); | ||
1734 | |||
1735 | return wm8994_reg_write(codec->control_data, reg, value); | 156 | return wm8994_reg_write(codec->control_data, reg, value); |
1736 | } | 157 | } |
1737 | 158 | ||
@@ -1837,7 +258,7 @@ static int configure_clock(struct snd_soc_codec *codec) | |||
1837 | 258 | ||
1838 | snd_soc_update_bits(codec, WM8994_CLOCKING_1, WM8994_SYSCLK_SRC, new); | 259 | snd_soc_update_bits(codec, WM8994_CLOCKING_1, WM8994_SYSCLK_SRC, new); |
1839 | 260 | ||
1840 | snd_soc_dapm_sync(codec); | 261 | snd_soc_dapm_sync(&codec->dapm); |
1841 | 262 | ||
1842 | return 0; | 263 | return 0; |
1843 | } | 264 | } |
@@ -2071,21 +492,33 @@ static int wm8994_get_retune_mobile_enum(struct snd_kcontrol *kcontrol, | |||
2071 | return 0; | 492 | return 0; |
2072 | } | 493 | } |
2073 | 494 | ||
2074 | static const char *aifdac_src_text[] = { | 495 | static const char *aif_chan_src_text[] = { |
2075 | "Left", "Right" | 496 | "Left", "Right" |
2076 | }; | 497 | }; |
2077 | 498 | ||
499 | static const struct soc_enum aif1adcl_src = | ||
500 | SOC_ENUM_SINGLE(WM8994_AIF1_CONTROL_1, 15, 2, aif_chan_src_text); | ||
501 | |||
502 | static const struct soc_enum aif1adcr_src = | ||
503 | SOC_ENUM_SINGLE(WM8994_AIF1_CONTROL_1, 14, 2, aif_chan_src_text); | ||
504 | |||
505 | static const struct soc_enum aif2adcl_src = | ||
506 | SOC_ENUM_SINGLE(WM8994_AIF2_CONTROL_1, 15, 2, aif_chan_src_text); | ||
507 | |||
508 | static const struct soc_enum aif2adcr_src = | ||
509 | SOC_ENUM_SINGLE(WM8994_AIF2_CONTROL_1, 14, 2, aif_chan_src_text); | ||
510 | |||
2078 | static const struct soc_enum aif1dacl_src = | 511 | static const struct soc_enum aif1dacl_src = |
2079 | SOC_ENUM_SINGLE(WM8994_AIF1_CONTROL_2, 15, 2, aifdac_src_text); | 512 | SOC_ENUM_SINGLE(WM8994_AIF1_CONTROL_2, 15, 2, aif_chan_src_text); |
2080 | 513 | ||
2081 | static const struct soc_enum aif1dacr_src = | 514 | static const struct soc_enum aif1dacr_src = |
2082 | SOC_ENUM_SINGLE(WM8994_AIF1_CONTROL_2, 14, 2, aifdac_src_text); | 515 | SOC_ENUM_SINGLE(WM8994_AIF1_CONTROL_2, 14, 2, aif_chan_src_text); |
2083 | 516 | ||
2084 | static const struct soc_enum aif2dacl_src = | 517 | static const struct soc_enum aif2dacl_src = |
2085 | SOC_ENUM_SINGLE(WM8994_AIF2_CONTROL_2, 15, 2, aifdac_src_text); | 518 | SOC_ENUM_SINGLE(WM8994_AIF2_CONTROL_2, 15, 2, aif_chan_src_text); |
2086 | 519 | ||
2087 | static const struct soc_enum aif2dacr_src = | 520 | static const struct soc_enum aif2dacr_src = |
2088 | SOC_ENUM_SINGLE(WM8994_AIF2_CONTROL_2, 14, 2, aifdac_src_text); | 521 | SOC_ENUM_SINGLE(WM8994_AIF2_CONTROL_2, 14, 2, aif_chan_src_text); |
2089 | 522 | ||
2090 | static const struct snd_kcontrol_new wm8994_snd_controls[] = { | 523 | static const struct snd_kcontrol_new wm8994_snd_controls[] = { |
2091 | SOC_DOUBLE_R_TLV("AIF1ADC1 Volume", WM8994_AIF1_ADC1_LEFT_VOLUME, | 524 | SOC_DOUBLE_R_TLV("AIF1ADC1 Volume", WM8994_AIF1_ADC1_LEFT_VOLUME, |
@@ -2098,6 +531,11 @@ SOC_DOUBLE_R_TLV("AIF2ADC Volume", WM8994_AIF2_ADC_LEFT_VOLUME, | |||
2098 | WM8994_AIF2_ADC_RIGHT_VOLUME, | 531 | WM8994_AIF2_ADC_RIGHT_VOLUME, |
2099 | 1, 119, 0, digital_tlv), | 532 | 1, 119, 0, digital_tlv), |
2100 | 533 | ||
534 | SOC_ENUM("AIF1ADCL Source", aif1adcl_src), | ||
535 | SOC_ENUM("AIF1ADCR Source", aif1adcr_src), | ||
536 | SOC_ENUM("AIF2ADCL Source", aif1adcl_src), | ||
537 | SOC_ENUM("AIF2ADCR Source", aif1adcr_src), | ||
538 | |||
2101 | SOC_ENUM("AIF1DACL Source", aif1dacl_src), | 539 | SOC_ENUM("AIF1DACL Source", aif1dacl_src), |
2102 | SOC_ENUM("AIF1DACR Source", aif1dacr_src), | 540 | SOC_ENUM("AIF1DACR Source", aif1dacr_src), |
2103 | SOC_ENUM("AIF2DACL Source", aif1dacl_src), | 541 | SOC_ENUM("AIF2DACL Source", aif1dacl_src), |
@@ -2228,6 +666,7 @@ static int clk_sys_event(struct snd_soc_dapm_widget *w, | |||
2228 | 666 | ||
2229 | static void wm8994_update_class_w(struct snd_soc_codec *codec) | 667 | static void wm8994_update_class_w(struct snd_soc_codec *codec) |
2230 | { | 668 | { |
669 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); | ||
2231 | int enable = 1; | 670 | int enable = 1; |
2232 | int source = 0; /* GCC flow analysis can't track enable */ | 671 | int source = 0; /* GCC flow analysis can't track enable */ |
2233 | int reg, reg_r; | 672 | int reg, reg_r; |
@@ -2278,11 +717,13 @@ static void wm8994_update_class_w(struct snd_soc_codec *codec) | |||
2278 | WM8994_CP_DYN_PWR | | 717 | WM8994_CP_DYN_PWR | |
2279 | WM8994_CP_DYN_SRC_SEL_MASK, | 718 | WM8994_CP_DYN_SRC_SEL_MASK, |
2280 | source | WM8994_CP_DYN_PWR); | 719 | source | WM8994_CP_DYN_PWR); |
720 | wm8994->hubs.class_w = true; | ||
2281 | 721 | ||
2282 | } else { | 722 | } else { |
2283 | dev_dbg(codec->dev, "Class W disabled\n"); | 723 | dev_dbg(codec->dev, "Class W disabled\n"); |
2284 | snd_soc_update_bits(codec, WM8994_CLASS_W_1, | 724 | snd_soc_update_bits(codec, WM8994_CLASS_W_1, |
2285 | WM8994_CP_DYN_PWR, 0); | 725 | WM8994_CP_DYN_PWR, 0); |
726 | wm8994->hubs.class_w = false; | ||
2286 | } | 727 | } |
2287 | } | 728 | } |
2288 | 729 | ||
@@ -3107,7 +1548,7 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec, | |||
3107 | break; | 1548 | break; |
3108 | 1549 | ||
3109 | case SND_SOC_BIAS_STANDBY: | 1550 | case SND_SOC_BIAS_STANDBY: |
3110 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 1551 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
3111 | /* Tweak DC servo and DSP configuration for | 1552 | /* Tweak DC servo and DSP configuration for |
3112 | * improved performance. */ | 1553 | * improved performance. */ |
3113 | if (wm8994->revision < 4) { | 1554 | if (wm8994->revision < 4) { |
@@ -3151,7 +1592,7 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec, | |||
3151 | break; | 1592 | break; |
3152 | 1593 | ||
3153 | case SND_SOC_BIAS_OFF: | 1594 | case SND_SOC_BIAS_OFF: |
3154 | if (codec->bias_level == SND_SOC_BIAS_STANDBY) { | 1595 | if (codec->dapm.bias_level == SND_SOC_BIAS_STANDBY) { |
3155 | /* Switch over to startup biases */ | 1596 | /* Switch over to startup biases */ |
3156 | snd_soc_update_bits(codec, WM8994_ANTIPOP_2, | 1597 | snd_soc_update_bits(codec, WM8994_ANTIPOP_2, |
3157 | WM8994_BIAS_SRC | | 1598 | WM8994_BIAS_SRC | |
@@ -3186,7 +1627,7 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec, | |||
3186 | } | 1627 | } |
3187 | break; | 1628 | break; |
3188 | } | 1629 | } |
3189 | codec->bias_level = level; | 1630 | codec->dapm.bias_level = level; |
3190 | return 0; | 1631 | return 0; |
3191 | } | 1632 | } |
3192 | 1633 | ||
@@ -3640,7 +2081,7 @@ static int wm8994_resume(struct snd_soc_codec *codec) | |||
3640 | break; | 2081 | break; |
3641 | } | 2082 | } |
3642 | 2083 | ||
3643 | if (!access_masks[i].writable) | 2084 | if (!wm8994_access_masks[i].writable) |
3644 | continue; | 2085 | continue; |
3645 | 2086 | ||
3646 | wm8994_reg_write(codec->control_data, i, reg_cache[i]); | 2087 | wm8994_reg_write(codec->control_data, i, reg_cache[i]); |
@@ -3894,6 +2335,7 @@ static irqreturn_t wm8994_mic_irq(int irq, void *data) | |||
3894 | static int wm8994_codec_probe(struct snd_soc_codec *codec) | 2335 | static int wm8994_codec_probe(struct snd_soc_codec *codec) |
3895 | { | 2336 | { |
3896 | struct wm8994_priv *wm8994; | 2337 | struct wm8994_priv *wm8994; |
2338 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
3897 | int ret, i; | 2339 | int ret, i; |
3898 | 2340 | ||
3899 | codec->control_data = dev_get_drvdata(codec->dev->parent); | 2341 | codec->control_data = dev_get_drvdata(codec->dev->parent); |
@@ -4034,10 +2476,10 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec) | |||
4034 | wm_hubs_add_analogue_controls(codec); | 2476 | wm_hubs_add_analogue_controls(codec); |
4035 | snd_soc_add_controls(codec, wm8994_snd_controls, | 2477 | snd_soc_add_controls(codec, wm8994_snd_controls, |
4036 | ARRAY_SIZE(wm8994_snd_controls)); | 2478 | ARRAY_SIZE(wm8994_snd_controls)); |
4037 | snd_soc_dapm_new_controls(codec, wm8994_dapm_widgets, | 2479 | snd_soc_dapm_new_controls(dapm, wm8994_dapm_widgets, |
4038 | ARRAY_SIZE(wm8994_dapm_widgets)); | 2480 | ARRAY_SIZE(wm8994_dapm_widgets)); |
4039 | wm_hubs_add_analogue_routes(codec, 0, 0); | 2481 | wm_hubs_add_analogue_routes(codec, 0, 0); |
4040 | snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon)); | 2482 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); |
4041 | 2483 | ||
4042 | return 0; | 2484 | return 0; |
4043 | 2485 | ||
diff --git a/sound/soc/codecs/wm8994.h b/sound/soc/codecs/wm8994.h index d8dce260c430..b8b3166e1f03 100644 --- a/sound/soc/codecs/wm8994.h +++ b/sound/soc/codecs/wm8994.h | |||
@@ -31,4 +31,13 @@ | |||
31 | int wm8994_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack, | 31 | int wm8994_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack, |
32 | int micbias, int det, int shrt); | 32 | int micbias, int det, int shrt); |
33 | 33 | ||
34 | #define WM8994_CACHE_SIZE 1570 | ||
35 | |||
36 | struct wm8994_access_mask { | ||
37 | unsigned short readable; /* Mask of readable bits */ | ||
38 | unsigned short writable; /* Mask of writable bits */ | ||
39 | }; | ||
40 | |||
41 | extern const struct wm8994_access_mask wm8994_access_masks[WM8994_CACHE_SIZE]; | ||
42 | |||
34 | #endif | 43 | #endif |
diff --git a/sound/soc/codecs/wm9081.c b/sound/soc/codecs/wm9081.c index ecc7c37180c7..c7060775e88b 100644 --- a/sound/soc/codecs/wm9081.c +++ b/sound/soc/codecs/wm9081.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <sound/pcm.h> | 23 | #include <sound/pcm.h> |
24 | #include <sound/pcm_params.h> | 24 | #include <sound/pcm_params.h> |
25 | #include <sound/soc.h> | 25 | #include <sound/soc.h> |
26 | #include <sound/soc-dapm.h> | ||
27 | #include <sound/initval.h> | 26 | #include <sound/initval.h> |
28 | #include <sound/tlv.h> | 27 | #include <sound/tlv.h> |
29 | 28 | ||
@@ -805,7 +804,7 @@ static int wm9081_set_bias_level(struct snd_soc_codec *codec, | |||
805 | 804 | ||
806 | case SND_SOC_BIAS_STANDBY: | 805 | case SND_SOC_BIAS_STANDBY: |
807 | /* Initial cold start */ | 806 | /* Initial cold start */ |
808 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 807 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
809 | /* Disable LINEOUT discharge */ | 808 | /* Disable LINEOUT discharge */ |
810 | reg = snd_soc_read(codec, WM9081_ANTI_POP_CONTROL); | 809 | reg = snd_soc_read(codec, WM9081_ANTI_POP_CONTROL); |
811 | reg &= ~WM9081_LINEOUT_DISCH; | 810 | reg &= ~WM9081_LINEOUT_DISCH; |
@@ -865,7 +864,7 @@ static int wm9081_set_bias_level(struct snd_soc_codec *codec, | |||
865 | break; | 864 | break; |
866 | } | 865 | } |
867 | 866 | ||
868 | codec->bias_level = level; | 867 | codec->dapm.bias_level = level; |
869 | 868 | ||
870 | return 0; | 869 | return 0; |
871 | } | 870 | } |
@@ -1228,6 +1227,7 @@ static struct snd_soc_dai_driver wm9081_dai = { | |||
1228 | static int wm9081_probe(struct snd_soc_codec *codec) | 1227 | static int wm9081_probe(struct snd_soc_codec *codec) |
1229 | { | 1228 | { |
1230 | struct wm9081_priv *wm9081 = snd_soc_codec_get_drvdata(codec); | 1229 | struct wm9081_priv *wm9081 = snd_soc_codec_get_drvdata(codec); |
1230 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
1231 | int ret; | 1231 | int ret; |
1232 | u16 reg; | 1232 | u16 reg; |
1233 | 1233 | ||
@@ -1269,9 +1269,9 @@ static int wm9081_probe(struct snd_soc_codec *codec) | |||
1269 | ARRAY_SIZE(wm9081_eq_controls)); | 1269 | ARRAY_SIZE(wm9081_eq_controls)); |
1270 | } | 1270 | } |
1271 | 1271 | ||
1272 | snd_soc_dapm_new_controls(codec, wm9081_dapm_widgets, | 1272 | snd_soc_dapm_new_controls(dapm, wm9081_dapm_widgets, |
1273 | ARRAY_SIZE(wm9081_dapm_widgets)); | 1273 | ARRAY_SIZE(wm9081_dapm_widgets)); |
1274 | snd_soc_dapm_add_routes(codec, audio_paths, ARRAY_SIZE(audio_paths)); | 1274 | snd_soc_dapm_add_routes(dapm, audio_paths, ARRAY_SIZE(audio_paths)); |
1275 | 1275 | ||
1276 | return ret; | 1276 | return ret; |
1277 | } | 1277 | } |
diff --git a/sound/soc/codecs/wm9090.c b/sound/soc/codecs/wm9090.c index 99c046ba46bb..7ba5807cac36 100644 --- a/sound/soc/codecs/wm9090.c +++ b/sound/soc/codecs/wm9090.c | |||
@@ -28,7 +28,6 @@ | |||
28 | #include <linux/slab.h> | 28 | #include <linux/slab.h> |
29 | #include <sound/initval.h> | 29 | #include <sound/initval.h> |
30 | #include <sound/soc.h> | 30 | #include <sound/soc.h> |
31 | #include <sound/soc-dapm.h> | ||
32 | #include <sound/tlv.h> | 31 | #include <sound/tlv.h> |
33 | #include <sound/wm9090.h> | 32 | #include <sound/wm9090.h> |
34 | 33 | ||
@@ -443,31 +442,32 @@ static const struct snd_soc_dapm_route audio_map_in2_diff[] = { | |||
443 | static int wm9090_add_controls(struct snd_soc_codec *codec) | 442 | static int wm9090_add_controls(struct snd_soc_codec *codec) |
444 | { | 443 | { |
445 | struct wm9090_priv *wm9090 = snd_soc_codec_get_drvdata(codec); | 444 | struct wm9090_priv *wm9090 = snd_soc_codec_get_drvdata(codec); |
445 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
446 | int i; | 446 | int i; |
447 | 447 | ||
448 | snd_soc_dapm_new_controls(codec, wm9090_dapm_widgets, | 448 | snd_soc_dapm_new_controls(dapm, wm9090_dapm_widgets, |
449 | ARRAY_SIZE(wm9090_dapm_widgets)); | 449 | ARRAY_SIZE(wm9090_dapm_widgets)); |
450 | 450 | ||
451 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 451 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
452 | 452 | ||
453 | snd_soc_add_controls(codec, wm9090_controls, | 453 | snd_soc_add_controls(codec, wm9090_controls, |
454 | ARRAY_SIZE(wm9090_controls)); | 454 | ARRAY_SIZE(wm9090_controls)); |
455 | 455 | ||
456 | if (wm9090->pdata.lin1_diff) { | 456 | if (wm9090->pdata.lin1_diff) { |
457 | snd_soc_dapm_add_routes(codec, audio_map_in1_diff, | 457 | snd_soc_dapm_add_routes(dapm, audio_map_in1_diff, |
458 | ARRAY_SIZE(audio_map_in1_diff)); | 458 | ARRAY_SIZE(audio_map_in1_diff)); |
459 | } else { | 459 | } else { |
460 | snd_soc_dapm_add_routes(codec, audio_map_in1_se, | 460 | snd_soc_dapm_add_routes(dapm, audio_map_in1_se, |
461 | ARRAY_SIZE(audio_map_in1_se)); | 461 | ARRAY_SIZE(audio_map_in1_se)); |
462 | snd_soc_add_controls(codec, wm9090_in1_se_controls, | 462 | snd_soc_add_controls(codec, wm9090_in1_se_controls, |
463 | ARRAY_SIZE(wm9090_in1_se_controls)); | 463 | ARRAY_SIZE(wm9090_in1_se_controls)); |
464 | } | 464 | } |
465 | 465 | ||
466 | if (wm9090->pdata.lin2_diff) { | 466 | if (wm9090->pdata.lin2_diff) { |
467 | snd_soc_dapm_add_routes(codec, audio_map_in2_diff, | 467 | snd_soc_dapm_add_routes(dapm, audio_map_in2_diff, |
468 | ARRAY_SIZE(audio_map_in2_diff)); | 468 | ARRAY_SIZE(audio_map_in2_diff)); |
469 | } else { | 469 | } else { |
470 | snd_soc_dapm_add_routes(codec, audio_map_in2_se, | 470 | snd_soc_dapm_add_routes(dapm, audio_map_in2_se, |
471 | ARRAY_SIZE(audio_map_in2_se)); | 471 | ARRAY_SIZE(audio_map_in2_se)); |
472 | snd_soc_add_controls(codec, wm9090_in2_se_controls, | 472 | snd_soc_add_controls(codec, wm9090_in2_se_controls, |
473 | ARRAY_SIZE(wm9090_in2_se_controls)); | 473 | ARRAY_SIZE(wm9090_in2_se_controls)); |
@@ -514,7 +514,7 @@ static int wm9090_set_bias_level(struct snd_soc_codec *codec, | |||
514 | break; | 514 | break; |
515 | 515 | ||
516 | case SND_SOC_BIAS_STANDBY: | 516 | case SND_SOC_BIAS_STANDBY: |
517 | if (codec->bias_level == SND_SOC_BIAS_OFF) { | 517 | if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) { |
518 | /* Restore the register cache */ | 518 | /* Restore the register cache */ |
519 | for (i = 1; i < codec->driver->reg_cache_size; i++) { | 519 | for (i = 1; i < codec->driver->reg_cache_size; i++) { |
520 | if (reg_cache[i] == wm9090_reg_defaults[i]) | 520 | if (reg_cache[i] == wm9090_reg_defaults[i]) |
@@ -544,7 +544,7 @@ static int wm9090_set_bias_level(struct snd_soc_codec *codec, | |||
544 | break; | 544 | break; |
545 | } | 545 | } |
546 | 546 | ||
547 | codec->bias_level = level; | 547 | codec->dapm.bias_level = level; |
548 | 548 | ||
549 | return 0; | 549 | return 0; |
550 | } | 550 | } |
diff --git a/sound/soc/codecs/wm9705.c b/sound/soc/codecs/wm9705.c index a144acda751c..47b357adabdd 100644 --- a/sound/soc/codecs/wm9705.c +++ b/sound/soc/codecs/wm9705.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <sound/ac97_codec.h> | 19 | #include <sound/ac97_codec.h> |
20 | #include <sound/initval.h> | 20 | #include <sound/initval.h> |
21 | #include <sound/soc.h> | 21 | #include <sound/soc.h> |
22 | #include <sound/soc-dapm.h> | ||
23 | 22 | ||
24 | #include "wm9705.h" | 23 | #include "wm9705.h" |
25 | 24 | ||
@@ -203,9 +202,11 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
203 | 202 | ||
204 | static int wm9705_add_widgets(struct snd_soc_codec *codec) | 203 | static int wm9705_add_widgets(struct snd_soc_codec *codec) |
205 | { | 204 | { |
206 | snd_soc_dapm_new_controls(codec, wm9705_dapm_widgets, | 205 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
206 | |||
207 | snd_soc_dapm_new_controls(dapm, wm9705_dapm_widgets, | ||
207 | ARRAY_SIZE(wm9705_dapm_widgets)); | 208 | ARRAY_SIZE(wm9705_dapm_widgets)); |
208 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 209 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
209 | 210 | ||
210 | return 0; | 211 | return 0; |
211 | } | 212 | } |
diff --git a/sound/soc/codecs/wm9712.c b/sound/soc/codecs/wm9712.c index d2f224d62744..bf5d4ef1a2a6 100644 --- a/sound/soc/codecs/wm9712.c +++ b/sound/soc/codecs/wm9712.c | |||
@@ -20,7 +20,6 @@ | |||
20 | #include <sound/ac97_codec.h> | 20 | #include <sound/ac97_codec.h> |
21 | #include <sound/initval.h> | 21 | #include <sound/initval.h> |
22 | #include <sound/soc.h> | 22 | #include <sound/soc.h> |
23 | #include <sound/soc-dapm.h> | ||
24 | #include "wm9712.h" | 23 | #include "wm9712.h" |
25 | 24 | ||
26 | #define WM9712_VERSION "0.4" | 25 | #define WM9712_VERSION "0.4" |
@@ -432,10 +431,11 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
432 | 431 | ||
433 | static int wm9712_add_widgets(struct snd_soc_codec *codec) | 432 | static int wm9712_add_widgets(struct snd_soc_codec *codec) |
434 | { | 433 | { |
435 | snd_soc_dapm_new_controls(codec, wm9712_dapm_widgets, | 434 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
436 | ARRAY_SIZE(wm9712_dapm_widgets)); | ||
437 | 435 | ||
438 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 436 | snd_soc_dapm_new_controls(dapm, wm9712_dapm_widgets, |
437 | ARRAY_SIZE(wm9712_dapm_widgets)); | ||
438 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); | ||
439 | 439 | ||
440 | return 0; | 440 | return 0; |
441 | } | 441 | } |
@@ -570,7 +570,7 @@ static int wm9712_set_bias_level(struct snd_soc_codec *codec, | |||
570 | ac97_write(codec, AC97_POWERDOWN, 0xffff); | 570 | ac97_write(codec, AC97_POWERDOWN, 0xffff); |
571 | break; | 571 | break; |
572 | } | 572 | } |
573 | codec->bias_level = level; | 573 | codec->dapm.bias_level = level; |
574 | return 0; | 574 | return 0; |
575 | } | 575 | } |
576 | 576 | ||
diff --git a/sound/soc/codecs/wm9713.c b/sound/soc/codecs/wm9713.c index 7da13b07a53d..38ed98558718 100644 --- a/sound/soc/codecs/wm9713.c +++ b/sound/soc/codecs/wm9713.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <sound/pcm_params.h> | 26 | #include <sound/pcm_params.h> |
27 | #include <sound/tlv.h> | 27 | #include <sound/tlv.h> |
28 | #include <sound/soc.h> | 28 | #include <sound/soc.h> |
29 | #include <sound/soc-dapm.h> | ||
30 | 29 | ||
31 | #include "wm9713.h" | 30 | #include "wm9713.h" |
32 | 31 | ||
@@ -647,10 +646,12 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
647 | 646 | ||
648 | static int wm9713_add_widgets(struct snd_soc_codec *codec) | 647 | static int wm9713_add_widgets(struct snd_soc_codec *codec) |
649 | { | 648 | { |
650 | snd_soc_dapm_new_controls(codec, wm9713_dapm_widgets, | 649 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
650 | |||
651 | snd_soc_dapm_new_controls(dapm, wm9713_dapm_widgets, | ||
651 | ARRAY_SIZE(wm9713_dapm_widgets)); | 652 | ARRAY_SIZE(wm9713_dapm_widgets)); |
652 | 653 | ||
653 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 654 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
654 | 655 | ||
655 | return 0; | 656 | return 0; |
656 | } | 657 | } |
@@ -1147,7 +1148,7 @@ static int wm9713_set_bias_level(struct snd_soc_codec *codec, | |||
1147 | ac97_write(codec, AC97_POWERDOWN, 0xffff); | 1148 | ac97_write(codec, AC97_POWERDOWN, 0xffff); |
1148 | break; | 1149 | break; |
1149 | } | 1150 | } |
1150 | codec->bias_level = level; | 1151 | codec->dapm.bias_level = level; |
1151 | return 0; | 1152 | return 0; |
1152 | } | 1153 | } |
1153 | 1154 | ||
diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c index 19ca782ac970..e7a19d6ada50 100644 --- a/sound/soc/codecs/wm_hubs.c +++ b/sound/soc/codecs/wm_hubs.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include <sound/pcm.h> | 22 | #include <sound/pcm.h> |
23 | #include <sound/pcm_params.h> | 23 | #include <sound/pcm_params.h> |
24 | #include <sound/soc.h> | 24 | #include <sound/soc.h> |
25 | #include <sound/soc-dapm.h> | ||
26 | #include <sound/initval.h> | 25 | #include <sound/initval.h> |
27 | #include <sound/tlv.h> | 26 | #include <sound/tlv.h> |
28 | 27 | ||
@@ -94,6 +93,18 @@ static void calibrate_dc_servo(struct snd_soc_codec *codec) | |||
94 | struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); | 93 | struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); |
95 | u16 reg, reg_l, reg_r, dcs_cfg; | 94 | u16 reg, reg_l, reg_r, dcs_cfg; |
96 | 95 | ||
96 | /* If we're using a digital only path and have a previously | ||
97 | * callibrated DC servo offset stored then use that. */ | ||
98 | if (hubs->class_w && hubs->class_w_dcs) { | ||
99 | dev_dbg(codec->dev, "Using cached DC servo offset %x\n", | ||
100 | hubs->class_w_dcs); | ||
101 | snd_soc_write(codec, WM8993_DC_SERVO_3, hubs->class_w_dcs); | ||
102 | wait_for_dc_servo(codec, | ||
103 | WM8993_DCS_TRIG_DAC_WR_0 | | ||
104 | WM8993_DCS_TRIG_DAC_WR_1); | ||
105 | return; | ||
106 | } | ||
107 | |||
97 | /* Set for 32 series updates */ | 108 | /* Set for 32 series updates */ |
98 | snd_soc_update_bits(codec, WM8993_DC_SERVO_1, | 109 | snd_soc_update_bits(codec, WM8993_DC_SERVO_1, |
99 | WM8993_DCS_SERIES_NO_01_MASK, | 110 | WM8993_DCS_SERIES_NO_01_MASK, |
@@ -101,34 +112,34 @@ static void calibrate_dc_servo(struct snd_soc_codec *codec) | |||
101 | wait_for_dc_servo(codec, | 112 | wait_for_dc_servo(codec, |
102 | WM8993_DCS_TRIG_SERIES_0 | WM8993_DCS_TRIG_SERIES_1); | 113 | WM8993_DCS_TRIG_SERIES_0 | WM8993_DCS_TRIG_SERIES_1); |
103 | 114 | ||
115 | /* Different chips in the family support different readback | ||
116 | * methods. | ||
117 | */ | ||
118 | switch (hubs->dcs_readback_mode) { | ||
119 | case 0: | ||
120 | reg_l = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_1) | ||
121 | & WM8993_DCS_INTEG_CHAN_0_MASK; | ||
122 | reg_r = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_2) | ||
123 | & WM8993_DCS_INTEG_CHAN_1_MASK; | ||
124 | break; | ||
125 | case 1: | ||
126 | reg = snd_soc_read(codec, WM8993_DC_SERVO_3); | ||
127 | reg_l = (reg & WM8993_DCS_DAC_WR_VAL_1_MASK) | ||
128 | >> WM8993_DCS_DAC_WR_VAL_1_SHIFT; | ||
129 | reg_r = reg & WM8993_DCS_DAC_WR_VAL_0_MASK; | ||
130 | break; | ||
131 | default: | ||
132 | WARN(1, "Unknown DCS readback method\n"); | ||
133 | break; | ||
134 | } | ||
135 | |||
136 | dev_dbg(codec->dev, "DCS input: %x %x\n", reg_l, reg_r); | ||
137 | |||
104 | /* Apply correction to DC servo result */ | 138 | /* Apply correction to DC servo result */ |
105 | if (hubs->dcs_codes) { | 139 | if (hubs->dcs_codes) { |
106 | dev_dbg(codec->dev, "Applying %d code DC servo correction\n", | 140 | dev_dbg(codec->dev, "Applying %d code DC servo correction\n", |
107 | hubs->dcs_codes); | 141 | hubs->dcs_codes); |
108 | 142 | ||
109 | /* Different chips in the family support different | ||
110 | * readback methods. | ||
111 | */ | ||
112 | switch (hubs->dcs_readback_mode) { | ||
113 | case 0: | ||
114 | reg_l = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_1) | ||
115 | & WM8993_DCS_INTEG_CHAN_0_MASK;; | ||
116 | reg_r = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_2) | ||
117 | & WM8993_DCS_INTEG_CHAN_1_MASK; | ||
118 | break; | ||
119 | case 1: | ||
120 | reg = snd_soc_read(codec, WM8993_DC_SERVO_3); | ||
121 | reg_l = (reg & WM8993_DCS_DAC_WR_VAL_1_MASK) | ||
122 | >> WM8993_DCS_DAC_WR_VAL_1_SHIFT; | ||
123 | reg_r = reg & WM8993_DCS_DAC_WR_VAL_0_MASK; | ||
124 | break; | ||
125 | default: | ||
126 | WARN(1, "Unknown DCS readback method\n"); | ||
127 | break; | ||
128 | } | ||
129 | |||
130 | dev_dbg(codec->dev, "DCS input: %x %x\n", reg_l, reg_r); | ||
131 | |||
132 | /* HPOUT1L */ | 143 | /* HPOUT1L */ |
133 | if (reg_l + hubs->dcs_codes > 0 && | 144 | if (reg_l + hubs->dcs_codes > 0 && |
134 | reg_l + hubs->dcs_codes < 0xff) | 145 | reg_l + hubs->dcs_codes < 0xff) |
@@ -148,7 +159,15 @@ static void calibrate_dc_servo(struct snd_soc_codec *codec) | |||
148 | wait_for_dc_servo(codec, | 159 | wait_for_dc_servo(codec, |
149 | WM8993_DCS_TRIG_DAC_WR_0 | | 160 | WM8993_DCS_TRIG_DAC_WR_0 | |
150 | WM8993_DCS_TRIG_DAC_WR_1); | 161 | WM8993_DCS_TRIG_DAC_WR_1); |
162 | } else { | ||
163 | dcs_cfg = reg_l << WM8993_DCS_DAC_WR_VAL_1_SHIFT; | ||
164 | dcs_cfg |= reg_r; | ||
151 | } | 165 | } |
166 | |||
167 | /* Save the callibrated offset if we're in class W mode and | ||
168 | * therefore don't have any analogue signal mixed in. */ | ||
169 | if (hubs->class_w) | ||
170 | hubs->class_w_dcs = dcs_cfg; | ||
152 | } | 171 | } |
153 | 172 | ||
154 | /* | 173 | /* |
@@ -163,6 +182,9 @@ static int wm8993_put_dc_servo(struct snd_kcontrol *kcontrol, | |||
163 | 182 | ||
164 | ret = snd_soc_put_volsw_2r(kcontrol, ucontrol); | 183 | ret = snd_soc_put_volsw_2r(kcontrol, ucontrol); |
165 | 184 | ||
185 | /* Updating the analogue gains invalidates the DC servo cache */ | ||
186 | hubs->class_w_dcs = 0; | ||
187 | |||
166 | /* If we're applying an offset correction then updating the | 188 | /* If we're applying an offset correction then updating the |
167 | * callibration would be likely to introduce further offsets. */ | 189 | * callibration would be likely to introduce further offsets. */ |
168 | if (hubs->dcs_codes) | 190 | if (hubs->dcs_codes) |
@@ -791,6 +813,8 @@ static const struct snd_soc_dapm_route lineout2_se_routes[] = { | |||
791 | 813 | ||
792 | int wm_hubs_add_analogue_controls(struct snd_soc_codec *codec) | 814 | int wm_hubs_add_analogue_controls(struct snd_soc_codec *codec) |
793 | { | 815 | { |
816 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
817 | |||
794 | /* Latch volume update bits & default ZC on */ | 818 | /* Latch volume update bits & default ZC on */ |
795 | snd_soc_update_bits(codec, WM8993_LEFT_LINE_INPUT_1_2_VOLUME, | 819 | snd_soc_update_bits(codec, WM8993_LEFT_LINE_INPUT_1_2_VOLUME, |
796 | WM8993_IN1_VU, WM8993_IN1_VU); | 820 | WM8993_IN1_VU, WM8993_IN1_VU); |
@@ -819,7 +843,7 @@ int wm_hubs_add_analogue_controls(struct snd_soc_codec *codec) | |||
819 | snd_soc_add_controls(codec, analogue_snd_controls, | 843 | snd_soc_add_controls(codec, analogue_snd_controls, |
820 | ARRAY_SIZE(analogue_snd_controls)); | 844 | ARRAY_SIZE(analogue_snd_controls)); |
821 | 845 | ||
822 | snd_soc_dapm_new_controls(codec, analogue_dapm_widgets, | 846 | snd_soc_dapm_new_controls(dapm, analogue_dapm_widgets, |
823 | ARRAY_SIZE(analogue_dapm_widgets)); | 847 | ARRAY_SIZE(analogue_dapm_widgets)); |
824 | return 0; | 848 | return 0; |
825 | } | 849 | } |
@@ -828,24 +852,26 @@ EXPORT_SYMBOL_GPL(wm_hubs_add_analogue_controls); | |||
828 | int wm_hubs_add_analogue_routes(struct snd_soc_codec *codec, | 852 | int wm_hubs_add_analogue_routes(struct snd_soc_codec *codec, |
829 | int lineout1_diff, int lineout2_diff) | 853 | int lineout1_diff, int lineout2_diff) |
830 | { | 854 | { |
831 | snd_soc_dapm_add_routes(codec, analogue_routes, | 855 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
856 | |||
857 | snd_soc_dapm_add_routes(dapm, analogue_routes, | ||
832 | ARRAY_SIZE(analogue_routes)); | 858 | ARRAY_SIZE(analogue_routes)); |
833 | 859 | ||
834 | if (lineout1_diff) | 860 | if (lineout1_diff) |
835 | snd_soc_dapm_add_routes(codec, | 861 | snd_soc_dapm_add_routes(dapm, |
836 | lineout1_diff_routes, | 862 | lineout1_diff_routes, |
837 | ARRAY_SIZE(lineout1_diff_routes)); | 863 | ARRAY_SIZE(lineout1_diff_routes)); |
838 | else | 864 | else |
839 | snd_soc_dapm_add_routes(codec, | 865 | snd_soc_dapm_add_routes(dapm, |
840 | lineout1_se_routes, | 866 | lineout1_se_routes, |
841 | ARRAY_SIZE(lineout1_se_routes)); | 867 | ARRAY_SIZE(lineout1_se_routes)); |
842 | 868 | ||
843 | if (lineout2_diff) | 869 | if (lineout2_diff) |
844 | snd_soc_dapm_add_routes(codec, | 870 | snd_soc_dapm_add_routes(dapm, |
845 | lineout2_diff_routes, | 871 | lineout2_diff_routes, |
846 | ARRAY_SIZE(lineout2_diff_routes)); | 872 | ARRAY_SIZE(lineout2_diff_routes)); |
847 | else | 873 | else |
848 | snd_soc_dapm_add_routes(codec, | 874 | snd_soc_dapm_add_routes(dapm, |
849 | lineout2_se_routes, | 875 | lineout2_se_routes, |
850 | ARRAY_SIZE(lineout2_se_routes)); | 876 | ARRAY_SIZE(lineout2_se_routes)); |
851 | 877 | ||
@@ -872,7 +898,7 @@ int wm_hubs_handle_analogue_pdata(struct snd_soc_codec *codec, | |||
872 | * VMID as an output and can disable it. | 898 | * VMID as an output and can disable it. |
873 | */ | 899 | */ |
874 | if (lineout1_diff && lineout2_diff) | 900 | if (lineout1_diff && lineout2_diff) |
875 | codec->idle_bias_off = 1; | 901 | codec->dapm.idle_bias_off = 1; |
876 | 902 | ||
877 | if (lineout1fb) | 903 | if (lineout1fb) |
878 | snd_soc_update_bits(codec, WM8993_ADDITIONAL_CONTROL, | 904 | snd_soc_update_bits(codec, WM8993_ADDITIONAL_CONTROL, |
diff --git a/sound/soc/codecs/wm_hubs.h b/sound/soc/codecs/wm_hubs.h index e51c16683589..f8a5e976b5e6 100644 --- a/sound/soc/codecs/wm_hubs.h +++ b/sound/soc/codecs/wm_hubs.h | |||
@@ -23,6 +23,9 @@ struct wm_hubs_data { | |||
23 | int dcs_codes; | 23 | int dcs_codes; |
24 | int dcs_readback_mode; | 24 | int dcs_readback_mode; |
25 | int hp_startup_mode; | 25 | int hp_startup_mode; |
26 | |||
27 | bool class_w; | ||
28 | u16 class_w_dcs; | ||
26 | }; | 29 | }; |
27 | 30 | ||
28 | extern int wm_hubs_add_analogue_controls(struct snd_soc_codec *); | 31 | extern int wm_hubs_add_analogue_controls(struct snd_soc_codec *); |