Commit 729d3784 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'sound-4.7-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
 "We have only few, mainly HD-audio device-specific fixes.  Realtek
  codec driver got a slightly more LOC, but they are all for the new
  codec chip, and won't affect others at all"

* tag 'sound-4.7-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: hda - Add PCI ID for Kabylake
  ALSA: hda/realtek: Add T560 docking unit fixup
  ALSA: hda - Fix headset mic detection problem for Dell machine
  ALSA: uapi: Add three missing header files to Kbuild file
  ALSA: hda/realtek - Add support for new codecs ALC700/ALC701/ALC703
  ALSA: hda/realtek - ALC256 speaker noise issue
parents 00da9008 35639a0e
# UAPI Header export list # UAPI Header export list
header-y += asequencer.h header-y += asequencer.h
header-y += asoc.h
header-y += asound.h header-y += asound.h
header-y += asound_fm.h header-y += asound_fm.h
header-y += compress_offload.h header-y += compress_offload.h
...@@ -10,3 +11,5 @@ header-y += hdsp.h ...@@ -10,3 +11,5 @@ header-y += hdsp.h
header-y += hdspm.h header-y += hdspm.h
header-y += sb16_csp.h header-y += sb16_csp.h
header-y += sfnt_info.h header-y += sfnt_info.h
header-y += tlv.h
header-y += usb_stream.h
...@@ -365,8 +365,11 @@ enum { ...@@ -365,8 +365,11 @@ enum {
#define IS_SKL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa170) #define IS_SKL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa170)
#define IS_SKL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d70) #define IS_SKL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d70)
#define IS_KBL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa171)
#define IS_KBL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d71)
#define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98) #define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98)
#define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci)) #define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci)) || \
IS_KBL(pci) || IS_KBL_LP(pci)
static char *driver_short_names[] = { static char *driver_short_names[] = {
[AZX_DRIVER_ICH] = "HDA Intel", [AZX_DRIVER_ICH] = "HDA Intel",
...@@ -2181,6 +2184,12 @@ static const struct pci_device_id azx_ids[] = { ...@@ -2181,6 +2184,12 @@ static const struct pci_device_id azx_ids[] = {
/* Sunrise Point-LP */ /* Sunrise Point-LP */
{ PCI_DEVICE(0x8086, 0x9d70), { PCI_DEVICE(0x8086, 0x9d70),
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE },
/* Kabylake */
{ PCI_DEVICE(0x8086, 0xa171),
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE },
/* Kabylake-LP */
{ PCI_DEVICE(0x8086, 0x9d71),
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE },
/* Broxton-P(Apollolake) */ /* Broxton-P(Apollolake) */
{ PCI_DEVICE(0x8086, 0x5a98), { PCI_DEVICE(0x8086, 0x5a98),
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON }, .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON },
......
...@@ -346,6 +346,9 @@ static void alc_fill_eapd_coef(struct hda_codec *codec) ...@@ -346,6 +346,9 @@ static void alc_fill_eapd_coef(struct hda_codec *codec)
case 0x10ec0234: case 0x10ec0234:
case 0x10ec0274: case 0x10ec0274:
case 0x10ec0294: case 0x10ec0294:
case 0x10ec0700:
case 0x10ec0701:
case 0x10ec0703:
alc_update_coef_idx(codec, 0x10, 1<<15, 0); alc_update_coef_idx(codec, 0x10, 1<<15, 0);
break; break;
case 0x10ec0662: case 0x10ec0662:
...@@ -2655,6 +2658,7 @@ enum { ...@@ -2655,6 +2658,7 @@ enum {
ALC269_TYPE_ALC256, ALC269_TYPE_ALC256,
ALC269_TYPE_ALC225, ALC269_TYPE_ALC225,
ALC269_TYPE_ALC294, ALC269_TYPE_ALC294,
ALC269_TYPE_ALC700,
}; };
/* /*
...@@ -2686,6 +2690,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec) ...@@ -2686,6 +2690,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
case ALC269_TYPE_ALC256: case ALC269_TYPE_ALC256:
case ALC269_TYPE_ALC225: case ALC269_TYPE_ALC225:
case ALC269_TYPE_ALC294: case ALC269_TYPE_ALC294:
case ALC269_TYPE_ALC700:
ssids = alc269_ssids; ssids = alc269_ssids;
break; break;
default: default:
...@@ -3618,13 +3623,20 @@ static void alc269_fixup_hp_line1_mic1_led(struct hda_codec *codec, ...@@ -3618,13 +3623,20 @@ static void alc269_fixup_hp_line1_mic1_led(struct hda_codec *codec,
static void alc_headset_mode_unplugged(struct hda_codec *codec) static void alc_headset_mode_unplugged(struct hda_codec *codec)
{ {
static struct coef_fw coef0255[] = { static struct coef_fw coef0255[] = {
WRITE_COEF(0x1b, 0x0c0b), /* LDO and MISC control */
WRITE_COEF(0x45, 0xd089), /* UAJ function set to menual mode */ WRITE_COEF(0x45, 0xd089), /* UAJ function set to menual mode */
UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), /* Direct Drive HP Amp control(Set to verb control)*/ UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), /* Direct Drive HP Amp control(Set to verb control)*/
WRITE_COEF(0x06, 0x6104), /* Set MIC2 Vref gate with HP */ WRITE_COEF(0x06, 0x6104), /* Set MIC2 Vref gate with HP */
WRITE_COEFEX(0x57, 0x03, 0x8aa6), /* Direct Drive HP Amp control */ WRITE_COEFEX(0x57, 0x03, 0x8aa6), /* Direct Drive HP Amp control */
{} {}
}; };
static struct coef_fw coef0255_1[] = {
WRITE_COEF(0x1b, 0x0c0b), /* LDO and MISC control */
{}
};
static struct coef_fw coef0256[] = {
WRITE_COEF(0x1b, 0x0c4b), /* LDO and MISC control */
{}
};
static struct coef_fw coef0233[] = { static struct coef_fw coef0233[] = {
WRITE_COEF(0x1b, 0x0c0b), WRITE_COEF(0x1b, 0x0c0b),
WRITE_COEF(0x45, 0xc429), WRITE_COEF(0x45, 0xc429),
...@@ -3677,7 +3689,11 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec) ...@@ -3677,7 +3689,11 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
switch (codec->core.vendor_id) { switch (codec->core.vendor_id) {
case 0x10ec0255: case 0x10ec0255:
alc_process_coef_fw(codec, coef0255_1);
alc_process_coef_fw(codec, coef0255);
break;
case 0x10ec0256: case 0x10ec0256:
alc_process_coef_fw(codec, coef0256);
alc_process_coef_fw(codec, coef0255); alc_process_coef_fw(codec, coef0255);
break; break;
case 0x10ec0233: case 0x10ec0233:
...@@ -3896,6 +3912,12 @@ static void alc_headset_mode_ctia(struct hda_codec *codec) ...@@ -3896,6 +3912,12 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
WRITE_COEFEX(0x57, 0x03, 0x8ea6), WRITE_COEFEX(0x57, 0x03, 0x8ea6),
{} {}
}; };
static struct coef_fw coef0256[] = {
WRITE_COEF(0x45, 0xd489), /* Set to CTIA type */
WRITE_COEF(0x1b, 0x0c6b),
WRITE_COEFEX(0x57, 0x03, 0x8ea6),
{}
};
static struct coef_fw coef0233[] = { static struct coef_fw coef0233[] = {
WRITE_COEF(0x45, 0xd429), WRITE_COEF(0x45, 0xd429),
WRITE_COEF(0x1b, 0x0c2b), WRITE_COEF(0x1b, 0x0c2b),
...@@ -3936,9 +3958,11 @@ static void alc_headset_mode_ctia(struct hda_codec *codec) ...@@ -3936,9 +3958,11 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
switch (codec->core.vendor_id) { switch (codec->core.vendor_id) {
case 0x10ec0255: case 0x10ec0255:
case 0x10ec0256:
alc_process_coef_fw(codec, coef0255); alc_process_coef_fw(codec, coef0255);
break; break;
case 0x10ec0256:
alc_process_coef_fw(codec, coef0256);
break;
case 0x10ec0233: case 0x10ec0233:
case 0x10ec0283: case 0x10ec0283:
alc_process_coef_fw(codec, coef0233); alc_process_coef_fw(codec, coef0233);
...@@ -3978,6 +4002,12 @@ static void alc_headset_mode_omtp(struct hda_codec *codec) ...@@ -3978,6 +4002,12 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
WRITE_COEFEX(0x57, 0x03, 0x8ea6), WRITE_COEFEX(0x57, 0x03, 0x8ea6),
{} {}
}; };
static struct coef_fw coef0256[] = {
WRITE_COEF(0x45, 0xe489), /* Set to OMTP Type */
WRITE_COEF(0x1b, 0x0c6b),
WRITE_COEFEX(0x57, 0x03, 0x8ea6),
{}
};
static struct coef_fw coef0233[] = { static struct coef_fw coef0233[] = {
WRITE_COEF(0x45, 0xe429), WRITE_COEF(0x45, 0xe429),
WRITE_COEF(0x1b, 0x0c2b), WRITE_COEF(0x1b, 0x0c2b),
...@@ -4018,9 +4048,11 @@ static void alc_headset_mode_omtp(struct hda_codec *codec) ...@@ -4018,9 +4048,11 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
switch (codec->core.vendor_id) { switch (codec->core.vendor_id) {
case 0x10ec0255: case 0x10ec0255:
case 0x10ec0256:
alc_process_coef_fw(codec, coef0255); alc_process_coef_fw(codec, coef0255);
break; break;
case 0x10ec0256:
alc_process_coef_fw(codec, coef0256);
break;
case 0x10ec0233: case 0x10ec0233:
case 0x10ec0283: case 0x10ec0283:
alc_process_coef_fw(codec, coef0233); alc_process_coef_fw(codec, coef0233);
...@@ -4266,7 +4298,7 @@ static void alc_fixup_headset_mode_no_hp_mic(struct hda_codec *codec, ...@@ -4266,7 +4298,7 @@ static void alc_fixup_headset_mode_no_hp_mic(struct hda_codec *codec,
static void alc255_set_default_jack_type(struct hda_codec *codec) static void alc255_set_default_jack_type(struct hda_codec *codec)
{ {
/* Set to iphone type */ /* Set to iphone type */
static struct coef_fw fw[] = { static struct coef_fw alc255fw[] = {
WRITE_COEF(0x1b, 0x880b), WRITE_COEF(0x1b, 0x880b),
WRITE_COEF(0x45, 0xd089), WRITE_COEF(0x45, 0xd089),
WRITE_COEF(0x1b, 0x080b), WRITE_COEF(0x1b, 0x080b),
...@@ -4274,7 +4306,22 @@ static void alc255_set_default_jack_type(struct hda_codec *codec) ...@@ -4274,7 +4306,22 @@ static void alc255_set_default_jack_type(struct hda_codec *codec)
WRITE_COEF(0x1b, 0x0c0b), WRITE_COEF(0x1b, 0x0c0b),
{} {}
}; };
alc_process_coef_fw(codec, fw); static struct coef_fw alc256fw[] = {
WRITE_COEF(0x1b, 0x884b),
WRITE_COEF(0x45, 0xd089),
WRITE_COEF(0x1b, 0x084b),
WRITE_COEF(0x46, 0x0004),
WRITE_COEF(0x1b, 0x0c4b),
{}
};
switch (codec->core.vendor_id) {
case 0x10ec0255:
alc_process_coef_fw(codec, alc255fw);
break;
case 0x10ec0256:
alc_process_coef_fw(codec, alc256fw);
break;
}
msleep(30); msleep(30);
} }
...@@ -5587,6 +5634,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { ...@@ -5587,6 +5634,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x17aa, 0x2218, "Thinkpad X1 Carbon 2nd", ALC292_FIXUP_TPT440_DOCK), SND_PCI_QUIRK(0x17aa, 0x2218, "Thinkpad X1 Carbon 2nd", ALC292_FIXUP_TPT440_DOCK),
SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK), SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK),
SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK), SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
SND_PCI_QUIRK(0x17aa, 0x2231, "Thinkpad T560", ALC292_FIXUP_TPT460),
SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC292_FIXUP_TPT460), SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC292_FIXUP_TPT460),
SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY), SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY), SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
...@@ -5775,6 +5823,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { ...@@ -5775,6 +5823,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
{0x12, 0x90a60180}, {0x12, 0x90a60180},
{0x14, 0x90170130}, {0x14, 0x90170130},
{0x21, 0x02211040}), {0x21, 0x02211040}),
SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell Inspiron 5565", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
{0x12, 0x90a60180},
{0x14, 0x90170120},
{0x21, 0x02211030}),
SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
{0x12, 0x90a60160}, {0x12, 0x90a60160},
{0x14, 0x90170120}, {0x14, 0x90170120},
...@@ -6053,6 +6105,14 @@ static int patch_alc269(struct hda_codec *codec) ...@@ -6053,6 +6105,14 @@ static int patch_alc269(struct hda_codec *codec)
case 0x10ec0294: case 0x10ec0294:
spec->codec_variant = ALC269_TYPE_ALC294; spec->codec_variant = ALC269_TYPE_ALC294;
break; break;
case 0x10ec0700:
case 0x10ec0701:
case 0x10ec0703:
spec->codec_variant = ALC269_TYPE_ALC700;
spec->gen.mixer_nid = 0; /* ALC700 does not have any loopback mixer path */
alc_update_coef_idx(codec, 0x4a, 0, 1 << 15); /* Combo jack auto trigger control */
break;
} }
if (snd_hda_codec_read(codec, 0x51, 0, AC_VERB_PARAMETERS, 0) == 0x10ec5505) { if (snd_hda_codec_read(codec, 0x51, 0, AC_VERB_PARAMETERS, 0) == 0x10ec5505) {
...@@ -7008,6 +7068,9 @@ static const struct hda_device_id snd_hda_id_realtek[] = { ...@@ -7008,6 +7068,9 @@ static const struct hda_device_id snd_hda_id_realtek[] = {
HDA_CODEC_ENTRY(0x10ec0670, "ALC670", patch_alc662), HDA_CODEC_ENTRY(0x10ec0670, "ALC670", patch_alc662),
HDA_CODEC_ENTRY(0x10ec0671, "ALC671", patch_alc662), HDA_CODEC_ENTRY(0x10ec0671, "ALC671", patch_alc662),
HDA_CODEC_ENTRY(0x10ec0680, "ALC680", patch_alc680), HDA_CODEC_ENTRY(0x10ec0680, "ALC680", patch_alc680),
HDA_CODEC_ENTRY(0x10ec0700, "ALC700", patch_alc269),
HDA_CODEC_ENTRY(0x10ec0701, "ALC701", patch_alc269),
HDA_CODEC_ENTRY(0x10ec0703, "ALC703", patch_alc269),
HDA_CODEC_ENTRY(0x10ec0867, "ALC891", patch_alc882), HDA_CODEC_ENTRY(0x10ec0867, "ALC891", patch_alc882),
HDA_CODEC_ENTRY(0x10ec0880, "ALC880", patch_alc880), HDA_CODEC_ENTRY(0x10ec0880, "ALC880", patch_alc880),
HDA_CODEC_ENTRY(0x10ec0882, "ALC882", patch_alc882), HDA_CODEC_ENTRY(0x10ec0882, "ALC882", patch_alc882),
......
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