aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2006-07-28 08:42:36 -0400
committerJaroslav Kysela <perex@suse.cz>2006-09-23 04:39:22 -0400
commit4b146cb087b4a668511f6c991da1dc40e2e04b0d (patch)
tree4be992353d1fb0b981290de789a0a96e49d7ea7a /sound/pci/hda
parent68ab801e32bbe2caac8b8c6e6e94f41fe7d687ad (diff)
[ALSA] Misc fixes for Realtek HD-audio codecs
- Added model=arima for Arima W820Di1 with ALC882 codec chip - Added EAPD-control verbs to TCL S700 init verbs - Added missing model strings for Realtek codecs (to be specified via module option explicitly for testing/debugging) Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Diffstat (limited to 'sound/pci/hda')
-rw-r--r--sound/pci/hda/patch_realtek.c48
1 files changed, 41 insertions, 7 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 42c4f90a92b8..378e5f111e34 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -98,6 +98,7 @@ enum {
98enum { 98enum {
99 ALC882_3ST_DIG, 99 ALC882_3ST_DIG,
100 ALC882_6ST_DIG, 100 ALC882_6ST_DIG,
101 ALC882_ARIMA,
101 ALC882_AUTO, 102 ALC882_AUTO,
102 ALC882_MODEL_LAST, 103 ALC882_MODEL_LAST,
103}; 104};
@@ -1349,6 +1350,10 @@ static struct hda_verb alc880_pin_clevo_init_verbs[] = {
1349}; 1350};
1350 1351
1351static struct hda_verb alc880_pin_tcl_S700_init_verbs[] = { 1352static struct hda_verb alc880_pin_tcl_S700_init_verbs[] = {
1353 /* change to EAPD mode */
1354 {0x20, AC_VERB_SET_COEF_INDEX, 0x07},
1355 {0x20, AC_VERB_SET_PROC_COEF, 0x3060},
1356
1352 /* Headphone output */ 1357 /* Headphone output */
1353 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, 1358 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
1354 /* Front output*/ 1359 /* Front output*/
@@ -2146,6 +2151,7 @@ static struct hda_board_config alc880_cfg_tbl[] = {
2146 { .pci_subvendor = 0x107b, .pci_subdevice = 0x4040, .config = ALC880_3ST }, 2151 { .pci_subvendor = 0x107b, .pci_subdevice = 0x4040, .config = ALC880_3ST },
2147 { .pci_subvendor = 0x107b, .pci_subdevice = 0x4041, .config = ALC880_3ST }, 2152 { .pci_subvendor = 0x107b, .pci_subdevice = 0x4041, .config = ALC880_3ST },
2148 /* TCL S700 */ 2153 /* TCL S700 */
2154 { .modelname = "tcl", .config = ALC880_TCL_S700 },
2149 { .pci_subvendor = 0x19db, .pci_subdevice = 0x4188, .config = ALC880_TCL_S700 }, 2155 { .pci_subvendor = 0x19db, .pci_subdevice = 0x4188, .config = ALC880_TCL_S700 },
2150 2156
2151 /* Back 3 jack, front 2 jack (Internal add Aux-In) */ 2157 /* Back 3 jack, front 2 jack (Internal add Aux-In) */
@@ -2232,8 +2238,11 @@ static struct hda_board_config alc880_cfg_tbl[] = {
2232 { .pci_subvendor = 0x1043, .pci_subdevice = 0x1133, .config = ALC880_ASUS }, 2238 { .pci_subvendor = 0x1043, .pci_subdevice = 0x1133, .config = ALC880_ASUS },
2233 { .pci_subvendor = 0x1043, .pci_subdevice = 0x1123, .config = ALC880_ASUS_DIG }, 2239 { .pci_subvendor = 0x1043, .pci_subdevice = 0x1123, .config = ALC880_ASUS_DIG },
2234 { .pci_subvendor = 0x1043, .pci_subdevice = 0x1143, .config = ALC880_ASUS }, 2240 { .pci_subvendor = 0x1043, .pci_subdevice = 0x1143, .config = ALC880_ASUS },
2241 { .modelname = "asus-w1v", .config = ALC880_ASUS_W1V },
2235 { .pci_subvendor = 0x1043, .pci_subdevice = 0x10b3, .config = ALC880_ASUS_W1V }, 2242 { .pci_subvendor = 0x1043, .pci_subdevice = 0x10b3, .config = ALC880_ASUS_W1V },
2243 { .modelname = "asus-dig", .config = ALC880_ASUS_DIG },
2236 { .pci_subvendor = 0x1043, .pci_subdevice = 0x8181, .config = ALC880_ASUS_DIG }, /* ASUS P4GPL-X */ 2244 { .pci_subvendor = 0x1043, .pci_subdevice = 0x8181, .config = ALC880_ASUS_DIG }, /* ASUS P4GPL-X */
2245 { .modelname = "asus-dig2", .config = ALC880_ASUS_DIG2 },
2237 { .pci_subvendor = 0x1558, .pci_subdevice = 0x5401, .config = ALC880_ASUS_DIG2 }, 2246 { .pci_subvendor = 0x1558, .pci_subdevice = 0x5401, .config = ALC880_ASUS_DIG2 },
2238 2247
2239 { .modelname = "uniwill", .config = ALC880_UNIWILL_DIG }, 2248 { .modelname = "uniwill", .config = ALC880_UNIWILL_DIG },
@@ -3906,6 +3915,7 @@ static struct hda_board_config alc260_cfg_tbl[] = {
3906 { .pci_subvendor = 0x152d, .pci_subdevice = 0x0729, 3915 { .pci_subvendor = 0x152d, .pci_subdevice = 0x0729,
3907 .config = ALC260_BASIC }, /* CTL Travel Master U553W */ 3916 .config = ALC260_BASIC }, /* CTL Travel Master U553W */
3908 { .modelname = "hp", .config = ALC260_HP }, 3917 { .modelname = "hp", .config = ALC260_HP },
3918 { .modelname = "hp-3013", .config = ALC260_HP_3013 },
3909 { .pci_subvendor = 0x103c, .pci_subdevice = 0x3010, .config = ALC260_HP }, 3919 { .pci_subvendor = 0x103c, .pci_subdevice = 0x3010, .config = ALC260_HP },
3910 { .pci_subvendor = 0x103c, .pci_subdevice = 0x3011, .config = ALC260_HP }, 3920 { .pci_subvendor = 0x103c, .pci_subdevice = 0x3011, .config = ALC260_HP },
3911 { .pci_subvendor = 0x103c, .pci_subdevice = 0x3012, .config = ALC260_HP_3013 }, 3921 { .pci_subvendor = 0x103c, .pci_subdevice = 0x3012, .config = ALC260_HP_3013 },
@@ -4272,6 +4282,13 @@ static struct hda_verb alc882_init_verbs[] = {
4272 { } 4282 { }
4273}; 4283};
4274 4284
4285static struct hda_verb alc882_eapd_verbs[] = {
4286 /* change to EAPD mode */
4287 {0x20, AC_VERB_SET_COEF_INDEX, 0x07},
4288 {0x20, AC_VERB_SET_PROC_COEF, 0x3060},
4289 { }
4290};
4291
4275/* 4292/*
4276 * generic initialization of ADC, input mixers and output mixers 4293 * generic initialization of ADC, input mixers and output mixers
4277 */ 4294 */
@@ -4403,6 +4420,9 @@ static struct hda_board_config alc882_cfg_tbl[] = {
4403 .config = ALC882_6ST_DIG }, /* Foxconn */ 4420 .config = ALC882_6ST_DIG }, /* Foxconn */
4404 { .pci_subvendor = 0x1019, .pci_subdevice = 0x6668, 4421 { .pci_subvendor = 0x1019, .pci_subdevice = 0x6668,
4405 .config = ALC882_6ST_DIG }, /* ECS to Intel*/ 4422 .config = ALC882_6ST_DIG }, /* ECS to Intel*/
4423 { .modelname = "arima", .config = ALC882_ARIMA },
4424 { .pci_subvendor = 0x161f, .pci_subdevice = 0x2054,
4425 .config = ALC882_ARIMA }, /* Arima W820Di1 */
4406 { .modelname = "auto", .config = ALC882_AUTO }, 4426 { .modelname = "auto", .config = ALC882_AUTO },
4407 {} 4427 {}
4408}; 4428};
@@ -4430,6 +4450,15 @@ static struct alc_config_preset alc882_presets[] = {
4430 .channel_mode = alc882_sixstack_modes, 4450 .channel_mode = alc882_sixstack_modes,
4431 .input_mux = &alc882_capture_source, 4451 .input_mux = &alc882_capture_source,
4432 }, 4452 },
4453 [ALC882_ARIMA] = {
4454 .mixers = { alc882_base_mixer, alc882_chmode_mixer },
4455 .init_verbs = { alc882_init_verbs, alc882_eapd_verbs },
4456 .num_dacs = ARRAY_SIZE(alc882_dac_nids),
4457 .dac_nids = alc882_dac_nids,
4458 .num_channel_mode = ARRAY_SIZE(alc882_sixstack_modes),
4459 .channel_mode = alc882_sixstack_modes,
4460 .input_mux = &alc882_capture_source,
4461 },
4433}; 4462};
4434 4463
4435 4464
@@ -5005,16 +5034,18 @@ static struct snd_kcontrol_new alc883_capture_mixer[] = {
5005 */ 5034 */
5006static struct hda_board_config alc883_cfg_tbl[] = { 5035static struct hda_board_config alc883_cfg_tbl[] = {
5007 { .modelname = "3stack-dig", .config = ALC883_3ST_2ch_DIG }, 5036 { .modelname = "3stack-dig", .config = ALC883_3ST_2ch_DIG },
5037 { .modelname = "3stack-6ch-dig", .config = ALC883_3ST_6ch_DIG },
5038 { .pci_subvendor = 0x1019, .pci_subdevice = 0x6668,
5039 .config = ALC883_3ST_6ch_DIG }, /* ECS to Intel*/
5040 { .modelname = "3stack-6ch", .config = ALC883_3ST_6ch },
5041 { .pci_subvendor = 0x108e, .pci_subdevice = 0x534d,
5042 .config = ALC883_3ST_6ch },
5008 { .modelname = "6stack-dig", .config = ALC883_6ST_DIG }, 5043 { .modelname = "6stack-dig", .config = ALC883_6ST_DIG },
5009 { .modelname = "6stack-dig-demo", .config = ALC888_DEMO_BOARD },
5010 { .pci_subvendor = 0x1462, .pci_subdevice = 0x6668, 5044 { .pci_subvendor = 0x1462, .pci_subdevice = 0x6668,
5011 .config = ALC883_6ST_DIG }, /* MSI */ 5045 .config = ALC883_6ST_DIG }, /* MSI */
5012 { .pci_subvendor = 0x105b, .pci_subdevice = 0x6668, 5046 { .pci_subvendor = 0x105b, .pci_subdevice = 0x6668,
5013 .config = ALC883_6ST_DIG }, /* Foxconn */ 5047 .config = ALC883_6ST_DIG }, /* Foxconn */
5014 { .pci_subvendor = 0x1019, .pci_subdevice = 0x6668, 5048 { .modelname = "6stack-dig-demo", .config = ALC888_DEMO_BOARD },
5015 .config = ALC883_3ST_6ch_DIG }, /* ECS to Intel*/
5016 { .pci_subvendor = 0x108e, .pci_subdevice = 0x534d,
5017 .config = ALC883_3ST_6ch },
5018 { .modelname = "auto", .config = ALC883_AUTO }, 5049 { .modelname = "auto", .config = ALC883_AUTO },
5019 {} 5050 {}
5020}; 5051};
@@ -5223,8 +5254,10 @@ static int patch_alc883(struct hda_codec *codec)
5223 spec->stream_digital_playback = &alc883_pcm_digital_playback; 5254 spec->stream_digital_playback = &alc883_pcm_digital_playback;
5224 spec->stream_digital_capture = &alc883_pcm_digital_capture; 5255 spec->stream_digital_capture = &alc883_pcm_digital_capture;
5225 5256
5226 spec->adc_nids = alc883_adc_nids; 5257 if (! spec->adc_nids && spec->input_mux) {
5227 spec->num_adc_nids = ARRAY_SIZE(alc883_adc_nids); 5258 spec->adc_nids = alc883_adc_nids;
5259 spec->num_adc_nids = ARRAY_SIZE(alc883_adc_nids);
5260 }
5228 5261
5229 codec->patch_ops = alc_patch_ops; 5262 codec->patch_ops = alc_patch_ops;
5230 if (board_config == ALC883_AUTO) 5263 if (board_config == ALC883_AUTO)
@@ -6504,6 +6537,7 @@ static struct hda_board_config alc861_cfg_tbl[] = {
6504 { .modelname = "3stack", .config = ALC861_3ST }, 6537 { .modelname = "3stack", .config = ALC861_3ST },
6505 { .pci_subvendor = 0x8086, .pci_subdevice = 0xd600, 6538 { .pci_subvendor = 0x8086, .pci_subdevice = 0xd600,
6506 .config = ALC861_3ST }, 6539 .config = ALC861_3ST },
6540 { .modelname = "3stack-660", .config = ALC660_3ST },
6507 { .pci_subvendor = 0x1043, .pci_subdevice = 0x81e7, 6541 { .pci_subvendor = 0x1043, .pci_subdevice = 0x81e7,
6508 .config = ALC660_3ST }, 6542 .config = ALC660_3ST },
6509 { .modelname = "3stack-dig", .config = ALC861_3ST_DIG }, 6543 { .modelname = "3stack-dig", .config = ALC861_3ST_DIG },