Skip to content

Commit 8cdaad9

Browse files
committed
Merge tag 'sound-4.13-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "This is a pretty boring pull request, containing a few HD-audio quirks and ID updates as usual suspects, as well as a fix for a regression of FM801 chip on ia64 (what a legacy combination!)" * tag 'sound-4.13-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda - Add mute led support for HP ProBook 440 G4 ALSA: hda/realtek - No loopback on ALC225/ALC295 codec ALSA: hda/realtek - Update headset mode for ALC225 ALSA: fm801: Initialize chip after IRQ handler is registered ALSA: hda/realtek - Update headset mode for ALC298 ALSA: hda - Add missing NVIDIA GPU codec IDs to patch table
2 parents 60187bd + ba92b11 commit 8cdaad9

File tree

4 files changed

+143
-33
lines changed

4 files changed

+143
-33
lines changed

sound/pci/fm801.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1235,8 +1235,6 @@ static int snd_fm801_create(struct snd_card *card,
12351235
}
12361236
}
12371237

1238-
snd_fm801_chip_init(chip);
1239-
12401238
if ((chip->tea575x_tuner & TUNER_ONLY) == 0) {
12411239
if (devm_request_irq(&pci->dev, pci->irq, snd_fm801_interrupt,
12421240
IRQF_SHARED, KBUILD_MODNAME, chip)) {
@@ -1248,6 +1246,8 @@ static int snd_fm801_create(struct snd_card *card,
12481246
pci_set_master(pci);
12491247
}
12501248

1249+
snd_fm801_chip_init(chip);
1250+
12511251
if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
12521252
snd_fm801_free(chip);
12531253
return err;

sound/pci/hda/patch_conexant.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -933,6 +933,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {
933933
SND_PCI_QUIRK(0x103c, 0x8174, "HP Spectre x360", CXT_FIXUP_HP_SPECTRE),
934934
SND_PCI_QUIRK(0x103c, 0x8115, "HP Z1 Gen3", CXT_FIXUP_HP_GATE_MIC),
935935
SND_PCI_QUIRK(0x103c, 0x814f, "HP ZBook 15u G3", CXT_FIXUP_MUTE_LED_GPIO),
936+
SND_PCI_QUIRK(0x103c, 0x822e, "HP ProBook 440 G4", CXT_FIXUP_MUTE_LED_GPIO),
936937
SND_PCI_QUIRK(0x1043, 0x138d, "Asus", CXT_FIXUP_HEADPHONE_MIC_PIN),
937938
SND_PCI_QUIRK(0x152d, 0x0833, "OLPC XO-1.5", CXT_FIXUP_OLPC_XO),
938939
SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400", CXT_PINCFG_LENOVO_TP410),

sound/pci/hda/patch_hdmi.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3733,11 +3733,15 @@ HDA_CODEC_ENTRY(0x1002aa01, "R6xx HDMI", patch_atihdmi),
37333733
HDA_CODEC_ENTRY(0x10951390, "SiI1390 HDMI", patch_generic_hdmi),
37343734
HDA_CODEC_ENTRY(0x10951392, "SiI1392 HDMI", patch_generic_hdmi),
37353735
HDA_CODEC_ENTRY(0x17e80047, "Chrontel HDMI", patch_generic_hdmi),
3736+
HDA_CODEC_ENTRY(0x10de0001, "MCP73 HDMI", patch_nvhdmi_2ch),
37363737
HDA_CODEC_ENTRY(0x10de0002, "MCP77/78 HDMI", patch_nvhdmi_8ch_7x),
37373738
HDA_CODEC_ENTRY(0x10de0003, "MCP77/78 HDMI", patch_nvhdmi_8ch_7x),
3739+
HDA_CODEC_ENTRY(0x10de0004, "GPU 04 HDMI", patch_nvhdmi_8ch_7x),
37383740
HDA_CODEC_ENTRY(0x10de0005, "MCP77/78 HDMI", patch_nvhdmi_8ch_7x),
37393741
HDA_CODEC_ENTRY(0x10de0006, "MCP77/78 HDMI", patch_nvhdmi_8ch_7x),
37403742
HDA_CODEC_ENTRY(0x10de0007, "MCP79/7A HDMI", patch_nvhdmi_8ch_7x),
3743+
HDA_CODEC_ENTRY(0x10de0008, "GPU 08 HDMI/DP", patch_nvhdmi),
3744+
HDA_CODEC_ENTRY(0x10de0009, "GPU 09 HDMI/DP", patch_nvhdmi),
37413745
HDA_CODEC_ENTRY(0x10de000a, "GPU 0a HDMI/DP", patch_nvhdmi),
37423746
HDA_CODEC_ENTRY(0x10de000b, "GPU 0b HDMI/DP", patch_nvhdmi),
37433747
HDA_CODEC_ENTRY(0x10de000c, "MCP89 HDMI", patch_nvhdmi),
@@ -3764,17 +3768,40 @@ HDA_CODEC_ENTRY(0x10de0041, "GPU 41 HDMI/DP", patch_nvhdmi),
37643768
HDA_CODEC_ENTRY(0x10de0042, "GPU 42 HDMI/DP", patch_nvhdmi),
37653769
HDA_CODEC_ENTRY(0x10de0043, "GPU 43 HDMI/DP", patch_nvhdmi),
37663770
HDA_CODEC_ENTRY(0x10de0044, "GPU 44 HDMI/DP", patch_nvhdmi),
3771+
HDA_CODEC_ENTRY(0x10de0045, "GPU 45 HDMI/DP", patch_nvhdmi),
3772+
HDA_CODEC_ENTRY(0x10de0050, "GPU 50 HDMI/DP", patch_nvhdmi),
37673773
HDA_CODEC_ENTRY(0x10de0051, "GPU 51 HDMI/DP", patch_nvhdmi),
3774+
HDA_CODEC_ENTRY(0x10de0052, "GPU 52 HDMI/DP", patch_nvhdmi),
37683775
HDA_CODEC_ENTRY(0x10de0060, "GPU 60 HDMI/DP", patch_nvhdmi),
3776+
HDA_CODEC_ENTRY(0x10de0061, "GPU 61 HDMI/DP", patch_nvhdmi),
3777+
HDA_CODEC_ENTRY(0x10de0062, "GPU 62 HDMI/DP", patch_nvhdmi),
37693778
HDA_CODEC_ENTRY(0x10de0067, "MCP67 HDMI", patch_nvhdmi_2ch),
37703779
HDA_CODEC_ENTRY(0x10de0070, "GPU 70 HDMI/DP", patch_nvhdmi),
37713780
HDA_CODEC_ENTRY(0x10de0071, "GPU 71 HDMI/DP", patch_nvhdmi),
37723781
HDA_CODEC_ENTRY(0x10de0072, "GPU 72 HDMI/DP", patch_nvhdmi),
3782+
HDA_CODEC_ENTRY(0x10de0073, "GPU 73 HDMI/DP", patch_nvhdmi),
3783+
HDA_CODEC_ENTRY(0x10de0074, "GPU 74 HDMI/DP", patch_nvhdmi),
3784+
HDA_CODEC_ENTRY(0x10de0076, "GPU 76 HDMI/DP", patch_nvhdmi),
3785+
HDA_CODEC_ENTRY(0x10de007b, "GPU 7b HDMI/DP", patch_nvhdmi),
3786+
HDA_CODEC_ENTRY(0x10de007c, "GPU 7c HDMI/DP", patch_nvhdmi),
37733787
HDA_CODEC_ENTRY(0x10de007d, "GPU 7d HDMI/DP", patch_nvhdmi),
3788+
HDA_CODEC_ENTRY(0x10de007e, "GPU 7e HDMI/DP", patch_nvhdmi),
37743789
HDA_CODEC_ENTRY(0x10de0080, "GPU 80 HDMI/DP", patch_nvhdmi),
3790+
HDA_CODEC_ENTRY(0x10de0081, "GPU 81 HDMI/DP", patch_nvhdmi),
37753791
HDA_CODEC_ENTRY(0x10de0082, "GPU 82 HDMI/DP", patch_nvhdmi),
37763792
HDA_CODEC_ENTRY(0x10de0083, "GPU 83 HDMI/DP", patch_nvhdmi),
3793+
HDA_CODEC_ENTRY(0x10de0084, "GPU 84 HDMI/DP", patch_nvhdmi),
3794+
HDA_CODEC_ENTRY(0x10de0090, "GPU 90 HDMI/DP", patch_nvhdmi),
3795+
HDA_CODEC_ENTRY(0x10de0091, "GPU 91 HDMI/DP", patch_nvhdmi),
3796+
HDA_CODEC_ENTRY(0x10de0092, "GPU 92 HDMI/DP", patch_nvhdmi),
3797+
HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi),
3798+
HDA_CODEC_ENTRY(0x10de0094, "GPU 94 HDMI/DP", patch_nvhdmi),
3799+
HDA_CODEC_ENTRY(0x10de0095, "GPU 95 HDMI/DP", patch_nvhdmi),
3800+
HDA_CODEC_ENTRY(0x10de0097, "GPU 97 HDMI/DP", patch_nvhdmi),
3801+
HDA_CODEC_ENTRY(0x10de0098, "GPU 98 HDMI/DP", patch_nvhdmi),
3802+
HDA_CODEC_ENTRY(0x10de0099, "GPU 99 HDMI/DP", patch_nvhdmi),
37773803
HDA_CODEC_ENTRY(0x10de8001, "MCP73 HDMI", patch_nvhdmi_2ch),
3804+
HDA_CODEC_ENTRY(0x10de8067, "MCP67/68 HDMI", patch_nvhdmi_2ch),
37783805
HDA_CODEC_ENTRY(0x11069f80, "VX900 HDMI/DP", patch_via_hdmi),
37793806
HDA_CODEC_ENTRY(0x11069f81, "VX900 HDMI/DP", patch_via_hdmi),
37803807
HDA_CODEC_ENTRY(0x11069f84, "VX11 HDMI/DP", patch_generic_hdmi),

sound/pci/hda/patch_realtek.c

Lines changed: 113 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3838,6 +3838,17 @@ static void alc269_fixup_hp_line1_mic1_led(struct hda_codec *codec,
38383838
}
38393839
}
38403840

3841+
static struct coef_fw alc225_pre_hsmode[] = {
3842+
UPDATE_COEF(0x4a, 1<<8, 0),
3843+
UPDATE_COEFEX(0x57, 0x05, 1<<14, 0),
3844+
UPDATE_COEF(0x63, 3<<14, 3<<14),
3845+
UPDATE_COEF(0x4a, 3<<4, 2<<4),
3846+
UPDATE_COEF(0x4a, 3<<10, 3<<10),
3847+
UPDATE_COEF(0x45, 0x3f<<10, 0x34<<10),
3848+
UPDATE_COEF(0x4a, 3<<10, 0),
3849+
{}
3850+
};
3851+
38413852
static void alc_headset_mode_unplugged(struct hda_codec *codec)
38423853
{
38433854
static struct coef_fw coef0255[] = {
@@ -3873,6 +3884,10 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
38733884
UPDATE_COEF(0x67, 0x2000, 0),
38743885
{}
38753886
};
3887+
static struct coef_fw coef0298[] = {
3888+
UPDATE_COEF(0x19, 0x1300, 0x0300),
3889+
{}
3890+
};
38763891
static struct coef_fw coef0292[] = {
38773892
WRITE_COEF(0x76, 0x000e),
38783893
WRITE_COEF(0x6c, 0x2400),
@@ -3895,13 +3910,7 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
38953910
{}
38963911
};
38973912
static struct coef_fw coef0225[] = {
3898-
UPDATE_COEF(0x4a, 1<<8, 0),
3899-
UPDATE_COEFEX(0x57, 0x05, 1<<14, 0),
3900-
UPDATE_COEF(0x63, 3<<14, 3<<14),
3901-
UPDATE_COEF(0x4a, 3<<4, 2<<4),
3902-
UPDATE_COEF(0x4a, 3<<10, 3<<10),
3903-
UPDATE_COEF(0x45, 0x3f<<10, 0x34<<10),
3904-
UPDATE_COEF(0x4a, 3<<10, 0),
3913+
UPDATE_COEF(0x63, 3<<14, 0),
39053914
{}
39063915
};
39073916
static struct coef_fw coef0274[] = {
@@ -3935,7 +3944,10 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
39353944
break;
39363945
case 0x10ec0286:
39373946
case 0x10ec0288:
3947+
alc_process_coef_fw(codec, coef0288);
3948+
break;
39383949
case 0x10ec0298:
3950+
alc_process_coef_fw(codec, coef0298);
39393951
alc_process_coef_fw(codec, coef0288);
39403952
break;
39413953
case 0x10ec0292:
@@ -3976,6 +3988,7 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
39763988
{}
39773989
};
39783990
static struct coef_fw coef0288[] = {
3991+
UPDATE_COEF(0x4f, 0x00c0, 0),
39793992
UPDATE_COEF(0x50, 0x2000, 0),
39803993
UPDATE_COEF(0x56, 0x0006, 0),
39813994
UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
@@ -4039,7 +4052,6 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
40394052
case 0x10ec0286:
40404053
case 0x10ec0288:
40414054
case 0x10ec0298:
4042-
alc_update_coef_idx(codec, 0x4f, 0x000c, 0);
40434055
snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
40444056
alc_process_coef_fw(codec, coef0288);
40454057
snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
@@ -4072,6 +4084,7 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
40724084
case 0x10ec0225:
40734085
case 0x10ec0295:
40744086
case 0x10ec0299:
4087+
alc_process_coef_fw(codec, alc225_pre_hsmode);
40754088
alc_update_coef_idx(codec, 0x45, 0x3f<<10, 0x31<<10);
40764089
snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
40774090
alc_process_coef_fw(codec, coef0225);
@@ -4084,7 +4097,12 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
40844097
static void alc_headset_mode_default(struct hda_codec *codec)
40854098
{
40864099
static struct coef_fw coef0225[] = {
4087-
UPDATE_COEF(0x45, 0x3f<<10, 0x34<<10),
4100+
UPDATE_COEF(0x45, 0x3f<<10, 0x30<<10),
4101+
UPDATE_COEF(0x45, 0x3f<<10, 0x31<<10),
4102+
UPDATE_COEF(0x49, 3<<8, 0<<8),
4103+
UPDATE_COEF(0x4a, 3<<4, 3<<4),
4104+
UPDATE_COEF(0x63, 3<<14, 0),
4105+
UPDATE_COEF(0x67, 0xf000, 0x3000),
40884106
{}
40894107
};
40904108
static struct coef_fw coef0255[] = {
@@ -4138,6 +4156,7 @@ static void alc_headset_mode_default(struct hda_codec *codec)
41384156
case 0x10ec0225:
41394157
case 0x10ec0295:
41404158
case 0x10ec0299:
4159+
alc_process_coef_fw(codec, alc225_pre_hsmode);
41414160
alc_process_coef_fw(codec, coef0225);
41424161
break;
41434162
case 0x10ec0255:
@@ -4177,6 +4196,8 @@ static void alc_headset_mode_default(struct hda_codec *codec)
41774196
/* Iphone type */
41784197
static void alc_headset_mode_ctia(struct hda_codec *codec)
41794198
{
4199+
int val;
4200+
41804201
static struct coef_fw coef0255[] = {
41814202
WRITE_COEF(0x45, 0xd489), /* Set to CTIA type */
41824203
WRITE_COEF(0x1b, 0x0c2b),
@@ -4219,11 +4240,14 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
42194240
WRITE_COEF(0xc3, 0x0000),
42204241
{}
42214242
};
4222-
static struct coef_fw coef0225[] = {
4243+
static struct coef_fw coef0225_1[] = {
42234244
UPDATE_COEF(0x45, 0x3f<<10, 0x35<<10),
4224-
UPDATE_COEF(0x49, 1<<8, 1<<8),
4225-
UPDATE_COEF(0x4a, 7<<6, 7<<6),
4226-
UPDATE_COEF(0x4a, 3<<4, 3<<4),
4245+
UPDATE_COEF(0x63, 3<<14, 2<<14),
4246+
{}
4247+
};
4248+
static struct coef_fw coef0225_2[] = {
4249+
UPDATE_COEF(0x45, 0x3f<<10, 0x35<<10),
4250+
UPDATE_COEF(0x63, 3<<14, 1<<14),
42274251
{}
42284252
};
42294253

@@ -4244,8 +4268,17 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
42444268
alc_process_coef_fw(codec, coef0233);
42454269
break;
42464270
case 0x10ec0298:
4247-
alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0020);/* Headset output enable */
4248-
/* ALC298 jack type setting is the same with ALC286/ALC288 */
4271+
val = alc_read_coef_idx(codec, 0x50);
4272+
if (val & (1 << 12)) {
4273+
alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0020);
4274+
alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xd400);
4275+
msleep(300);
4276+
} else {
4277+
alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0010);
4278+
alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xd400);
4279+
msleep(300);
4280+
}
4281+
break;
42494282
case 0x10ec0286:
42504283
case 0x10ec0288:
42514284
alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xd400);
@@ -4264,7 +4297,11 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
42644297
case 0x10ec0225:
42654298
case 0x10ec0295:
42664299
case 0x10ec0299:
4267-
alc_process_coef_fw(codec, coef0225);
4300+
val = alc_read_coef_idx(codec, 0x45);
4301+
if (val & (1 << 9))
4302+
alc_process_coef_fw(codec, coef0225_2);
4303+
else
4304+
alc_process_coef_fw(codec, coef0225_1);
42684305
break;
42694306
case 0x10ec0867:
42704307
alc_update_coefex_idx(codec, 0x57, 0x5, 1<<14, 0);
@@ -4320,9 +4357,7 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
43204357
};
43214358
static struct coef_fw coef0225[] = {
43224359
UPDATE_COEF(0x45, 0x3f<<10, 0x39<<10),
4323-
UPDATE_COEF(0x49, 1<<8, 1<<8),
4324-
UPDATE_COEF(0x4a, 7<<6, 7<<6),
4325-
UPDATE_COEF(0x4a, 3<<4, 3<<4),
4360+
UPDATE_COEF(0x63, 3<<14, 2<<14),
43264361
{}
43274362
};
43284363

