diff options
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 88 | ||||
| -rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 2 | ||||
| -rw-r--r-- | sound/soc/codecs/Kconfig | 2 | ||||
| -rw-r--r-- | sound/soc/codecs/tlv320aic23.c | 10 |
4 files changed, 75 insertions, 27 deletions
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 | ||
| 825 | static 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 */ |
| 826 | static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res) | 847 | static 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 | ||
| 860 | static 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 | ||
| 6635 | static int patch_alc883(struct hda_codec *codec); /* called in patch_alc882() */ | 6670 | static 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 | ||
| 8764 | static int patch_alc883(struct hda_codec *codec) | 8799 | static 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 | ||
| 14399 | static int patch_alc861vd(struct hda_codec *codec) | 14439 | static int patch_alc861vd(struct hda_codec *codec) |
| @@ -15667,7 +15707,7 @@ static const char *alc662_models[ALC662_MODEL_LAST] = { | |||
| 15667 | 15707 | ||
| 15668 | static struct snd_pci_quirk alc662_cfg_tbl[] = { | 15708 | static 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 | ||
| 16229 | static int patch_alc662(struct hda_codec *codec) | 16270 | static 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 | ||
| 70 | config SND_SOC_TLV320AIC26 | 70 | config 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 | ||
| 74 | config SND_SOC_TLV320AIC3X | 74 | config 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) |
