diff options
author | Dave Airlie <airlied@redhat.com> | 2016-07-02 01:56:01 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2016-07-02 01:56:01 -0400 |
commit | 542d972221e024681b502033154f917c1455469f (patch) | |
tree | 1c7c1be768f6e1b496a3edad6b105804a8d05c57 /sound | |
parent | 583fa4e02775b26d76771d4e1ddc6f10ba005ef2 (diff) | |
parent | 4c2e07c6a29e0129e975727b9f57eede813eea85 (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.c | 1 | ||||
-rw-r--r-- | sound/hda/hdac_regmap.c | 4 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 11 | ||||
-rw-r--r-- | sound/pci/hda/hda_tegra.c | 20 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 79 |
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 | ||
421 | static inline void dummy_hrtimer_sync(struct dummy_hrtimer_pcm *dpcm) | 421 | static 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 | ||
371 | static char *driver_short_names[] = { | 374 | static 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 | */ |
118 | static void hda_tegra_writel(u32 value, u32 *addr) | 118 | static void hda_tegra_writel(u32 value, u32 __iomem *addr) |
119 | { | 119 | { |
120 | writel(value, addr); | 120 | writel(value, addr); |
121 | } | 121 | } |
122 | 122 | ||
123 | static u32 hda_tegra_readl(u32 *addr) | 123 | static u32 hda_tegra_readl(u32 __iomem *addr) |
124 | { | 124 | { |
125 | return readl(addr); | 125 | return readl(addr); |
126 | } | 126 | } |
127 | 127 | ||
128 | static void hda_tegra_writew(u16 value, u16 *addr) | 128 | static 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 | ||
140 | static u16 hda_tegra_readw(u16 *addr) | 140 | static 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 | ||
150 | static void hda_tegra_writeb(u8 value, u8 *addr) | 150 | static 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 | ||
162 | static u8 hda_tegra_readb(u8 *addr) | 162 | static 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, | |||
3618 | static void alc_headset_mode_unplugged(struct hda_codec *codec) | 3623 | static 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, | |||
4266 | static void alc255_set_default_jack_type(struct hda_codec *codec) | 4298 | static 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), |