@@ -4344,7 +4379,9 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
43444379
break;
43454380
case 0x10ec0298:
43464381
alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0010);/* Headset output enable */
4347-
/* ALC298 jack type setting is the same with ALC286/ALC288 */
4382+
alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xe400);
4383+
msleep(300);
4384+
break;
43484385
case 0x10ec0286:
43494386
case 0x10ec0288:
43504387
alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xe400);
@@ -4384,6 +4421,14 @@ static void alc_determine_headset_type(struct hda_codec *codec)
43844421
UPDATE_COEF(0x4f, 0xfcc0, 0xd400), /* Check Type */
43854422
{}
43864423
};
4424+
static struct coef_fw coef0298[] = {
4425+
UPDATE_COEF(0x50, 0x2000, 0x2000),
4426+
UPDATE_COEF(0x56, 0x0006, 0x0006),
4427+
UPDATE_COEF(0x66, 0x0008, 0),
4428+
UPDATE_COEF(0x67, 0x2000, 0),
4429+
UPDATE_COEF(0x19, 0x1300, 0x1300),
4430+
{}
4431+
};
43874432
static struct coef_fw coef0293[] = {
43884433
UPDATE_COEF(0x4a, 0x000f, 0x0008), /* Combo Jack auto detect */
43894434
WRITE_COEF(0x45, 0xD429), /* Set to ctia type */
@@ -4396,11 +4441,6 @@ static void alc_determine_headset_type(struct hda_codec *codec)
43964441
WRITE_COEF(0xc3, 0x0c00),
43974442
{}
43984443
};
4399-
static struct coef_fw coef0225[] = {
4400-
UPDATE_COEF(0x45, 0x3f<<10, 0x34<<10),
4401-
UPDATE_COEF(0x49, 1<<8, 1<<8),
4402-
{}
4403-
};
44044444
static struct coef_fw coef0274[] = {
44054445
UPDATE_COEF(0x4a, 0x0010, 0),
44064446
UPDATE_COEF(0x4a, 0x8000, 0),
@@ -4433,8 +4473,34 @@ static void alc_determine_headset_type(struct hda_codec *codec)
44334473
is_ctia = (val & 0x0070) == 0x0070;
44344474
break;
44354475
case 0x10ec0298:
4436-
alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0020); /* Headset output enable */
4437-
/* ALC298 check jack type is the same with ALC286/ALC288 */
4476+
snd_hda_codec_write(codec, 0x21, 0,
4477+
AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
4478+
msleep(100);
4479+
snd_hda_codec_write(codec, 0x21, 0,
4480+
AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
4481+
msleep(200);
4482+
4483+
val = alc_read_coef_idx(codec, 0x50);
4484+
if (val & (1 << 12)) {
4485+
alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0020);
4486+
alc_process_coef_fw(codec, coef0288);
4487+
msleep(350);
4488+
val = alc_read_coef_idx(codec, 0x50);
4489+
is_ctia = (val & 0x0070) == 0x0070;
4490+
} else {
4491+
alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0010);
4492+
alc_process_coef_fw(codec, coef0288);
4493+
msleep(350);
4494+
val = alc_read_coef_idx(codec, 0x50);
4495+
is_ctia = (val & 0x0070) == 0x0070;
4496+
}
4497+
alc_process_coef_fw(codec, coef0298);
4498+
snd_hda_codec_write(codec, 0x21, 0,
4499+
AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP);
4500+
msleep(75);
4501+
snd_hda_codec_write(codec, 0x21, 0,
4502+
AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
4503+
break;
44384504
case 0x10ec0286:
44394505
case 0x10ec0288:
44404506
alc_process_coef_fw(codec, coef0288);
@@ -4463,10 +4529,25 @@ static void alc_determine_headset_type(struct hda_codec *codec)
44634529
case 0x10ec0225:
44644530
case 0x10ec0295:
44654531
case 0x10ec0299:
4466-
alc_process_coef_fw(codec, coef0225);
4467-
msleep(800);
4468-
val = alc_read_coef_idx(codec, 0x46);
4469-
is_ctia = (val & 0x00f0) == 0x00f0;
4532+
alc_process_coef_fw(codec, alc225_pre_hsmode);
4533+
alc_update_coef_idx(codec, 0x67, 0xf000, 0x1000);
4534+
val = alc_read_coef_idx(codec, 0x45);
4535+
if (val & (1 << 9)) {
4536+
alc_update_coef_idx(codec, 0x45, 0x3f<<10, 0x34<<10);
4537+
alc_update_coef_idx(codec, 0x49, 3<<8, 2<<8);
4538+
msleep(800);
4539+
val = alc_read_coef_idx(codec, 0x46);
4540+
is_ctia = (val & 0x00f0) == 0x00f0;
4541+
} else {
4542+
alc_update_coef_idx(codec, 0x45, 0x3f<<10, 0x34<<10);
4543+
alc_update_coef_idx(codec, 0x49, 3<<8, 1<<8);
4544+
msleep(800);
4545+
val = alc_read_coef_idx(codec, 0x46);
4546+
is_ctia = (val & 0x00f0) == 0x00f0;
4547+
}
4548+
alc_update_coef_idx(codec, 0x4a, 7<<6, 7<<6);
4549+
alc_update_coef_idx(codec, 0x4a, 3<<4, 3<<4);
4550+
alc_update_coef_idx(codec, 0x67, 0xf000, 0x3000);
44704551
break;
44714552
case 0x10ec0867:
44724553
is_ctia = true;
@@ -6724,6 +6805,7 @@ static int patch_alc269(struct hda_codec *codec)
67246805
case 0x10ec0225:
67256806
case 0x10ec0295:
67266807
spec->codec_variant = ALC269_TYPE_ALC225;
6808+
spec->gen.mixer_nid = 0; /* no loopback on ALC225 ALC295 */
67276809
break;
67286810
case 0x10ec0299:
67296811
spec->codec_variant = ALC269_TYPE_ALC225;

0 commit comments

Comments
 (0)