mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 00:34:20 +08:00
ALSA: hda/realtek - Add HP new mute led supported for ALC236
HP new platform has new mute led feature. COEF index 0x34 bit 5 to control playback mute led. COEF index 0x35 bit 2 and bit 3 to control Mic mute led. [ corrected typos by tiwai ] Signed-off-by: Kailang Yang <kailang@realtek.com> Link: https://lore.kernel.org/r/6741211598ba499687362ff2aa30626b@realtek.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
431e76c3ed
commit
24164f434d
@ -4219,6 +4219,23 @@ static void alc285_fixup_hp_mute_led_coefbit(struct hda_codec *codec,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void alc236_fixup_hp_mute_led_coefbit(struct hda_codec *codec,
|
||||||
|
const struct hda_fixup *fix,
|
||||||
|
int action)
|
||||||
|
{
|
||||||
|
struct alc_spec *spec = codec->spec;
|
||||||
|
|
||||||
|
if (action == HDA_FIXUP_ACT_PRE_PROBE) {
|
||||||
|
spec->mute_led_polarity = 0;
|
||||||
|
spec->mute_led_coef_idx = 0x34;
|
||||||
|
spec->mute_led_coefbit_mask = 1<<5;
|
||||||
|
spec->mute_led_coefbit_on = 0;
|
||||||
|
spec->mute_led_coefbit_off = 1<<5;
|
||||||
|
spec->gen.vmaster_mute.hook = alc_fixup_mute_led_coefbit_hook;
|
||||||
|
spec->gen.vmaster_mute_enum = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* turn on/off mic-mute LED per capture hook by coef bit */
|
/* turn on/off mic-mute LED per capture hook by coef bit */
|
||||||
static void alc_hp_cap_micmute_update(struct hda_codec *codec)
|
static void alc_hp_cap_micmute_update(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
@ -4246,6 +4263,20 @@ static void alc285_fixup_hp_coef_micmute_led(struct hda_codec *codec,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void alc236_fixup_hp_coef_micmute_led(struct hda_codec *codec,
|
||||||
|
const struct hda_fixup *fix, int action)
|
||||||
|
{
|
||||||
|
struct alc_spec *spec = codec->spec;
|
||||||
|
|
||||||
|
if (action == HDA_FIXUP_ACT_PRE_PROBE) {
|
||||||
|
spec->mic_led_coef_idx = 0x35;
|
||||||
|
spec->mic_led_coefbit_mask = 3<<2;
|
||||||
|
spec->mic_led_coefbit_on = 2<<2;
|
||||||
|
spec->mic_led_coefbit_off = 1<<2;
|
||||||
|
snd_hda_gen_add_micmute_led(codec, alc_hp_cap_micmute_update);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void alc285_fixup_hp_mute_led(struct hda_codec *codec,
|
static void alc285_fixup_hp_mute_led(struct hda_codec *codec,
|
||||||
const struct hda_fixup *fix, int action)
|
const struct hda_fixup *fix, int action)
|
||||||
{
|
{
|
||||||
@ -4253,6 +4284,13 @@ static void alc285_fixup_hp_mute_led(struct hda_codec *codec,
|
|||||||
alc285_fixup_hp_coef_micmute_led(codec, fix, action);
|
alc285_fixup_hp_coef_micmute_led(codec, fix, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void alc236_fixup_hp_mute_led(struct hda_codec *codec,
|
||||||
|
const struct hda_fixup *fix, int action)
|
||||||
|
{
|
||||||
|
alc236_fixup_hp_mute_led_coefbit(codec, fix, action);
|
||||||
|
alc236_fixup_hp_coef_micmute_led(codec, fix, action);
|
||||||
|
}
|
||||||
|
|
||||||
#if IS_REACHABLE(CONFIG_INPUT)
|
#if IS_REACHABLE(CONFIG_INPUT)
|
||||||
static void gpio2_mic_hotkey_event(struct hda_codec *codec,
|
static void gpio2_mic_hotkey_event(struct hda_codec *codec,
|
||||||
struct hda_jack_callback *event)
|
struct hda_jack_callback *event)
|
||||||
@ -6040,6 +6078,7 @@ enum {
|
|||||||
ALC294_FIXUP_ASUS_HPE,
|
ALC294_FIXUP_ASUS_HPE,
|
||||||
ALC285_FIXUP_HP_GPIO_LED,
|
ALC285_FIXUP_HP_GPIO_LED,
|
||||||
ALC285_FIXUP_HP_MUTE_LED,
|
ALC285_FIXUP_HP_MUTE_LED,
|
||||||
|
ALC236_FIXUP_HP_MUTE_LED,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct hda_fixup alc269_fixups[] = {
|
static const struct hda_fixup alc269_fixups[] = {
|
||||||
@ -7169,6 +7208,10 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||||||
.type = HDA_FIXUP_FUNC,
|
.type = HDA_FIXUP_FUNC,
|
||||||
.v.func = alc285_fixup_hp_mute_led,
|
.v.func = alc285_fixup_hp_mute_led,
|
||||||
},
|
},
|
||||||
|
[ALC236_FIXUP_HP_MUTE_LED] = {
|
||||||
|
.type = HDA_FIXUP_FUNC,
|
||||||
|
.v.func = alc236_fixup_hp_mute_led,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||||
@ -7315,6 +7358,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||||||
SND_PCI_QUIRK(0x103c, 0x84e7, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3),
|
SND_PCI_QUIRK(0x103c, 0x84e7, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3),
|
||||||
SND_PCI_QUIRK(0x103c, 0x8736, "HP", ALC285_FIXUP_HP_GPIO_LED),
|
SND_PCI_QUIRK(0x103c, 0x8736, "HP", ALC285_FIXUP_HP_GPIO_LED),
|
||||||
SND_PCI_QUIRK(0x103c, 0x877a, "HP", ALC285_FIXUP_HP_MUTE_LED),
|
SND_PCI_QUIRK(0x103c, 0x877a, "HP", ALC285_FIXUP_HP_MUTE_LED),
|
||||||
|
SND_PCI_QUIRK(0x103c, 0x877d, "HP", ALC236_FIXUP_HP_MUTE_LED),
|
||||||
SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
|
SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
|
||||||
SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
|
SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
|
||||||
SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||||
|
Loading…
Reference in New Issue
Block a user