sound fixes for 4.18-rc3
Over a dozen of changes, but all small and clear fixes. A half of them are the regression fixes for CA0132 HD-audio codec, and the rest are, again, a few more fixups for HD-audio, two UBSAN fixes in the core ioctls, and a trivial fix in the error path handling in lx6464es driver. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAls0CQUOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE8S7A//U4T/cbxv+ozwnrtD0Flz962JM1sfe2d8hCp1 kQyS7ImYtiqx7UjZCm6nmwNMM4vnUDfSDoTB/OjAQgSIXsu/gme9FvmZeFbso4j2 9mIGaU5te2StylaUrwHyLt3OMBKZGJ6xPxXSI36Fe+YktWB1jlul7kmGxfw1PHCp VHLTcEebgAhgJYPDlZFCu0XOZXRCjr4bKnwVSXA/HPMk+5kvDIP1wfcG5b5dC/6R Q0y3tKJZqfIK13eivppdOYQ/0AvaognZXvCA3NeFTjmuDCe+9B1QNOqnzUba53TI /EZDKmMU3wZ0UnO6NVnpFoFzxl7Z82qTAcOPXC+QSPTCzqk6j+vYuEx9TmZAsaE6 sOoTIXAFRdksMBcC4zh5KdhsspuPEtPeG2yuOtm/J/32Iome2G9pZd3aT5YpfqbI sX0h7bDSLpgsvvueBaLimBgs0gpCUYE7AqLUlHPtSBF8Dl7mOKVz9vlXCI0v0Q4/ PHhPYA4XBKRnexTaj8qmv0WlhPQb3vXq9nVJ7LTvYCGJUIHgnXj7duWMrVBZvsOT Bci8r9p9RB+LRsoGwAvZ9yP/q0TlnyCs0CwNRoBudOlU/u4SiGvav0mkhA58/czZ JoMmhq5SL7RrDGPJ9e3Z+UVx+YNyG6abuKuuCm9WTCEYzmwoh9WElcjgdcl7THP6 RZCNdgg= =yeOb -----END PGP SIGNATURE----- Merge tag 'sound-4.18-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "Over a dozen changes, but all small and clear fixes. Half of them are the regression fixes for CA0132 HD-audio codec, and the rest are, again, a few more fixups for HD-audio, two UBSAN fixes in the core ioctls, and a trivial fix in the error path handling in lx6464es driver" * tag 'sound-4.18-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: seq: Fix UBSAN warning at SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT ioctl ALSA: timer: Fix UBSAN warning at SNDRV_TIMER_IOCTL_NEXT_DEVICE ioctl ALSA: hda/realtek - Fix the problem of two front mics on more machines ALSA: hda/realtek - Add a quirk for FSC ESPRIMO U9210 ALSA: hda/ca0132: make array ca0132_alt_chmaps static ALSA: hda - Force to link down at runtime suspend on ATI/AMD HDMI ALSA: lx6464es: Missing error code in snd_lx6464es_create() ALSA: hda/ca0132: Fix DMic data rate for Alienware M17x R4 ALSA: hda/ca0132: Restore PCM Analog Mic-In2 ALSA: hda/ca0132: Don't test for QUIRK_NONE ALSA: hda/ca0132: Restore behavior of QUIRK_ALIENWARE ALSA: hda/ca0132: Delete redundant UNSOL event requests ALSA: hda/ca0132: Delete pointless assignments to struct auto_pin_cfg fields ALSA: hda/realtek - Fix pop noise on Lenovo P50 & co
This commit is contained in:
Коммит
e26aac3cae
|
@ -2004,6 +2004,7 @@ static int snd_seq_ioctl_query_next_client(struct snd_seq_client *client,
|
||||||
struct snd_seq_client *cptr = NULL;
|
struct snd_seq_client *cptr = NULL;
|
||||||
|
|
||||||
/* search for next client */
|
/* search for next client */
|
||||||
|
if (info->client < INT_MAX)
|
||||||
info->client++;
|
info->client++;
|
||||||
if (info->client < 0)
|
if (info->client < 0)
|
||||||
info->client = 0;
|
info->client = 0;
|
||||||
|
|
|
@ -1520,7 +1520,7 @@ static int snd_timer_user_next_device(struct snd_timer_id __user *_tid)
|
||||||
} else {
|
} else {
|
||||||
if (id.subdevice < 0)
|
if (id.subdevice < 0)
|
||||||
id.subdevice = 0;
|
id.subdevice = 0;
|
||||||
else
|
else if (id.subdevice < INT_MAX)
|
||||||
id.subdevice++;
|
id.subdevice++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2899,8 +2899,9 @@ static int hda_codec_runtime_suspend(struct device *dev)
|
||||||
list_for_each_entry(pcm, &codec->pcm_list_head, list)
|
list_for_each_entry(pcm, &codec->pcm_list_head, list)
|
||||||
snd_pcm_suspend_all(pcm->pcm);
|
snd_pcm_suspend_all(pcm->pcm);
|
||||||
state = hda_call_codec_suspend(codec);
|
state = hda_call_codec_suspend(codec);
|
||||||
if (codec_has_clkstop(codec) && codec_has_epss(codec) &&
|
if (codec->link_down_at_suspend ||
|
||||||
(state & AC_PWRST_CLK_STOP_OK))
|
(codec_has_clkstop(codec) && codec_has_epss(codec) &&
|
||||||
|
(state & AC_PWRST_CLK_STOP_OK)))
|
||||||
snd_hdac_codec_link_down(&codec->core);
|
snd_hdac_codec_link_down(&codec->core);
|
||||||
snd_hdac_link_power(&codec->core, false);
|
snd_hdac_link_power(&codec->core, false);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -258,6 +258,7 @@ struct hda_codec {
|
||||||
unsigned int power_save_node:1; /* advanced PM for each widget */
|
unsigned int power_save_node:1; /* advanced PM for each widget */
|
||||||
unsigned int auto_runtime_pm:1; /* enable automatic codec runtime pm */
|
unsigned int auto_runtime_pm:1; /* enable automatic codec runtime pm */
|
||||||
unsigned int force_pin_prefix:1; /* Add location prefix */
|
unsigned int force_pin_prefix:1; /* Add location prefix */
|
||||||
|
unsigned int link_down_at_suspend:1; /* link down at runtime suspend */
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
unsigned long power_on_acct;
|
unsigned long power_on_acct;
|
||||||
unsigned long power_off_acct;
|
unsigned long power_off_acct;
|
||||||
|
|
|
@ -991,6 +991,7 @@ struct ca0132_spec {
|
||||||
enum {
|
enum {
|
||||||
QUIRK_NONE,
|
QUIRK_NONE,
|
||||||
QUIRK_ALIENWARE,
|
QUIRK_ALIENWARE,
|
||||||
|
QUIRK_ALIENWARE_M17XR4,
|
||||||
QUIRK_SBZ,
|
QUIRK_SBZ,
|
||||||
QUIRK_R3DI,
|
QUIRK_R3DI,
|
||||||
};
|
};
|
||||||
|
@ -1040,6 +1041,7 @@ static const struct hda_pintbl r3di_pincfgs[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct snd_pci_quirk ca0132_quirks[] = {
|
static const struct snd_pci_quirk ca0132_quirks[] = {
|
||||||
|
SND_PCI_QUIRK(0x1028, 0x057b, "Alienware M17x R4", QUIRK_ALIENWARE_M17XR4),
|
||||||
SND_PCI_QUIRK(0x1028, 0x0685, "Alienware 15 2015", QUIRK_ALIENWARE),
|
SND_PCI_QUIRK(0x1028, 0x0685, "Alienware 15 2015", QUIRK_ALIENWARE),
|
||||||
SND_PCI_QUIRK(0x1028, 0x0688, "Alienware 17 2015", QUIRK_ALIENWARE),
|
SND_PCI_QUIRK(0x1028, 0x0688, "Alienware 17 2015", QUIRK_ALIENWARE),
|
||||||
SND_PCI_QUIRK(0x1028, 0x0708, "Alienware 15 R2 2016", QUIRK_ALIENWARE),
|
SND_PCI_QUIRK(0x1028, 0x0708, "Alienware 15 R2 2016", QUIRK_ALIENWARE),
|
||||||
|
@ -5663,7 +5665,7 @@ static const char * const ca0132_alt_slave_pfxs[] = {
|
||||||
* I think this has to do with the pin for rear surround being 0x11,
|
* I think this has to do with the pin for rear surround being 0x11,
|
||||||
* and the center/lfe being 0x10. Usually the pin order is the opposite.
|
* and the center/lfe being 0x10. Usually the pin order is the opposite.
|
||||||
*/
|
*/
|
||||||
const struct snd_pcm_chmap_elem ca0132_alt_chmaps[] = {
|
static const struct snd_pcm_chmap_elem ca0132_alt_chmaps[] = {
|
||||||
{ .channels = 2,
|
{ .channels = 2,
|
||||||
.map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },
|
.map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },
|
||||||
{ .channels = 4,
|
{ .channels = 4,
|
||||||
|
@ -5966,7 +5968,7 @@ static int ca0132_build_pcms(struct hda_codec *codec)
|
||||||
info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[0];
|
info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[0];
|
||||||
|
|
||||||
/* With the DSP enabled, desktops don't use this ADC. */
|
/* With the DSP enabled, desktops don't use this ADC. */
|
||||||
if (spec->use_alt_functions) {
|
if (!spec->use_alt_functions) {
|
||||||
info = snd_hda_codec_pcm_new(codec, "CA0132 Analog Mic-In2");
|
info = snd_hda_codec_pcm_new(codec, "CA0132 Analog Mic-In2");
|
||||||
if (!info)
|
if (!info)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -6130,6 +6132,9 @@ static void ca0132_init_dmic(struct hda_codec *codec)
|
||||||
* Bit 6: set to select Data2, clear for Data1
|
* Bit 6: set to select Data2, clear for Data1
|
||||||
* Bit 7: set to enable DMic, clear for AMic
|
* Bit 7: set to enable DMic, clear for AMic
|
||||||
*/
|
*/
|
||||||
|
if (spec->quirk == QUIRK_ALIENWARE_M17XR4)
|
||||||
|
val = 0x33;
|
||||||
|
else
|
||||||
val = 0x23;
|
val = 0x23;
|
||||||
/* keep a copy of dmic ctl val for enable/disable dmic purpuse */
|
/* keep a copy of dmic ctl val for enable/disable dmic purpuse */
|
||||||
spec->dmic_ctl = val;
|
spec->dmic_ctl = val;
|
||||||
|
@ -7223,7 +7228,7 @@ static int ca0132_init(struct hda_codec *codec)
|
||||||
|
|
||||||
snd_hda_sequence_write(codec, spec->base_init_verbs);
|
snd_hda_sequence_write(codec, spec->base_init_verbs);
|
||||||
|
|
||||||
if (spec->quirk != QUIRK_NONE)
|
if (spec->use_alt_functions)
|
||||||
ca0132_alt_init(codec);
|
ca0132_alt_init(codec);
|
||||||
|
|
||||||
ca0132_download_dsp(codec);
|
ca0132_download_dsp(codec);
|
||||||
|
@ -7237,8 +7242,9 @@ static int ca0132_init(struct hda_codec *codec)
|
||||||
case QUIRK_R3DI:
|
case QUIRK_R3DI:
|
||||||
r3di_setup_defaults(codec);
|
r3di_setup_defaults(codec);
|
||||||
break;
|
break;
|
||||||
case QUIRK_NONE:
|
case QUIRK_SBZ:
|
||||||
case QUIRK_ALIENWARE:
|
break;
|
||||||
|
default:
|
||||||
ca0132_setup_defaults(codec);
|
ca0132_setup_defaults(codec);
|
||||||
ca0132_init_analog_mic2(codec);
|
ca0132_init_analog_mic2(codec);
|
||||||
ca0132_init_dmic(codec);
|
ca0132_init_dmic(codec);
|
||||||
|
@ -7343,7 +7349,6 @@ static const struct hda_codec_ops ca0132_patch_ops = {
|
||||||
static void ca0132_config(struct hda_codec *codec)
|
static void ca0132_config(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
struct ca0132_spec *spec = codec->spec;
|
struct ca0132_spec *spec = codec->spec;
|
||||||
struct auto_pin_cfg *cfg = &spec->autocfg;
|
|
||||||
|
|
||||||
spec->dacs[0] = 0x2;
|
spec->dacs[0] = 0x2;
|
||||||
spec->dacs[1] = 0x3;
|
spec->dacs[1] = 0x3;
|
||||||
|
@ -7405,12 +7410,7 @@ static void ca0132_config(struct hda_codec *codec)
|
||||||
/* SPDIF I/O */
|
/* SPDIF I/O */
|
||||||
spec->dig_out = 0x05;
|
spec->dig_out = 0x05;
|
||||||
spec->multiout.dig_out_nid = spec->dig_out;
|
spec->multiout.dig_out_nid = spec->dig_out;
|
||||||
cfg->dig_out_pins[0] = 0x0c;
|
|
||||||
cfg->dig_outs = 1;
|
|
||||||
cfg->dig_out_type[0] = HDA_PCM_TYPE_SPDIF;
|
|
||||||
spec->dig_in = 0x09;
|
spec->dig_in = 0x09;
|
||||||
cfg->dig_in_pin = 0x0e;
|
|
||||||
cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
|
|
||||||
break;
|
break;
|
||||||
case QUIRK_R3DI:
|
case QUIRK_R3DI:
|
||||||
codec_dbg(codec, "%s: QUIRK_R3DI applied.\n", __func__);
|
codec_dbg(codec, "%s: QUIRK_R3DI applied.\n", __func__);
|
||||||
|
@ -7438,9 +7438,6 @@ static void ca0132_config(struct hda_codec *codec)
|
||||||
/* SPDIF I/O */
|
/* SPDIF I/O */
|
||||||
spec->dig_out = 0x05;
|
spec->dig_out = 0x05;
|
||||||
spec->multiout.dig_out_nid = spec->dig_out;
|
spec->multiout.dig_out_nid = spec->dig_out;
|
||||||
cfg->dig_out_pins[0] = 0x0c;
|
|
||||||
cfg->dig_outs = 1;
|
|
||||||
cfg->dig_out_type[0] = HDA_PCM_TYPE_SPDIF;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
spec->num_outputs = 2;
|
spec->num_outputs = 2;
|
||||||
|
@ -7463,12 +7460,7 @@ static void ca0132_config(struct hda_codec *codec)
|
||||||
/* SPDIF I/O */
|
/* SPDIF I/O */
|
||||||
spec->dig_out = 0x05;
|
spec->dig_out = 0x05;
|
||||||
spec->multiout.dig_out_nid = spec->dig_out;
|
spec->multiout.dig_out_nid = spec->dig_out;
|
||||||
cfg->dig_out_pins[0] = 0x0c;
|
|
||||||
cfg->dig_outs = 1;
|
|
||||||
cfg->dig_out_type[0] = HDA_PCM_TYPE_SPDIF;
|
|
||||||
spec->dig_in = 0x09;
|
spec->dig_in = 0x09;
|
||||||
cfg->dig_in_pin = 0x0e;
|
|
||||||
cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7476,7 +7468,7 @@ static void ca0132_config(struct hda_codec *codec)
|
||||||
static int ca0132_prepare_verbs(struct hda_codec *codec)
|
static int ca0132_prepare_verbs(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
/* Verbs + terminator (an empty element) */
|
/* Verbs + terminator (an empty element) */
|
||||||
#define NUM_SPEC_VERBS 4
|
#define NUM_SPEC_VERBS 2
|
||||||
struct ca0132_spec *spec = codec->spec;
|
struct ca0132_spec *spec = codec->spec;
|
||||||
|
|
||||||
spec->chip_init_verbs = ca0132_init_verbs0;
|
spec->chip_init_verbs = ca0132_init_verbs0;
|
||||||
|
@ -7488,34 +7480,24 @@ static int ca0132_prepare_verbs(struct hda_codec *codec)
|
||||||
if (!spec->spec_init_verbs)
|
if (!spec->spec_init_verbs)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* HP jack autodetection */
|
|
||||||
spec->spec_init_verbs[0].nid = spec->unsol_tag_hp;
|
|
||||||
spec->spec_init_verbs[0].param = AC_VERB_SET_UNSOLICITED_ENABLE;
|
|
||||||
spec->spec_init_verbs[0].verb = AC_USRSP_EN | spec->unsol_tag_hp;
|
|
||||||
|
|
||||||
/* MIC1 jack autodetection */
|
|
||||||
spec->spec_init_verbs[1].nid = spec->unsol_tag_amic1;
|
|
||||||
spec->spec_init_verbs[1].param = AC_VERB_SET_UNSOLICITED_ENABLE;
|
|
||||||
spec->spec_init_verbs[1].verb = AC_USRSP_EN | spec->unsol_tag_amic1;
|
|
||||||
|
|
||||||
/* config EAPD */
|
/* config EAPD */
|
||||||
spec->spec_init_verbs[2].nid = 0x0b;
|
spec->spec_init_verbs[0].nid = 0x0b;
|
||||||
spec->spec_init_verbs[2].param = 0x78D;
|
spec->spec_init_verbs[0].param = 0x78D;
|
||||||
spec->spec_init_verbs[2].verb = 0x00;
|
spec->spec_init_verbs[0].verb = 0x00;
|
||||||
|
|
||||||
/* Previously commented configuration */
|
/* Previously commented configuration */
|
||||||
/*
|
/*
|
||||||
spec->spec_init_verbs[3].nid = 0x0b;
|
spec->spec_init_verbs[2].nid = 0x0b;
|
||||||
spec->spec_init_verbs[3].param = AC_VERB_SET_EAPD_BTLENABLE;
|
spec->spec_init_verbs[2].param = AC_VERB_SET_EAPD_BTLENABLE;
|
||||||
|
spec->spec_init_verbs[2].verb = 0x02;
|
||||||
|
|
||||||
|
spec->spec_init_verbs[3].nid = 0x10;
|
||||||
|
spec->spec_init_verbs[3].param = 0x78D;
|
||||||
spec->spec_init_verbs[3].verb = 0x02;
|
spec->spec_init_verbs[3].verb = 0x02;
|
||||||
|
|
||||||
spec->spec_init_verbs[4].nid = 0x10;
|
spec->spec_init_verbs[4].nid = 0x10;
|
||||||
spec->spec_init_verbs[4].param = 0x78D;
|
spec->spec_init_verbs[4].param = AC_VERB_SET_EAPD_BTLENABLE;
|
||||||
spec->spec_init_verbs[4].verb = 0x02;
|
spec->spec_init_verbs[4].verb = 0x02;
|
||||||
|
|
||||||
spec->spec_init_verbs[5].nid = 0x10;
|
|
||||||
spec->spec_init_verbs[5].param = AC_VERB_SET_EAPD_BTLENABLE;
|
|
||||||
spec->spec_init_verbs[5].verb = 0x02;
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Terminator: spec->spec_init_verbs[NUM_SPEC_VERBS-1] */
|
/* Terminator: spec->spec_init_verbs[NUM_SPEC_VERBS-1] */
|
||||||
|
|
|
@ -3741,6 +3741,11 @@ static int patch_atihdmi(struct hda_codec *codec)
|
||||||
|
|
||||||
spec->chmap.channels_max = max(spec->chmap.channels_max, 8u);
|
spec->chmap.channels_max = max(spec->chmap.channels_max, 8u);
|
||||||
|
|
||||||
|
/* AMD GPUs have neither EPSS nor CLKSTOP bits, hence preventing
|
||||||
|
* the link-down as is. Tell the core to allow it.
|
||||||
|
*/
|
||||||
|
codec->link_down_at_suspend = 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2545,6 +2545,7 @@ static const struct snd_pci_quirk alc262_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu Lifebook S7110", ALC262_FIXUP_FSC_S7110),
|
SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu Lifebook S7110", ALC262_FIXUP_FSC_S7110),
|
||||||
SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FIXUP_BENQ),
|
SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FIXUP_BENQ),
|
||||||
SND_PCI_QUIRK(0x10f1, 0x2915, "Tyan Thunder n6650W", ALC262_FIXUP_TYAN),
|
SND_PCI_QUIRK(0x10f1, 0x2915, "Tyan Thunder n6650W", ALC262_FIXUP_TYAN),
|
||||||
|
SND_PCI_QUIRK(0x1734, 0x1141, "FSC ESPRIMO U9210", ALC262_FIXUP_FSC_H270),
|
||||||
SND_PCI_QUIRK(0x1734, 0x1147, "FSC Celsius H270", ALC262_FIXUP_FSC_H270),
|
SND_PCI_QUIRK(0x1734, 0x1147, "FSC Celsius H270", ALC262_FIXUP_FSC_H270),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x384e, "Lenovo 3000", ALC262_FIXUP_LENOVO_3000),
|
SND_PCI_QUIRK(0x17aa, 0x384e, "Lenovo 3000", ALC262_FIXUP_LENOVO_3000),
|
||||||
SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_FIXUP_BENQ),
|
SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_FIXUP_BENQ),
|
||||||
|
@ -4995,7 +4996,6 @@ static void alc_fixup_tpt440_dock(struct hda_codec *codec,
|
||||||
struct alc_spec *spec = codec->spec;
|
struct alc_spec *spec = codec->spec;
|
||||||
|
|
||||||
if (action == HDA_FIXUP_ACT_PRE_PROBE) {
|
if (action == HDA_FIXUP_ACT_PRE_PROBE) {
|
||||||
spec->shutup = alc_no_shutup; /* reduce click noise */
|
|
||||||
spec->reboot_notify = alc_d3_at_reboot; /* reduce noise */
|
spec->reboot_notify = alc_d3_at_reboot; /* reduce noise */
|
||||||
spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
|
spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
|
||||||
codec->power_save_node = 0; /* avoid click noises */
|
codec->power_save_node = 0; /* avoid click noises */
|
||||||
|
@ -5394,6 +5394,13 @@ static void alc274_fixup_bind_dacs(struct hda_codec *codec,
|
||||||
/* for hda_fixup_thinkpad_acpi() */
|
/* for hda_fixup_thinkpad_acpi() */
|
||||||
#include "thinkpad_helper.c"
|
#include "thinkpad_helper.c"
|
||||||
|
|
||||||
|
static void alc_fixup_thinkpad_acpi(struct hda_codec *codec,
|
||||||
|
const struct hda_fixup *fix, int action)
|
||||||
|
{
|
||||||
|
alc_fixup_no_shutup(codec, fix, action); /* reduce click noise */
|
||||||
|
hda_fixup_thinkpad_acpi(codec, fix, action);
|
||||||
|
}
|
||||||
|
|
||||||
/* for dell wmi mic mute led */
|
/* for dell wmi mic mute led */
|
||||||
#include "dell_wmi_helper.c"
|
#include "dell_wmi_helper.c"
|
||||||
|
|
||||||
|
@ -5946,7 +5953,7 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||||
},
|
},
|
||||||
[ALC269_FIXUP_THINKPAD_ACPI] = {
|
[ALC269_FIXUP_THINKPAD_ACPI] = {
|
||||||
.type = HDA_FIXUP_FUNC,
|
.type = HDA_FIXUP_FUNC,
|
||||||
.v.func = hda_fixup_thinkpad_acpi,
|
.v.func = alc_fixup_thinkpad_acpi,
|
||||||
.chained = true,
|
.chained = true,
|
||||||
.chain_id = ALC269_FIXUP_SKU_IGNORE,
|
.chain_id = ALC269_FIXUP_SKU_IGNORE,
|
||||||
},
|
},
|
||||||
|
@ -6603,8 +6610,9 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||||
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),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
||||||
|
SND_PCI_QUIRK(0x17aa, 0x312a, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x312f, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
SND_PCI_QUIRK(0x17aa, 0x312f, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x3138, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
SND_PCI_QUIRK(0x17aa, 0x3136, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x313c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
SND_PCI_QUIRK(0x17aa, 0x313c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
|
SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
|
SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
|
||||||
|
@ -6782,6 +6790,12 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
||||||
{0x14, 0x90170110},
|
{0x14, 0x90170110},
|
||||||
{0x19, 0x02a11030},
|
{0x19, 0x02a11030},
|
||||||
{0x21, 0x02211020}),
|
{0x21, 0x02211020}),
|
||||||
|
SND_HDA_PIN_QUIRK(0x10ec0235, 0x17aa, "Lenovo", ALC294_FIXUP_LENOVO_MIC_LOCATION,
|
||||||
|
{0x14, 0x90170110},
|
||||||
|
{0x19, 0x02a11030},
|
||||||
|
{0x1a, 0x02a11040},
|
||||||
|
{0x1b, 0x01014020},
|
||||||
|
{0x21, 0x0221101f}),
|
||||||
SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||||
{0x12, 0x90a60140},
|
{0x12, 0x90a60140},
|
||||||
{0x14, 0x90170110},
|
{0x14, 0x90170110},
|
||||||
|
|
|
@ -1018,6 +1018,7 @@ static int snd_lx6464es_create(struct snd_card *card,
|
||||||
chip->port_dsp_bar = pci_ioremap_bar(pci, 2);
|
chip->port_dsp_bar = pci_ioremap_bar(pci, 2);
|
||||||
if (!chip->port_dsp_bar) {
|
if (!chip->port_dsp_bar) {
|
||||||
dev_err(card->dev, "cannot remap PCI memory region\n");
|
dev_err(card->dev, "cannot remap PCI memory region\n");
|
||||||
|
err = -ENOMEM;
|
||||||
goto remap_pci_failed;
|
goto remap_pci_failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче