aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-01-18 11:05:50 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-18 11:05:50 -0500
commitb7c15e4a1cbf19be3d3063819b472806902fb525 (patch)
tree802103cb642b9e7fb76677de544289a754cf4c57
parent6a7f6ec9512970874fa9fc883ea44d77d0f287c2 (diff)
parent27de094f54a4d96bae2cd3121eb157bb8a34f729 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: ALSA: hda - Fix initialization for HP 2011 notebooks ALSA: hda - Add support for VMware controller ALSA: hda - consitify string arrays ALSA: hda - Add add multi-streaming playback for AD1988 ASoC: EP93xx: fixed LRCLK rate and DMA oper. in I2S code ASoC: WM8990: msleep() takes milliseconds not jiffies ALSA : au88x0 - Limit number of channels to fix Oops via OSS emu ALSA: constify functions in ac97 ASoC: WL1273 FM radio: Fix breakage with MFD API changes ALSA: hda - More coverage for odd-number channels elimination for HDMI ALSA: hda - Store PCM parameters properly in HDMI open callback ALSA: hda - Rearrange fixup struct in patch_realtek.c ALSA: oxygen: Xonar DG: fix CS4245 register writes ALSA: hda - Suppress the odd number of channels for HDMI ALSA: hda - Add fixup-call in init callback ALSA: hda - Reorganize fixup structure for Realtek ALSA: hda - Apply Sony VAIO hweq fixup only once ALSA: hda - Apply mario fixup only once ALSA: hda - Remove unused fixup entry for ALC262
-rw-r--r--include/sound/ac97_codec.h2
-rw-r--r--sound/pci/ac97/ac97_codec.c2
-rw-r--r--sound/pci/ac97/ac97_patch.c62
-rw-r--r--sound/pci/au88x0/au88x0_pcm.c24
-rw-r--r--sound/pci/hda/hda_codec.c10
-rw-r--r--sound/pci/hda/hda_generic.c7
-rw-r--r--sound/pci/hda/hda_intel.c2
-rw-r--r--sound/pci/hda/hda_local.h6
-rw-r--r--sound/pci/hda/hda_proc.c2
-rw-r--r--sound/pci/hda/patch_analog.c208
-rw-r--r--sound/pci/hda/patch_cirrus.c4
-rw-r--r--sound/pci/hda/patch_cmedia.c2
-rw-r--r--sound/pci/hda/patch_conexant.c14
-rw-r--r--sound/pci/hda/patch_hdmi.c12
-rw-r--r--sound/pci/hda/patch_realtek.c367
-rw-r--r--sound/pci/hda/patch_sigmatel.c89
-rw-r--r--sound/pci/hda/patch_via.c28
-rw-r--r--sound/pci/oxygen/xonar_dg.c2
-rw-r--r--sound/soc/codecs/Kconfig2
-rw-r--r--sound/soc/codecs/wl1273.c29
-rw-r--r--sound/soc/codecs/wl1273.h71
-rw-r--r--sound/soc/codecs/wm8990.c10
-rw-r--r--sound/soc/ep93xx/ep93xx-i2s.c18
23 files changed, 578 insertions, 395 deletions
diff --git a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h
index 49400459b477..b602f475cdbb 100644
--- a/include/sound/ac97_codec.h
+++ b/include/sound/ac97_codec.h
@@ -477,7 +477,7 @@ struct snd_ac97_template {
477 477
478struct snd_ac97 { 478struct snd_ac97 {
479 /* -- lowlevel (hardware) driver specific -- */ 479 /* -- lowlevel (hardware) driver specific -- */
480 struct snd_ac97_build_ops * build_ops; 480 const struct snd_ac97_build_ops *build_ops;
481 void *private_data; 481 void *private_data;
482 void (*private_free) (struct snd_ac97 *ac97); 482 void (*private_free) (struct snd_ac97 *ac97);
483 /* --- */ 483 /* --- */
diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
index 0fc614ce16c1..cb62d178b3e0 100644
--- a/sound/pci/ac97/ac97_codec.c
+++ b/sound/pci/ac97/ac97_codec.c
@@ -1961,7 +1961,7 @@ static int snd_ac97_dev_disconnect(struct snd_device *device)
1961} 1961}
1962 1962
1963/* build_ops to do nothing */ 1963/* build_ops to do nothing */
1964static struct snd_ac97_build_ops null_build_ops; 1964static const struct snd_ac97_build_ops null_build_ops;
1965 1965
1966#ifdef CONFIG_SND_AC97_POWER_SAVE 1966#ifdef CONFIG_SND_AC97_POWER_SAVE
1967static void do_update_power(struct work_struct *work) 1967static void do_update_power(struct work_struct *work)
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c
index e68c98ef4041..bf47574ca1f0 100644
--- a/sound/pci/ac97/ac97_patch.c
+++ b/sound/pci/ac97/ac97_patch.c
@@ -371,7 +371,7 @@ static int patch_yamaha_ymf743_build_spdif(struct snd_ac97 *ac97)
371 return 0; 371 return 0;
372} 372}
373 373
374static struct snd_ac97_build_ops patch_yamaha_ymf743_ops = { 374static const struct snd_ac97_build_ops patch_yamaha_ymf743_ops = {
375 .build_spdif = patch_yamaha_ymf743_build_spdif, 375 .build_spdif = patch_yamaha_ymf743_build_spdif,
376 .build_3d = patch_yamaha_ymf7x3_3d, 376 .build_3d = patch_yamaha_ymf7x3_3d,
377}; 377};
@@ -455,7 +455,7 @@ static int patch_yamaha_ymf753_post_spdif(struct snd_ac97 * ac97)
455 return 0; 455 return 0;
456} 456}
457 457
458static struct snd_ac97_build_ops patch_yamaha_ymf753_ops = { 458static const struct snd_ac97_build_ops patch_yamaha_ymf753_ops = {
459 .build_3d = patch_yamaha_ymf7x3_3d, 459 .build_3d = patch_yamaha_ymf7x3_3d,
460 .build_post_spdif = patch_yamaha_ymf753_post_spdif 460 .build_post_spdif = patch_yamaha_ymf753_post_spdif
461}; 461};
@@ -502,7 +502,7 @@ static int patch_wolfson_wm9703_specific(struct snd_ac97 * ac97)
502 return 0; 502 return 0;
503} 503}
504 504
505static struct snd_ac97_build_ops patch_wolfson_wm9703_ops = { 505static const struct snd_ac97_build_ops patch_wolfson_wm9703_ops = {
506 .build_specific = patch_wolfson_wm9703_specific, 506 .build_specific = patch_wolfson_wm9703_specific,
507}; 507};
508 508
@@ -533,7 +533,7 @@ static int patch_wolfson_wm9704_specific(struct snd_ac97 * ac97)
533 return 0; 533 return 0;
534} 534}
535 535
536static struct snd_ac97_build_ops patch_wolfson_wm9704_ops = { 536static const struct snd_ac97_build_ops patch_wolfson_wm9704_ops = {
537 .build_specific = patch_wolfson_wm9704_specific, 537 .build_specific = patch_wolfson_wm9704_specific,
538}; 538};
539 539
@@ -677,7 +677,7 @@ static int patch_wolfson_wm9711_specific(struct snd_ac97 * ac97)
677 return 0; 677 return 0;
678} 678}
679 679
680static struct snd_ac97_build_ops patch_wolfson_wm9711_ops = { 680static const struct snd_ac97_build_ops patch_wolfson_wm9711_ops = {
681 .build_specific = patch_wolfson_wm9711_specific, 681 .build_specific = patch_wolfson_wm9711_specific,
682}; 682};
683 683
@@ -871,7 +871,7 @@ static void patch_wolfson_wm9713_resume (struct snd_ac97 * ac97)
871} 871}
872#endif 872#endif
873 873
874static struct snd_ac97_build_ops patch_wolfson_wm9713_ops = { 874static const struct snd_ac97_build_ops patch_wolfson_wm9713_ops = {
875 .build_specific = patch_wolfson_wm9713_specific, 875 .build_specific = patch_wolfson_wm9713_specific,
876 .build_3d = patch_wolfson_wm9713_3d, 876 .build_3d = patch_wolfson_wm9713_3d,
877#ifdef CONFIG_PM 877#ifdef CONFIG_PM
@@ -976,7 +976,7 @@ static int patch_sigmatel_stac97xx_specific(struct snd_ac97 * ac97)
976 return 0; 976 return 0;
977} 977}
978 978
979static struct snd_ac97_build_ops patch_sigmatel_stac9700_ops = { 979static const struct snd_ac97_build_ops patch_sigmatel_stac9700_ops = {
980 .build_3d = patch_sigmatel_stac9700_3d, 980 .build_3d = patch_sigmatel_stac9700_3d,
981 .build_specific = patch_sigmatel_stac97xx_specific 981 .build_specific = patch_sigmatel_stac97xx_specific
982}; 982};
@@ -1023,7 +1023,7 @@ static int patch_sigmatel_stac9708_specific(struct snd_ac97 *ac97)
1023 return patch_sigmatel_stac97xx_specific(ac97); 1023 return patch_sigmatel_stac97xx_specific(ac97);
1024} 1024}
1025 1025
1026static struct snd_ac97_build_ops patch_sigmatel_stac9708_ops = { 1026static const struct snd_ac97_build_ops patch_sigmatel_stac9708_ops = {
1027 .build_3d = patch_sigmatel_stac9708_3d, 1027 .build_3d = patch_sigmatel_stac9708_3d,
1028 .build_specific = patch_sigmatel_stac9708_specific 1028 .build_specific = patch_sigmatel_stac9708_specific
1029}; 1029};
@@ -1252,7 +1252,7 @@ static int patch_sigmatel_stac9758_specific(struct snd_ac97 *ac97)
1252 return 0; 1252 return 0;
1253} 1253}
1254 1254
1255static struct snd_ac97_build_ops patch_sigmatel_stac9758_ops = { 1255static const struct snd_ac97_build_ops patch_sigmatel_stac9758_ops = {
1256 .build_3d = patch_sigmatel_stac9700_3d, 1256 .build_3d = patch_sigmatel_stac9700_3d,
1257 .build_specific = patch_sigmatel_stac9758_specific 1257 .build_specific = patch_sigmatel_stac9758_specific
1258}; 1258};
@@ -1327,7 +1327,7 @@ static int patch_cirrus_build_spdif(struct snd_ac97 * ac97)
1327 return 0; 1327 return 0;
1328} 1328}
1329 1329
1330static struct snd_ac97_build_ops patch_cirrus_ops = { 1330static const struct snd_ac97_build_ops patch_cirrus_ops = {
1331 .build_spdif = patch_cirrus_build_spdif 1331 .build_spdif = patch_cirrus_build_spdif
1332}; 1332};
1333 1333
@@ -1384,7 +1384,7 @@ static int patch_conexant_build_spdif(struct snd_ac97 * ac97)
1384 return 0; 1384 return 0;
1385} 1385}
1386 1386
1387static struct snd_ac97_build_ops patch_conexant_ops = { 1387static const struct snd_ac97_build_ops patch_conexant_ops = {
1388 .build_spdif = patch_conexant_build_spdif 1388 .build_spdif = patch_conexant_build_spdif
1389}; 1389};
1390 1390
@@ -1560,7 +1560,7 @@ static void patch_ad1881_chained(struct snd_ac97 * ac97, int unchained_idx, int
1560 } 1560 }
1561} 1561}
1562 1562
1563static struct snd_ac97_build_ops patch_ad1881_build_ops = { 1563static const struct snd_ac97_build_ops patch_ad1881_build_ops = {
1564#ifdef CONFIG_PM 1564#ifdef CONFIG_PM
1565 .resume = ad18xx_resume 1565 .resume = ad18xx_resume
1566#endif 1566#endif
@@ -1647,7 +1647,7 @@ static int patch_ad1885_specific(struct snd_ac97 * ac97)
1647 return 0; 1647 return 0;
1648} 1648}
1649 1649
1650static struct snd_ac97_build_ops patch_ad1885_build_ops = { 1650static const struct snd_ac97_build_ops patch_ad1885_build_ops = {
1651 .build_specific = &patch_ad1885_specific, 1651 .build_specific = &patch_ad1885_specific,
1652#ifdef CONFIG_PM 1652#ifdef CONFIG_PM
1653 .resume = ad18xx_resume 1653 .resume = ad18xx_resume
@@ -1674,7 +1674,7 @@ static int patch_ad1886_specific(struct snd_ac97 * ac97)
1674 return 0; 1674 return 0;
1675} 1675}
1676 1676
1677static struct snd_ac97_build_ops patch_ad1886_build_ops = { 1677static const struct snd_ac97_build_ops patch_ad1886_build_ops = {
1678 .build_specific = &patch_ad1886_specific, 1678 .build_specific = &patch_ad1886_specific,
1679#ifdef CONFIG_PM 1679#ifdef CONFIG_PM
1680 .resume = ad18xx_resume 1680 .resume = ad18xx_resume
@@ -1881,7 +1881,7 @@ static int patch_ad1981a_specific(struct snd_ac97 * ac97)
1881 ARRAY_SIZE(snd_ac97_ad1981x_jack_sense)); 1881 ARRAY_SIZE(snd_ac97_ad1981x_jack_sense));
1882} 1882}
1883 1883
1884static struct snd_ac97_build_ops patch_ad1981a_build_ops = { 1884static const struct snd_ac97_build_ops patch_ad1981a_build_ops = {
1885 .build_post_spdif = patch_ad198x_post_spdif, 1885 .build_post_spdif = patch_ad198x_post_spdif,
1886 .build_specific = patch_ad1981a_specific, 1886 .build_specific = patch_ad1981a_specific,
1887#ifdef CONFIG_PM 1887#ifdef CONFIG_PM
@@ -1936,7 +1936,7 @@ static int patch_ad1981b_specific(struct snd_ac97 *ac97)
1936 ARRAY_SIZE(snd_ac97_ad1981x_jack_sense)); 1936 ARRAY_SIZE(snd_ac97_ad1981x_jack_sense));
1937} 1937}
1938 1938
1939static struct snd_ac97_build_ops patch_ad1981b_build_ops = { 1939static const struct snd_ac97_build_ops patch_ad1981b_build_ops = {
1940 .build_post_spdif = patch_ad198x_post_spdif, 1940 .build_post_spdif = patch_ad198x_post_spdif,
1941 .build_specific = patch_ad1981b_specific, 1941 .build_specific = patch_ad1981b_specific,
1942#ifdef CONFIG_PM 1942#ifdef CONFIG_PM
@@ -2075,7 +2075,7 @@ static int patch_ad1888_specific(struct snd_ac97 *ac97)
2075 return patch_build_controls(ac97, snd_ac97_ad1888_controls, ARRAY_SIZE(snd_ac97_ad1888_controls)); 2075 return patch_build_controls(ac97, snd_ac97_ad1888_controls, ARRAY_SIZE(snd_ac97_ad1888_controls));
2076} 2076}
2077 2077
2078static struct snd_ac97_build_ops patch_ad1888_build_ops = { 2078static const struct snd_ac97_build_ops patch_ad1888_build_ops = {
2079 .build_post_spdif = patch_ad198x_post_spdif, 2079 .build_post_spdif = patch_ad198x_post_spdif,
2080 .build_specific = patch_ad1888_specific, 2080 .build_specific = patch_ad1888_specific,
2081#ifdef CONFIG_PM 2081#ifdef CONFIG_PM
@@ -2124,7 +2124,7 @@ static int patch_ad1980_specific(struct snd_ac97 *ac97)
2124 return patch_build_controls(ac97, &snd_ac97_ad198x_2cmic, 1); 2124 return patch_build_controls(ac97, &snd_ac97_ad198x_2cmic, 1);
2125} 2125}
2126 2126
2127static struct snd_ac97_build_ops patch_ad1980_build_ops = { 2127static const struct snd_ac97_build_ops patch_ad1980_build_ops = {
2128 .build_post_spdif = patch_ad198x_post_spdif, 2128 .build_post_spdif = patch_ad198x_post_spdif,
2129 .build_specific = patch_ad1980_specific, 2129 .build_specific = patch_ad1980_specific,
2130#ifdef CONFIG_PM 2130#ifdef CONFIG_PM
@@ -2239,7 +2239,7 @@ static int patch_ad1985_specific(struct snd_ac97 *ac97)
2239 ARRAY_SIZE(snd_ac97_ad1985_controls)); 2239 ARRAY_SIZE(snd_ac97_ad1985_controls));
2240} 2240}
2241 2241
2242static struct snd_ac97_build_ops patch_ad1985_build_ops = { 2242static const struct snd_ac97_build_ops patch_ad1985_build_ops = {
2243 .build_post_spdif = patch_ad198x_post_spdif, 2243 .build_post_spdif = patch_ad198x_post_spdif,
2244 .build_specific = patch_ad1985_specific, 2244 .build_specific = patch_ad1985_specific,
2245#ifdef CONFIG_PM 2245#ifdef CONFIG_PM
@@ -2531,7 +2531,7 @@ static int patch_ad1986_specific(struct snd_ac97 *ac97)
2531 ARRAY_SIZE(snd_ac97_ad1985_controls)); 2531 ARRAY_SIZE(snd_ac97_ad1985_controls));
2532} 2532}
2533 2533
2534static struct snd_ac97_build_ops patch_ad1986_build_ops = { 2534static const struct snd_ac97_build_ops patch_ad1986_build_ops = {
2535 .build_post_spdif = patch_ad198x_post_spdif, 2535 .build_post_spdif = patch_ad198x_post_spdif,
2536 .build_specific = patch_ad1986_specific, 2536 .build_specific = patch_ad1986_specific,
2537#ifdef CONFIG_PM 2537#ifdef CONFIG_PM
@@ -2636,7 +2636,7 @@ static int patch_alc650_specific(struct snd_ac97 * ac97)
2636 return 0; 2636 return 0;
2637} 2637}
2638 2638
2639static struct snd_ac97_build_ops patch_alc650_ops = { 2639static const struct snd_ac97_build_ops patch_alc650_ops = {
2640 .build_specific = patch_alc650_specific, 2640 .build_specific = patch_alc650_specific,
2641 .update_jacks = alc650_update_jacks 2641 .update_jacks = alc650_update_jacks
2642}; 2642};
@@ -2788,7 +2788,7 @@ static int patch_alc655_specific(struct snd_ac97 * ac97)
2788 return 0; 2788 return 0;
2789} 2789}
2790 2790
2791static struct snd_ac97_build_ops patch_alc655_ops = { 2791static const struct snd_ac97_build_ops patch_alc655_ops = {
2792 .build_specific = patch_alc655_specific, 2792 .build_specific = patch_alc655_specific,
2793 .update_jacks = alc655_update_jacks 2793 .update_jacks = alc655_update_jacks
2794}; 2794};
@@ -2900,7 +2900,7 @@ static int patch_alc850_specific(struct snd_ac97 *ac97)
2900 return 0; 2900 return 0;
2901} 2901}
2902 2902
2903static struct snd_ac97_build_ops patch_alc850_ops = { 2903static const struct snd_ac97_build_ops patch_alc850_ops = {
2904 .build_specific = patch_alc850_specific, 2904 .build_specific = patch_alc850_specific,
2905 .update_jacks = alc850_update_jacks 2905 .update_jacks = alc850_update_jacks
2906}; 2906};
@@ -2962,7 +2962,7 @@ static int patch_cm9738_specific(struct snd_ac97 * ac97)
2962 return patch_build_controls(ac97, snd_ac97_cm9738_controls, ARRAY_SIZE(snd_ac97_cm9738_controls)); 2962 return patch_build_controls(ac97, snd_ac97_cm9738_controls, ARRAY_SIZE(snd_ac97_cm9738_controls));
2963} 2963}
2964 2964
2965static struct snd_ac97_build_ops patch_cm9738_ops = { 2965static const struct snd_ac97_build_ops patch_cm9738_ops = {
2966 .build_specific = patch_cm9738_specific, 2966 .build_specific = patch_cm9738_specific,
2967 .update_jacks = cm9738_update_jacks 2967 .update_jacks = cm9738_update_jacks
2968}; 2968};
@@ -3053,7 +3053,7 @@ static int patch_cm9739_post_spdif(struct snd_ac97 * ac97)
3053 return patch_build_controls(ac97, snd_ac97_cm9739_controls_spdif, ARRAY_SIZE(snd_ac97_cm9739_controls_spdif)); 3053 return patch_build_controls(ac97, snd_ac97_cm9739_controls_spdif, ARRAY_SIZE(snd_ac97_cm9739_controls_spdif));
3054} 3054}
3055 3055
3056static struct snd_ac97_build_ops patch_cm9739_ops = { 3056static const struct snd_ac97_build_ops patch_cm9739_ops = {
3057 .build_specific = patch_cm9739_specific, 3057 .build_specific = patch_cm9739_specific,
3058 .build_post_spdif = patch_cm9739_post_spdif, 3058 .build_post_spdif = patch_cm9739_post_spdif,
3059 .update_jacks = cm9739_update_jacks 3059 .update_jacks = cm9739_update_jacks
@@ -3227,7 +3227,7 @@ static int patch_cm9761_specific(struct snd_ac97 * ac97)
3227 return patch_build_controls(ac97, snd_ac97_cm9761_controls, ARRAY_SIZE(snd_ac97_cm9761_controls)); 3227 return patch_build_controls(ac97, snd_ac97_cm9761_controls, ARRAY_SIZE(snd_ac97_cm9761_controls));
3228} 3228}
3229 3229
3230static struct snd_ac97_build_ops patch_cm9761_ops = { 3230static const struct snd_ac97_build_ops patch_cm9761_ops = {
3231 .build_specific = patch_cm9761_specific, 3231 .build_specific = patch_cm9761_specific,
3232 .build_post_spdif = patch_cm9761_post_spdif, 3232 .build_post_spdif = patch_cm9761_post_spdif,
3233 .update_jacks = cm9761_update_jacks 3233 .update_jacks = cm9761_update_jacks
@@ -3323,7 +3323,7 @@ static int patch_cm9780_specific(struct snd_ac97 *ac97)
3323 return patch_build_controls(ac97, cm9780_controls, ARRAY_SIZE(cm9780_controls)); 3323 return patch_build_controls(ac97, cm9780_controls, ARRAY_SIZE(cm9780_controls));
3324} 3324}
3325 3325
3326static struct snd_ac97_build_ops patch_cm9780_ops = { 3326static const struct snd_ac97_build_ops patch_cm9780_ops = {
3327 .build_specific = patch_cm9780_specific, 3327 .build_specific = patch_cm9780_specific,
3328 .build_post_spdif = patch_cm9761_post_spdif /* identical with CM9761 */ 3328 .build_post_spdif = patch_cm9761_post_spdif /* identical with CM9761 */
3329}; 3329};
@@ -3443,7 +3443,7 @@ static int patch_vt1616_specific(struct snd_ac97 * ac97)
3443 return 0; 3443 return 0;
3444} 3444}
3445 3445
3446static struct snd_ac97_build_ops patch_vt1616_ops = { 3446static const struct snd_ac97_build_ops patch_vt1616_ops = {
3447 .build_specific = patch_vt1616_specific 3447 .build_specific = patch_vt1616_specific
3448}; 3448};
3449 3449
@@ -3797,7 +3797,7 @@ static int patch_it2646_specific(struct snd_ac97 * ac97)
3797 return 0; 3797 return 0;
3798} 3798}
3799 3799
3800static struct snd_ac97_build_ops patch_it2646_ops = { 3800static const struct snd_ac97_build_ops patch_it2646_ops = {
3801 .build_specific = patch_it2646_specific, 3801 .build_specific = patch_it2646_specific,
3802 .update_jacks = it2646_update_jacks 3802 .update_jacks = it2646_update_jacks
3803}; 3803};
@@ -3831,7 +3831,7 @@ static int patch_si3036_specific(struct snd_ac97 * ac97)
3831 return 0; 3831 return 0;
3832} 3832}
3833 3833
3834static struct snd_ac97_build_ops patch_si3036_ops = { 3834static const struct snd_ac97_build_ops patch_si3036_ops = {
3835 .build_specific = patch_si3036_specific, 3835 .build_specific = patch_si3036_specific,
3836}; 3836};
3837 3837
@@ -3898,7 +3898,7 @@ static int patch_ucb1400_specific(struct snd_ac97 * ac97)
3898 return 0; 3898 return 0;
3899} 3899}
3900 3900
3901static struct snd_ac97_build_ops patch_ucb1400_ops = { 3901static const struct snd_ac97_build_ops patch_ucb1400_ops = {
3902 .build_specific = patch_ucb1400_specific, 3902 .build_specific = patch_ucb1400_specific,
3903}; 3903};
3904 3904
diff --git a/sound/pci/au88x0/au88x0_pcm.c b/sound/pci/au88x0/au88x0_pcm.c
index b9d2f202cf9b..5439d662d104 100644
--- a/sound/pci/au88x0/au88x0_pcm.c
+++ b/sound/pci/au88x0/au88x0_pcm.c
@@ -42,11 +42,7 @@ static struct snd_pcm_hardware snd_vortex_playback_hw_adb = {
42 .rate_min = 5000, 42 .rate_min = 5000,
43 .rate_max = 48000, 43 .rate_max = 48000,
44 .channels_min = 1, 44 .channels_min = 1,
45#ifdef CHIP_AU8830
46 .channels_max = 4,
47#else
48 .channels_max = 2, 45 .channels_max = 2,
49#endif
50 .buffer_bytes_max = 0x10000, 46 .buffer_bytes_max = 0x10000,
51 .period_bytes_min = 0x1, 47 .period_bytes_min = 0x1,
52 .period_bytes_max = 0x1000, 48 .period_bytes_max = 0x1000,
@@ -115,6 +111,17 @@ static struct snd_pcm_hardware snd_vortex_playback_hw_wt = {
115 .periods_max = 64, 111 .periods_max = 64,
116}; 112};
117#endif 113#endif
114#ifdef CHIP_AU8830
115static unsigned int au8830_channels[3] = {
116 1, 2, 4,
117};
118
119static struct snd_pcm_hw_constraint_list hw_constraints_au8830_channels = {
120 .count = ARRAY_SIZE(au8830_channels),
121 .list = au8830_channels,
122 .mask = 0,
123};
124#endif
118/* open callback */ 125/* open callback */
119static int snd_vortex_pcm_open(struct snd_pcm_substream *substream) 126static int snd_vortex_pcm_open(struct snd_pcm_substream *substream)
120{ 127{
@@ -156,6 +163,15 @@ static int snd_vortex_pcm_open(struct snd_pcm_substream *substream)
156 if (VORTEX_PCM_TYPE(substream->pcm) == VORTEX_PCM_ADB 163 if (VORTEX_PCM_TYPE(substream->pcm) == VORTEX_PCM_ADB
157 || VORTEX_PCM_TYPE(substream->pcm) == VORTEX_PCM_I2S) 164 || VORTEX_PCM_TYPE(substream->pcm) == VORTEX_PCM_I2S)
158 runtime->hw = snd_vortex_playback_hw_adb; 165 runtime->hw = snd_vortex_playback_hw_adb;
166#ifdef CHIP_AU8830
167 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&
168 VORTEX_PCM_TYPE(substream->pcm) == VORTEX_PCM_ADB) {
169 runtime->hw.channels_max = 4;
170 snd_pcm_hw_constraint_list(runtime, 0,
171 SNDRV_PCM_HW_PARAM_CHANNELS,
172 &hw_constraints_au8830_channels);
173 }
174#endif
159 substream->runtime->private_data = NULL; 175 substream->runtime->private_data = NULL;
160 } 176 }
161#ifndef CHIP_AU8810 177#ifndef CHIP_AU8810
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 05e5ec88c2d9..ae5c5d5e4b7c 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -2134,10 +2134,10 @@ int snd_hda_codec_reset(struct hda_codec *codec)
2134 * This function returns zero if successful or a negative error code. 2134 * This function returns zero if successful or a negative error code.
2135 */ 2135 */
2136int snd_hda_add_vmaster(struct hda_codec *codec, char *name, 2136int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
2137 unsigned int *tlv, const char **slaves) 2137 unsigned int *tlv, const char * const *slaves)
2138{ 2138{
2139 struct snd_kcontrol *kctl; 2139 struct snd_kcontrol *kctl;
2140 const char **s; 2140 const char * const *s;
2141 int err; 2141 int err;
2142 2142
2143 for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++) 2143 for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
@@ -3689,7 +3689,7 @@ EXPORT_SYMBOL_HDA(snd_hda_build_pcms);
3689 * If no entries are matching, the function returns a negative value. 3689 * If no entries are matching, the function returns a negative value.
3690 */ 3690 */
3691int snd_hda_check_board_config(struct hda_codec *codec, 3691int snd_hda_check_board_config(struct hda_codec *codec,
3692 int num_configs, const char **models, 3692 int num_configs, const char * const *models,
3693 const struct snd_pci_quirk *tbl) 3693 const struct snd_pci_quirk *tbl)
3694{ 3694{
3695 if (codec->modelname && models) { 3695 if (codec->modelname && models) {
@@ -3753,7 +3753,7 @@ EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
3753 * If no entries are matching, the function returns a negative value. 3753 * If no entries are matching, the function returns a negative value.
3754 */ 3754 */
3755int snd_hda_check_board_codec_sid_config(struct hda_codec *codec, 3755int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
3756 int num_configs, const char **models, 3756 int num_configs, const char * const *models,
3757 const struct snd_pci_quirk *tbl) 3757 const struct snd_pci_quirk *tbl)
3758{ 3758{
3759 const struct snd_pci_quirk *q; 3759 const struct snd_pci_quirk *q;
@@ -4690,7 +4690,7 @@ const char *hda_get_input_pin_label(struct hda_codec *codec, hda_nid_t pin,
4690 int check_location) 4690 int check_location)
4691{ 4691{
4692 unsigned int def_conf; 4692 unsigned int def_conf;
4693 static const char *mic_names[] = { 4693 static const char * const mic_names[] = {
4694 "Internal Mic", "Dock Mic", "Mic", "Front Mic", "Rear Mic", 4694 "Internal Mic", "Dock Mic", "Mic", "Front Mic", "Rear Mic",
4695 }; 4695 };
4696 int attr; 4696 int attr;
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
index fb0582f8d725..a63c54d9d767 100644
--- a/sound/pci/hda/hda_generic.c
+++ b/sound/pci/hda/hda_generic.c
@@ -762,7 +762,8 @@ static int check_existing_control(struct hda_codec *codec, const char *type, con
762/* 762/*
763 * build output mixer controls 763 * build output mixer controls
764 */ 764 */
765static int create_output_mixers(struct hda_codec *codec, const char **names) 765static int create_output_mixers(struct hda_codec *codec,
766 const char * const *names)
766{ 767{
767 struct hda_gspec *spec = codec->spec; 768 struct hda_gspec *spec = codec->spec;
768 int i, err; 769 int i, err;
@@ -780,8 +781,8 @@ static int create_output_mixers(struct hda_codec *codec, const char **names)
780static int build_output_controls(struct hda_codec *codec) 781static int build_output_controls(struct hda_codec *codec)
781{ 782{
782 struct hda_gspec *spec = codec->spec; 783 struct hda_gspec *spec = codec->spec;
783 static const char *types_speaker[] = { "Speaker", "Headphone" }; 784 static const char * const types_speaker[] = { "Speaker", "Headphone" };
784 static const char *types_line[] = { "Front", "Headphone" }; 785 static const char * const types_line[] = { "Front", "Headphone" };
785 786
786 switch (spec->pcm_vol_nodes) { 787 switch (spec->pcm_vol_nodes) {
787 case 1: 788 case 1:
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index d3d18be483e1..2e91a991eb15 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2809,6 +2809,8 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
2809#endif 2809#endif
2810 /* Vortex86MX */ 2810 /* Vortex86MX */
2811 { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC }, 2811 { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC },
2812 /* VMware HDAudio */
2813 { PCI_DEVICE(0x15ad, 0x1977), .driver_data = AZX_DRIVER_GENERIC },
2812 /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */ 2814 /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */
2813 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID), 2815 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID),
2814 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, 2816 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h
index 46bbefe2e4a9..3ab5e7a303db 100644
--- a/sound/pci/hda/hda_local.h
+++ b/sound/pci/hda/hda_local.h
@@ -140,7 +140,7 @@ void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
140struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec, 140struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
141 const char *name); 141 const char *name);
142int snd_hda_add_vmaster(struct hda_codec *codec, char *name, 142int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
143 unsigned int *tlv, const char **slaves); 143 unsigned int *tlv, const char * const *slaves);
144int snd_hda_codec_reset(struct hda_codec *codec); 144int snd_hda_codec_reset(struct hda_codec *codec);
145 145
146/* amp value bits */ 146/* amp value bits */
@@ -341,10 +341,10 @@ void snd_print_pcm_bits(int pcm, char *buf, int buflen);
341 * Misc 341 * Misc
342 */ 342 */
343int snd_hda_check_board_config(struct hda_codec *codec, int num_configs, 343int snd_hda_check_board_config(struct hda_codec *codec, int num_configs,
344 const char **modelnames, 344 const char * const *modelnames,
345 const struct snd_pci_quirk *pci_list); 345 const struct snd_pci_quirk *pci_list);
346int snd_hda_check_board_codec_sid_config(struct hda_codec *codec, 346int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
347 int num_configs, const char **models, 347 int num_configs, const char * const *models,
348 const struct snd_pci_quirk *tbl); 348 const struct snd_pci_quirk *tbl);
349int snd_hda_add_new_ctls(struct hda_codec *codec, 349int snd_hda_add_new_ctls(struct hda_codec *codec,
350 struct snd_kcontrol_new *knew); 350 struct snd_kcontrol_new *knew);
diff --git a/sound/pci/hda/hda_proc.c b/sound/pci/hda/hda_proc.c
index f025200f2a62..bfe74c2fb079 100644
--- a/sound/pci/hda/hda_proc.c
+++ b/sound/pci/hda/hda_proc.c
@@ -418,7 +418,7 @@ static void print_digital_conv(struct snd_info_buffer *buffer,
418 418
419static const char *get_pwr_state(u32 state) 419static const char *get_pwr_state(u32 state)
420{ 420{
421 static const char *buf[4] = { 421 static const char * const buf[4] = {
422 "D0", "D1", "D2", "D3" 422 "D0", "D1", "D2", "D3"
423 }; 423 };
424 if (state < 4) 424 if (state < 4)
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
index 46780670162b..8dabab798689 100644
--- a/sound/pci/hda/patch_analog.c
+++ b/sound/pci/hda/patch_analog.c
@@ -46,6 +46,9 @@ struct ad198x_spec {
46 unsigned int cur_eapd; 46 unsigned int cur_eapd;
47 unsigned int need_dac_fix; 47 unsigned int need_dac_fix;
48 48
49 hda_nid_t *alt_dac_nid;
50 struct hda_pcm_stream *stream_analog_alt_playback;
51
49 /* capture */ 52 /* capture */
50 unsigned int num_adc_nids; 53 unsigned int num_adc_nids;
51 hda_nid_t *adc_nids; 54 hda_nid_t *adc_nids;
@@ -81,8 +84,8 @@ struct ad198x_spec {
81#endif 84#endif
82 /* for virtual master */ 85 /* for virtual master */
83 hda_nid_t vmaster_nid; 86 hda_nid_t vmaster_nid;
84 const char **slave_vols; 87 const char * const *slave_vols;
85 const char **slave_sws; 88 const char * const *slave_sws;
86}; 89};
87 90
88/* 91/*
@@ -130,7 +133,7 @@ static int ad198x_init(struct hda_codec *codec)
130 return 0; 133 return 0;
131} 134}
132 135
133static const char *ad_slave_vols[] = { 136static const char * const ad_slave_vols[] = {
134 "Front Playback Volume", 137 "Front Playback Volume",
135 "Surround Playback Volume", 138 "Surround Playback Volume",
136 "Center Playback Volume", 139 "Center Playback Volume",
@@ -143,7 +146,7 @@ static const char *ad_slave_vols[] = {
143 NULL 146 NULL
144}; 147};
145 148
146static const char *ad_slave_sws[] = { 149static const char * const ad_slave_sws[] = {
147 "Front Playback Switch", 150 "Front Playback Switch",
148 "Surround Playback Switch", 151 "Surround Playback Switch",
149 "Center Playback Switch", 152 "Center Playback Switch",
@@ -156,6 +159,25 @@ static const char *ad_slave_sws[] = {
156 NULL 159 NULL
157}; 160};
158 161
162static const char * const ad1988_6stack_fp_slave_vols[] = {
163 "Front Playback Volume",
164 "Surround Playback Volume",
165 "Center Playback Volume",
166 "LFE Playback Volume",
167 "Side Playback Volume",
168 "IEC958 Playback Volume",
169 NULL
170};
171
172static const char * const ad1988_6stack_fp_slave_sws[] = {
173 "Front Playback Switch",
174 "Surround Playback Switch",
175 "Center Playback Switch",
176 "LFE Playback Switch",
177 "Side Playback Switch",
178 "IEC958 Playback Switch",
179 NULL
180};
159static void ad198x_free_kctls(struct hda_codec *codec); 181static void ad198x_free_kctls(struct hda_codec *codec);
160 182
161#ifdef CONFIG_SND_HDA_INPUT_BEEP 183#ifdef CONFIG_SND_HDA_INPUT_BEEP
@@ -309,6 +331,38 @@ static int ad198x_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
309 return snd_hda_multi_out_analog_cleanup(codec, &spec->multiout); 331 return snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
310} 332}
311 333
334static int ad198x_alt_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
335 struct hda_codec *codec,
336 unsigned int stream_tag,
337 unsigned int format,
338 struct snd_pcm_substream *substream)
339{
340 struct ad198x_spec *spec = codec->spec;
341 snd_hda_codec_setup_stream(codec, spec->alt_dac_nid[0], stream_tag,
342 0, format);
343 return 0;
344}
345
346static int ad198x_alt_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
347 struct hda_codec *codec,
348 struct snd_pcm_substream *substream)
349{
350 struct ad198x_spec *spec = codec->spec;
351 snd_hda_codec_cleanup_stream(codec, spec->alt_dac_nid[0]);
352 return 0;
353}
354
355static struct hda_pcm_stream ad198x_pcm_analog_alt_playback = {
356 .substreams = 1,
357 .channels_min = 2,
358 .channels_max = 2,
359 /* NID is set in ad198x_build_pcms */
360 .ops = {
361 .prepare = ad198x_alt_playback_pcm_prepare,
362 .cleanup = ad198x_alt_playback_pcm_cleanup
363 },
364};
365
312/* 366/*
313 * Digital out 367 * Digital out
314 */ 368 */
@@ -446,6 +500,17 @@ static int ad198x_build_pcms(struct hda_codec *codec)
446 } 500 }
447 } 501 }
448 502
503 if (spec->alt_dac_nid && spec->stream_analog_alt_playback) {
504 codec->num_pcms++;
505 info = spec->pcm_rec + 2;
506 info->name = "AD198x Headphone";
507 info->pcm_type = HDA_PCM_TYPE_AUDIO;
508 info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
509 *spec->stream_analog_alt_playback;
510 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
511 spec->alt_dac_nid[0];
512 }
513
449 return 0; 514 return 0;
450} 515}
451 516
@@ -1069,7 +1134,7 @@ enum {
1069 AD1986A_MODELS 1134 AD1986A_MODELS
1070}; 1135};
1071 1136
1072static const char *ad1986a_models[AD1986A_MODELS] = { 1137static const char * const ad1986a_models[AD1986A_MODELS] = {
1073 [AD1986A_6STACK] = "6stack", 1138 [AD1986A_6STACK] = "6stack",
1074 [AD1986A_3STACK] = "3stack", 1139 [AD1986A_3STACK] = "3stack",
1075 [AD1986A_LAPTOP] = "laptop", 1140 [AD1986A_LAPTOP] = "laptop",
@@ -1813,7 +1878,7 @@ enum {
1813 AD1981_MODELS 1878 AD1981_MODELS
1814}; 1879};
1815 1880
1816static const char *ad1981_models[AD1981_MODELS] = { 1881static const char * const ad1981_models[AD1981_MODELS] = {
1817 [AD1981_HP] = "hp", 1882 [AD1981_HP] = "hp",
1818 [AD1981_THINKPAD] = "thinkpad", 1883 [AD1981_THINKPAD] = "thinkpad",
1819 [AD1981_BASIC] = "basic", 1884 [AD1981_BASIC] = "basic",
@@ -2015,6 +2080,7 @@ static int patch_ad1981(struct hda_codec *codec)
2015enum { 2080enum {
2016 AD1988_6STACK, 2081 AD1988_6STACK,
2017 AD1988_6STACK_DIG, 2082 AD1988_6STACK_DIG,
2083 AD1988_6STACK_DIG_FP,
2018 AD1988_3STACK, 2084 AD1988_3STACK,
2019 AD1988_3STACK_DIG, 2085 AD1988_3STACK_DIG,
2020 AD1988_LAPTOP, 2086 AD1988_LAPTOP,
@@ -2047,6 +2113,10 @@ static hda_nid_t ad1988_6stack_dac_nids_rev2[4] = {
2047 0x04, 0x05, 0x0a, 0x06 2113 0x04, 0x05, 0x0a, 0x06
2048}; 2114};
2049 2115
2116static hda_nid_t ad1988_alt_dac_nid[1] = {
2117 0x03
2118};
2119
2050static hda_nid_t ad1988_3stack_dac_nids_rev2[3] = { 2120static hda_nid_t ad1988_3stack_dac_nids_rev2[3] = {
2051 0x04, 0x0a, 0x06 2121 0x04, 0x0a, 0x06
2052}; 2122};
@@ -2166,6 +2236,35 @@ static struct snd_kcontrol_new ad1988_6stack_mixers2[] = {
2166 { } /* end */ 2236 { } /* end */
2167}; 2237};
2168 2238
2239static struct snd_kcontrol_new ad1988_6stack_fp_mixers[] = {
2240 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT),
2241
2242 HDA_BIND_MUTE("Front Playback Switch", 0x29, 2, HDA_INPUT),
2243 HDA_BIND_MUTE("Surround Playback Switch", 0x2a, 2, HDA_INPUT),
2244 HDA_BIND_MUTE_MONO("Center Playback Switch", 0x27, 1, 2, HDA_INPUT),
2245 HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x27, 2, 2, HDA_INPUT),
2246 HDA_BIND_MUTE("Side Playback Switch", 0x28, 2, HDA_INPUT),
2247 HDA_BIND_MUTE("Headphone Playback Switch", 0x22, 2, HDA_INPUT),
2248 HDA_BIND_MUTE("Mono Playback Switch", 0x1e, 2, HDA_INPUT),
2249
2250 HDA_CODEC_VOLUME("CD Playback Volume", 0x20, 0x6, HDA_INPUT),
2251 HDA_CODEC_MUTE("CD Playback Switch", 0x20, 0x6, HDA_INPUT),
2252 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x20, 0x0, HDA_INPUT),
2253 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x20, 0x0, HDA_INPUT),
2254 HDA_CODEC_VOLUME("Line Playback Volume", 0x20, 0x1, HDA_INPUT),
2255 HDA_CODEC_MUTE("Line Playback Switch", 0x20, 0x1, HDA_INPUT),
2256 HDA_CODEC_VOLUME("Mic Playback Volume", 0x20, 0x4, HDA_INPUT),
2257 HDA_CODEC_MUTE("Mic Playback Switch", 0x20, 0x4, HDA_INPUT),
2258
2259 HDA_CODEC_VOLUME("Analog Mix Playback Volume", 0x21, 0x0, HDA_OUTPUT),
2260 HDA_CODEC_MUTE("Analog Mix Playback Switch", 0x21, 0x0, HDA_OUTPUT),
2261
2262 HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x39, 0x0, HDA_OUTPUT),
2263 HDA_CODEC_VOLUME("Mic Boost Volume", 0x3c, 0x0, HDA_OUTPUT),
2264
2265 { } /* end */
2266};
2267
2169/* 3-stack mode */ 2268/* 3-stack mode */
2170static struct snd_kcontrol_new ad1988_3stack_mixers1[] = { 2269static struct snd_kcontrol_new ad1988_3stack_mixers1[] = {
2171 HDA_CODEC_VOLUME("Front Playback Volume", 0x04, 0x0, HDA_OUTPUT), 2270 HDA_CODEC_VOLUME("Front Playback Volume", 0x04, 0x0, HDA_OUTPUT),
@@ -2445,6 +2544,68 @@ static struct hda_verb ad1988_6stack_init_verbs[] = {
2445 { } 2544 { }
2446}; 2545};
2447 2546
2547static struct hda_verb ad1988_6stack_fp_init_verbs[] = {
2548 /* Front, Surround, CLFE, side DAC; unmute as default */
2549 {0x04, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2550 {0x06, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2551 {0x05, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2552 {0x0a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2553 /* Headphone; unmute as default */
2554 {0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2555 /* Port-A front headphon path */
2556 {0x37, AC_VERB_SET_CONNECT_SEL, 0x00}, /* DAC0:03h */
2557 {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
2558 {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
2559 {0x11, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2560 {0x11, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
2561 /* Port-D line-out path */
2562 {0x29, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
2563 {0x29, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
2564 {0x12, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2565 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
2566 /* Port-F surround path */
2567 {0x2a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
2568 {0x2a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
2569 {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2570 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
2571 /* Port-G CLFE path */
2572 {0x27, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
2573 {0x27, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
2574 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2575 {0x24, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
2576 /* Port-H side path */
2577 {0x28, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
2578 {0x28, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
2579 {0x25, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2580 {0x25, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
2581 /* Mono out path */
2582 {0x36, AC_VERB_SET_CONNECT_SEL, 0x1}, /* DAC1:04h */
2583 {0x1e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
2584 {0x1e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
2585 {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
2586 {0x13, AC_VERB_SET_AMP_GAIN_MUTE, 0xb01f}, /* unmute, 0dB */
2587 /* Port-B front mic-in path */
2588 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
2589 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
2590 {0x39, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
2591 /* Port-C line-in path */
2592 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
2593 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
2594 {0x3a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
2595 {0x33, AC_VERB_SET_CONNECT_SEL, 0x0},
2596 /* Port-E mic-in path */
2597 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
2598 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
2599 {0x3c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
2600 {0x34, AC_VERB_SET_CONNECT_SEL, 0x0},
2601 /* Analog CD Input */
2602 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
2603 /* Analog Mix output amp */
2604 {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE | 0x1f}, /* 0dB */
2605
2606 { }
2607};
2608
2448static struct hda_verb ad1988_capture_init_verbs[] = { 2609static struct hda_verb ad1988_capture_init_verbs[] = {
2449 /* mute analog mix */ 2610 /* mute analog mix */
2450 {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, 2611 {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
@@ -2792,7 +2953,9 @@ static int ad1988_auto_create_multi_out_ctls(struct ad198x_spec *spec,
2792 const struct auto_pin_cfg *cfg) 2953 const struct auto_pin_cfg *cfg)
2793{ 2954{
2794 char name[32]; 2955 char name[32];
2795 static const char *chname[4] = { "Front", "Surround", NULL /*CLFE*/, "Side" }; 2956 static const char * const chname[4] = {
2957 "Front", "Surround", NULL /*CLFE*/, "Side"
2958 };
2796 hda_nid_t nid; 2959 hda_nid_t nid;
2797 int i, err; 2960 int i, err;
2798 2961
@@ -3074,13 +3237,13 @@ static int ad1988_auto_init(struct hda_codec *codec)
3074 return 0; 3237 return 0;
3075} 3238}
3076 3239
3077
3078/* 3240/*
3079 */ 3241 */
3080 3242
3081static const char *ad1988_models[AD1988_MODEL_LAST] = { 3243static const char * const ad1988_models[AD1988_MODEL_LAST] = {
3082 [AD1988_6STACK] = "6stack", 3244 [AD1988_6STACK] = "6stack",
3083 [AD1988_6STACK_DIG] = "6stack-dig", 3245 [AD1988_6STACK_DIG] = "6stack-dig",
3246 [AD1988_6STACK_DIG_FP] = "6stack-dig-fp",
3084 [AD1988_3STACK] = "3stack", 3247 [AD1988_3STACK] = "3stack",
3085 [AD1988_3STACK_DIG] = "3stack-dig", 3248 [AD1988_3STACK_DIG] = "3stack-dig",
3086 [AD1988_LAPTOP] = "laptop", 3249 [AD1988_LAPTOP] = "laptop",
@@ -3140,6 +3303,7 @@ static int patch_ad1988(struct hda_codec *codec)
3140 switch (board_config) { 3303 switch (board_config) {
3141 case AD1988_6STACK: 3304 case AD1988_6STACK:
3142 case AD1988_6STACK_DIG: 3305 case AD1988_6STACK_DIG:
3306 case AD1988_6STACK_DIG_FP:
3143 spec->multiout.max_channels = 8; 3307 spec->multiout.max_channels = 8;
3144 spec->multiout.num_dacs = 4; 3308 spec->multiout.num_dacs = 4;
3145 if (is_rev2(codec)) 3309 if (is_rev2(codec))
@@ -3152,10 +3316,22 @@ static int patch_ad1988(struct hda_codec *codec)
3152 spec->mixers[0] = ad1988_6stack_mixers1_rev2; 3316 spec->mixers[0] = ad1988_6stack_mixers1_rev2;
3153 else 3317 else
3154 spec->mixers[0] = ad1988_6stack_mixers1; 3318 spec->mixers[0] = ad1988_6stack_mixers1;
3155 spec->mixers[1] = ad1988_6stack_mixers2; 3319 if (board_config == AD1988_6STACK_DIG_FP) {
3320 spec->mixers[1] = ad1988_6stack_fp_mixers;
3321 spec->slave_vols = ad1988_6stack_fp_slave_vols;
3322 spec->slave_sws = ad1988_6stack_fp_slave_sws;
3323 spec->alt_dac_nid = ad1988_alt_dac_nid;
3324 spec->stream_analog_alt_playback =
3325 &ad198x_pcm_analog_alt_playback;
3326 } else
3327 spec->mixers[1] = ad1988_6stack_mixers2;
3156 spec->num_init_verbs = 1; 3328 spec->num_init_verbs = 1;
3157 spec->init_verbs[0] = ad1988_6stack_init_verbs; 3329 if (board_config == AD1988_6STACK_DIG_FP)
3158 if (board_config == AD1988_6STACK_DIG) { 3330 spec->init_verbs[0] = ad1988_6stack_fp_init_verbs;
3331 else
3332 spec->init_verbs[0] = ad1988_6stack_init_verbs;
3333 if ((board_config == AD1988_6STACK_DIG) ||
3334 (board_config == AD1988_6STACK_DIG_FP)) {
3159 spec->multiout.dig_out_nid = AD1988_SPDIF_OUT; 3335 spec->multiout.dig_out_nid = AD1988_SPDIF_OUT;
3160 spec->dig_in_nid = AD1988_SPDIF_IN; 3336 spec->dig_in_nid = AD1988_SPDIF_IN;
3161 } 3337 }
@@ -3399,7 +3575,7 @@ static struct hda_amp_list ad1884_loopbacks[] = {
3399}; 3575};
3400#endif 3576#endif
3401 3577
3402static const char *ad1884_slave_vols[] = { 3578static const char * const ad1884_slave_vols[] = {
3403 "PCM Playback Volume", 3579 "PCM Playback Volume",
3404 "Mic Playback Volume", 3580 "Mic Playback Volume",
3405 "Mono Playback Volume", 3581 "Mono Playback Volume",
@@ -3637,7 +3813,7 @@ enum {
3637 AD1984_MODELS 3813 AD1984_MODELS
3638}; 3814};
3639 3815
3640static const char *ad1984_models[AD1984_MODELS] = { 3816static const char * const ad1984_models[AD1984_MODELS] = {
3641 [AD1984_BASIC] = "basic", 3817 [AD1984_BASIC] = "basic",
3642 [AD1984_THINKPAD] = "thinkpad", 3818 [AD1984_THINKPAD] = "thinkpad",
3643 [AD1984_DELL_DESKTOP] = "dell_desktop", 3819 [AD1984_DELL_DESKTOP] = "dell_desktop",
@@ -4308,7 +4484,7 @@ enum {
4308 AD1884A_MODELS 4484 AD1884A_MODELS
4309}; 4485};
4310 4486
4311static const char *ad1884a_models[AD1884A_MODELS] = { 4487static const char * const ad1884a_models[AD1884A_MODELS] = {
4312 [AD1884A_DESKTOP] = "desktop", 4488 [AD1884A_DESKTOP] = "desktop",
4313 [AD1884A_LAPTOP] = "laptop", 4489 [AD1884A_LAPTOP] = "laptop",
4314 [AD1884A_MOBILE] = "mobile", 4490 [AD1884A_MOBILE] = "mobile",
@@ -4696,7 +4872,7 @@ enum {
4696 AD1882_MODELS 4872 AD1882_MODELS
4697}; 4873};
4698 4874
4699static const char *ad1882_models[AD1986A_MODELS] = { 4875static const char * const ad1882_models[AD1986A_MODELS] = {
4700 [AD1882_3STACK] = "3stack", 4876 [AD1882_3STACK] = "3stack",
4701 [AD1882_6STACK] = "6stack", 4877 [AD1882_6STACK] = "6stack",
4702}; 4878};
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
index 18af38ebf757..a07b031090d8 100644
--- a/sound/pci/hda/patch_cirrus.c
+++ b/sound/pci/hda/patch_cirrus.c
@@ -490,7 +490,7 @@ static int parse_digital_input(struct hda_codec *codec)
490 * create mixer controls 490 * create mixer controls
491 */ 491 */
492 492
493static const char *dir_sfx[2] = { "Playback", "Capture" }; 493static const char * const dir_sfx[2] = { "Playback", "Capture" };
494 494
495static int add_mute(struct hda_codec *codec, const char *name, int index, 495static int add_mute(struct hda_codec *codec, const char *name, int index,
496 unsigned int pval, int dir, struct snd_kcontrol **kctlp) 496 unsigned int pval, int dir, struct snd_kcontrol **kctlp)
@@ -1156,7 +1156,7 @@ static int cs_parse_auto_config(struct hda_codec *codec)
1156 return 0; 1156 return 0;
1157} 1157}
1158 1158
1159static const char *cs420x_models[CS420X_MODELS] = { 1159static const char * const cs420x_models[CS420X_MODELS] = {
1160 [CS420X_MBP53] = "mbp53", 1160 [CS420X_MBP53] = "mbp53",
1161 [CS420X_MBP55] = "mbp55", 1161 [CS420X_MBP55] = "mbp55",
1162 [CS420X_IMAC27] = "imac27", 1162 [CS420X_IMAC27] = "imac27",
diff --git a/sound/pci/hda/patch_cmedia.c b/sound/pci/hda/patch_cmedia.c
index ff60908f4554..1f8bbcd0f802 100644
--- a/sound/pci/hda/patch_cmedia.c
+++ b/sound/pci/hda/patch_cmedia.c
@@ -608,7 +608,7 @@ static void cmi9880_free(struct hda_codec *codec)
608/* 608/*
609 */ 609 */
610 610
611static const char *cmi9880_models[CMI_MODELS] = { 611static const char * const cmi9880_models[CMI_MODELS] = {
612 [CMI_MINIMAL] = "minimal", 612 [CMI_MINIMAL] = "minimal",
613 [CMI_MIN_FP] = "min_fp", 613 [CMI_MIN_FP] = "min_fp",
614 [CMI_FULL] = "full", 614 [CMI_FULL] = "full",
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
index e96581fcdbdb..9bb030a469cd 100644
--- a/sound/pci/hda/patch_conexant.c
+++ b/sound/pci/hda/patch_conexant.c
@@ -537,13 +537,13 @@ static struct snd_kcontrol_new cxt_beep_mixer[] = {
537}; 537};
538#endif 538#endif
539 539
540static const char *slave_vols[] = { 540static const char * const slave_vols[] = {
541 "Headphone Playback Volume", 541 "Headphone Playback Volume",
542 "Speaker Playback Volume", 542 "Speaker Playback Volume",
543 NULL 543 NULL
544}; 544};
545 545
546static const char *slave_sws[] = { 546static const char * const slave_sws[] = {
547 "Headphone Playback Switch", 547 "Headphone Playback Switch",
548 "Speaker Playback Switch", 548 "Speaker Playback Switch",
549 NULL 549 NULL
@@ -1134,7 +1134,7 @@ enum {
1134 CXT5045_MODELS 1134 CXT5045_MODELS
1135}; 1135};
1136 1136
1137static const char *cxt5045_models[CXT5045_MODELS] = { 1137static const char * const cxt5045_models[CXT5045_MODELS] = {
1138 [CXT5045_LAPTOP_HPSENSE] = "laptop-hpsense", 1138 [CXT5045_LAPTOP_HPSENSE] = "laptop-hpsense",
1139 [CXT5045_LAPTOP_MICSENSE] = "laptop-micsense", 1139 [CXT5045_LAPTOP_MICSENSE] = "laptop-micsense",
1140 [CXT5045_LAPTOP_HPMICSENSE] = "laptop-hpmicsense", 1140 [CXT5045_LAPTOP_HPMICSENSE] = "laptop-hpmicsense",
@@ -1579,7 +1579,7 @@ enum {
1579 CXT5047_MODELS 1579 CXT5047_MODELS
1580}; 1580};
1581 1581
1582static const char *cxt5047_models[CXT5047_MODELS] = { 1582static const char * const cxt5047_models[CXT5047_MODELS] = {
1583 [CXT5047_LAPTOP] = "laptop", 1583 [CXT5047_LAPTOP] = "laptop",
1584 [CXT5047_LAPTOP_HP] = "laptop-hp", 1584 [CXT5047_LAPTOP_HP] = "laptop-hp",
1585 [CXT5047_LAPTOP_EAPD] = "laptop-eapd", 1585 [CXT5047_LAPTOP_EAPD] = "laptop-eapd",
@@ -1995,7 +1995,7 @@ enum {
1995 CXT5051_MODELS 1995 CXT5051_MODELS
1996}; 1996};
1997 1997
1998static const char *cxt5051_models[CXT5051_MODELS] = { 1998static const char *const cxt5051_models[CXT5051_MODELS] = {
1999 [CXT5051_LAPTOP] = "laptop", 1999 [CXT5051_LAPTOP] = "laptop",
2000 [CXT5051_HP] = "hp", 2000 [CXT5051_HP] = "hp",
2001 [CXT5051_HP_DV6736] = "hp-dv6736", 2001 [CXT5051_HP_DV6736] = "hp-dv6736",
@@ -3084,7 +3084,7 @@ enum {
3084 CXT5066_MODELS 3084 CXT5066_MODELS
3085}; 3085};
3086 3086
3087static const char *cxt5066_models[CXT5066_MODELS] = { 3087static const char * const cxt5066_models[CXT5066_MODELS] = {
3088 [CXT5066_LAPTOP] = "laptop", 3088 [CXT5066_LAPTOP] = "laptop",
3089 [CXT5066_DELL_LAPTOP] = "dell-laptop", 3089 [CXT5066_DELL_LAPTOP] = "dell-laptop",
3090 [CXT5066_OLPC_XO_1_5] = "olpc-xo-1_5", 3090 [CXT5066_OLPC_XO_1_5] = "olpc-xo-1_5",
@@ -3746,7 +3746,7 @@ static int cx_auto_build_output_controls(struct hda_codec *codec)
3746 struct conexant_spec *spec = codec->spec; 3746 struct conexant_spec *spec = codec->spec;
3747 int i, err; 3747 int i, err;
3748 int num_line = 0, num_hp = 0, num_spk = 0; 3748 int num_line = 0, num_hp = 0, num_spk = 0;
3749 static const char *texts[3] = { "Front", "Surround", "CLFE" }; 3749 static const char * const texts[3] = { "Front", "Surround", "CLFE" };
3750 3750
3751 if (spec->dac_info_filled == 1) 3751 if (spec->dac_info_filled == 1)
3752 return cx_auto_add_pb_volume(codec, spec->dac_info[0].dac, 3752 return cx_auto_add_pb_volume(codec, spec->dac_info[0].dac,
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index f29b97b5de8f..2d5b83fa8d24 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -817,6 +817,7 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,
817 struct hdmi_spec *spec = codec->spec; 817 struct hdmi_spec *spec = codec->spec;
818 struct hdmi_eld *eld; 818 struct hdmi_eld *eld;
819 struct hda_pcm_stream *codec_pars; 819 struct hda_pcm_stream *codec_pars;
820 struct snd_pcm_runtime *runtime = substream->runtime;
820 unsigned int idx; 821 unsigned int idx;
821 822
822 for (idx = 0; idx < spec->num_cvts; idx++) 823 for (idx = 0; idx < spec->num_cvts; idx++)
@@ -844,6 +845,14 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,
844 hinfo->formats = codec_pars->formats; 845 hinfo->formats = codec_pars->formats;
845 hinfo->maxbps = codec_pars->maxbps; 846 hinfo->maxbps = codec_pars->maxbps;
846 } 847 }
848 /* store the updated parameters */
849 runtime->hw.channels_min = hinfo->channels_min;
850 runtime->hw.channels_max = hinfo->channels_max;
851 runtime->hw.formats = hinfo->formats;
852 runtime->hw.rates = hinfo->rates;
853
854 snd_pcm_hw_constraint_step(substream->runtime, 0,
855 SNDRV_PCM_HW_PARAM_CHANNELS, 2);
847 return 0; 856 return 0;
848} 857}
849 858
@@ -1238,6 +1247,9 @@ static int simple_playback_pcm_open(struct hda_pcm_stream *hinfo,
1238 snd_pcm_hw_constraint_list(substream->runtime, 0, 1247 snd_pcm_hw_constraint_list(substream->runtime, 0,
1239 SNDRV_PCM_HW_PARAM_CHANNELS, 1248 SNDRV_PCM_HW_PARAM_CHANNELS,
1240 hw_constraints_channels); 1249 hw_constraints_channels);
1250 } else {
1251 snd_pcm_hw_constraint_step(substream->runtime, 0,
1252 SNDRV_PCM_HW_PARAM_CHANNELS, 2);
1241 } 1253 }
1242 1254
1243 return snd_hda_multi_out_dig_open(codec, &spec->multiout); 1255 return snd_hda_multi_out_dig_open(codec, &spec->multiout);
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 51c08edd7563..269dbff70b92 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -303,6 +303,8 @@ struct alc_customize_define {
303 unsigned int fixup:1; /* Means that this sku is set by driver, not read from hw */ 303 unsigned int fixup:1; /* Means that this sku is set by driver, not read from hw */
304}; 304};
305 305
306struct alc_fixup;
307
306struct alc_spec { 308struct alc_spec {
307 /* codec parameterization */ 309 /* codec parameterization */
308 struct snd_kcontrol_new *mixers[5]; /* mixer arrays */ 310 struct snd_kcontrol_new *mixers[5]; /* mixer arrays */
@@ -404,6 +406,11 @@ struct alc_spec {
404 /* for PLL fix */ 406 /* for PLL fix */
405 hda_nid_t pll_nid; 407 hda_nid_t pll_nid;
406 unsigned int pll_coef_idx, pll_coef_bit; 408 unsigned int pll_coef_idx, pll_coef_bit;
409
410 /* fix-up list */
411 int fixup_id;
412 const struct alc_fixup *fixup_list;
413 const char *fixup_name;
407}; 414};
408 415
409/* 416/*
@@ -1683,88 +1690,131 @@ struct alc_model_fixup {
1683}; 1690};
1684 1691
1685struct alc_fixup { 1692struct alc_fixup {
1686 unsigned int sku; 1693 int type;
1687 const struct alc_pincfg *pins; 1694 bool chained;
1688 const struct hda_verb *verbs; 1695 int chain_id;
1689 void (*func)(struct hda_codec *codec, const struct alc_fixup *fix, 1696 union {
1690 int pre_init); 1697 unsigned int sku;
1698 const struct alc_pincfg *pins;
1699 const struct hda_verb *verbs;
1700 void (*func)(struct hda_codec *codec,
1701 const struct alc_fixup *fix,
1702 int action);
1703 } v;
1691}; 1704};
1692 1705
1693static void __alc_pick_fixup(struct hda_codec *codec, 1706enum {
1694 const struct alc_fixup *fix, 1707 ALC_FIXUP_INVALID,
1695 const char *modelname, 1708 ALC_FIXUP_SKU,
1696 int pre_init) 1709 ALC_FIXUP_PINS,
1710 ALC_FIXUP_VERBS,
1711 ALC_FIXUP_FUNC,
1712};
1713
1714enum {
1715 ALC_FIXUP_ACT_PRE_PROBE,
1716 ALC_FIXUP_ACT_PROBE,
1717 ALC_FIXUP_ACT_INIT,
1718};
1719
1720static void alc_apply_fixup(struct hda_codec *codec, int action)
1697{ 1721{
1698 const struct alc_pincfg *cfg; 1722 struct alc_spec *spec = codec->spec;
1699 struct alc_spec *spec; 1723 int id = spec->fixup_id;
1724 const char *modelname = spec->fixup_name;
1725 int depth = 0;
1700 1726
1701 cfg = fix->pins; 1727 if (!spec->fixup_list)
1702 if (pre_init && fix->sku) { 1728 return;
1703#ifdef CONFIG_SND_DEBUG_VERBOSE 1729
1704 snd_printdd(KERN_INFO "hda_codec: %s: Apply sku override for %s\n", 1730 while (id >= 0) {
1705 codec->chip_name, modelname); 1731 const struct alc_fixup *fix = spec->fixup_list + id;
1706#endif 1732 const struct alc_pincfg *cfg;
1707 spec = codec->spec; 1733
1708 spec->cdefine.sku_cfg = fix->sku; 1734 switch (fix->type) {
1709 spec->cdefine.fixup = 1; 1735 case ALC_FIXUP_SKU:
1710 } 1736 if (action != ALC_FIXUP_ACT_PRE_PROBE || !fix->v.sku)
1711 if (pre_init && cfg) { 1737 break;;
1712#ifdef CONFIG_SND_DEBUG_VERBOSE 1738 snd_printdd(KERN_INFO "hda_codec: %s: "
1713 snd_printdd(KERN_INFO "hda_codec: %s: Apply pincfg for %s\n", 1739 "Apply sku override for %s\n",
1714 codec->chip_name, modelname); 1740 codec->chip_name, modelname);
1715#endif 1741 spec->cdefine.sku_cfg = fix->v.sku;
1716 for (; cfg->nid; cfg++) 1742 spec->cdefine.fixup = 1;
1717 snd_hda_codec_set_pincfg(codec, cfg->nid, cfg->val); 1743 break;
1718 } 1744 case ALC_FIXUP_PINS:
1719 if (!pre_init && fix->verbs) { 1745 cfg = fix->v.pins;
1720#ifdef CONFIG_SND_DEBUG_VERBOSE 1746 if (action != ALC_FIXUP_ACT_PRE_PROBE || !cfg)
1721 snd_printdd(KERN_INFO "hda_codec: %s: Apply fix-verbs for %s\n", 1747 break;
1722 codec->chip_name, modelname); 1748 snd_printdd(KERN_INFO "hda_codec: %s: "
1723#endif 1749 "Apply pincfg for %s\n",
1724 add_verb(codec->spec, fix->verbs); 1750 codec->chip_name, modelname);
1725 } 1751 for (; cfg->nid; cfg++)
1726 if (fix->func) { 1752 snd_hda_codec_set_pincfg(codec, cfg->nid,
1727#ifdef CONFIG_SND_DEBUG_VERBOSE 1753 cfg->val);
1728 snd_printdd(KERN_INFO "hda_codec: %s: Apply fix-func for %s\n", 1754 break;
1729 codec->chip_name, modelname); 1755 case ALC_FIXUP_VERBS:
1730#endif 1756 if (action != ALC_FIXUP_ACT_PROBE || !fix->v.verbs)
1731 fix->func(codec, fix, pre_init); 1757 break;
1758 snd_printdd(KERN_INFO "hda_codec: %s: "
1759 "Apply fix-verbs for %s\n",
1760 codec->chip_name, modelname);
1761 add_verb(codec->spec, fix->v.verbs);
1762 break;
1763 case ALC_FIXUP_FUNC:
1764 if (!fix->v.func)
1765 break;
1766 snd_printdd(KERN_INFO "hda_codec: %s: "
1767 "Apply fix-func for %s\n",
1768 codec->chip_name, modelname);
1769 fix->v.func(codec, fix, action);
1770 break;
1771 default:
1772 snd_printk(KERN_ERR "hda_codec: %s: "
1773 "Invalid fixup type %d\n",
1774 codec->chip_name, fix->type);
1775 break;
1776 }
1777 if (!fix[id].chained)
1778 break;
1779 if (++depth > 10)
1780 break;
1781 id = fix[id].chain_id;
1732 } 1782 }
1733} 1783}
1734 1784
1735static void alc_pick_fixup(struct hda_codec *codec, 1785static void alc_pick_fixup(struct hda_codec *codec,
1736 const struct snd_pci_quirk *quirk, 1786 const struct alc_model_fixup *models,
1737 const struct alc_fixup *fix, 1787 const struct snd_pci_quirk *quirk,
1738 int pre_init) 1788 const struct alc_fixup *fixlist)
1739{ 1789{
1740 quirk = snd_pci_quirk_lookup(codec->bus->pci, quirk); 1790 struct alc_spec *spec = codec->spec;
1741 if (quirk) { 1791 int id = -1;
1742 fix += quirk->value; 1792 const char *name = NULL;
1743#ifdef CONFIG_SND_DEBUG_VERBOSE
1744 __alc_pick_fixup(codec, fix, quirk->name, pre_init);
1745#else
1746 __alc_pick_fixup(codec, fix, NULL, pre_init);
1747#endif
1748 }
1749}
1750 1793
1751static void alc_pick_fixup_model(struct hda_codec *codec,
1752 const struct alc_model_fixup *models,
1753 const struct snd_pci_quirk *quirk,
1754 const struct alc_fixup *fix,
1755 int pre_init)
1756{
1757 if (codec->modelname && models) { 1794 if (codec->modelname && models) {
1758 while (models->name) { 1795 while (models->name) {
1759 if (!strcmp(codec->modelname, models->name)) { 1796 if (!strcmp(codec->modelname, models->name)) {
1760 fix += models->id; 1797 id = models->id;
1798 name = models->name;
1761 break; 1799 break;
1762 } 1800 }
1763 models++; 1801 models++;
1764 } 1802 }
1765 __alc_pick_fixup(codec, fix, codec->modelname, pre_init); 1803 }
1766 } else { 1804 if (id < 0) {
1767 alc_pick_fixup(codec, quirk, fix, pre_init); 1805 quirk = snd_pci_quirk_lookup(codec->bus->pci, quirk);
1806 if (quirk) {
1807 id = quirk->value;
1808#ifdef CONFIG_SND_DEBUG_VERBOSE
1809 name = quirk->name;
1810#endif
1811 }
1812 }
1813
1814 spec->fixup_id = id;
1815 if (id >= 0) {
1816 spec->fixup_list = fixlist;
1817 spec->fixup_name = name;
1768 } 1818 }
1769} 1819}
1770 1820
@@ -2866,7 +2916,7 @@ static struct snd_kcontrol_new alc880_uniwill_p53_mixer[] = {
2866/* 2916/*
2867 * slave controls for virtual master 2917 * slave controls for virtual master
2868 */ 2918 */
2869static const char *alc_slave_vols[] = { 2919static const char * const alc_slave_vols[] = {
2870 "Front Playback Volume", 2920 "Front Playback Volume",
2871 "Surround Playback Volume", 2921 "Surround Playback Volume",
2872 "Center Playback Volume", 2922 "Center Playback Volume",
@@ -2880,7 +2930,7 @@ static const char *alc_slave_vols[] = {
2880 NULL, 2930 NULL,
2881}; 2931};
2882 2932
2883static const char *alc_slave_sws[] = { 2933static const char * const alc_slave_sws[] = {
2884 "Front Playback Switch", 2934 "Front Playback Switch",
2885 "Surround Playback Switch", 2935 "Surround Playback Switch",
2886 "Center Playback Switch", 2936 "Center Playback Switch",
@@ -3861,6 +3911,8 @@ static int alc_init(struct hda_codec *codec)
3861 if (spec->init_hook) 3911 if (spec->init_hook)
3862 spec->init_hook(codec); 3912 spec->init_hook(codec);
3863 3913
3914 alc_apply_fixup(codec, ALC_FIXUP_ACT_INIT);
3915
3864 hda_call_check_power_status(codec, 0x01); 3916 hda_call_check_power_status(codec, 0x01);
3865 return 0; 3917 return 0;
3866} 3918}
@@ -4559,7 +4611,7 @@ static struct hda_verb alc880_test_init_verbs[] = {
4559/* 4611/*
4560 */ 4612 */
4561 4613
4562static const char *alc880_models[ALC880_MODEL_LAST] = { 4614static const char * const alc880_models[ALC880_MODEL_LAST] = {
4563 [ALC880_3ST] = "3stack", 4615 [ALC880_3ST] = "3stack",
4564 [ALC880_TCL_S700] = "tcl", 4616 [ALC880_TCL_S700] = "tcl",
4565 [ALC880_3ST_DIG] = "3stack-digout", 4617 [ALC880_3ST_DIG] = "3stack-digout",
@@ -5092,7 +5144,7 @@ static const char *alc_get_line_out_pfx(const struct auto_pin_cfg *cfg,
5092static int alc880_auto_create_multi_out_ctls(struct alc_spec *spec, 5144static int alc880_auto_create_multi_out_ctls(struct alc_spec *spec,
5093 const struct auto_pin_cfg *cfg) 5145 const struct auto_pin_cfg *cfg)
5094{ 5146{
5095 static const char *chname[4] = { 5147 static const char * const chname[4] = {
5096 "Front", "Surround", NULL /*CLFE*/, "Side" 5148 "Front", "Surround", NULL /*CLFE*/, "Side"
5097 }; 5149 };
5098 const char *pfx = alc_get_line_out_pfx(cfg, false); 5150 const char *pfx = alc_get_line_out_pfx(cfg, false);
@@ -7090,7 +7142,8 @@ enum {
7090 7142
7091static const struct alc_fixup alc260_fixups[] = { 7143static const struct alc_fixup alc260_fixups[] = {
7092 [PINFIX_HP_DC5750] = { 7144 [PINFIX_HP_DC5750] = {
7093 .pins = (const struct alc_pincfg[]) { 7145 .type = ALC_FIXUP_PINS,
7146 .v.pins = (const struct alc_pincfg[]) {
7094 { 0x11, 0x90130110 }, /* speaker */ 7147 { 0x11, 0x90130110 }, /* speaker */
7095 { } 7148 { }
7096 } 7149 }
@@ -7105,7 +7158,7 @@ static struct snd_pci_quirk alc260_fixup_tbl[] = {
7105/* 7158/*
7106 * ALC260 configurations 7159 * ALC260 configurations
7107 */ 7160 */
7108static const char *alc260_models[ALC260_MODEL_LAST] = { 7161static const char * const alc260_models[ALC260_MODEL_LAST] = {
7109 [ALC260_BASIC] = "basic", 7162 [ALC260_BASIC] = "basic",
7110 [ALC260_HP] = "hp", 7163 [ALC260_HP] = "hp",
7111 [ALC260_HP_3013] = "hp-3013", 7164 [ALC260_HP_3013] = "hp-3013",
@@ -7301,8 +7354,10 @@ static int patch_alc260(struct hda_codec *codec)
7301 board_config = ALC260_AUTO; 7354 board_config = ALC260_AUTO;
7302 } 7355 }
7303 7356
7304 if (board_config == ALC260_AUTO) 7357 if (board_config == ALC260_AUTO) {
7305 alc_pick_fixup(codec, alc260_fixup_tbl, alc260_fixups, 1); 7358 alc_pick_fixup(codec, NULL, alc260_fixup_tbl, alc260_fixups);
7359 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
7360 }
7306 7361
7307 if (board_config == ALC260_AUTO) { 7362 if (board_config == ALC260_AUTO) {
7308 /* automatic parse from the BIOS config */ 7363 /* automatic parse from the BIOS config */
@@ -7350,8 +7405,7 @@ static int patch_alc260(struct hda_codec *codec)
7350 set_capture_mixer(codec); 7405 set_capture_mixer(codec);
7351 set_beep_amp(spec, 0x07, 0x05, HDA_INPUT); 7406 set_beep_amp(spec, 0x07, 0x05, HDA_INPUT);
7352 7407
7353 if (board_config == ALC260_AUTO) 7408 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
7354 alc_pick_fixup(codec, alc260_fixup_tbl, alc260_fixups, 0);
7355 7409
7356 spec->vmaster_nid = 0x08; 7410 spec->vmaster_nid = 0x08;
7357 7411
@@ -9727,7 +9781,7 @@ static hda_nid_t alc1200_slave_dig_outs[] = {
9727/* 9781/*
9728 * configuration and preset 9782 * configuration and preset
9729 */ 9783 */
9730static const char *alc882_models[ALC882_MODEL_LAST] = { 9784static const char * const alc882_models[ALC882_MODEL_LAST] = {
9731 [ALC882_3ST_DIG] = "3stack-dig", 9785 [ALC882_3ST_DIG] = "3stack-dig",
9732 [ALC882_6ST_DIG] = "6stack-dig", 9786 [ALC882_6ST_DIG] = "6stack-dig",
9733 [ALC882_ARIMA] = "arima", 9787 [ALC882_ARIMA] = "arima",
@@ -10678,7 +10732,8 @@ enum {
10678 10732
10679static const struct alc_fixup alc882_fixups[] = { 10733static const struct alc_fixup alc882_fixups[] = {
10680 [PINFIX_ABIT_AW9D_MAX] = { 10734 [PINFIX_ABIT_AW9D_MAX] = {
10681 .pins = (const struct alc_pincfg[]) { 10735 .type = ALC_FIXUP_PINS,
10736 .v.pins = (const struct alc_pincfg[]) {
10682 { 0x15, 0x01080104 }, /* side */ 10737 { 0x15, 0x01080104 }, /* side */
10683 { 0x16, 0x01011012 }, /* rear */ 10738 { 0x16, 0x01011012 }, /* rear */
10684 { 0x17, 0x01016011 }, /* clfe */ 10739 { 0x17, 0x01016011 }, /* clfe */
@@ -10686,13 +10741,15 @@ static const struct alc_fixup alc882_fixups[] = {
10686 } 10741 }
10687 }, 10742 },
10688 [PINFIX_PB_M5210] = { 10743 [PINFIX_PB_M5210] = {
10689 .verbs = (const struct hda_verb[]) { 10744 .type = ALC_FIXUP_VERBS,
10745 .v.verbs = (const struct hda_verb[]) {
10690 { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF50 }, 10746 { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF50 },
10691 {} 10747 {}
10692 } 10748 }
10693 }, 10749 },
10694 [PINFIX_ACER_ASPIRE_7736] = { 10750 [PINFIX_ACER_ASPIRE_7736] = {
10695 .sku = ALC_FIXUP_SKU_IGNORE, 10751 .type = ALC_FIXUP_SKU,
10752 .v.sku = ALC_FIXUP_SKU_IGNORE,
10696 }, 10753 },
10697}; 10754};
10698 10755
@@ -10984,8 +11041,10 @@ static int patch_alc882(struct hda_codec *codec)
10984 board_config = ALC882_AUTO; 11041 board_config = ALC882_AUTO;
10985 } 11042 }
10986 11043
10987 if (board_config == ALC882_AUTO) 11044 if (board_config == ALC882_AUTO) {
10988 alc_pick_fixup(codec, alc882_fixup_tbl, alc882_fixups, 1); 11045 alc_pick_fixup(codec, NULL, alc882_fixup_tbl, alc882_fixups);
11046 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
11047 }
10989 11048
10990 alc_auto_parse_customize_define(codec); 11049 alc_auto_parse_customize_define(codec);
10991 11050
@@ -11061,8 +11120,7 @@ static int patch_alc882(struct hda_codec *codec)
11061 if (has_cdefine_beep(codec)) 11120 if (has_cdefine_beep(codec))
11062 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); 11121 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
11063 11122
11064 if (board_config == ALC882_AUTO) 11123 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
11065 alc_pick_fixup(codec, alc882_fixup_tbl, alc882_fixups, 0);
11066 11124
11067 spec->vmaster_nid = 0x0c; 11125 spec->vmaster_nid = 0x0c;
11068 11126
@@ -12452,19 +12510,14 @@ enum {
12452 12510
12453static const struct alc_fixup alc262_fixups[] = { 12511static const struct alc_fixup alc262_fixups[] = {
12454 [PINFIX_FSC_H270] = { 12512 [PINFIX_FSC_H270] = {
12455 .pins = (const struct alc_pincfg[]) { 12513 .type = ALC_FIXUP_PINS,
12514 .v.pins = (const struct alc_pincfg[]) {
12456 { 0x14, 0x99130110 }, /* speaker */ 12515 { 0x14, 0x99130110 }, /* speaker */
12457 { 0x15, 0x0221142f }, /* front HP */ 12516 { 0x15, 0x0221142f }, /* front HP */
12458 { 0x1b, 0x0121141f }, /* rear HP */ 12517 { 0x1b, 0x0121141f }, /* rear HP */
12459 { } 12518 { }
12460 } 12519 }
12461 }, 12520 },
12462 [PINFIX_PB_M5210] = {
12463 .verbs = (const struct hda_verb[]) {
12464 { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF50 },
12465 {}
12466 }
12467 },
12468}; 12521};
12469 12522
12470static struct snd_pci_quirk alc262_fixup_tbl[] = { 12523static struct snd_pci_quirk alc262_fixup_tbl[] = {
@@ -12554,7 +12607,7 @@ static void alc262_auto_init(struct hda_codec *codec)
12554/* 12607/*
12555 * configuration and preset 12608 * configuration and preset
12556 */ 12609 */
12557static const char *alc262_models[ALC262_MODEL_LAST] = { 12610static const char * const alc262_models[ALC262_MODEL_LAST] = {
12558 [ALC262_BASIC] = "basic", 12611 [ALC262_BASIC] = "basic",
12559 [ALC262_HIPPO] = "hippo", 12612 [ALC262_HIPPO] = "hippo",
12560 [ALC262_HIPPO_1] = "hippo_1", 12613 [ALC262_HIPPO_1] = "hippo_1",
@@ -12895,8 +12948,10 @@ static int patch_alc262(struct hda_codec *codec)
12895 board_config = ALC262_AUTO; 12948 board_config = ALC262_AUTO;
12896 } 12949 }
12897 12950
12898 if (board_config == ALC262_AUTO) 12951 if (board_config == ALC262_AUTO) {
12899 alc_pick_fixup(codec, alc262_fixup_tbl, alc262_fixups, 1); 12952 alc_pick_fixup(codec, NULL, alc262_fixup_tbl, alc262_fixups);
12953 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
12954 }
12900 12955
12901 if (board_config == ALC262_AUTO) { 12956 if (board_config == ALC262_AUTO) {
12902 /* automatic parse from the BIOS config */ 12957 /* automatic parse from the BIOS config */
@@ -12966,8 +13021,7 @@ static int patch_alc262(struct hda_codec *codec)
12966 if (!spec->no_analog && has_cdefine_beep(codec)) 13021 if (!spec->no_analog && has_cdefine_beep(codec))
12967 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); 13022 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
12968 13023
12969 if (board_config == ALC262_AUTO) 13024 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
12970 alc_pick_fixup(codec, alc262_fixup_tbl, alc262_fixups, 0);
12971 13025
12972 spec->vmaster_nid = 0x0c; 13026 spec->vmaster_nid = 0x0c;
12973 13027
@@ -13741,7 +13795,7 @@ static void alc268_auto_init(struct hda_codec *codec)
13741/* 13795/*
13742 * configuration and preset 13796 * configuration and preset
13743 */ 13797 */
13744static const char *alc268_models[ALC268_MODEL_LAST] = { 13798static const char * const alc268_models[ALC268_MODEL_LAST] = {
13745 [ALC267_QUANTA_IL1] = "quanta-il1", 13799 [ALC267_QUANTA_IL1] = "quanta-il1",
13746 [ALC268_3ST] = "3stack", 13800 [ALC268_3ST] = "3stack",
13747 [ALC268_TOSHIBA] = "toshiba", 13801 [ALC268_TOSHIBA] = "toshiba",
@@ -14822,17 +14876,19 @@ static int alc269_resume(struct hda_codec *codec)
14822#endif /* SND_HDA_NEEDS_RESUME */ 14876#endif /* SND_HDA_NEEDS_RESUME */
14823 14877
14824static void alc269_fixup_hweq(struct hda_codec *codec, 14878static void alc269_fixup_hweq(struct hda_codec *codec,
14825 const struct alc_fixup *fix, int pre_init) 14879 const struct alc_fixup *fix, int action)
14826{ 14880{
14827 int coef; 14881 int coef;
14828 14882
14883 if (action != ALC_FIXUP_ACT_INIT)
14884 return;
14829 coef = alc_read_coef_idx(codec, 0x1e); 14885 coef = alc_read_coef_idx(codec, 0x1e);
14830 alc_write_coef_idx(codec, 0x1e, coef | 0x80); 14886 alc_write_coef_idx(codec, 0x1e, coef | 0x80);
14831} 14887}
14832 14888
14833enum { 14889enum {
14834 ALC269_FIXUP_SONY_VAIO, 14890 ALC269_FIXUP_SONY_VAIO,
14835 ALC275_FIX_SONY_VAIO_GPIO2, 14891 ALC275_FIXUP_SONY_VAIO_GPIO2,
14836 ALC269_FIXUP_DELL_M101Z, 14892 ALC269_FIXUP_DELL_M101Z,
14837 ALC269_FIXUP_SKU_IGNORE, 14893 ALC269_FIXUP_SKU_IGNORE,
14838 ALC269_FIXUP_ASUS_G73JW, 14894 ALC269_FIXUP_ASUS_G73JW,
@@ -14842,22 +14898,26 @@ enum {
14842 14898
14843static const struct alc_fixup alc269_fixups[] = { 14899static const struct alc_fixup alc269_fixups[] = {
14844 [ALC269_FIXUP_SONY_VAIO] = { 14900 [ALC269_FIXUP_SONY_VAIO] = {
14845 .verbs = (const struct hda_verb[]) { 14901 .type = ALC_FIXUP_VERBS,
14902 .v.verbs = (const struct hda_verb[]) {
14846 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREFGRD}, 14903 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREFGRD},
14847 {} 14904 {}
14848 } 14905 }
14849 }, 14906 },
14850 [ALC275_FIX_SONY_VAIO_GPIO2] = { 14907 [ALC275_FIXUP_SONY_VAIO_GPIO2] = {
14851 .verbs = (const struct hda_verb[]) { 14908 .type = ALC_FIXUP_VERBS,
14909 .v.verbs = (const struct hda_verb[]) {
14852 {0x01, AC_VERB_SET_GPIO_MASK, 0x04}, 14910 {0x01, AC_VERB_SET_GPIO_MASK, 0x04},
14853 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04}, 14911 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04},
14854 {0x01, AC_VERB_SET_GPIO_DATA, 0x00}, 14912 {0x01, AC_VERB_SET_GPIO_DATA, 0x00},
14855 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREFGRD},
14856 { } 14913 { }
14857 } 14914 },
14915 .chained = true,
14916 .chain_id = ALC269_FIXUP_SONY_VAIO
14858 }, 14917 },
14859 [ALC269_FIXUP_DELL_M101Z] = { 14918 [ALC269_FIXUP_DELL_M101Z] = {
14860 .verbs = (const struct hda_verb[]) { 14919 .type = ALC_FIXUP_VERBS,
14920 .v.verbs = (const struct hda_verb[]) {
14861 /* Enables internal speaker */ 14921 /* Enables internal speaker */
14862 {0x20, AC_VERB_SET_COEF_INDEX, 13}, 14922 {0x20, AC_VERB_SET_COEF_INDEX, 13},
14863 {0x20, AC_VERB_SET_PROC_COEF, 0x4040}, 14923 {0x20, AC_VERB_SET_PROC_COEF, 0x4040},
@@ -14865,34 +14925,33 @@ static const struct alc_fixup alc269_fixups[] = {
14865 } 14925 }
14866 }, 14926 },
14867 [ALC269_FIXUP_SKU_IGNORE] = { 14927 [ALC269_FIXUP_SKU_IGNORE] = {
14868 .sku = ALC_FIXUP_SKU_IGNORE, 14928 .type = ALC_FIXUP_SKU,
14929 .v.sku = ALC_FIXUP_SKU_IGNORE,
14869 }, 14930 },
14870 [ALC269_FIXUP_ASUS_G73JW] = { 14931 [ALC269_FIXUP_ASUS_G73JW] = {
14871 .pins = (const struct alc_pincfg[]) { 14932 .type = ALC_FIXUP_PINS,
14933 .v.pins = (const struct alc_pincfg[]) {
14872 { 0x17, 0x99130111 }, /* subwoofer */ 14934 { 0x17, 0x99130111 }, /* subwoofer */
14873 { } 14935 { }
14874 } 14936 }
14875 }, 14937 },
14876 [ALC269_FIXUP_LENOVO_EAPD] = { 14938 [ALC269_FIXUP_LENOVO_EAPD] = {
14877 .verbs = (const struct hda_verb[]) { 14939 .type = ALC_FIXUP_VERBS,
14940 .v.verbs = (const struct hda_verb[]) {
14878 {0x14, AC_VERB_SET_EAPD_BTLENABLE, 0}, 14941 {0x14, AC_VERB_SET_EAPD_BTLENABLE, 0},
14879 {} 14942 {}
14880 } 14943 }
14881 }, 14944 },
14882 [ALC275_FIXUP_SONY_HWEQ] = { 14945 [ALC275_FIXUP_SONY_HWEQ] = {
14883 .func = alc269_fixup_hweq, 14946 .type = ALC_FIXUP_FUNC,
14884 .verbs = (const struct hda_verb[]) { 14947 .v.func = alc269_fixup_hweq,
14885 {0x01, AC_VERB_SET_GPIO_MASK, 0x04}, 14948 .chained = true,
14886 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04}, 14949 .chain_id = ALC275_FIXUP_SONY_VAIO_GPIO2
14887 {0x01, AC_VERB_SET_GPIO_DATA, 0x00},
14888 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREFGRD},
14889 { }
14890 }
14891 } 14950 }
14892}; 14951};
14893 14952
14894static struct snd_pci_quirk alc269_fixup_tbl[] = { 14953static struct snd_pci_quirk alc269_fixup_tbl[] = {
14895 SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIX_SONY_VAIO_GPIO2), 14954 SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2),
14896 SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), 14955 SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
14897 SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), 14956 SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
14898 SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO), 14957 SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO),
@@ -14908,7 +14967,7 @@ static struct snd_pci_quirk alc269_fixup_tbl[] = {
14908/* 14967/*
14909 * configuration and preset 14968 * configuration and preset
14910 */ 14969 */
14911static const char *alc269_models[ALC269_MODEL_LAST] = { 14970static const char * const alc269_models[ALC269_MODEL_LAST] = {
14912 [ALC269_BASIC] = "basic", 14971 [ALC269_BASIC] = "basic",
14913 [ALC269_QUANTA_FL1] = "quanta", 14972 [ALC269_QUANTA_FL1] = "quanta",
14914 [ALC269_AMIC] = "laptop-amic", 14973 [ALC269_AMIC] = "laptop-amic",
@@ -15184,8 +15243,10 @@ static int patch_alc269(struct hda_codec *codec)
15184 board_config = ALC269_AUTO; 15243 board_config = ALC269_AUTO;
15185 } 15244 }
15186 15245
15187 if (board_config == ALC269_AUTO) 15246 if (board_config == ALC269_AUTO) {
15188 alc_pick_fixup(codec, alc269_fixup_tbl, alc269_fixups, 1); 15247 alc_pick_fixup(codec, NULL, alc269_fixup_tbl, alc269_fixups);
15248 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
15249 }
15189 15250
15190 if (board_config == ALC269_AUTO) { 15251 if (board_config == ALC269_AUTO) {
15191 /* automatic parse from the BIOS config */ 15252 /* automatic parse from the BIOS config */
@@ -15246,8 +15307,7 @@ static int patch_alc269(struct hda_codec *codec)
15246 if (has_cdefine_beep(codec)) 15307 if (has_cdefine_beep(codec))
15247 set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT); 15308 set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT);
15248 15309
15249 if (board_config == ALC269_AUTO) 15310 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
15250 alc_pick_fixup(codec, alc269_fixup_tbl, alc269_fixups, 0);
15251 15311
15252 spec->vmaster_nid = 0x02; 15312 spec->vmaster_nid = 0x02;
15253 15313
@@ -15950,7 +16010,7 @@ static int alc861_auto_create_multi_out_ctls(struct hda_codec *codec,
15950 const struct auto_pin_cfg *cfg) 16010 const struct auto_pin_cfg *cfg)
15951{ 16011{
15952 struct alc_spec *spec = codec->spec; 16012 struct alc_spec *spec = codec->spec;
15953 static const char *chname[4] = { 16013 static const char * const chname[4] = {
15954 "Front", "Surround", NULL /*CLFE*/, "Side" 16014 "Front", "Surround", NULL /*CLFE*/, "Side"
15955 }; 16015 };
15956 const char *pfx = alc_get_line_out_pfx(cfg, true); 16016 const char *pfx = alc_get_line_out_pfx(cfg, true);
@@ -16156,7 +16216,7 @@ static struct hda_amp_list alc861_loopbacks[] = {
16156/* 16216/*
16157 * configuration and preset 16217 * configuration and preset
16158 */ 16218 */
16159static const char *alc861_models[ALC861_MODEL_LAST] = { 16219static const char * const alc861_models[ALC861_MODEL_LAST] = {
16160 [ALC861_3ST] = "3stack", 16220 [ALC861_3ST] = "3stack",
16161 [ALC660_3ST] = "3stack-660", 16221 [ALC660_3ST] = "3stack-660",
16162 [ALC861_3ST_DIG] = "3stack-dig", 16222 [ALC861_3ST_DIG] = "3stack-dig",
@@ -16306,7 +16366,8 @@ enum {
16306 16366
16307static const struct alc_fixup alc861_fixups[] = { 16367static const struct alc_fixup alc861_fixups[] = {
16308 [PINFIX_FSC_AMILO_PI1505] = { 16368 [PINFIX_FSC_AMILO_PI1505] = {
16309 .pins = (const struct alc_pincfg[]) { 16369 .type = ALC_FIXUP_PINS,
16370 .v.pins = (const struct alc_pincfg[]) {
16310 { 0x0b, 0x0221101f }, /* HP */ 16371 { 0x0b, 0x0221101f }, /* HP */
16311 { 0x0f, 0x90170310 }, /* speaker */ 16372 { 0x0f, 0x90170310 }, /* speaker */
16312 { } 16373 { }
@@ -16341,8 +16402,10 @@ static int patch_alc861(struct hda_codec *codec)
16341 board_config = ALC861_AUTO; 16402 board_config = ALC861_AUTO;
16342 } 16403 }
16343 16404
16344 if (board_config == ALC861_AUTO) 16405 if (board_config == ALC861_AUTO) {
16345 alc_pick_fixup(codec, alc861_fixup_tbl, alc861_fixups, 1); 16406 alc_pick_fixup(codec, NULL, alc861_fixup_tbl, alc861_fixups);
16407 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
16408 }
16346 16409
16347 if (board_config == ALC861_AUTO) { 16410 if (board_config == ALC861_AUTO) {
16348 /* automatic parse from the BIOS config */ 16411 /* automatic parse from the BIOS config */
@@ -16379,8 +16442,7 @@ static int patch_alc861(struct hda_codec *codec)
16379 16442
16380 spec->vmaster_nid = 0x03; 16443 spec->vmaster_nid = 0x03;
16381 16444
16382 if (board_config == ALC861_AUTO) 16445 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
16383 alc_pick_fixup(codec, alc861_fixup_tbl, alc861_fixups, 0);
16384 16446
16385 codec->patch_ops = alc_patch_ops; 16447 codec->patch_ops = alc_patch_ops;
16386 if (board_config == ALC861_AUTO) { 16448 if (board_config == ALC861_AUTO) {
@@ -16857,7 +16919,7 @@ static void alc861vd_dallas_setup(struct hda_codec *codec)
16857/* 16919/*
16858 * configuration and preset 16920 * configuration and preset
16859 */ 16921 */
16860static const char *alc861vd_models[ALC861VD_MODEL_LAST] = { 16922static const char * const alc861vd_models[ALC861VD_MODEL_LAST] = {
16861 [ALC660VD_3ST] = "3stack-660", 16923 [ALC660VD_3ST] = "3stack-660",
16862 [ALC660VD_3ST_DIG] = "3stack-660-digout", 16924 [ALC660VD_3ST_DIG] = "3stack-660-digout",
16863 [ALC660VD_ASUS_V1S] = "asus-v1s", 16925 [ALC660VD_ASUS_V1S] = "asus-v1s",
@@ -17077,7 +17139,9 @@ static void alc861vd_auto_init_analog_input(struct hda_codec *codec)
17077static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec, 17139static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec,
17078 const struct auto_pin_cfg *cfg) 17140 const struct auto_pin_cfg *cfg)
17079{ 17141{
17080 static const char *chname[4] = {"Front", "Surround", "CLFE", "Side"}; 17142 static const char * const chname[4] = {
17143 "Front", "Surround", "CLFE", "Side"
17144 };
17081 const char *pfx = alc_get_line_out_pfx(cfg, true); 17145 const char *pfx = alc_get_line_out_pfx(cfg, true);
17082 hda_nid_t nid_v, nid_s; 17146 hda_nid_t nid_v, nid_s;
17083 int i, err; 17147 int i, err;
@@ -17262,7 +17326,8 @@ enum {
17262/* reset GPIO1 */ 17326/* reset GPIO1 */
17263static const struct alc_fixup alc861vd_fixups[] = { 17327static const struct alc_fixup alc861vd_fixups[] = {
17264 [ALC660VD_FIX_ASUS_GPIO1] = { 17328 [ALC660VD_FIX_ASUS_GPIO1] = {
17265 .verbs = (const struct hda_verb[]) { 17329 .type = ALC_FIXUP_VERBS,
17330 .v.verbs = (const struct hda_verb[]) {
17266 {0x01, AC_VERB_SET_GPIO_MASK, 0x03}, 17331 {0x01, AC_VERB_SET_GPIO_MASK, 0x03},
17267 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x01}, 17332 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x01},
17268 {0x01, AC_VERB_SET_GPIO_DATA, 0x01}, 17333 {0x01, AC_VERB_SET_GPIO_DATA, 0x01},
@@ -17297,8 +17362,10 @@ static int patch_alc861vd(struct hda_codec *codec)
17297 board_config = ALC861VD_AUTO; 17362 board_config = ALC861VD_AUTO;
17298 } 17363 }
17299 17364
17300 if (board_config == ALC861VD_AUTO) 17365 if (board_config == ALC861VD_AUTO) {
17301 alc_pick_fixup(codec, alc861vd_fixup_tbl, alc861vd_fixups, 1); 17366 alc_pick_fixup(codec, NULL, alc861vd_fixup_tbl, alc861vd_fixups);
17367 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
17368 }
17302 17369
17303 if (board_config == ALC861VD_AUTO) { 17370 if (board_config == ALC861VD_AUTO) {
17304 /* automatic parse from the BIOS config */ 17371 /* automatic parse from the BIOS config */
@@ -17346,8 +17413,7 @@ static int patch_alc861vd(struct hda_codec *codec)
17346 17413
17347 spec->vmaster_nid = 0x02; 17414 spec->vmaster_nid = 0x02;
17348 17415
17349 if (board_config == ALC861VD_AUTO) 17416 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
17350 alc_pick_fixup(codec, alc861vd_fixup_tbl, alc861vd_fixups, 0);
17351 17417
17352 codec->patch_ops = alc_patch_ops; 17418 codec->patch_ops = alc_patch_ops;
17353 17419
@@ -18630,7 +18696,7 @@ static struct snd_kcontrol_new alc272_nc10_mixer[] = {
18630/* 18696/*
18631 * configuration and preset 18697 * configuration and preset
18632 */ 18698 */
18633static const char *alc662_models[ALC662_MODEL_LAST] = { 18699static const char * const alc662_models[ALC662_MODEL_LAST] = {
18634 [ALC662_3ST_2ch_DIG] = "3stack-dig", 18700 [ALC662_3ST_2ch_DIG] = "3stack-dig",
18635 [ALC662_3ST_6ch_DIG] = "3stack-6ch-dig", 18701 [ALC662_3ST_6ch_DIG] = "3stack-6ch-dig",
18636 [ALC662_3ST_6ch] = "3stack-6ch", 18702 [ALC662_3ST_6ch] = "3stack-6ch",
@@ -19145,7 +19211,7 @@ static int alc662_auto_create_multi_out_ctls(struct hda_codec *codec,
19145 const struct auto_pin_cfg *cfg) 19211 const struct auto_pin_cfg *cfg)
19146{ 19212{
19147 struct alc_spec *spec = codec->spec; 19213 struct alc_spec *spec = codec->spec;
19148 static const char *chname[4] = { 19214 static const char * const chname[4] = {
19149 "Front", "Surround", NULL /*CLFE*/, "Side" 19215 "Front", "Surround", NULL /*CLFE*/, "Side"
19150 }; 19216 };
19151 const char *pfx = alc_get_line_out_pfx(cfg, true); 19217 const char *pfx = alc_get_line_out_pfx(cfg, true);
@@ -19378,7 +19444,10 @@ static void alc662_auto_init(struct hda_codec *codec)
19378} 19444}
19379 19445
19380static void alc272_fixup_mario(struct hda_codec *codec, 19446static void alc272_fixup_mario(struct hda_codec *codec,
19381 const struct alc_fixup *fix, int pre_init) { 19447 const struct alc_fixup *fix, int action)
19448{
19449 if (action != ALC_FIXUP_ACT_PROBE)
19450 return;
19382 if (snd_hda_override_amp_caps(codec, 0x2, HDA_OUTPUT, 19451 if (snd_hda_override_amp_caps(codec, 0x2, HDA_OUTPUT,
19383 (0x3b << AC_AMPCAP_OFFSET_SHIFT) | 19452 (0x3b << AC_AMPCAP_OFFSET_SHIFT) |
19384 (0x3b << AC_AMPCAP_NUM_STEPS_SHIFT) | 19453 (0x3b << AC_AMPCAP_NUM_STEPS_SHIFT) |
@@ -19396,19 +19465,22 @@ enum {
19396 19465
19397static const struct alc_fixup alc662_fixups[] = { 19466static const struct alc_fixup alc662_fixups[] = {
19398 [ALC662_FIXUP_ASPIRE] = { 19467 [ALC662_FIXUP_ASPIRE] = {
19399 .pins = (const struct alc_pincfg[]) { 19468 .type = ALC_FIXUP_PINS,
19469 .v.pins = (const struct alc_pincfg[]) {
19400 { 0x15, 0x99130112 }, /* subwoofer */ 19470 { 0x15, 0x99130112 }, /* subwoofer */
19401 { } 19471 { }
19402 } 19472 }
19403 }, 19473 },
19404 [ALC662_FIXUP_IDEAPAD] = { 19474 [ALC662_FIXUP_IDEAPAD] = {
19405 .pins = (const struct alc_pincfg[]) { 19475 .type = ALC_FIXUP_PINS,
19476 .v.pins = (const struct alc_pincfg[]) {
19406 { 0x17, 0x99130112 }, /* subwoofer */ 19477 { 0x17, 0x99130112 }, /* subwoofer */
19407 { } 19478 { }
19408 } 19479 }
19409 }, 19480 },
19410 [ALC272_FIXUP_MARIO] = { 19481 [ALC272_FIXUP_MARIO] = {
19411 .func = alc272_fixup_mario, 19482 .type = ALC_FIXUP_FUNC,
19483 .v.func = alc272_fixup_mario,
19412 } 19484 }
19413}; 19485};
19414 19486
@@ -19462,7 +19534,9 @@ static int patch_alc662(struct hda_codec *codec)
19462 } 19534 }
19463 19535
19464 if (board_config == ALC662_AUTO) { 19536 if (board_config == ALC662_AUTO) {
19465 alc_pick_fixup(codec, alc662_fixup_tbl, alc662_fixups, 1); 19537 alc_pick_fixup(codec, alc662_fixup_models,
19538 alc662_fixup_tbl, alc662_fixups);
19539 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
19466 /* automatic parse from the BIOS config */ 19540 /* automatic parse from the BIOS config */
19467 err = alc662_parse_auto_config(codec); 19541 err = alc662_parse_auto_config(codec);
19468 if (err < 0) { 19542 if (err < 0) {
@@ -19520,12 +19594,11 @@ static int patch_alc662(struct hda_codec *codec)
19520 } 19594 }
19521 spec->vmaster_nid = 0x02; 19595 spec->vmaster_nid = 0x02;
19522 19596
19597 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
19598
19523 codec->patch_ops = alc_patch_ops; 19599 codec->patch_ops = alc_patch_ops;
19524 if (board_config == ALC662_AUTO) { 19600 if (board_config == ALC662_AUTO)
19525 spec->init_hook = alc662_auto_init; 19601 spec->init_hook = alc662_auto_init;
19526 alc_pick_fixup_model(codec, alc662_fixup_models,
19527 alc662_fixup_tbl, alc662_fixups, 0);
19528 }
19529 19602
19530 alc_init_jacks(codec); 19603 alc_init_jacks(codec);
19531 19604
@@ -19913,7 +19986,7 @@ static void alc680_auto_init(struct hda_codec *codec)
19913/* 19986/*
19914 * configuration and preset 19987 * configuration and preset
19915 */ 19988 */
19916static const char *alc680_models[ALC680_MODEL_LAST] = { 19989static const char * const alc680_models[ALC680_MODEL_LAST] = {
19917 [ALC680_BASE] = "base", 19990 [ALC680_BASE] = "base",
19918 [ALC680_AUTO] = "auto", 19991 [ALC680_AUTO] = "auto",
19919}; 19992};
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index 4ab019d0924e..9ea48b425d0b 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -266,7 +266,7 @@ struct sigmatel_spec {
266 struct sigmatel_mic_route int_mic; 266 struct sigmatel_mic_route int_mic;
267 struct sigmatel_mic_route dock_mic; 267 struct sigmatel_mic_route dock_mic;
268 268
269 const char **spdif_labels; 269 const char * const *spdif_labels;
270 270
271 hda_nid_t dig_in_nid; 271 hda_nid_t dig_in_nid;
272 hda_nid_t mono_nid; 272 hda_nid_t mono_nid;
@@ -524,7 +524,7 @@ static unsigned long stac927x_capsws[] = {
524 HDA_COMPOSE_AMP_VAL(0x1d, 3, 0, HDA_OUTPUT), 524 HDA_COMPOSE_AMP_VAL(0x1d, 3, 0, HDA_OUTPUT),
525}; 525};
526 526
527static const char *stac927x_spdif_labels[5] = { 527static const char * const stac927x_spdif_labels[5] = {
528 "Digital Playback", "ADAT", "Analog Mux 1", 528 "Digital Playback", "ADAT", "Analog Mux 1",
529 "Analog Mux 2", "Analog Mux 3" 529 "Analog Mux 2", "Analog Mux 3"
530}; 530};
@@ -1062,7 +1062,7 @@ static struct snd_kcontrol_new stac_smux_mixer = {
1062 .put = stac92xx_smux_enum_put, 1062 .put = stac92xx_smux_enum_put,
1063}; 1063};
1064 1064
1065static const char *slave_vols[] = { 1065static const char * const slave_vols[] = {
1066 "Front Playback Volume", 1066 "Front Playback Volume",
1067 "Surround Playback Volume", 1067 "Surround Playback Volume",
1068 "Center Playback Volume", 1068 "Center Playback Volume",
@@ -1073,7 +1073,7 @@ static const char *slave_vols[] = {
1073 NULL 1073 NULL
1074}; 1074};
1075 1075
1076static const char *slave_sws[] = { 1076static const char * const slave_sws[] = {
1077 "Front Playback Switch", 1077 "Front Playback Switch",
1078 "Surround Playback Switch", 1078 "Surround Playback Switch",
1079 "Center Playback Switch", 1079 "Center Playback Switch",
@@ -1354,7 +1354,7 @@ static unsigned int *stac9200_brd_tbl[STAC_9200_MODELS] = {
1354 [STAC_9200_PANASONIC] = ref9200_pin_configs, 1354 [STAC_9200_PANASONIC] = ref9200_pin_configs,
1355}; 1355};
1356 1356
1357static const char *stac9200_models[STAC_9200_MODELS] = { 1357static const char * const stac9200_models[STAC_9200_MODELS] = {
1358 [STAC_AUTO] = "auto", 1358 [STAC_AUTO] = "auto",
1359 [STAC_REF] = "ref", 1359 [STAC_REF] = "ref",
1360 [STAC_9200_OQO] = "oqo", 1360 [STAC_9200_OQO] = "oqo",
@@ -1500,7 +1500,7 @@ static unsigned int *stac925x_brd_tbl[STAC_925x_MODELS] = {
1500 [STAC_M6] = stac925xM6_pin_configs, 1500 [STAC_M6] = stac925xM6_pin_configs,
1501}; 1501};
1502 1502
1503static const char *stac925x_models[STAC_925x_MODELS] = { 1503static const char * const stac925x_models[STAC_925x_MODELS] = {
1504 [STAC_925x_AUTO] = "auto", 1504 [STAC_925x_AUTO] = "auto",
1505 [STAC_REF] = "ref", 1505 [STAC_REF] = "ref",
1506 [STAC_M1] = "m1", 1506 [STAC_M1] = "m1",
@@ -1574,7 +1574,7 @@ static unsigned int *stac92hd73xx_brd_tbl[STAC_92HD73XX_MODELS] = {
1574 [STAC_92HD73XX_INTEL] = intel_dg45id_pin_configs, 1574 [STAC_92HD73XX_INTEL] = intel_dg45id_pin_configs,
1575}; 1575};
1576 1576
1577static const char *stac92hd73xx_models[STAC_92HD73XX_MODELS] = { 1577static const char * const stac92hd73xx_models[STAC_92HD73XX_MODELS] = {
1578 [STAC_92HD73XX_AUTO] = "auto", 1578 [STAC_92HD73XX_AUTO] = "auto",
1579 [STAC_92HD73XX_NO_JD] = "no-jd", 1579 [STAC_92HD73XX_NO_JD] = "no-jd",
1580 [STAC_92HD73XX_REF] = "ref", 1580 [STAC_92HD73XX_REF] = "ref",
@@ -1660,7 +1660,7 @@ static unsigned int *stac92hd83xxx_brd_tbl[STAC_92HD83XXX_MODELS] = {
1660 [STAC_HP_DV7_4000] = hp_dv7_4000_pin_configs, 1660 [STAC_HP_DV7_4000] = hp_dv7_4000_pin_configs,
1661}; 1661};
1662 1662
1663static const char *stac92hd83xxx_models[STAC_92HD83XXX_MODELS] = { 1663static const char * const stac92hd83xxx_models[STAC_92HD83XXX_MODELS] = {
1664 [STAC_92HD83XXX_AUTO] = "auto", 1664 [STAC_92HD83XXX_AUTO] = "auto",
1665 [STAC_92HD83XXX_REF] = "ref", 1665 [STAC_92HD83XXX_REF] = "ref",
1666 [STAC_92HD83XXX_PWR_REF] = "mic-ref", 1666 [STAC_92HD83XXX_PWR_REF] = "mic-ref",
@@ -1722,7 +1722,7 @@ static unsigned int *stac92hd71bxx_brd_tbl[STAC_92HD71BXX_MODELS] = {
1722 [STAC_HP_DV4_1222NR] = NULL, 1722 [STAC_HP_DV4_1222NR] = NULL,
1723}; 1723};
1724 1724
1725static const char *stac92hd71bxx_models[STAC_92HD71BXX_MODELS] = { 1725static const char * const stac92hd71bxx_models[STAC_92HD71BXX_MODELS] = {
1726 [STAC_92HD71BXX_AUTO] = "auto", 1726 [STAC_92HD71BXX_AUTO] = "auto",
1727 [STAC_92HD71BXX_REF] = "ref", 1727 [STAC_92HD71BXX_REF] = "ref",
1728 [STAC_DELL_M4_1] = "dell-m4-1", 1728 [STAC_DELL_M4_1] = "dell-m4-1",
@@ -1915,7 +1915,7 @@ static unsigned int *stac922x_brd_tbl[STAC_922X_MODELS] = {
1915 [STAC_922X_DELL_M82] = dell_922x_m82_pin_configs, 1915 [STAC_922X_DELL_M82] = dell_922x_m82_pin_configs,
1916}; 1916};
1917 1917
1918static const char *stac922x_models[STAC_922X_MODELS] = { 1918static const char * const stac922x_models[STAC_922X_MODELS] = {
1919 [STAC_922X_AUTO] = "auto", 1919 [STAC_922X_AUTO] = "auto",
1920 [STAC_D945_REF] = "ref", 1920 [STAC_D945_REF] = "ref",
1921 [STAC_D945GTP5] = "5stack", 1921 [STAC_D945GTP5] = "5stack",
@@ -2077,7 +2077,7 @@ static unsigned int *stac927x_brd_tbl[STAC_927X_MODELS] = {
2077 [STAC_927X_VOLKNOB] = NULL, 2077 [STAC_927X_VOLKNOB] = NULL,
2078}; 2078};
2079 2079
2080static const char *stac927x_models[STAC_927X_MODELS] = { 2080static const char * const stac927x_models[STAC_927X_MODELS] = {
2081 [STAC_927X_AUTO] = "auto", 2081 [STAC_927X_AUTO] = "auto",
2082 [STAC_D965_REF_NO_JD] = "ref-no-jd", 2082 [STAC_D965_REF_NO_JD] = "ref-no-jd",
2083 [STAC_D965_REF] = "ref", 2083 [STAC_D965_REF] = "ref",
@@ -2180,7 +2180,7 @@ static unsigned int *stac9205_brd_tbl[STAC_9205_MODELS] = {
2180 [STAC_9205_EAPD] = NULL, 2180 [STAC_9205_EAPD] = NULL,
2181}; 2181};
2182 2182
2183static const char *stac9205_models[STAC_9205_MODELS] = { 2183static const char * const stac9205_models[STAC_9205_MODELS] = {
2184 [STAC_9205_AUTO] = "auto", 2184 [STAC_9205_AUTO] = "auto",
2185 [STAC_9205_REF] = "ref", 2185 [STAC_9205_REF] = "ref",
2186 [STAC_9205_DELL_M42] = "dell-m42", 2186 [STAC_9205_DELL_M42] = "dell-m42",
@@ -3123,7 +3123,7 @@ static int create_multi_out_ctls(struct hda_codec *codec, int num_outs,
3123 int type) 3123 int type)
3124{ 3124{
3125 struct sigmatel_spec *spec = codec->spec; 3125 struct sigmatel_spec *spec = codec->spec;
3126 static const char *chname[4] = { 3126 static const char * const chname[4] = {
3127 "Front", "Surround", NULL /*CLFE*/, "Side" 3127 "Front", "Surround", NULL /*CLFE*/, "Side"
3128 }; 3128 };
3129 hda_nid_t nid; 3129 hda_nid_t nid;
@@ -3256,7 +3256,7 @@ static int stac92xx_auto_create_hp_ctls(struct hda_codec *codec,
3256} 3256}
3257 3257
3258/* labels for mono mux outputs */ 3258/* labels for mono mux outputs */
3259static const char *stac92xx_mono_labels[4] = { 3259static const char * const stac92xx_mono_labels[4] = {
3260 "DAC0", "DAC1", "Mixer", "DAC2" 3260 "DAC0", "DAC1", "Mixer", "DAC2"
3261}; 3261};
3262 3262
@@ -3380,7 +3380,7 @@ static int stac92xx_auto_create_mux_input_ctls(struct hda_codec *codec)
3380 return 0; 3380 return 0;
3381}; 3381};
3382 3382
3383static const char *stac92xx_spdif_labels[3] = { 3383static const char * const stac92xx_spdif_labels[3] = {
3384 "Digital Playback", "Analog Mux 1", "Analog Mux 2", 3384 "Digital Playback", "Analog Mux 1", "Analog Mux 2",
3385}; 3385};
3386 3386
@@ -3388,7 +3388,7 @@ static int stac92xx_auto_create_spdif_mux_ctls(struct hda_codec *codec)
3388{ 3388{
3389 struct sigmatel_spec *spec = codec->spec; 3389 struct sigmatel_spec *spec = codec->spec;
3390 struct hda_input_mux *spdif_mux = &spec->private_smux; 3390 struct hda_input_mux *spdif_mux = &spec->private_smux;
3391 const char **labels = spec->spdif_labels; 3391 const char * const *labels = spec->spdif_labels;
3392 int i, num_cons; 3392 int i, num_cons;
3393 hda_nid_t con_lst[HDA_MAX_NUM_INPUTS]; 3393 hda_nid_t con_lst[HDA_MAX_NUM_INPUTS];
3394 3394
@@ -3409,7 +3409,7 @@ static int stac92xx_auto_create_spdif_mux_ctls(struct hda_codec *codec)
3409} 3409}
3410 3410
3411/* labels for dmic mux inputs */ 3411/* labels for dmic mux inputs */
3412static const char *stac92xx_dmic_labels[5] = { 3412static const char * const stac92xx_dmic_labels[5] = {
3413 "Analog Inputs", "Digital Mic 1", "Digital Mic 2", 3413 "Analog Inputs", "Digital Mic 1", "Digital Mic 2",
3414 "Digital Mic 3", "Digital Mic 4" 3414 "Digital Mic 3", "Digital Mic 4"
3415}; 3415};
@@ -5333,7 +5333,7 @@ again:
5333 return 0; 5333 return 0;
5334} 5334}
5335 5335
5336static int stac92hd83xxx_set_system_btl_amp(struct hda_codec *codec) 5336static int hp_bnb2011_with_dock(struct hda_codec *codec)
5337{ 5337{
5338 if (codec->vendor_id != 0x111d7605 && 5338 if (codec->vendor_id != 0x111d7605 &&
5339 codec->vendor_id != 0x111d76d1) 5339 codec->vendor_id != 0x111d76d1)
@@ -5348,10 +5348,6 @@ static int stac92hd83xxx_set_system_btl_amp(struct hda_codec *codec)
5348 case 0x103c161d: 5348 case 0x103c161d:
5349 case 0x103c161e: 5349 case 0x103c161e:
5350 case 0x103c161f: 5350 case 0x103c161f:
5351 case 0x103c1620:
5352 case 0x103c1621:
5353 case 0x103c1622:
5354 case 0x103c1623:
5355 5351
5356 case 0x103c162a: 5352 case 0x103c162a:
5357 case 0x103c162b: 5353 case 0x103c162b:
@@ -5360,41 +5356,9 @@ static int stac92hd83xxx_set_system_btl_amp(struct hda_codec *codec)
5360 case 0x103c1631: 5356 case 0x103c1631:
5361 5357
5362 case 0x103c1633: 5358 case 0x103c1633:
5363 5359 case 0x103c1634:
5364 case 0x103c1635: 5360 case 0x103c1635:
5365 5361
5366 case 0x103c164f:
5367
5368 case 0x103c1676:
5369 case 0x103c1677:
5370 case 0x103c1678:
5371 case 0x103c1679:
5372 case 0x103c167a:
5373 case 0x103c167b:
5374 case 0x103c167c:
5375 case 0x103c167d:
5376 case 0x103c167e:
5377 case 0x103c167f:
5378 case 0x103c1680:
5379 case 0x103c1681:
5380 case 0x103c1682:
5381 case 0x103c1683:
5382 case 0x103c1684:
5383 case 0x103c1685:
5384 case 0x103c1686:
5385 case 0x103c1687:
5386 case 0x103c1688:
5387 case 0x103c1689:
5388 case 0x103c168a:
5389 case 0x103c168b:
5390 case 0x103c168c:
5391 case 0x103c168d:
5392 case 0x103c168e:
5393 case 0x103c168f:
5394 case 0x103c1690:
5395 case 0x103c1691:
5396 case 0x103c1692:
5397
5398 case 0x103c3587: 5362 case 0x103c3587:
5399 case 0x103c3588: 5363 case 0x103c3588:
5400 case 0x103c3589: 5364 case 0x103c3589:
@@ -5402,9 +5366,9 @@ static int stac92hd83xxx_set_system_btl_amp(struct hda_codec *codec)
5402 5366
5403 case 0x103c3667: 5367 case 0x103c3667:
5404 case 0x103c3668: 5368 case 0x103c3668:
5405 /* set BTL amp level to 13.43dB for louder speaker output */ 5369 case 0x103c3669:
5406 return snd_hda_codec_write_cache(codec, codec->afg, 0, 5370
5407 0x7F4, 0x14); 5371 return 1;
5408 } 5372 }
5409 return 0; 5373 return 0;
5410} 5374}
@@ -5420,6 +5384,11 @@ static int patch_stac92hd83xxx(struct hda_codec *codec)
5420 if (spec == NULL) 5384 if (spec == NULL)
5421 return -ENOMEM; 5385 return -ENOMEM;
5422 5386
5387 if (hp_bnb2011_with_dock(codec)) {
5388 snd_hda_codec_set_pincfg(codec, 0xa, 0x2101201f);
5389 snd_hda_codec_set_pincfg(codec, 0xf, 0x2181205e);
5390 }
5391
5423 /* reset pin power-down; Windows may leave these bits after reboot */ 5392 /* reset pin power-down; Windows may leave these bits after reboot */
5424 snd_hda_codec_write_cache(codec, codec->afg, 0, 0x7EC, 0); 5393 snd_hda_codec_write_cache(codec, codec->afg, 0, 0x7EC, 0);
5425 snd_hda_codec_write_cache(codec, codec->afg, 0, 0x7ED, 0); 5394 snd_hda_codec_write_cache(codec, codec->afg, 0, 0x7ED, 0);
@@ -5546,8 +5515,6 @@ again:
5546 AC_VERB_SET_CONNECT_SEL, num_dacs); 5515 AC_VERB_SET_CONNECT_SEL, num_dacs);
5547 } 5516 }
5548 5517
5549 stac92hd83xxx_set_system_btl_amp(codec);
5550
5551 codec->proc_widget_hook = stac92hd_proc_hook; 5518 codec->proc_widget_hook = stac92hd_proc_hook;
5552 5519
5553 return 0; 5520 return 0;
@@ -6270,7 +6237,7 @@ static unsigned int stac9872_vaio_pin_configs[9] = {
6270 0x90a7013e 6237 0x90a7013e
6271}; 6238};
6272 6239
6273static const char *stac9872_models[STAC_9872_MODELS] = { 6240static const char * const stac9872_models[STAC_9872_MODELS] = {
6274 [STAC_9872_AUTO] = "auto", 6241 [STAC_9872_AUTO] = "auto",
6275 [STAC_9872_VAIO] = "vaio", 6242 [STAC_9872_VAIO] = "vaio",
6276}; 6243};
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
index 7f4852a478a1..a76c3260d941 100644
--- a/sound/pci/hda/patch_via.c
+++ b/sound/pci/hda/patch_via.c
@@ -2281,7 +2281,9 @@ static int vt1708_auto_create_multi_out_ctls(struct via_spec *spec,
2281 const struct auto_pin_cfg *cfg) 2281 const struct auto_pin_cfg *cfg)
2282{ 2282{
2283 char name[32]; 2283 char name[32];
2284 static const char *chname[4] = { "Front", "Surround", "C/LFE", "Side" }; 2284 static const char * const chname[4] = {
2285 "Front", "Surround", "C/LFE", "Side"
2286 };
2285 hda_nid_t nid, nid_vol, nid_vols[] = {0x17, 0x19, 0x1a, 0x1b}; 2287 hda_nid_t nid, nid_vol, nid_vols[] = {0x17, 0x19, 0x1a, 0x1b};
2286 int i, err; 2288 int i, err;
2287 2289
@@ -2370,7 +2372,7 @@ static void create_hp_imux(struct via_spec *spec)
2370{ 2372{
2371 int i; 2373 int i;
2372 struct hda_input_mux *imux = &spec->private_imux[1]; 2374 struct hda_input_mux *imux = &spec->private_imux[1];
2373 static const char *texts[] = { "OFF", "ON", NULL}; 2375 static const char * const texts[] = { "OFF", "ON", NULL};
2374 2376
2375 /* for hp mode select */ 2377 /* for hp mode select */
2376 for (i = 0; texts[i]; i++) 2378 for (i = 0; texts[i]; i++)
@@ -2890,7 +2892,9 @@ static int vt1709_auto_create_multi_out_ctls(struct via_spec *spec,
2890 const struct auto_pin_cfg *cfg) 2892 const struct auto_pin_cfg *cfg)
2891{ 2893{
2892 char name[32]; 2894 char name[32];
2893 static const char *chname[4] = { "Front", "Surround", "C/LFE", "Side" }; 2895 static const char * const chname[4] = {
2896 "Front", "Surround", "C/LFE", "Side"
2897 };
2894 hda_nid_t nid, nid_vol, nid_vols[] = {0x18, 0x1a, 0x1b, 0x29}; 2898 hda_nid_t nid, nid_vol, nid_vols[] = {0x18, 0x1a, 0x1b, 0x29};
2895 int i, err; 2899 int i, err;
2896 2900
@@ -3433,7 +3437,9 @@ static int vt1708B_auto_create_multi_out_ctls(struct via_spec *spec,
3433 const struct auto_pin_cfg *cfg) 3437 const struct auto_pin_cfg *cfg)
3434{ 3438{
3435 char name[32]; 3439 char name[32];
3436 static const char *chname[4] = { "Front", "Surround", "C/LFE", "Side" }; 3440 static const char * const chname[4] = {
3441 "Front", "Surround", "C/LFE", "Side"
3442 };
3437 hda_nid_t nid_vols[] = {0x16, 0x18, 0x26, 0x27}; 3443 hda_nid_t nid_vols[] = {0x16, 0x18, 0x26, 0x27};
3438 hda_nid_t nid, nid_vol = 0; 3444 hda_nid_t nid, nid_vol = 0;
3439 int i, err; 3445 int i, err;
@@ -3861,7 +3867,9 @@ static int vt1708S_auto_create_multi_out_ctls(struct via_spec *spec,
3861 const struct auto_pin_cfg *cfg) 3867 const struct auto_pin_cfg *cfg)
3862{ 3868{
3863 char name[32]; 3869 char name[32];
3864 static const char *chname[4] = { "Front", "Surround", "C/LFE", "Side" }; 3870 static const char * const chname[4] = {
3871 "Front", "Surround", "C/LFE", "Side"
3872 };
3865 hda_nid_t nid_vols[] = {0x10, 0x11, 0x24, 0x25}; 3873 hda_nid_t nid_vols[] = {0x10, 0x11, 0x24, 0x25};
3866 hda_nid_t nid_mutes[] = {0x1C, 0x18, 0x26, 0x27}; 3874 hda_nid_t nid_mutes[] = {0x1C, 0x18, 0x26, 0x27};
3867 hda_nid_t nid, nid_vol, nid_mute; 3875 hda_nid_t nid, nid_vol, nid_mute;
@@ -4304,7 +4312,7 @@ static int vt1702_auto_create_hp_ctls(struct via_spec *spec, hda_nid_t pin)
4304{ 4312{
4305 int err, i; 4313 int err, i;
4306 struct hda_input_mux *imux; 4314 struct hda_input_mux *imux;
4307 static const char *texts[] = { "ON", "OFF", NULL}; 4315 static const char * const texts[] = { "ON", "OFF", NULL};
4308 if (!pin) 4316 if (!pin)
4309 return 0; 4317 return 0;
4310 spec->multiout.hp_nid = 0x1D; 4318 spec->multiout.hp_nid = 0x1D;
@@ -4615,7 +4623,9 @@ static int vt1718S_auto_create_multi_out_ctls(struct via_spec *spec,
4615 const struct auto_pin_cfg *cfg) 4623 const struct auto_pin_cfg *cfg)
4616{ 4624{
4617 char name[32]; 4625 char name[32];
4618 static const char *chname[4] = { "Front", "Surround", "C/LFE", "Side" }; 4626 static const char * const chname[4] = {
4627 "Front", "Surround", "C/LFE", "Side"
4628 };
4619 hda_nid_t nid_vols[] = {0x8, 0x9, 0xa, 0xb}; 4629 hda_nid_t nid_vols[] = {0x8, 0x9, 0xa, 0xb};
4620 hda_nid_t nid_mutes[] = {0x24, 0x25, 0x26, 0x27}; 4630 hda_nid_t nid_mutes[] = {0x24, 0x25, 0x26, 0x27};
4621 hda_nid_t nid, nid_vol, nid_mute = 0; 4631 hda_nid_t nid, nid_vol, nid_mute = 0;
@@ -5064,7 +5074,9 @@ static int vt1716S_auto_create_multi_out_ctls(struct via_spec *spec,
5064 const struct auto_pin_cfg *cfg) 5074 const struct auto_pin_cfg *cfg)
5065{ 5075{
5066 char name[32]; 5076 char name[32];
5067 static const char *chname[3] = { "Front", "Surround", "C/LFE" }; 5077 static const char * const chname[3] = {
5078 "Front", "Surround", "C/LFE"
5079 };
5068 hda_nid_t nid_vols[] = {0x10, 0x11, 0x25}; 5080 hda_nid_t nid_vols[] = {0x10, 0x11, 0x25};
5069 hda_nid_t nid_mutes[] = {0x1C, 0x18, 0x27}; 5081 hda_nid_t nid_mutes[] = {0x1C, 0x18, 0x27};
5070 hda_nid_t nid, nid_vol, nid_mute; 5082 hda_nid_t nid, nid_vol, nid_mute;
diff --git a/sound/pci/oxygen/xonar_dg.c b/sound/pci/oxygen/xonar_dg.c
index e4de0b8d087a..e1fa602eba79 100644
--- a/sound/pci/oxygen/xonar_dg.c
+++ b/sound/pci/oxygen/xonar_dg.c
@@ -75,7 +75,7 @@ static void cs4245_write(struct oxygen *chip, unsigned int reg, u8 value)
75 OXYGEN_SPI_CEN_LATCH_CLOCK_HI, 75 OXYGEN_SPI_CEN_LATCH_CLOCK_HI,
76 CS4245_SPI_ADDRESS | 76 CS4245_SPI_ADDRESS |
77 CS4245_SPI_WRITE | 77 CS4245_SPI_WRITE |
78 (value << 8) | reg); 78 (reg << 8) | value);
79 data->cs4245_regs[reg] = value; 79 data->cs4245_regs[reg] = value;
80} 80}
81 81
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 883a312bb293..c48b23c1d4fc 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -44,7 +44,7 @@ config SND_SOC_ALL_CODECS
44 select SND_SOC_TWL6040 if TWL4030_CORE 44 select SND_SOC_TWL6040 if TWL4030_CORE
45 select SND_SOC_UDA134X 45 select SND_SOC_UDA134X
46 select SND_SOC_UDA1380 if I2C 46 select SND_SOC_UDA1380 if I2C
47 select SND_SOC_WL1273 if WL1273_CORE 47 select SND_SOC_WL1273 if RADIO_WL1273
48 select SND_SOC_WM2000 if I2C 48 select SND_SOC_WM2000 if I2C
49 select SND_SOC_WM8350 if MFD_WM8350 49 select SND_SOC_WM8350 if MFD_WM8350
50 select SND_SOC_WM8400 if MFD_WM8400 50 select SND_SOC_WM8400 if MFD_WM8400
diff --git a/sound/soc/codecs/wl1273.c b/sound/soc/codecs/wl1273.c
index d3ffa2f0122a..861b28f543d2 100644
--- a/sound/soc/codecs/wl1273.c
+++ b/sound/soc/codecs/wl1273.c
@@ -42,7 +42,7 @@ struct wl1273_priv {
42static int snd_wl1273_fm_set_i2s_mode(struct wl1273_core *core, 42static int snd_wl1273_fm_set_i2s_mode(struct wl1273_core *core,
43 int rate, int width) 43 int rate, int width)
44{ 44{
45 struct device *dev = &core->i2c_dev->dev; 45 struct device *dev = &core->client->dev;
46 int r = 0; 46 int r = 0;
47 u16 mode; 47 u16 mode;
48 48
@@ -123,13 +123,13 @@ static int snd_wl1273_fm_set_i2s_mode(struct wl1273_core *core,
123 dev_dbg(dev, "mode: 0x%04x\n", mode); 123 dev_dbg(dev, "mode: 0x%04x\n", mode);
124 124
125 if (core->i2s_mode != mode) { 125 if (core->i2s_mode != mode) {
126 r = wl1273_fm_write_cmd(core, WL1273_I2S_MODE_CONFIG_SET, mode); 126 r = core->write(core, WL1273_I2S_MODE_CONFIG_SET, mode);
127 if (r) 127 if (r)
128 goto out; 128 goto out;
129 129
130 core->i2s_mode = mode; 130 core->i2s_mode = mode;
131 r = wl1273_fm_write_cmd(core, WL1273_AUDIO_ENABLE, 131 r = core->write(core, WL1273_AUDIO_ENABLE,
132 WL1273_AUDIO_ENABLE_I2S); 132 WL1273_AUDIO_ENABLE_I2S);
133 if (r) 133 if (r)
134 goto out; 134 goto out;
135 } 135 }
@@ -142,8 +142,7 @@ out:
142static int snd_wl1273_fm_set_channel_number(struct wl1273_core *core, 142static int snd_wl1273_fm_set_channel_number(struct wl1273_core *core,
143 int channel_number) 143 int channel_number)
144{ 144{
145 struct i2c_client *client = core->i2c_dev; 145 struct device *dev = &core->client->dev;
146 struct device *dev = &client->dev;
147 int r = 0; 146 int r = 0;
148 147
149 dev_dbg(dev, "%s\n", __func__); 148 dev_dbg(dev, "%s\n", __func__);
@@ -154,17 +153,13 @@ static int snd_wl1273_fm_set_channel_number(struct wl1273_core *core,
154 goto out; 153 goto out;
155 154
156 if (channel_number == 1 && core->mode == WL1273_MODE_RX) 155 if (channel_number == 1 && core->mode == WL1273_MODE_RX)
157 r = wl1273_fm_write_cmd(core, WL1273_MOST_MODE_SET, 156 r = core->write(core, WL1273_MOST_MODE_SET, WL1273_RX_MONO);
158 WL1273_RX_MONO);
159 else if (channel_number == 1 && core->mode == WL1273_MODE_TX) 157 else if (channel_number == 1 && core->mode == WL1273_MODE_TX)
160 r = wl1273_fm_write_cmd(core, WL1273_MONO_SET, 158 r = core->write(core, WL1273_MONO_SET, WL1273_TX_MONO);
161 WL1273_TX_MONO);
162 else if (channel_number == 2 && core->mode == WL1273_MODE_RX) 159 else if (channel_number == 2 && core->mode == WL1273_MODE_RX)
163 r = wl1273_fm_write_cmd(core, WL1273_MOST_MODE_SET, 160 r = core->write(core, WL1273_MOST_MODE_SET, WL1273_RX_STEREO);
164 WL1273_RX_STEREO);
165 else if (channel_number == 2 && core->mode == WL1273_MODE_TX) 161 else if (channel_number == 2 && core->mode == WL1273_MODE_TX)
166 r = wl1273_fm_write_cmd(core, WL1273_MONO_SET, 162 r = core->write(core, WL1273_MONO_SET, WL1273_TX_STEREO);
167 WL1273_TX_STEREO);
168 else 163 else
169 r = -EINVAL; 164 r = -EINVAL;
170out: 165out:
@@ -237,7 +232,7 @@ static int snd_wl1273_fm_audio_put(struct snd_kcontrol *kcontrol,
237 if (wl1273->core->audio_mode == val) 232 if (wl1273->core->audio_mode == val)
238 return 0; 233 return 0;
239 234
240 r = wl1273_fm_set_audio(wl1273->core, val); 235 r = wl1273->core->set_audio(wl1273->core, val);
241 if (r < 0) 236 if (r < 0)
242 return r; 237 return r;
243 238
@@ -272,8 +267,8 @@ static int snd_wl1273_fm_volume_put(struct snd_kcontrol *kcontrol,
272 267
273 dev_dbg(codec->dev, "%s: enter.\n", __func__); 268 dev_dbg(codec->dev, "%s: enter.\n", __func__);
274 269
275 r = wl1273_fm_set_volume(wl1273->core, 270 r = wl1273->core->set_volume(wl1273->core,
276 ucontrol->value.integer.value[0]); 271 ucontrol->value.integer.value[0]);
277 if (r) 272 if (r)
278 return r; 273 return r;
279 274
diff --git a/sound/soc/codecs/wl1273.h b/sound/soc/codecs/wl1273.h
index 14ed027fdcfc..43ec7e668c51 100644
--- a/sound/soc/codecs/wl1273.h
+++ b/sound/soc/codecs/wl1273.h
@@ -25,77 +25,6 @@
25#ifndef __WL1273_CODEC_H__ 25#ifndef __WL1273_CODEC_H__
26#define __WL1273_CODEC_H__ 26#define __WL1273_CODEC_H__
27 27
28/* I2S protocol, left channel first, data width 16 bits */
29#define WL1273_PCM_DEF_MODE 0x00
30
31/* Rx */
32#define WL1273_AUDIO_ENABLE_I2S (1 << 0)
33#define WL1273_AUDIO_ENABLE_ANALOG (1 << 1)
34
35/* Tx */
36#define WL1273_AUDIO_IO_SET_ANALOG 0
37#define WL1273_AUDIO_IO_SET_I2S 1
38
39#define WL1273_POWER_SET_OFF 0
40#define WL1273_POWER_SET_FM (1 << 0)
41#define WL1273_POWER_SET_RDS (1 << 1)
42#define WL1273_POWER_SET_RETENTION (1 << 4)
43
44#define WL1273_PUPD_SET_OFF 0x00
45#define WL1273_PUPD_SET_ON 0x01
46#define WL1273_PUPD_SET_RETENTION 0x10
47
48/* I2S mode */
49#define WL1273_IS2_WIDTH_32 0x0
50#define WL1273_IS2_WIDTH_40 0x1
51#define WL1273_IS2_WIDTH_22_23 0x2
52#define WL1273_IS2_WIDTH_23_22 0x3
53#define WL1273_IS2_WIDTH_48 0x4
54#define WL1273_IS2_WIDTH_50 0x5
55#define WL1273_IS2_WIDTH_60 0x6
56#define WL1273_IS2_WIDTH_64 0x7
57#define WL1273_IS2_WIDTH_80 0x8
58#define WL1273_IS2_WIDTH_96 0x9
59#define WL1273_IS2_WIDTH_128 0xa
60#define WL1273_IS2_WIDTH 0xf
61
62#define WL1273_IS2_FORMAT_STD (0x0 << 4)
63#define WL1273_IS2_FORMAT_LEFT (0x1 << 4)
64#define WL1273_IS2_FORMAT_RIGHT (0x2 << 4)
65#define WL1273_IS2_FORMAT_USER (0x3 << 4)
66
67#define WL1273_IS2_MASTER (0x0 << 6)
68#define WL1273_IS2_SLAVEW (0x1 << 6)
69
70#define WL1273_IS2_TRI_AFTER_SENDING (0x0 << 7)
71#define WL1273_IS2_TRI_ALWAYS_ACTIVE (0x1 << 7)
72
73#define WL1273_IS2_SDOWS_RR (0x0 << 8)
74#define WL1273_IS2_SDOWS_RF (0x1 << 8)
75#define WL1273_IS2_SDOWS_FR (0x2 << 8)
76#define WL1273_IS2_SDOWS_FF (0x3 << 8)
77
78#define WL1273_IS2_TRI_OPT (0x0 << 10)
79#define WL1273_IS2_TRI_ALWAYS (0x1 << 10)
80
81#define WL1273_IS2_RATE_48K (0x0 << 12)
82#define WL1273_IS2_RATE_44_1K (0x1 << 12)
83#define WL1273_IS2_RATE_32K (0x2 << 12)
84#define WL1273_IS2_RATE_22_05K (0x4 << 12)
85#define WL1273_IS2_RATE_16K (0x5 << 12)
86#define WL1273_IS2_RATE_12K (0x8 << 12)
87#define WL1273_IS2_RATE_11_025 (0x9 << 12)
88#define WL1273_IS2_RATE_8K (0xa << 12)
89#define WL1273_IS2_RATE (0xf << 12)
90
91#define WL1273_I2S_DEF_MODE (WL1273_IS2_WIDTH_32 | \
92 WL1273_IS2_FORMAT_STD | \
93 WL1273_IS2_MASTER | \
94 WL1273_IS2_TRI_AFTER_SENDING | \
95 WL1273_IS2_SDOWS_RR | \
96 WL1273_IS2_TRI_OPT | \
97 WL1273_IS2_RATE_48K)
98
99int wl1273_get_format(struct snd_soc_codec *codec, unsigned int *fmt); 28int wl1273_get_format(struct snd_soc_codec *codec, unsigned int *fmt);
100 29
101#endif /* End of __WL1273_CODEC_H__ */ 30#endif /* End of __WL1273_CODEC_H__ */
diff --git a/sound/soc/codecs/wm8990.c b/sound/soc/codecs/wm8990.c
index 5c87a634fc04..100aeee5ba96 100644
--- a/sound/soc/codecs/wm8990.c
+++ b/sound/soc/codecs/wm8990.c
@@ -1183,7 +1183,7 @@ static int wm8990_set_bias_level(struct snd_soc_codec *codec,
1183 WM8990_VMIDTOG); 1183 WM8990_VMIDTOG);
1184 1184
1185 /* Delay to allow output caps to discharge */ 1185 /* Delay to allow output caps to discharge */
1186 msleep(msecs_to_jiffies(300)); 1186 msleep(300);
1187 1187
1188 /* Disable VMIDTOG */ 1188 /* Disable VMIDTOG */
1189 snd_soc_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST | 1189 snd_soc_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
@@ -1195,17 +1195,17 @@ static int wm8990_set_bias_level(struct snd_soc_codec *codec,
1195 /* Enable outputs */ 1195 /* Enable outputs */
1196 snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1b00); 1196 snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1b00);
1197 1197
1198 msleep(msecs_to_jiffies(50)); 1198 msleep(50);
1199 1199
1200 /* Enable VMID at 2x50k */ 1200 /* Enable VMID at 2x50k */
1201 snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f02); 1201 snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f02);
1202 1202
1203 msleep(msecs_to_jiffies(100)); 1203 msleep(100);
1204 1204
1205 /* Enable VREF */ 1205 /* Enable VREF */
1206 snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f03); 1206 snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f03);
1207 1207
1208 msleep(msecs_to_jiffies(600)); 1208 msleep(600);
1209 1209
1210 /* Enable BUFIOEN */ 1210 /* Enable BUFIOEN */
1211 snd_soc_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST | 1211 snd_soc_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
@@ -1250,7 +1250,7 @@ static int wm8990_set_bias_level(struct snd_soc_codec *codec,
1250 /* Disable VMID */ 1250 /* Disable VMID */
1251 snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f01); 1251 snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f01);
1252 1252
1253 msleep(msecs_to_jiffies(300)); 1253 msleep(300);
1254 1254
1255 /* Enable all output discharge bits */ 1255 /* Enable all output discharge bits */
1256 snd_soc_write(codec, WM8990_ANTIPOP1, WM8990_DIS_LLINE | 1256 snd_soc_write(codec, WM8990_ANTIPOP1, WM8990_DIS_LLINE |
diff --git a/sound/soc/ep93xx/ep93xx-i2s.c b/sound/soc/ep93xx/ep93xx-i2s.c
index 9ac93f6b4f85..fff579a1c134 100644
--- a/sound/soc/ep93xx/ep93xx-i2s.c
+++ b/sound/soc/ep93xx/ep93xx-i2s.c
@@ -267,14 +267,16 @@ static int ep93xx_i2s_hw_params(struct snd_pcm_substream *substream,
267 ep93xx_i2s_write_reg(info, EP93XX_I2S_RXWRDLEN, word_len); 267 ep93xx_i2s_write_reg(info, EP93XX_I2S_RXWRDLEN, word_len);
268 268
269 /* 269 /*
270 * Calculate the sdiv (bit clock) and lrdiv (left/right clock) values. 270 * EP93xx I2S module can be setup so SCLK / LRCLK value can be
271 * If the lrclk is pulse length is larger than the word size, then the 271 * 32, 64, 128. MCLK / SCLK value can be 2 and 4.
272 * bit clock will be gated for the unused bits. 272 * We set LRCLK equal to `rate' and minimum SCLK / LRCLK
273 * value is 64, because our sample size is 32 bit * 2 channels.
274 * I2S standard permits us to transmit more bits than
275 * the codec uses.
273 */ 276 */
274 div = (clk_get_rate(info->mclk) / params_rate(params)) * 277 div = clk_get_rate(info->mclk) / params_rate(params);
275 params_channels(params);
276 for (sdiv = 2; sdiv <= 4; sdiv += 2) 278 for (sdiv = 2; sdiv <= 4; sdiv += 2)
277 for (lrdiv = 32; lrdiv <= 128; lrdiv <<= 1) 279 for (lrdiv = 64; lrdiv <= 128; lrdiv <<= 1)
278 if (sdiv * lrdiv == div) { 280 if (sdiv * lrdiv == div) {
279 found = 1; 281 found = 1;
280 goto out; 282 goto out;
@@ -341,9 +343,7 @@ static struct snd_soc_dai_ops ep93xx_i2s_dai_ops = {
341 .set_fmt = ep93xx_i2s_set_dai_fmt, 343 .set_fmt = ep93xx_i2s_set_dai_fmt,
342}; 344};
343 345
344#define EP93XX_I2S_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \ 346#define EP93XX_I2S_FORMATS (SNDRV_PCM_FMTBIT_S32_LE)
345 SNDRV_PCM_FMTBIT_S24_LE | \
346 SNDRV_PCM_FMTBIT_S32_LE)
347 347
348static struct snd_soc_dai_driver ep93xx_i2s_dai = { 348static struct snd_soc_dai_driver ep93xx_i2s_dai = {
349 .symmetric_rates= 1, 349 .symmetric_rates= 1,