提交 2ae95577 编写于 作者: D David Henningsson 提交者: Takashi Iwai

ALSA: hda - Fixup speaker pass-through control for nid 0x14 on ALC225

On one of the machines we enable, we found that the actual speaker volume
did not always correspond to the volume set in alsamixer. This patch
fixes that problem.

This patch was orginally written by Kailang @ Realtek, I've rebased it
to fit sound git master.

Cc: stable@vger.kernel.org
BugLink: https://bugs.launchpad.net/bugs/1549660Co-Authored-By: NKailang <kailang@realtek.com>
Signed-off-by: NDavid Henningsson <david.henningsson@canonical.com>
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 3b43b71f
...@@ -3801,6 +3801,10 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin, ...@@ -3801,6 +3801,10 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
static void alc_headset_mode_default(struct hda_codec *codec) static void alc_headset_mode_default(struct hda_codec *codec)
{ {
static struct coef_fw coef0225[] = {
UPDATE_COEF(0x45, 0x3f<<10, 0x34<<10),
{}
};
static struct coef_fw coef0255[] = { static struct coef_fw coef0255[] = {
WRITE_COEF(0x45, 0xc089), WRITE_COEF(0x45, 0xc089),
WRITE_COEF(0x45, 0xc489), WRITE_COEF(0x45, 0xc489),
...@@ -3842,6 +3846,9 @@ static void alc_headset_mode_default(struct hda_codec *codec) ...@@ -3842,6 +3846,9 @@ static void alc_headset_mode_default(struct hda_codec *codec)
}; };
switch (codec->core.vendor_id) { switch (codec->core.vendor_id) {
case 0x10ec0225:
alc_process_coef_fw(codec, coef0225);
break;
case 0x10ec0255: case 0x10ec0255:
case 0x10ec0256: case 0x10ec0256:
alc_process_coef_fw(codec, coef0255); alc_process_coef_fw(codec, coef0255);
...@@ -4750,6 +4757,7 @@ enum { ...@@ -4750,6 +4757,7 @@ enum {
ALC293_FIXUP_LENOVO_SPK_NOISE, ALC293_FIXUP_LENOVO_SPK_NOISE,
ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY, ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY,
ALC255_FIXUP_DELL_SPK_NOISE, ALC255_FIXUP_DELL_SPK_NOISE,
ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
}; };
static const struct hda_fixup alc269_fixups[] = { static const struct hda_fixup alc269_fixups[] = {
...@@ -5375,6 +5383,17 @@ static const struct hda_fixup alc269_fixups[] = { ...@@ -5375,6 +5383,17 @@ static const struct hda_fixup alc269_fixups[] = {
.chained = true, .chained = true,
.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE .chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
}, },
[ALC225_FIXUP_DELL1_MIC_NO_PRESENCE] = {
.type = HDA_FIXUP_VERBS,
.v.verbs = (const struct hda_verb[]) {
/* Disable pass-through path for FRONT 14h */
{ 0x20, AC_VERB_SET_COEF_INDEX, 0x36 },
{ 0x20, AC_VERB_SET_PROC_COEF, 0x57d7 },
{}
},
.chained = true,
.chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
},
}; };
static const struct snd_pci_quirk alc269_fixup_tbl[] = { static const struct snd_pci_quirk alc269_fixup_tbl[] = {
...@@ -5646,10 +5665,10 @@ static const struct hda_model_fixup alc269_fixup_models[] = { ...@@ -5646,10 +5665,10 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
{0x21, 0x03211020} {0x21, 0x03211020}
static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
ALC225_STANDARD_PINS, ALC225_STANDARD_PINS,
{0x14, 0x901701a0}), {0x14, 0x901701a0}),
SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
ALC225_STANDARD_PINS, ALC225_STANDARD_PINS,
{0x14, 0x901701b0}), {0x14, 0x901701b0}),
SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE, SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册