Commit 4b146cb0 authored by Takashi Iwai's avatar Takashi Iwai Committed by Jaroslav Kysela

[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: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarJaroslav Kysela <perex@suse.cz>
parent 68ab801e
...@@ -778,11 +778,15 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. ...@@ -778,11 +778,15 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
6stack-digout 6-jack with a SPDIF out 6stack-digout 6-jack with a SPDIF out
w810 3-jack w810 3-jack
z71v 3-jack (HP shared SPDIF) z71v 3-jack (HP shared SPDIF)
asus 3-jack asus 3-jack (ASUS Mobo)
asus-w1v ASUS W1V
asus-dig ASUS with SPDIF out
asus-dig2 ASUS with SPDIF out (using GPIO2)
uniwill 3-jack uniwill 3-jack
F1734 2-jack F1734 2-jack
lg LG laptop (m1 express dual) lg LG laptop (m1 express dual)
lg-lw LG LW20 laptop lg-lw LG LW20 laptop
tcl TCL S700
clevo Clevo laptops (m520G, m665n) clevo Clevo laptops (m520G, m665n)
test for testing/debugging purpose, almost all controls can be test for testing/debugging purpose, almost all controls can be
adjusted. Appearing only when compiled with adjusted. Appearing only when compiled with
...@@ -791,6 +795,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. ...@@ -791,6 +795,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
ALC260 ALC260
hp HP machines hp HP machines
hp-3013 HP machines (3013-variant)
fujitsu Fujitsu S7020 fujitsu Fujitsu S7020
acer Acer TravelMate acer Acer TravelMate
basic fixed pin assignment (old default model) basic fixed pin assignment (old default model)
...@@ -806,18 +811,22 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. ...@@ -806,18 +811,22 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
ALC882/885 ALC882/885
3stack-dig 3-jack with SPDIF I/O 3stack-dig 3-jack with SPDIF I/O
6stck-dig 6-jack digital with SPDIF I/O 6stck-dig 6-jack digital with SPDIF I/O
arima Arima W820Di1
auto auto-config reading BIOS (default) auto auto-config reading BIOS (default)
ALC883/888 ALC883/888
3stack-dig 3-jack with SPDIF I/O 3stack-dig 3-jack with SPDIF I/O
6stack-dig 6-jack digital with SPDIF I/O 6stack-dig 6-jack digital with SPDIF I/O
6stack-dig-demo 6-stack digital for Intel demo board 3stack-6ch 3-jack 6-channel
3stack-6ch-dig 3-jack 6-channel with SPDIF I/O
6stack-dig-demo 6-jack digital for Intel demo board
auto auto-config reading BIOS (default) auto auto-config reading BIOS (default)
ALC861/660 ALC861/660
3stack 3-jack 3stack 3-jack
3stack-dig 3-jack with SPDIF I/O 3stack-dig 3-jack with SPDIF I/O
6stack-dig 6-jack with SPDIF I/O 6stack-dig 6-jack with SPDIF I/O
3stack-660 3-jack (for ALC660)
auto auto-config reading BIOS (default) auto auto-config reading BIOS (default)
CMI9880 CMI9880
......
...@@ -98,6 +98,7 @@ enum { ...@@ -98,6 +98,7 @@ enum {
enum { enum {
ALC882_3ST_DIG, ALC882_3ST_DIG,
ALC882_6ST_DIG, ALC882_6ST_DIG,
ALC882_ARIMA,
ALC882_AUTO, ALC882_AUTO,
ALC882_MODEL_LAST, ALC882_MODEL_LAST,
}; };
...@@ -1349,6 +1350,10 @@ static struct hda_verb alc880_pin_clevo_init_verbs[] = { ...@@ -1349,6 +1350,10 @@ static struct hda_verb alc880_pin_clevo_init_verbs[] = {
}; };
static struct hda_verb alc880_pin_tcl_S700_init_verbs[] = { static struct hda_verb alc880_pin_tcl_S700_init_verbs[] = {
/* change to EAPD mode */
{0x20, AC_VERB_SET_COEF_INDEX, 0x07},
{0x20, AC_VERB_SET_PROC_COEF, 0x3060},
/* Headphone output */ /* Headphone output */
{0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
/* Front output*/ /* Front output*/
...@@ -2146,6 +2151,7 @@ static struct hda_board_config alc880_cfg_tbl[] = { ...@@ -2146,6 +2151,7 @@ static struct hda_board_config alc880_cfg_tbl[] = {
{ .pci_subvendor = 0x107b, .pci_subdevice = 0x4040, .config = ALC880_3ST }, { .pci_subvendor = 0x107b, .pci_subdevice = 0x4040, .config = ALC880_3ST },
{ .pci_subvendor = 0x107b, .pci_subdevice = 0x4041, .config = ALC880_3ST }, { .pci_subvendor = 0x107b, .pci_subdevice = 0x4041, .config = ALC880_3ST },
/* TCL S700 */ /* TCL S700 */
{ .modelname = "tcl", .config = ALC880_TCL_S700 },
{ .pci_subvendor = 0x19db, .pci_subdevice = 0x4188, .config = ALC880_TCL_S700 }, { .pci_subvendor = 0x19db, .pci_subdevice = 0x4188, .config = ALC880_TCL_S700 },
/* Back 3 jack, front 2 jack (Internal add Aux-In) */ /* Back 3 jack, front 2 jack (Internal add Aux-In) */
...@@ -2232,8 +2238,11 @@ static struct hda_board_config alc880_cfg_tbl[] = { ...@@ -2232,8 +2238,11 @@ static struct hda_board_config alc880_cfg_tbl[] = {
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1133, .config = ALC880_ASUS }, { .pci_subvendor = 0x1043, .pci_subdevice = 0x1133, .config = ALC880_ASUS },
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1123, .config = ALC880_ASUS_DIG }, { .pci_subvendor = 0x1043, .pci_subdevice = 0x1123, .config = ALC880_ASUS_DIG },
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1143, .config = ALC880_ASUS }, { .pci_subvendor = 0x1043, .pci_subdevice = 0x1143, .config = ALC880_ASUS },
{ .modelname = "asus-w1v", .config = ALC880_ASUS_W1V },
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x10b3, .config = ALC880_ASUS_W1V }, { .pci_subvendor = 0x1043, .pci_subdevice = 0x10b3, .config = ALC880_ASUS_W1V },
{ .modelname = "asus-dig", .config = ALC880_ASUS_DIG },
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x8181, .config = ALC880_ASUS_DIG }, /* ASUS P4GPL-X */ { .pci_subvendor = 0x1043, .pci_subdevice = 0x8181, .config = ALC880_ASUS_DIG }, /* ASUS P4GPL-X */
{ .modelname = "asus-dig2", .config = ALC880_ASUS_DIG2 },
{ .pci_subvendor = 0x1558, .pci_subdevice = 0x5401, .config = ALC880_ASUS_DIG2 }, { .pci_subvendor = 0x1558, .pci_subdevice = 0x5401, .config = ALC880_ASUS_DIG2 },
{ .modelname = "uniwill", .config = ALC880_UNIWILL_DIG }, { .modelname = "uniwill", .config = ALC880_UNIWILL_DIG },
...@@ -3906,6 +3915,7 @@ static struct hda_board_config alc260_cfg_tbl[] = { ...@@ -3906,6 +3915,7 @@ static struct hda_board_config alc260_cfg_tbl[] = {
{ .pci_subvendor = 0x152d, .pci_subdevice = 0x0729, { .pci_subvendor = 0x152d, .pci_subdevice = 0x0729,
.config = ALC260_BASIC }, /* CTL Travel Master U553W */ .config = ALC260_BASIC }, /* CTL Travel Master U553W */
{ .modelname = "hp", .config = ALC260_HP }, { .modelname = "hp", .config = ALC260_HP },
{ .modelname = "hp-3013", .config = ALC260_HP_3013 },
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x3010, .config = ALC260_HP }, { .pci_subvendor = 0x103c, .pci_subdevice = 0x3010, .config = ALC260_HP },
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x3011, .config = ALC260_HP }, { .pci_subvendor = 0x103c, .pci_subdevice = 0x3011, .config = ALC260_HP },
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x3012, .config = ALC260_HP_3013 }, { .pci_subvendor = 0x103c, .pci_subdevice = 0x3012, .config = ALC260_HP_3013 },
...@@ -4272,6 +4282,13 @@ static struct hda_verb alc882_init_verbs[] = { ...@@ -4272,6 +4282,13 @@ static struct hda_verb alc882_init_verbs[] = {
{ } { }
}; };
static struct hda_verb alc882_eapd_verbs[] = {
/* change to EAPD mode */
{0x20, AC_VERB_SET_COEF_INDEX, 0x07},
{0x20, AC_VERB_SET_PROC_COEF, 0x3060},
{ }
};
/* /*
* generic initialization of ADC, input mixers and output mixers * generic initialization of ADC, input mixers and output mixers
*/ */
...@@ -4403,6 +4420,9 @@ static struct hda_board_config alc882_cfg_tbl[] = { ...@@ -4403,6 +4420,9 @@ static struct hda_board_config alc882_cfg_tbl[] = {
.config = ALC882_6ST_DIG }, /* Foxconn */ .config = ALC882_6ST_DIG }, /* Foxconn */
{ .pci_subvendor = 0x1019, .pci_subdevice = 0x6668, { .pci_subvendor = 0x1019, .pci_subdevice = 0x6668,
.config = ALC882_6ST_DIG }, /* ECS to Intel*/ .config = ALC882_6ST_DIG }, /* ECS to Intel*/
{ .modelname = "arima", .config = ALC882_ARIMA },
{ .pci_subvendor = 0x161f, .pci_subdevice = 0x2054,
.config = ALC882_ARIMA }, /* Arima W820Di1 */
{ .modelname = "auto", .config = ALC882_AUTO }, { .modelname = "auto", .config = ALC882_AUTO },
{} {}
}; };
...@@ -4430,6 +4450,15 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -4430,6 +4450,15 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc882_sixstack_modes, .channel_mode = alc882_sixstack_modes,
.input_mux = &alc882_capture_source, .input_mux = &alc882_capture_source,
}, },
[ALC882_ARIMA] = {
.mixers = { alc882_base_mixer, alc882_chmode_mixer },
.init_verbs = { alc882_init_verbs, alc882_eapd_verbs },
.num_dacs = ARRAY_SIZE(alc882_dac_nids),
.dac_nids = alc882_dac_nids,
.num_channel_mode = ARRAY_SIZE(alc882_sixstack_modes),
.channel_mode = alc882_sixstack_modes,
.input_mux = &alc882_capture_source,
},
}; };
...@@ -5005,16 +5034,18 @@ static struct snd_kcontrol_new alc883_capture_mixer[] = { ...@@ -5005,16 +5034,18 @@ static struct snd_kcontrol_new alc883_capture_mixer[] = {
*/ */
static struct hda_board_config alc883_cfg_tbl[] = { static struct hda_board_config alc883_cfg_tbl[] = {
{ .modelname = "3stack-dig", .config = ALC883_3ST_2ch_DIG }, { .modelname = "3stack-dig", .config = ALC883_3ST_2ch_DIG },
{ .modelname = "3stack-6ch-dig", .config = ALC883_3ST_6ch_DIG },
{ .pci_subvendor = 0x1019, .pci_subdevice = 0x6668,
.config = ALC883_3ST_6ch_DIG }, /* ECS to Intel*/
{ .modelname = "3stack-6ch", .config = ALC883_3ST_6ch },
{ .pci_subvendor = 0x108e, .pci_subdevice = 0x534d,
.config = ALC883_3ST_6ch },
{ .modelname = "6stack-dig", .config = ALC883_6ST_DIG }, { .modelname = "6stack-dig", .config = ALC883_6ST_DIG },
{ .modelname = "6stack-dig-demo", .config = ALC888_DEMO_BOARD },
{ .pci_subvendor = 0x1462, .pci_subdevice = 0x6668, { .pci_subvendor = 0x1462, .pci_subdevice = 0x6668,
.config = ALC883_6ST_DIG }, /* MSI */ .config = ALC883_6ST_DIG }, /* MSI */
{ .pci_subvendor = 0x105b, .pci_subdevice = 0x6668, { .pci_subvendor = 0x105b, .pci_subdevice = 0x6668,
.config = ALC883_6ST_DIG }, /* Foxconn */ .config = ALC883_6ST_DIG }, /* Foxconn */
{ .pci_subvendor = 0x1019, .pci_subdevice = 0x6668, { .modelname = "6stack-dig-demo", .config = ALC888_DEMO_BOARD },
.config = ALC883_3ST_6ch_DIG }, /* ECS to Intel*/
{ .pci_subvendor = 0x108e, .pci_subdevice = 0x534d,
.config = ALC883_3ST_6ch },
{ .modelname = "auto", .config = ALC883_AUTO }, { .modelname = "auto", .config = ALC883_AUTO },
{} {}
}; };
...@@ -5223,8 +5254,10 @@ static int patch_alc883(struct hda_codec *codec) ...@@ -5223,8 +5254,10 @@ static int patch_alc883(struct hda_codec *codec)
spec->stream_digital_playback = &alc883_pcm_digital_playback; spec->stream_digital_playback = &alc883_pcm_digital_playback;
spec->stream_digital_capture = &alc883_pcm_digital_capture; spec->stream_digital_capture = &alc883_pcm_digital_capture;
if (! spec->adc_nids && spec->input_mux) {
spec->adc_nids = alc883_adc_nids; spec->adc_nids = alc883_adc_nids;
spec->num_adc_nids = ARRAY_SIZE(alc883_adc_nids); spec->num_adc_nids = ARRAY_SIZE(alc883_adc_nids);
}
codec->patch_ops = alc_patch_ops; codec->patch_ops = alc_patch_ops;
if (board_config == ALC883_AUTO) if (board_config == ALC883_AUTO)
...@@ -6504,6 +6537,7 @@ static struct hda_board_config alc861_cfg_tbl[] = { ...@@ -6504,6 +6537,7 @@ static struct hda_board_config alc861_cfg_tbl[] = {
{ .modelname = "3stack", .config = ALC861_3ST }, { .modelname = "3stack", .config = ALC861_3ST },
{ .pci_subvendor = 0x8086, .pci_subdevice = 0xd600, { .pci_subvendor = 0x8086, .pci_subdevice = 0xd600,
.config = ALC861_3ST }, .config = ALC861_3ST },
{ .modelname = "3stack-660", .config = ALC660_3ST },
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x81e7, { .pci_subvendor = 0x1043, .pci_subdevice = 0x81e7,
.config = ALC660_3ST }, .config = ALC660_3ST },
{ .modelname = "3stack-dig", .config = ALC861_3ST_DIG }, { .modelname = "3stack-dig", .config = ALC861_3ST_DIG },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment