aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2016-07-02 01:56:01 -0400
committerDave Airlie <airlied@redhat.com>2016-07-02 01:56:01 -0400
commit542d972221e024681b502033154f917c1455469f (patch)
tree1c7c1be768f6e1b496a3edad6b105804a8d05c57 /sound
parent583fa4e02775b26d76771d4e1ddc6f10ba005ef2 (diff)
parent4c2e07c6a29e0129e975727b9f57eede813eea85 (diff)
Back-merge tag 'v4.7-rc5' into drm-next
Linux 4.7-rc5 The fsl-dcu pull needs -rc3 so go to -rc5 for now.
Diffstat (limited to 'sound')
-rw-r--r--sound/drivers/dummy.c1
-rw-r--r--sound/hda/hdac_regmap.c4
-rw-r--r--sound/pci/hda/hda_intel.c11
-rw-r--r--sound/pci/hda/hda_tegra.c20
-rw-r--r--sound/pci/hda/patch_realtek.c79
5 files changed, 97 insertions, 18 deletions
diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c
index c0f8f613f1f1..172dacd925f5 100644
--- a/sound/drivers/dummy.c
+++ b/sound/drivers/dummy.c
@@ -420,6 +420,7 @@ static int dummy_hrtimer_stop(struct snd_pcm_substream *substream)
420 420
421static inline void dummy_hrtimer_sync(struct dummy_hrtimer_pcm *dpcm) 421static inline void dummy_hrtimer_sync(struct dummy_hrtimer_pcm *dpcm)
422{ 422{
423 hrtimer_cancel(&dpcm->timer);
423 tasklet_kill(&dpcm->tasklet); 424 tasklet_kill(&dpcm->tasklet);
424} 425}
425 426
diff --git a/sound/hda/hdac_regmap.c b/sound/hda/hdac_regmap.c
index 87041ddd29cb..47a358fab132 100644
--- a/sound/hda/hdac_regmap.c
+++ b/sound/hda/hdac_regmap.c
@@ -444,7 +444,7 @@ int snd_hdac_regmap_write_raw(struct hdac_device *codec, unsigned int reg,
444 err = reg_raw_write(codec, reg, val); 444 err = reg_raw_write(codec, reg, val);
445 if (err == -EAGAIN) { 445 if (err == -EAGAIN) {
446 err = snd_hdac_power_up_pm(codec); 446 err = snd_hdac_power_up_pm(codec);
447 if (!err) 447 if (err >= 0)
448 err = reg_raw_write(codec, reg, val); 448 err = reg_raw_write(codec, reg, val);
449 snd_hdac_power_down_pm(codec); 449 snd_hdac_power_down_pm(codec);
450 } 450 }
@@ -470,7 +470,7 @@ static int __snd_hdac_regmap_read_raw(struct hdac_device *codec,
470 err = reg_raw_read(codec, reg, val, uncached); 470 err = reg_raw_read(codec, reg, val, uncached);
471 if (err == -EAGAIN) { 471 if (err == -EAGAIN) {
472 err = snd_hdac_power_up_pm(codec); 472 err = snd_hdac_power_up_pm(codec);
473 if (!err) 473 if (err >= 0)
474 err = reg_raw_read(codec, reg, val, uncached); 474 err = reg_raw_read(codec, reg, val, uncached);
475 snd_hdac_power_down_pm(codec); 475 snd_hdac_power_down_pm(codec);
476 } 476 }
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 9a0d1445ca5c..94089fc71884 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -365,8 +365,11 @@ enum {
365 365
366#define IS_SKL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa170) 366#define IS_SKL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa170)
367#define IS_SKL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d70) 367#define IS_SKL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d70)
368#define IS_KBL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa171)
369#define IS_KBL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d71)
368#define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98) 370#define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98)
369#define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci)) 371#define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci)) || \
372 IS_KBL(pci) || IS_KBL_LP(pci)
370 373
371static char *driver_short_names[] = { 374static char *driver_short_names[] = {
372 [AZX_DRIVER_ICH] = "HDA Intel", 375 [AZX_DRIVER_ICH] = "HDA Intel",
@@ -2181,6 +2184,12 @@ static const struct pci_device_id azx_ids[] = {
2181 /* Sunrise Point-LP */ 2184 /* Sunrise Point-LP */
2182 { PCI_DEVICE(0x8086, 0x9d70), 2185 { PCI_DEVICE(0x8086, 0x9d70),
2183 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, 2186 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE },
2187 /* Kabylake */
2188 { PCI_DEVICE(0x8086, 0xa171),
2189 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE },
2190 /* Kabylake-LP */
2191 { PCI_DEVICE(0x8086, 0x9d71),
2192 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE },
2184 /* Broxton-P(Apollolake) */ 2193 /* Broxton-P(Apollolake) */
2185 { PCI_DEVICE(0x8086, 0x5a98), 2194 { PCI_DEVICE(0x8086, 0x5a98),
2186 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON }, 2195 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON },
diff --git a/sound/pci/hda/hda_tegra.c b/sound/pci/hda/hda_tegra.c
index 17fd81736d3d..0621920f7617 100644
--- a/sound/pci/hda/hda_tegra.c
+++ b/sound/pci/hda/hda_tegra.c
@@ -115,20 +115,20 @@ static int substream_free_pages(struct azx *chip,
115/* 115/*
116 * Register access ops. Tegra HDA register access is DWORD only. 116 * Register access ops. Tegra HDA register access is DWORD only.
117 */ 117 */
118static void hda_tegra_writel(u32 value, u32 *addr) 118static void hda_tegra_writel(u32 value, u32 __iomem *addr)
119{ 119{
120 writel(value, addr); 120 writel(value, addr);
121} 121}
122 122
123static u32 hda_tegra_readl(u32 *addr) 123static u32 hda_tegra_readl(u32 __iomem *addr)
124{ 124{
125 return readl(addr); 125 return readl(addr);
126} 126}
127 127
128static void hda_tegra_writew(u16 value, u16 *addr) 128static void hda_tegra_writew(u16 value, u16 __iomem *addr)
129{ 129{
130 unsigned int shift = ((unsigned long)(addr) & 0x3) << 3; 130 unsigned int shift = ((unsigned long)(addr) & 0x3) << 3;
131 void *dword_addr = (void *)((unsigned long)(addr) & ~0x3); 131 void __iomem *dword_addr = (void __iomem *)((unsigned long)(addr) & ~0x3);
132 u32 v; 132 u32 v;
133 133
134 v = readl(dword_addr); 134 v = readl(dword_addr);
@@ -137,20 +137,20 @@ static void hda_tegra_writew(u16 value, u16 *addr)
137 writel(v, dword_addr); 137 writel(v, dword_addr);
138} 138}
139 139
140static u16 hda_tegra_readw(u16 *addr) 140static u16 hda_tegra_readw(u16 __iomem *addr)
141{ 141{
142 unsigned int shift = ((unsigned long)(addr) & 0x3) << 3; 142 unsigned int shift = ((unsigned long)(addr) & 0x3) << 3;
143 void *dword_addr = (void *)((unsigned long)(addr) & ~0x3); 143 void __iomem *dword_addr = (void __iomem *)((unsigned long)(addr) & ~0x3);
144 u32 v; 144 u32 v;
145 145
146 v = readl(dword_addr); 146 v = readl(dword_addr);
147 return (v >> shift) & 0xffff; 147 return (v >> shift) & 0xffff;
148} 148}
149 149
150static void hda_tegra_writeb(u8 value, u8 *addr) 150static void hda_tegra_writeb(u8 value, u8 __iomem *addr)
151{ 151{
152 unsigned int shift = ((unsigned long)(addr) & 0x3) << 3; 152 unsigned int shift = ((unsigned long)(addr) & 0x3) << 3;
153 void *dword_addr = (void *)((unsigned long)(addr) & ~0x3); 153 void __iomem *dword_addr = (void __iomem *)((unsigned long)(addr) & ~0x3);
154 u32 v; 154 u32 v;
155 155
156 v = readl(dword_addr); 156 v = readl(dword_addr);
@@ -159,10 +159,10 @@ static void hda_tegra_writeb(u8 value, u8 *addr)
159 writel(v, dword_addr); 159 writel(v, dword_addr);
160} 160}
161 161
162static u8 hda_tegra_readb(u8 *addr) 162static u8 hda_tegra_readb(u8 __iomem *addr)
163{ 163{
164 unsigned int shift = ((unsigned long)(addr) & 0x3) << 3; 164 unsigned int shift = ((unsigned long)(addr) & 0x3) << 3;
165 void *dword_addr = (void *)((unsigned long)(addr) & ~0x3); 165 void __iomem *dword_addr = (void __iomem *)((unsigned long)(addr) & ~0x3);
166 u32 v; 166 u32 v;
167 167
168 v = readl(dword_addr); 168 v = readl(dword_addr);
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index d53c25e7a1c1..900bfbc3368c 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -346,6 +346,9 @@ static void alc_fill_eapd_coef(struct hda_codec *codec)
346 case 0x10ec0234: 346 case 0x10ec0234:
347 case 0x10ec0274: 347 case 0x10ec0274:
348 case 0x10ec0294: 348 case 0x10ec0294:
349 case 0x10ec0700:
350 case 0x10ec0701:
351 case 0x10ec0703:
349 alc_update_coef_idx(codec, 0x10, 1<<15, 0); 352 alc_update_coef_idx(codec, 0x10, 1<<15, 0);
350 break; 353 break;
351 case 0x10ec0662: 354 case 0x10ec0662:
@@ -2655,6 +2658,7 @@ enum {
2655 ALC269_TYPE_ALC256, 2658 ALC269_TYPE_ALC256,
2656 ALC269_TYPE_ALC225, 2659 ALC269_TYPE_ALC225,
2657 ALC269_TYPE_ALC294, 2660 ALC269_TYPE_ALC294,
2661 ALC269_TYPE_ALC700,
2658}; 2662};
2659 2663
2660/* 2664/*
@@ -2686,6 +2690,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
2686 case ALC269_TYPE_ALC256: 2690 case ALC269_TYPE_ALC256:
2687 case ALC269_TYPE_ALC225: 2691 case ALC269_TYPE_ALC225:
2688 case ALC269_TYPE_ALC294: 2692 case ALC269_TYPE_ALC294:
2693 case ALC269_TYPE_ALC700:
2689 ssids = alc269_ssids; 2694 ssids = alc269_ssids;
2690 break; 2695 break;
2691 default: 2696 default:
@@ -3618,13 +3623,20 @@ static void alc269_fixup_hp_line1_mic1_led(struct hda_codec *codec,
3618static void alc_headset_mode_unplugged(struct hda_codec *codec) 3623static void alc_headset_mode_unplugged(struct hda_codec *codec)
3619{ 3624{
3620 static struct coef_fw coef0255[] = { 3625 static struct coef_fw coef0255[] = {
3621 WRITE_COEF(0x1b, 0x0c0b), /* LDO and MISC control */
3622 WRITE_COEF(0x45, 0xd089), /* UAJ function set to menual mode */ 3626 WRITE_COEF(0x45, 0xd089), /* UAJ function set to menual mode */
3623 UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), /* Direct Drive HP Amp control(Set to verb control)*/ 3627 UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), /* Direct Drive HP Amp control(Set to verb control)*/
3624 WRITE_COEF(0x06, 0x6104), /* Set MIC2 Vref gate with HP */ 3628 WRITE_COEF(0x06, 0x6104), /* Set MIC2 Vref gate with HP */
3625 WRITE_COEFEX(0x57, 0x03, 0x8aa6), /* Direct Drive HP Amp control */ 3629 WRITE_COEFEX(0x57, 0x03, 0x8aa6), /* Direct Drive HP Amp control */
3626 {} 3630 {}
3627 }; 3631 };
3632 static struct coef_fw coef0255_1[] = {
3633 WRITE_COEF(0x1b, 0x0c0b), /* LDO and MISC control */
3634 {}
3635 };
3636 static struct coef_fw coef0256[] = {
3637 WRITE_COEF(0x1b, 0x0c4b), /* LDO and MISC control */
3638 {}
3639 };
3628 static struct coef_fw coef0233[] = { 3640 static struct coef_fw coef0233[] = {
3629 WRITE_COEF(0x1b, 0x0c0b), 3641 WRITE_COEF(0x1b, 0x0c0b),
3630 WRITE_COEF(0x45, 0xc429), 3642 WRITE_COEF(0x45, 0xc429),
@@ -3677,7 +3689,11 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
3677 3689
3678 switch (codec->core.vendor_id) { 3690 switch (codec->core.vendor_id) {
3679 case 0x10ec0255: 3691 case 0x10ec0255:
3692 alc_process_coef_fw(codec, coef0255_1);
3693 alc_process_coef_fw(codec, coef0255);
3694 break;
3680 case 0x10ec0256: 3695 case 0x10ec0256:
3696 alc_process_coef_fw(codec, coef0256);
3681 alc_process_coef_fw(codec, coef0255); 3697 alc_process_coef_fw(codec, coef0255);
3682 break; 3698 break;
3683 case 0x10ec0233: 3699 case 0x10ec0233:
@@ -3896,6 +3912,12 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
3896 WRITE_COEFEX(0x57, 0x03, 0x8ea6), 3912 WRITE_COEFEX(0x57, 0x03, 0x8ea6),
3897 {} 3913 {}
3898 }; 3914 };
3915 static struct coef_fw coef0256[] = {
3916 WRITE_COEF(0x45, 0xd489), /* Set to CTIA type */
3917 WRITE_COEF(0x1b, 0x0c6b),
3918 WRITE_COEFEX(0x57, 0x03, 0x8ea6),
3919 {}
3920 };
3899 static struct coef_fw coef0233[] = { 3921 static struct coef_fw coef0233[] = {
3900 WRITE_COEF(0x45, 0xd429), 3922 WRITE_COEF(0x45, 0xd429),
3901 WRITE_COEF(0x1b, 0x0c2b), 3923 WRITE_COEF(0x1b, 0x0c2b),
@@ -3936,9 +3958,11 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
3936 3958
3937 switch (codec->core.vendor_id) { 3959 switch (codec->core.vendor_id) {
3938 case 0x10ec0255: 3960 case 0x10ec0255:
3939 case 0x10ec0256:
3940 alc_process_coef_fw(codec, coef0255); 3961 alc_process_coef_fw(codec, coef0255);
3941 break; 3962 break;
3963 case 0x10ec0256:
3964 alc_process_coef_fw(codec, coef0256);
3965 break;
3942 case 0x10ec0233: 3966 case 0x10ec0233:
3943 case 0x10ec0283: 3967 case 0x10ec0283:
3944 alc_process_coef_fw(codec, coef0233); 3968 alc_process_coef_fw(codec, coef0233);
@@ -3978,6 +4002,12 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
3978 WRITE_COEFEX(0x57, 0x03, 0x8ea6), 4002 WRITE_COEFEX(0x57, 0x03, 0x8ea6),
3979 {} 4003 {}
3980 }; 4004 };
4005 static struct coef_fw coef0256[] = {
4006 WRITE_COEF(0x45, 0xe489), /* Set to OMTP Type */
4007 WRITE_COEF(0x1b, 0x0c6b),
4008 WRITE_COEFEX(0x57, 0x03, 0x8ea6),
4009 {}
4010 };
3981 static struct coef_fw coef0233[] = { 4011 static struct coef_fw coef0233[] = {
3982 WRITE_COEF(0x45, 0xe429), 4012 WRITE_COEF(0x45, 0xe429),
3983 WRITE_COEF(0x1b, 0x0c2b), 4013 WRITE_COEF(0x1b, 0x0c2b),
@@ -4018,9 +4048,11 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
4018 4048
4019 switch (codec->core.vendor_id) { 4049 switch (codec->core.vendor_id) {
4020 case 0x10ec0255: 4050 case 0x10ec0255:
4021 case 0x10ec0256:
4022 alc_process_coef_fw(codec, coef0255); 4051 alc_process_coef_fw(codec, coef0255);
4023 break; 4052 break;
4053 case 0x10ec0256:
4054 alc_process_coef_fw(codec, coef0256);
4055 break;
4024 case 0x10ec0233: 4056 case 0x10ec0233:
4025 case 0x10ec0283: 4057 case 0x10ec0283:
4026 alc_process_coef_fw(codec, coef0233); 4058 alc_process_coef_fw(codec, coef0233);
@@ -4266,7 +4298,7 @@ static void alc_fixup_headset_mode_no_hp_mic(struct hda_codec *codec,
4266static void alc255_set_default_jack_type(struct hda_codec *codec) 4298static void alc255_set_default_jack_type(struct hda_codec *codec)
4267{ 4299{
4268 /* Set to iphone type */ 4300 /* Set to iphone type */
4269 static struct coef_fw fw[] = { 4301 static struct coef_fw alc255fw[] = {
4270 WRITE_COEF(0x1b, 0x880b), 4302 WRITE_COEF(0x1b, 0x880b),
4271 WRITE_COEF(0x45, 0xd089), 4303 WRITE_COEF(0x45, 0xd089),
4272 WRITE_COEF(0x1b, 0x080b), 4304 WRITE_COEF(0x1b, 0x080b),
@@ -4274,7 +4306,22 @@ static void alc255_set_default_jack_type(struct hda_codec *codec)
4274 WRITE_COEF(0x1b, 0x0c0b), 4306 WRITE_COEF(0x1b, 0x0c0b),
4275 {} 4307 {}
4276 }; 4308 };
4277 alc_process_coef_fw(codec, fw); 4309 static struct coef_fw alc256fw[] = {
4310 WRITE_COEF(0x1b, 0x884b),
4311 WRITE_COEF(0x45, 0xd089),
4312 WRITE_COEF(0x1b, 0x084b),
4313 WRITE_COEF(0x46, 0x0004),
4314 WRITE_COEF(0x1b, 0x0c4b),
4315 {}
4316 };
4317 switch (codec->core.vendor_id) {
4318 case 0x10ec0255:
4319 alc_process_coef_fw(codec, alc255fw);
4320 break;
4321 case 0x10ec0256:
4322 alc_process_coef_fw(codec, alc256fw);
4323 break;
4324 }
4278 msleep(30); 4325 msleep(30);
4279} 4326}
4280 4327
@@ -5587,6 +5634,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5587 SND_PCI_QUIRK(0x17aa, 0x2218, "Thinkpad X1 Carbon 2nd", ALC292_FIXUP_TPT440_DOCK), 5634 SND_PCI_QUIRK(0x17aa, 0x2218, "Thinkpad X1 Carbon 2nd", ALC292_FIXUP_TPT440_DOCK),
5588 SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK), 5635 SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK),
5589 SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK), 5636 SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
5637 SND_PCI_QUIRK(0x17aa, 0x2231, "Thinkpad T560", ALC292_FIXUP_TPT460),
5590 SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC292_FIXUP_TPT460), 5638 SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC292_FIXUP_TPT460),
5591 SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY), 5639 SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
5592 SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY), 5640 SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
@@ -5602,6 +5650,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5602 SND_PCI_QUIRK(0x17aa, 0x503c, "Thinkpad L450", ALC292_FIXUP_TPT440_DOCK), 5650 SND_PCI_QUIRK(0x17aa, 0x503c, "Thinkpad L450", ALC292_FIXUP_TPT440_DOCK),
5603 SND_PCI_QUIRK(0x17aa, 0x504a, "ThinkPad X260", ALC292_FIXUP_TPT440_DOCK), 5651 SND_PCI_QUIRK(0x17aa, 0x504a, "ThinkPad X260", ALC292_FIXUP_TPT440_DOCK),
5604 SND_PCI_QUIRK(0x17aa, 0x504b, "Thinkpad", ALC293_FIXUP_LENOVO_SPK_NOISE), 5652 SND_PCI_QUIRK(0x17aa, 0x504b, "Thinkpad", ALC293_FIXUP_LENOVO_SPK_NOISE),
5653 SND_PCI_QUIRK(0x17aa, 0x5050, "Thinkpad T560p", ALC292_FIXUP_TPT460),
5654 SND_PCI_QUIRK(0x17aa, 0x5053, "Thinkpad T460", ALC292_FIXUP_TPT460),
5605 SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), 5655 SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
5606 SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K), 5656 SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
5607 SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), 5657 SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
@@ -5775,11 +5825,19 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
5775 {0x12, 0x90a60180}, 5825 {0x12, 0x90a60180},
5776 {0x14, 0x90170130}, 5826 {0x14, 0x90170130},
5777 {0x21, 0x02211040}), 5827 {0x21, 0x02211040}),
5828 SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell Inspiron 5565", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
5829 {0x12, 0x90a60180},
5830 {0x14, 0x90170120},
5831 {0x21, 0x02211030}),
5778 SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, 5832 SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
5779 {0x12, 0x90a60160}, 5833 {0x12, 0x90a60160},
5780 {0x14, 0x90170120}, 5834 {0x14, 0x90170120},
5781 {0x21, 0x02211030}), 5835 {0x21, 0x02211030}),
5782 SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, 5836 SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
5837 {0x12, 0x90a60170},
5838 {0x14, 0x90170120},
5839 {0x21, 0x02211030}),
5840 SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
5783 ALC256_STANDARD_PINS), 5841 ALC256_STANDARD_PINS),
5784 SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4, 5842 SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
5785 {0x12, 0x90a60130}, 5843 {0x12, 0x90a60130},
@@ -6053,6 +6111,14 @@ static int patch_alc269(struct hda_codec *codec)
6053 case 0x10ec0294: 6111 case 0x10ec0294:
6054 spec->codec_variant = ALC269_TYPE_ALC294; 6112 spec->codec_variant = ALC269_TYPE_ALC294;
6055 break; 6113 break;
6114 case 0x10ec0700:
6115 case 0x10ec0701:
6116 case 0x10ec0703:
6117 spec->codec_variant = ALC269_TYPE_ALC700;
6118 spec->gen.mixer_nid = 0; /* ALC700 does not have any loopback mixer path */
6119 alc_update_coef_idx(codec, 0x4a, 0, 1 << 15); /* Combo jack auto trigger control */
6120 break;
6121
6056 } 6122 }
6057 6123
6058 if (snd_hda_codec_read(codec, 0x51, 0, AC_VERB_PARAMETERS, 0) == 0x10ec5505) { 6124 if (snd_hda_codec_read(codec, 0x51, 0, AC_VERB_PARAMETERS, 0) == 0x10ec5505) {
@@ -7008,6 +7074,9 @@ static const struct hda_device_id snd_hda_id_realtek[] = {
7008 HDA_CODEC_ENTRY(0x10ec0670, "ALC670", patch_alc662), 7074 HDA_CODEC_ENTRY(0x10ec0670, "ALC670", patch_alc662),
7009 HDA_CODEC_ENTRY(0x10ec0671, "ALC671", patch_alc662), 7075 HDA_CODEC_ENTRY(0x10ec0671, "ALC671", patch_alc662),
7010 HDA_CODEC_ENTRY(0x10ec0680, "ALC680", patch_alc680), 7076 HDA_CODEC_ENTRY(0x10ec0680, "ALC680", patch_alc680),
7077 HDA_CODEC_ENTRY(0x10ec0700, "ALC700", patch_alc269),
7078 HDA_CODEC_ENTRY(0x10ec0701, "ALC701", patch_alc269),
7079 HDA_CODEC_ENTRY(0x10ec0703, "ALC703", patch_alc269),
7011 HDA_CODEC_ENTRY(0x10ec0867, "ALC891", patch_alc882), 7080 HDA_CODEC_ENTRY(0x10ec0867, "ALC891", patch_alc882),
7012 HDA_CODEC_ENTRY(0x10ec0880, "ALC880", patch_alc880), 7081 HDA_CODEC_ENTRY(0x10ec0880, "ALC880", patch_alc880),
7013 HDA_CODEC_ENTRY(0x10ec0882, "ALC882", patch_alc882), 7082 HDA_CODEC_ENTRY(0x10ec0882, "ALC882", patch_alc882),