Merge branch 'topic/usb-resume' into for-next
Merge the proper mixer resume support for quirk codes.
This commit is contained in:
@@ -290,6 +290,80 @@ static void alc880_unsol_event(struct hda_codec *codec, unsigned int res)
|
||||
snd_hda_jack_unsol_event(codec, res >> 2);
|
||||
}
|
||||
|
||||
/* Change EAPD to verb control */
|
||||
static void alc_fill_eapd_coef(struct hda_codec *codec)
|
||||
{
|
||||
int coef;
|
||||
|
||||
coef = alc_get_coef0(codec);
|
||||
|
||||
switch (codec->vendor_id) {
|
||||
case 0x10ec0262:
|
||||
alc_update_coef_idx(codec, 0x7, 0, 1<<5);
|
||||
break;
|
||||
case 0x10ec0267:
|
||||
case 0x10ec0268:
|
||||
alc_update_coef_idx(codec, 0x7, 0, 1<<13);
|
||||
break;
|
||||
case 0x10ec0269:
|
||||
if ((coef & 0x00f0) == 0x0010)
|
||||
alc_update_coef_idx(codec, 0xd, 0, 1<<14);
|
||||
if ((coef & 0x00f0) == 0x0020)
|
||||
alc_update_coef_idx(codec, 0x4, 1<<15, 0);
|
||||
if ((coef & 0x00f0) == 0x0030)
|
||||
alc_update_coef_idx(codec, 0x10, 1<<9, 0);
|
||||
break;
|
||||
case 0x10ec0280:
|
||||
case 0x10ec0284:
|
||||
case 0x10ec0290:
|
||||
case 0x10ec0292:
|
||||
alc_update_coef_idx(codec, 0x4, 1<<15, 0);
|
||||
break;
|
||||
case 0x10ec0233:
|
||||
case 0x10ec0255:
|
||||
case 0x10ec0282:
|
||||
case 0x10ec0283:
|
||||
case 0x10ec0286:
|
||||
case 0x10ec0288:
|
||||
alc_update_coef_idx(codec, 0x10, 1<<9, 0);
|
||||
break;
|
||||
case 0x10ec0285:
|
||||
case 0x10ec0293:
|
||||
alc_update_coef_idx(codec, 0xa, 1<<13, 0);
|
||||
break;
|
||||
case 0x10ec0662:
|
||||
if ((coef & 0x00f0) == 0x0030)
|
||||
alc_update_coef_idx(codec, 0x4, 1<<10, 0); /* EAPD Ctrl */
|
||||
break;
|
||||
case 0x10ec0272:
|
||||
case 0x10ec0273:
|
||||
case 0x10ec0663:
|
||||
case 0x10ec0665:
|
||||
case 0x10ec0670:
|
||||
case 0x10ec0671:
|
||||
case 0x10ec0672:
|
||||
alc_update_coef_idx(codec, 0xd, 0, 1<<14); /* EAPD Ctrl */
|
||||
break;
|
||||
case 0x10ec0668:
|
||||
alc_update_coef_idx(codec, 0x7, 3<<13, 0);
|
||||
break;
|
||||
case 0x10ec0867:
|
||||
alc_update_coef_idx(codec, 0x4, 1<<10, 0);
|
||||
break;
|
||||
case 0x10ec0888:
|
||||
if ((coef & 0x00f0) == 0x0020 || (coef & 0x00f0) == 0x0030)
|
||||
alc_update_coef_idx(codec, 0x7, 1<<5, 0);
|
||||
break;
|
||||
case 0x10ec0892:
|
||||
alc_update_coef_idx(codec, 0x7, 1<<5, 0);
|
||||
break;
|
||||
case 0x10ec0899:
|
||||
case 0x10ec0900:
|
||||
alc_update_coef_idx(codec, 0x7, 1<<1, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* additional initialization for ALC888 variants */
|
||||
static void alc888_coef_init(struct hda_codec *codec)
|
||||
{
|
||||
@@ -341,6 +415,7 @@ static void alc_eapd_shutup(struct hda_codec *codec)
|
||||
/* generic EAPD initialization */
|
||||
static void alc_auto_init_amp(struct hda_codec *codec, int type)
|
||||
{
|
||||
alc_fill_eapd_coef(codec);
|
||||
alc_auto_setup_eapd(codec, true);
|
||||
switch (type) {
|
||||
case ALC_INIT_GPIO1:
|
||||
@@ -4480,6 +4555,8 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
[ALC269_FIXUP_HEADSET_MODE] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc_fixup_headset_mode,
|
||||
.chained = true,
|
||||
.chain_id = ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED
|
||||
},
|
||||
[ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
@@ -4669,6 +4746,8 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
[ALC255_FIXUP_HEADSET_MODE] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc_fixup_headset_mode_alc255,
|
||||
.chained = true,
|
||||
.chain_id = ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED
|
||||
},
|
||||
[ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
@@ -4704,8 +4783,6 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
[ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc_fixup_dell_wmi,
|
||||
.chained_before = true,
|
||||
.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
|
||||
},
|
||||
[ALC282_FIXUP_ASPIRE_V5_PINS] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
@@ -4747,10 +4824,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1028, 0x05f4, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x05f5, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x05f6, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x0610, "Dell", ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x1028, 0x0615, "Dell Vostro 5470", ALC290_FIXUP_SUBWOOFER_HSJACK),
|
||||
SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_SUBWOOFER_HSJACK),
|
||||
SND_PCI_QUIRK(0x1028, 0x061f, "Dell", ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS_HSJACK),
|
||||
SND_PCI_QUIRK(0x1028, 0x064a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x064b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
@@ -5252,9 +5327,6 @@ static void alc269_fill_coef(struct hda_codec *codec)
|
||||
}
|
||||
}
|
||||
|
||||
/* Class D */
|
||||
alc_update_coef_idx(codec, 0xd, 0, 1<<14);
|
||||
|
||||
/* HP */
|
||||
alc_update_coef_idx(codec, 0x4, 0, 1<<11);
|
||||
}
|
||||
@@ -5695,6 +5767,35 @@ static void alc662_fixup_led_gpio1(struct hda_codec *codec,
|
||||
}
|
||||
}
|
||||
|
||||
static struct coef_fw alc668_coefs[] = {
|
||||
WRITE_COEF(0x01, 0xbebe), WRITE_COEF(0x02, 0xaaaa), WRITE_COEF(0x03, 0x0),
|
||||
WRITE_COEF(0x04, 0x0180), WRITE_COEF(0x06, 0x0), WRITE_COEF(0x07, 0x0f80),
|
||||
WRITE_COEF(0x08, 0x0031), WRITE_COEF(0x0a, 0x0060), WRITE_COEF(0x0b, 0x0),
|
||||
WRITE_COEF(0x0c, 0x7cf7), WRITE_COEF(0x0d, 0x1080), WRITE_COEF(0x0e, 0x7f7f),
|
||||
WRITE_COEF(0x0f, 0xcccc), WRITE_COEF(0x10, 0xddcc), WRITE_COEF(0x11, 0x0001),
|
||||
WRITE_COEF(0x13, 0x0), WRITE_COEF(0x14, 0x2aa0), WRITE_COEF(0x17, 0xa940),
|
||||
WRITE_COEF(0x19, 0x0), WRITE_COEF(0x1a, 0x0), WRITE_COEF(0x1b, 0x0),
|
||||
WRITE_COEF(0x1c, 0x0), WRITE_COEF(0x1d, 0x0), WRITE_COEF(0x1e, 0x7418),
|
||||
WRITE_COEF(0x1f, 0x0804), WRITE_COEF(0x20, 0x4200), WRITE_COEF(0x21, 0x0468),
|
||||
WRITE_COEF(0x22, 0x8ccc), WRITE_COEF(0x23, 0x0250), WRITE_COEF(0x24, 0x7418),
|
||||
WRITE_COEF(0x27, 0x0), WRITE_COEF(0x28, 0x8ccc), WRITE_COEF(0x2a, 0xff00),
|
||||
WRITE_COEF(0x2b, 0x8000), WRITE_COEF(0xa7, 0xff00), WRITE_COEF(0xa8, 0x8000),
|
||||
WRITE_COEF(0xaa, 0x2e17), WRITE_COEF(0xab, 0xa0c0), WRITE_COEF(0xac, 0x0),
|
||||
WRITE_COEF(0xad, 0x0), WRITE_COEF(0xae, 0x2ac6), WRITE_COEF(0xaf, 0xa480),
|
||||
WRITE_COEF(0xb0, 0x0), WRITE_COEF(0xb1, 0x0), WRITE_COEF(0xb2, 0x0),
|
||||
WRITE_COEF(0xb3, 0x0), WRITE_COEF(0xb4, 0x0), WRITE_COEF(0xb5, 0x1040),
|
||||
WRITE_COEF(0xb6, 0xd697), WRITE_COEF(0xb7, 0x902b), WRITE_COEF(0xb8, 0xd697),
|
||||
WRITE_COEF(0xb9, 0x902b), WRITE_COEF(0xba, 0xb8ba), WRITE_COEF(0xbb, 0xaaab),
|
||||
WRITE_COEF(0xbc, 0xaaaf), WRITE_COEF(0xbd, 0x6aaa), WRITE_COEF(0xbe, 0x1c02),
|
||||
WRITE_COEF(0xc0, 0x00ff), WRITE_COEF(0xc1, 0x0fa6),
|
||||
{}
|
||||
};
|
||||
|
||||
static void alc668_restore_default_value(struct hda_codec *codec)
|
||||
{
|
||||
alc_process_coef_fw(codec, alc668_coefs);
|
||||
}
|
||||
|
||||
enum {
|
||||
ALC662_FIXUP_ASPIRE,
|
||||
ALC662_FIXUP_LED_GPIO1,
|
||||
@@ -6121,29 +6222,6 @@ static const struct snd_hda_pin_quirk alc662_pin_fixup_tbl[] = {
|
||||
{}
|
||||
};
|
||||
|
||||
static void alc662_fill_coef(struct hda_codec *codec)
|
||||
{
|
||||
int coef;
|
||||
|
||||
coef = alc_get_coef0(codec);
|
||||
|
||||
switch (codec->vendor_id) {
|
||||
case 0x10ec0662:
|
||||
if ((coef & 0x00f0) == 0x0030)
|
||||
alc_update_coef_idx(codec, 0x4, 1<<10, 0); /* EAPD Ctrl */
|
||||
break;
|
||||
case 0x10ec0272:
|
||||
case 0x10ec0273:
|
||||
case 0x10ec0663:
|
||||
case 0x10ec0665:
|
||||
case 0x10ec0670:
|
||||
case 0x10ec0671:
|
||||
case 0x10ec0672:
|
||||
alc_update_coef_idx(codec, 0xd, 0, 1<<14); /* EAPD Ctrl */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*/
|
||||
static int patch_alc662(struct hda_codec *codec)
|
||||
@@ -6162,8 +6240,11 @@ static int patch_alc662(struct hda_codec *codec)
|
||||
|
||||
alc_fix_pll_init(codec, 0x20, 0x04, 15);
|
||||
|
||||
spec->init_hook = alc662_fill_coef;
|
||||
alc662_fill_coef(codec);
|
||||
switch (codec->vendor_id) {
|
||||
case 0x10ec0668:
|
||||
spec->init_hook = alc668_restore_default_value;
|
||||
break;
|
||||
}
|
||||
|
||||
snd_hda_pick_fixup(codec, alc662_fixup_models,
|
||||
alc662_fixup_tbl, alc662_fixups);
|
||||
|
Reference in New Issue
Block a user