aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/arm/pxa2xx-ac97-lib.c12
-rw-r--r--sound/pci/hda/patch_realtek.c88
-rw-r--r--sound/pci/hda/patch_sigmatel.c2
-rw-r--r--sound/soc/codecs/Kconfig2
-rw-r--r--sound/soc/codecs/tlv320aic23.c10
-rw-r--r--sound/usb/usx2y/us122l.c13
6 files changed, 88 insertions, 39 deletions
diff --git a/sound/arm/pxa2xx-ac97-lib.c b/sound/arm/pxa2xx-ac97-lib.c
index 99026dfb81e..34c1d94f921 100644
--- a/sound/arm/pxa2xx-ac97-lib.c
+++ b/sound/arm/pxa2xx-ac97-lib.c
@@ -50,7 +50,7 @@ unsigned short pxa2xx_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
50 mutex_lock(&car_mutex); 50 mutex_lock(&car_mutex);
51 51
52 /* set up primary or secondary codec space */ 52 /* set up primary or secondary codec space */
53 if ((cpu_is_pxa21x() || cpu_is_pxa25x()) && reg == AC97_GPIO_STATUS) 53 if (cpu_is_pxa25x() && reg == AC97_GPIO_STATUS)
54 reg_addr = ac97->num ? &SMC_REG_BASE : &PMC_REG_BASE; 54 reg_addr = ac97->num ? &SMC_REG_BASE : &PMC_REG_BASE;
55 else 55 else
56 reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE; 56 reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE;
@@ -90,7 +90,7 @@ void pxa2xx_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
90 mutex_lock(&car_mutex); 90 mutex_lock(&car_mutex);
91 91
92 /* set up primary or secondary codec space */ 92 /* set up primary or secondary codec space */
93 if ((cpu_is_pxa21x() || cpu_is_pxa25x()) && reg == AC97_GPIO_STATUS) 93 if (cpu_is_pxa25x() && reg == AC97_GPIO_STATUS)
94 reg_addr = ac97->num ? &SMC_REG_BASE : &PMC_REG_BASE; 94 reg_addr = ac97->num ? &SMC_REG_BASE : &PMC_REG_BASE;
95 else 95 else
96 reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE; 96 reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE;
@@ -200,7 +200,7 @@ static inline void pxa_ac97_cold_pxa3xx(void)
200bool pxa2xx_ac97_try_warm_reset(struct snd_ac97 *ac97) 200bool pxa2xx_ac97_try_warm_reset(struct snd_ac97 *ac97)
201{ 201{
202#ifdef CONFIG_PXA25x 202#ifdef CONFIG_PXA25x
203 if (cpu_is_pxa21x() || cpu_is_pxa25x()) 203 if (cpu_is_pxa25x())
204 pxa_ac97_warm_pxa25x(); 204 pxa_ac97_warm_pxa25x();
205 else 205 else
206#endif 206#endif
@@ -230,7 +230,7 @@ EXPORT_SYMBOL_GPL(pxa2xx_ac97_try_warm_reset);
230bool pxa2xx_ac97_try_cold_reset(struct snd_ac97 *ac97) 230bool pxa2xx_ac97_try_cold_reset(struct snd_ac97 *ac97)
231{ 231{
232#ifdef CONFIG_PXA25x 232#ifdef CONFIG_PXA25x
233 if (cpu_is_pxa21x() || cpu_is_pxa25x()) 233 if (cpu_is_pxa25x())
234 pxa_ac97_cold_pxa25x(); 234 pxa_ac97_cold_pxa25x();
235 else 235 else
236#endif 236#endif
@@ -301,7 +301,7 @@ EXPORT_SYMBOL_GPL(pxa2xx_ac97_hw_suspend);
301 301
302int pxa2xx_ac97_hw_resume(void) 302int pxa2xx_ac97_hw_resume(void)
303{ 303{
304 if (cpu_is_pxa21x() || cpu_is_pxa25x() || cpu_is_pxa27x()) { 304 if (cpu_is_pxa25x() || cpu_is_pxa27x()) {
305 pxa_gpio_mode(GPIO31_SYNC_AC97_MD); 305 pxa_gpio_mode(GPIO31_SYNC_AC97_MD);
306 pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD); 306 pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD);
307 pxa_gpio_mode(GPIO28_BITCLK_AC97_MD); 307 pxa_gpio_mode(GPIO28_BITCLK_AC97_MD);
@@ -325,7 +325,7 @@ int __devinit pxa2xx_ac97_hw_probe(struct platform_device *dev)
325 if (ret < 0) 325 if (ret < 0)
326 goto err; 326 goto err;
327 327
328 if (cpu_is_pxa21x() || cpu_is_pxa25x() || cpu_is_pxa27x()) { 328 if (cpu_is_pxa25x() || cpu_is_pxa27x()) {
329 pxa_gpio_mode(GPIO31_SYNC_AC97_MD); 329 pxa_gpio_mode(GPIO31_SYNC_AC97_MD);
330 pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD); 330 pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD);
331 pxa_gpio_mode(GPIO28_BITCLK_AC97_MD); 331 pxa_gpio_mode(GPIO28_BITCLK_AC97_MD);
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 0b6e682c46d..e72707cb60a 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -822,6 +822,27 @@ static void alc_sku_automute(struct hda_codec *codec)
822 spec->jack_present ? 0 : PIN_OUT); 822 spec->jack_present ? 0 : PIN_OUT);
823} 823}
824 824
825static void alc_mic_automute(struct hda_codec *codec)
826{
827 struct alc_spec *spec = codec->spec;
828 unsigned int present;
829 unsigned int mic_nid = spec->autocfg.input_pins[AUTO_PIN_MIC];
830 unsigned int fmic_nid = spec->autocfg.input_pins[AUTO_PIN_FRONT_MIC];
831 unsigned int mix_nid = spec->capsrc_nids[0];
832 unsigned int capsrc_idx_mic, capsrc_idx_fmic;
833
834 capsrc_idx_mic = mic_nid - 0x18;
835 capsrc_idx_fmic = fmic_nid - 0x18;
836 present = snd_hda_codec_read(codec, mic_nid, 0,
837 AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
838 snd_hda_codec_write(codec, mix_nid, 0, AC_VERB_SET_AMP_GAIN_MUTE,
839 0x7000 | (capsrc_idx_mic << 8) | (present ? 0 : 0x80));
840 snd_hda_codec_write(codec, mix_nid, 0, AC_VERB_SET_AMP_GAIN_MUTE,
841 0x7000 | (capsrc_idx_fmic << 8) | (present ? 0x80 : 0));
842 snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, capsrc_idx_fmic,
843 HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
844}
845
825/* unsolicited event for HP jack sensing */ 846/* unsolicited event for HP jack sensing */
826static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res) 847static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res)
827{ 848{
@@ -829,10 +850,17 @@ static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res)
829 res >>= 28; 850 res >>= 28;
830 else 851 else
831 res >>= 26; 852 res >>= 26;
832 if (res != ALC880_HP_EVENT) 853 if (res == ALC880_HP_EVENT)
833 return; 854 alc_sku_automute(codec);
855
856 if (res == ALC880_MIC_EVENT)
857 alc_mic_automute(codec);
858}
834 859
860static void alc_inithook(struct hda_codec *codec)
861{
835 alc_sku_automute(codec); 862 alc_sku_automute(codec);
863 alc_mic_automute(codec);
836} 864}
837 865
838/* additional initialization for ALC888 variants */ 866/* additional initialization for ALC888 variants */
@@ -1018,10 +1046,17 @@ do_sku:
1018 else 1046 else
1019 return; 1047 return;
1020 } 1048 }
1049 if (spec->autocfg.hp_pins[0])
1050 snd_hda_codec_write(codec, spec->autocfg.hp_pins[0], 0,
1051 AC_VERB_SET_UNSOLICITED_ENABLE,
1052 AC_USRSP_EN | ALC880_HP_EVENT);
1021 1053
1022 snd_hda_codec_write(codec, spec->autocfg.hp_pins[0], 0, 1054 if (spec->autocfg.input_pins[AUTO_PIN_MIC] &&
1023 AC_VERB_SET_UNSOLICITED_ENABLE, 1055 spec->autocfg.input_pins[AUTO_PIN_FRONT_MIC])
1024 AC_USRSP_EN | ALC880_HP_EVENT); 1056 snd_hda_codec_write(codec,
1057 spec->autocfg.input_pins[AUTO_PIN_MIC], 0,
1058 AC_VERB_SET_UNSOLICITED_ENABLE,
1059 AC_USRSP_EN | ALC880_MIC_EVENT);
1025 1060
1026 spec->unsol_event = alc_sku_unsol_event; 1061 spec->unsol_event = alc_sku_unsol_event;
1027} 1062}
@@ -3808,7 +3843,7 @@ static void alc880_auto_init(struct hda_codec *codec)
3808 alc880_auto_init_extra_out(codec); 3843 alc880_auto_init_extra_out(codec);
3809 alc880_auto_init_analog_input(codec); 3844 alc880_auto_init_analog_input(codec);
3810 if (spec->unsol_event) 3845 if (spec->unsol_event)
3811 alc_sku_automute(codec); 3846 alc_inithook(codec);
3812} 3847}
3813 3848
3814/* 3849/*
@@ -5219,7 +5254,7 @@ static void alc260_auto_init(struct hda_codec *codec)
5219 alc260_auto_init_multi_out(codec); 5254 alc260_auto_init_multi_out(codec);
5220 alc260_auto_init_analog_input(codec); 5255 alc260_auto_init_analog_input(codec);
5221 if (spec->unsol_event) 5256 if (spec->unsol_event)
5222 alc_sku_automute(codec); 5257 alc_inithook(codec);
5223} 5258}
5224 5259
5225#ifdef CONFIG_SND_HDA_POWER_SAVE 5260#ifdef CONFIG_SND_HDA_POWER_SAVE
@@ -6629,7 +6664,7 @@ static void alc882_auto_init(struct hda_codec *codec)
6629 alc882_auto_init_analog_input(codec); 6664 alc882_auto_init_analog_input(codec);
6630 alc882_auto_init_input_src(codec); 6665 alc882_auto_init_input_src(codec);
6631 if (spec->unsol_event) 6666 if (spec->unsol_event)
6632 alc_sku_automute(codec); 6667 alc_inithook(codec);
6633} 6668}
6634 6669
6635static int patch_alc883(struct hda_codec *codec); /* called in patch_alc882() */ 6670static int patch_alc883(struct hda_codec *codec); /* called in patch_alc882() */
@@ -8306,8 +8341,8 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
8306 SND_PCI_QUIRK(0x103c, 0x2a4f, "HP Samba", ALC888_3ST_HP), 8341 SND_PCI_QUIRK(0x103c, 0x2a4f, "HP Samba", ALC888_3ST_HP),
8307 SND_PCI_QUIRK(0x103c, 0x2a60, "HP Lucknow", ALC888_3ST_HP), 8342 SND_PCI_QUIRK(0x103c, 0x2a60, "HP Lucknow", ALC888_3ST_HP),
8308 SND_PCI_QUIRK(0x103c, 0x2a61, "HP Nettle", ALC883_6ST_DIG), 8343 SND_PCI_QUIRK(0x103c, 0x2a61, "HP Nettle", ALC883_6ST_DIG),
8344 SND_PCI_QUIRK(0x1043, 0x1873, "Asus M90V", ALC888_ASUS_M90V),
8309 SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG), 8345 SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG),
8310 SND_PCI_QUIRK(0x1043, 0x8317, "Asus M90V", ALC888_ASUS_M90V),
8311 SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_ASUS_EEE1601), 8346 SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_ASUS_EEE1601),
8312 SND_PCI_QUIRK(0x105b, 0x0ce8, "Foxconn P35AX-S", ALC883_6ST_DIG), 8347 SND_PCI_QUIRK(0x105b, 0x0ce8, "Foxconn P35AX-S", ALC883_6ST_DIG),
8313 SND_PCI_QUIRK(0x105b, 0x6668, "Foxconn", ALC883_6ST_DIG), 8348 SND_PCI_QUIRK(0x105b, 0x6668, "Foxconn", ALC883_6ST_DIG),
@@ -8758,7 +8793,7 @@ static void alc883_auto_init(struct hda_codec *codec)
8758 alc883_auto_init_analog_input(codec); 8793 alc883_auto_init_analog_input(codec);
8759 alc883_auto_init_input_src(codec); 8794 alc883_auto_init_input_src(codec);
8760 if (spec->unsol_event) 8795 if (spec->unsol_event)
8761 alc_sku_automute(codec); 8796 alc_inithook(codec);
8762} 8797}
8763 8798
8764static int patch_alc883(struct hda_codec *codec) 8799static int patch_alc883(struct hda_codec *codec)
@@ -8802,8 +8837,13 @@ static int patch_alc883(struct hda_codec *codec)
8802 8837
8803 switch (codec->vendor_id) { 8838 switch (codec->vendor_id) {
8804 case 0x10ec0888: 8839 case 0x10ec0888:
8805 spec->stream_name_analog = "ALC888 Analog"; 8840 if (codec->revision_id == 0x100101) {
8806 spec->stream_name_digital = "ALC888 Digital"; 8841 spec->stream_name_analog = "ALC1200 Analog";
8842 spec->stream_name_digital = "ALC1200 Digital";
8843 } else {
8844 spec->stream_name_analog = "ALC888 Analog";
8845 spec->stream_name_digital = "ALC888 Digital";
8846 }
8807 break; 8847 break;
8808 case 0x10ec0889: 8848 case 0x10ec0889:
8809 spec->stream_name_analog = "ALC889 Analog"; 8849 spec->stream_name_analog = "ALC889 Analog";
@@ -10285,7 +10325,7 @@ static void alc262_auto_init(struct hda_codec *codec)
10285 alc262_auto_init_analog_input(codec); 10325 alc262_auto_init_analog_input(codec);
10286 alc262_auto_init_input_src(codec); 10326 alc262_auto_init_input_src(codec);
10287 if (spec->unsol_event) 10327 if (spec->unsol_event)
10288 alc_sku_automute(codec); 10328 alc_inithook(codec);
10289} 10329}
10290 10330
10291/* 10331/*
@@ -10343,7 +10383,7 @@ static struct snd_pci_quirk alc262_cfg_tbl[] = {
10343 SND_PCI_QUIRK(0x104d, 0x9015, "Sony 0x9015", ALC262_SONY_ASSAMD), 10383 SND_PCI_QUIRK(0x104d, 0x9015, "Sony 0x9015", ALC262_SONY_ASSAMD),
10344 SND_PCI_QUIRK(0x1179, 0x0001, "Toshiba dynabook SS RX1", 10384 SND_PCI_QUIRK(0x1179, 0x0001, "Toshiba dynabook SS RX1",
10345 ALC262_TOSHIBA_RX1), 10385 ALC262_TOSHIBA_RX1),
10346 SND_PCI_QUIRK(0x1179, 0x0268, "Toshiba S06", ALC262_TOSHIBA_S06), 10386 SND_PCI_QUIRK(0x1179, 0xff7b, "Toshiba S06", ALC262_TOSHIBA_S06),
10347 SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu", ALC262_FUJITSU), 10387 SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu", ALC262_FUJITSU),
10348 SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FUJITSU), 10388 SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FUJITSU),
10349 SND_PCI_QUIRK(0x144d, 0xc032, "Samsung Q1 Ultra", ALC262_ULTRA), 10389 SND_PCI_QUIRK(0x144d, 0xc032, "Samsung Q1 Ultra", ALC262_ULTRA),
@@ -11417,7 +11457,7 @@ static void alc268_auto_init(struct hda_codec *codec)
11417 alc268_auto_init_mono_speaker_out(codec); 11457 alc268_auto_init_mono_speaker_out(codec);
11418 alc268_auto_init_analog_input(codec); 11458 alc268_auto_init_analog_input(codec);
11419 if (spec->unsol_event) 11459 if (spec->unsol_event)
11420 alc_sku_automute(codec); 11460 alc_inithook(codec);
11421} 11461}
11422 11462
11423/* 11463/*
@@ -12200,7 +12240,7 @@ static void alc269_auto_init(struct hda_codec *codec)
12200 alc269_auto_init_hp_out(codec); 12240 alc269_auto_init_hp_out(codec);
12201 alc269_auto_init_analog_input(codec); 12241 alc269_auto_init_analog_input(codec);
12202 if (spec->unsol_event) 12242 if (spec->unsol_event)
12203 alc_sku_automute(codec); 12243 alc_inithook(codec);
12204} 12244}
12205 12245
12206/* 12246/*
@@ -13281,7 +13321,7 @@ static void alc861_auto_init(struct hda_codec *codec)
13281 alc861_auto_init_hp_out(codec); 13321 alc861_auto_init_hp_out(codec);
13282 alc861_auto_init_analog_input(codec); 13322 alc861_auto_init_analog_input(codec);
13283 if (spec->unsol_event) 13323 if (spec->unsol_event)
13284 alc_sku_automute(codec); 13324 alc_inithook(codec);
13285} 13325}
13286 13326
13287#ifdef CONFIG_SND_HDA_POWER_SAVE 13327#ifdef CONFIG_SND_HDA_POWER_SAVE
@@ -14393,7 +14433,7 @@ static void alc861vd_auto_init(struct hda_codec *codec)
14393 alc861vd_auto_init_analog_input(codec); 14433 alc861vd_auto_init_analog_input(codec);
14394 alc861vd_auto_init_input_src(codec); 14434 alc861vd_auto_init_input_src(codec);
14395 if (spec->unsol_event) 14435 if (spec->unsol_event)
14396 alc_sku_automute(codec); 14436 alc_inithook(codec);
14397} 14437}
14398 14438
14399static int patch_alc861vd(struct hda_codec *codec) 14439static int patch_alc861vd(struct hda_codec *codec)
@@ -15667,7 +15707,7 @@ static const char *alc662_models[ALC662_MODEL_LAST] = {
15667 15707
15668static struct snd_pci_quirk alc662_cfg_tbl[] = { 15708static struct snd_pci_quirk alc662_cfg_tbl[] = {
15669 SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M51VA", ALC663_ASUS_M51VA), 15709 SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M51VA", ALC663_ASUS_M51VA),
15670 SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS M51VA", ALC663_ASUS_G50V), 15710 SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS G50V", ALC663_ASUS_G50V),
15671 SND_PCI_QUIRK(0x1043, 0x8290, "ASUS P5GC-MX", ALC662_3ST_6ch_DIG), 15711 SND_PCI_QUIRK(0x1043, 0x8290, "ASUS P5GC-MX", ALC662_3ST_6ch_DIG),
15672 SND_PCI_QUIRK(0x1043, 0x82a1, "ASUS Eeepc", ALC662_ASUS_EEEPC_P701), 15712 SND_PCI_QUIRK(0x1043, 0x82a1, "ASUS Eeepc", ALC662_ASUS_EEEPC_P701),
15673 SND_PCI_QUIRK(0x1043, 0x82d1, "ASUS Eeepc EP20", ALC662_ASUS_EEEPC_EP20), 15713 SND_PCI_QUIRK(0x1043, 0x82d1, "ASUS Eeepc EP20", ALC662_ASUS_EEEPC_EP20),
@@ -15680,6 +15720,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = {
15680 SND_PCI_QUIRK(0x1043, 0x11d3, "ASUS NB", ALC663_ASUS_MODE1), 15720 SND_PCI_QUIRK(0x1043, 0x11d3, "ASUS NB", ALC663_ASUS_MODE1),
15681 SND_PCI_QUIRK(0x1043, 0x1203, "ASUS NB", ALC663_ASUS_MODE1), 15721 SND_PCI_QUIRK(0x1043, 0x1203, "ASUS NB", ALC663_ASUS_MODE1),
15682 SND_PCI_QUIRK(0x1043, 0x19e3, "ASUS NB", ALC663_ASUS_MODE1), 15722 SND_PCI_QUIRK(0x1043, 0x19e3, "ASUS NB", ALC663_ASUS_MODE1),
15723 SND_PCI_QUIRK(0x1043, 0x1993, "ASUS N20", ALC663_ASUS_MODE1),
15683 SND_PCI_QUIRK(0x1043, 0x19c3, "ASUS F5Z/F6x", ALC662_ASUS_MODE2), 15724 SND_PCI_QUIRK(0x1043, 0x19c3, "ASUS F5Z/F6x", ALC662_ASUS_MODE2),
15684 SND_PCI_QUIRK(0x1043, 0x1339, "ASUS NB", ALC662_ASUS_MODE2), 15725 SND_PCI_QUIRK(0x1043, 0x1339, "ASUS NB", ALC662_ASUS_MODE2),
15685 SND_PCI_QUIRK(0x1043, 0x1913, "ASUS NB", ALC662_ASUS_MODE2), 15726 SND_PCI_QUIRK(0x1043, 0x1913, "ASUS NB", ALC662_ASUS_MODE2),
@@ -16223,7 +16264,7 @@ static void alc662_auto_init(struct hda_codec *codec)
16223 alc662_auto_init_analog_input(codec); 16264 alc662_auto_init_analog_input(codec);
16224 alc662_auto_init_input_src(codec); 16265 alc662_auto_init_input_src(codec);
16225 if (spec->unsol_event) 16266 if (spec->unsol_event)
16226 alc_sku_automute(codec); 16267 alc_inithook(codec);
16227} 16268}
16228 16269
16229static int patch_alc662(struct hda_codec *codec) 16270static int patch_alc662(struct hda_codec *codec)
@@ -16268,6 +16309,9 @@ static int patch_alc662(struct hda_codec *codec)
16268 if (codec->vendor_id == 0x10ec0663) { 16309 if (codec->vendor_id == 0x10ec0663) {
16269 spec->stream_name_analog = "ALC663 Analog"; 16310 spec->stream_name_analog = "ALC663 Analog";
16270 spec->stream_name_digital = "ALC663 Digital"; 16311 spec->stream_name_digital = "ALC663 Digital";
16312 } else if (codec->vendor_id == 0x10ec0272) {
16313 spec->stream_name_analog = "ALC272 Analog";
16314 spec->stream_name_digital = "ALC272 Digital";
16271 } else { 16315 } else {
16272 spec->stream_name_analog = "ALC662 Analog"; 16316 spec->stream_name_analog = "ALC662 Analog";
16273 spec->stream_name_digital = "ALC662 Digital"; 16317 spec->stream_name_digital = "ALC662 Digital";
@@ -16305,6 +16349,7 @@ struct hda_codec_preset snd_hda_preset_realtek[] = {
16305 { .id = 0x10ec0267, .name = "ALC267", .patch = patch_alc268 }, 16349 { .id = 0x10ec0267, .name = "ALC267", .patch = patch_alc268 },
16306 { .id = 0x10ec0268, .name = "ALC268", .patch = patch_alc268 }, 16350 { .id = 0x10ec0268, .name = "ALC268", .patch = patch_alc268 },
16307 { .id = 0x10ec0269, .name = "ALC269", .patch = patch_alc269 }, 16351 { .id = 0x10ec0269, .name = "ALC269", .patch = patch_alc269 },
16352 { .id = 0x10ec0272, .name = "ALC272", .patch = patch_alc662 },
16308 { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660", 16353 { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660",
16309 .patch = patch_alc861 }, 16354 .patch = patch_alc861 },
16310 { .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd }, 16355 { .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd },
@@ -16323,7 +16368,10 @@ struct hda_codec_preset snd_hda_preset_realtek[] = {
16323 { .id = 0x10ec0885, .rev = 0x100103, .name = "ALC889A", 16368 { .id = 0x10ec0885, .rev = 0x100103, .name = "ALC889A",
16324 .patch = patch_alc882 }, /* should be patch_alc883() in future */ 16369 .patch = patch_alc882 }, /* should be patch_alc883() in future */
16325 { .id = 0x10ec0885, .name = "ALC885", .patch = patch_alc882 }, 16370 { .id = 0x10ec0885, .name = "ALC885", .patch = patch_alc882 },
16371 { .id = 0x10ec0887, .name = "ALC887", .patch = patch_alc883 },
16326 { .id = 0x10ec0888, .name = "ALC888", .patch = patch_alc883 }, 16372 { .id = 0x10ec0888, .name = "ALC888", .patch = patch_alc883 },
16373 { .id = 0x10ec0888, .rev = 0x100101, .name = "ALC1200",
16374 .patch = patch_alc883 },
16327 { .id = 0x10ec0889, .name = "ALC889", .patch = patch_alc883 }, 16375 { .id = 0x10ec0889, .name = "ALC889", .patch = patch_alc883 },
16328 {} /* terminator */ 16376 {} /* terminator */
16329}; 16377};
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index c5906551311..a2ac7205d45 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -2816,7 +2816,7 @@ static int stac92xx_auto_create_multi_out_ctls(struct hda_codec *codec,
2816 static const char *chname[4] = { 2816 static const char *chname[4] = {
2817 "Front", "Surround", NULL /*CLFE*/, "Side" 2817 "Front", "Surround", NULL /*CLFE*/, "Side"
2818 }; 2818 };
2819 hda_nid_t nid; 2819 hda_nid_t nid = 0;
2820 int i, err; 2820 int i, err;
2821 2821
2822 struct sigmatel_spec *spec = codec->spec; 2822 struct sigmatel_spec *spec = codec->spec;
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 4975d8573e4..38a0e3b620a 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -68,7 +68,7 @@ config SND_SOC_TLV320AIC23
68 depends on I2C 68 depends on I2C
69 69
70config SND_SOC_TLV320AIC26 70config SND_SOC_TLV320AIC26
71 tristate "TI TLV320AIC26 Codec support" 71 tristate "TI TLV320AIC26 Codec support" if SND_SOC_OF_SIMPLE
72 depends on SPI 72 depends on SPI
73 73
74config SND_SOC_TLV320AIC3X 74config SND_SOC_TLV320AIC3X
diff --git a/sound/soc/codecs/tlv320aic23.c b/sound/soc/codecs/tlv320aic23.c
index bac7815e00f..44308dac9e1 100644
--- a/sound/soc/codecs/tlv320aic23.c
+++ b/sound/soc/codecs/tlv320aic23.c
@@ -84,7 +84,7 @@ static int tlv320aic23_write(struct snd_soc_codec *codec, unsigned int reg,
84 unsigned int value) 84 unsigned int value)
85{ 85{
86 86
87 u8 data; 87 u8 data[2];
88 88
89 /* TLV320AIC23 has 7 bit address and 9 bits of data 89 /* TLV320AIC23 has 7 bit address and 9 bits of data
90 * so we need to switch one data bit into reg and rest 90 * so we need to switch one data bit into reg and rest
@@ -96,12 +96,12 @@ static int tlv320aic23_write(struct snd_soc_codec *codec, unsigned int reg,
96 return -1; 96 return -1;
97 } 97 }
98 98
99 data = (reg << 1) | (value >> 8 & 0x01); 99 data[0] = (reg << 1) | (value >> 8 & 0x01);
100 data[1] = value & 0xff;
100 101
101 tlv320aic23_write_reg_cache(codec, reg, value); 102 tlv320aic23_write_reg_cache(codec, reg, value);
102 103
103 if (codec->hw_write(codec->control_data, data, 104 if (codec->hw_write(codec->control_data, data, 2) == 2)
104 (value & 0xff)) == 0)
105 return 0; 105 return 0;
106 106
107 printk(KERN_ERR "%s cannot write %03x to register R%d\n", __func__, 107 printk(KERN_ERR "%s cannot write %03x to register R%d\n", __func__,
@@ -674,7 +674,7 @@ static int tlv320aic23_probe(struct platform_device *pdev)
674 674
675 tlv320aic23_socdev = socdev; 675 tlv320aic23_socdev = socdev;
676#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) 676#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
677 codec->hw_write = (hw_write_t) i2c_smbus_write_byte_data; 677 codec->hw_write = (hw_write_t) i2c_master_send;
678 codec->hw_read = NULL; 678 codec->hw_read = NULL;
679 ret = i2c_add_driver(&tlv320aic23_i2c_driver); 679 ret = i2c_add_driver(&tlv320aic23_i2c_driver);
680 if (ret != 0) 680 if (ret != 0)
diff --git a/sound/usb/usx2y/us122l.c b/sound/usb/usx2y/us122l.c
index b441fe2cd19..c2515b680f9 100644
--- a/sound/usb/usx2y/us122l.c
+++ b/sound/usb/usx2y/us122l.c
@@ -118,12 +118,11 @@ static int usb_stream_hwdep_vm_fault(struct vm_area_struct *area,
118 void *vaddr; 118 void *vaddr;
119 struct us122l *us122l = area->vm_private_data; 119 struct us122l *us122l = area->vm_private_data;
120 struct usb_stream *s; 120 struct usb_stream *s;
121 int vm_f = VM_FAULT_SIGBUS;
122 121
123 mutex_lock(&us122l->mutex); 122 mutex_lock(&us122l->mutex);
124 s = us122l->sk.s; 123 s = us122l->sk.s;
125 if (!s) 124 if (!s)
126 goto out; 125 goto unlock;
127 126
128 offset = vmf->pgoff << PAGE_SHIFT; 127 offset = vmf->pgoff << PAGE_SHIFT;
129 if (offset < PAGE_ALIGN(s->read_size)) 128 if (offset < PAGE_ALIGN(s->read_size))
@@ -131,7 +130,7 @@ static int usb_stream_hwdep_vm_fault(struct vm_area_struct *area,
131 else { 130 else {
132 offset -= PAGE_ALIGN(s->read_size); 131 offset -= PAGE_ALIGN(s->read_size);
133 if (offset >= PAGE_ALIGN(s->write_size)) 132 if (offset >= PAGE_ALIGN(s->write_size))
134 goto out; 133 goto unlock;
135 134
136 vaddr = us122l->sk.write_page + offset; 135 vaddr = us122l->sk.write_page + offset;
137 } 136 }
@@ -141,9 +140,11 @@ static int usb_stream_hwdep_vm_fault(struct vm_area_struct *area,
141 mutex_unlock(&us122l->mutex); 140 mutex_unlock(&us122l->mutex);
142 141
143 vmf->page = page; 142 vmf->page = page;
144 vm_f = 0; 143
145out: 144 return 0;
146 return vm_f; 145unlock:
146 mutex_unlock(&us122l->mutex);
147 return VM_FAULT_SIGBUS;
147} 148}
148 149
149static void usb_stream_hwdep_vm_close(struct vm_area_struct *area) 150static void usb_stream_hwdep_vm_close(struct vm_area_struct *area)