[PATCH] Lenovo Legion 7 15IMHg05 & Yoga 7 14ITL5 speaker output fix
Cameron Berkenpas
cam at neo-zeon.de
Thu Jul 8 15:22:06 CEST 2021
Don't mean to spam, but I missed that email subjects with patches should
have their subjects prefixed with '[PATCH]'.
On 7/7/21 5:16 PM, Cameron Berkenpas wrote:
> Hello,
>
> I have a patch against 5.12.x that results in working speaker audio
> for the Lenovo Legion 7 15IMHg05 and the Lenovo Yoga 7 14ITL5.
>
> How should I go about getting this merged? Should this be against the
> latest torvalds git? Is this the right place to present this
> particular patch? There are no issues checking my changes against
> checkpatch.pl.
>
> Thanks!
>
> diff --git a/sound/pci/hda/legion_15imhg05_helper.c
> b/sound/pci/hda/legion_15imhg05_helper.c
> new file mode 100644
> index 000000000000..6ead999ec3c9
> --- /dev/null
> +++ b/sound/pci/hda/legion_15imhg05_helper.c
> @@ -0,0 +1,41 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/* Fixes for Lenovo Legion 15IMHg05 speaker output. */
> +
> +static const struct hda_verb legion_15imhg05_coefs[] = {
> +{0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x41 },
> +{0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x2 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x0 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x0 },
> +{0x20, 0x4b0, 0x20 },
> +
> +// Set right speaker for Legion 7i.
> +{0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x42 },
> +
> +{0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0xc },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x0 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x2a },
> +{0x20, 0x4b0, 0x20 },
> +{0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x2 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x0 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x0 },
> +{0x20, 0x4b0, 0x20 },
> +{}
> +};
> +
> +static void alc287_fixup_legion_15imhg05_speakers(struct hda_codec
> *codec,
> + const struct hda_fixup *fix,
> + int action)
> +{
> + struct alc_spec *spec = codec->spec;
> +
> + switch (action) {
> + case HDA_FIXUP_ACT_INIT:
> + spec->gen.automute_speaker = 0;
> + break;
> + }
> +}
> diff --git a/sound/pci/hda/patch_realtek.c
> b/sound/pci/hda/patch_realtek.c
> index e46e43dac6bf..28a4955cf2c2 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -6352,6 +6352,12 @@ static void alc_fixup_thinkpad_acpi(struct
> hda_codec *codec,
> /* for alc285_fixup_ideapad_s740_coef() */
> #include "ideapad_s740_helper.c"
>
> +/* For alc287_fixup_legion_15imhg05_speakers() */
> +#include "legion_15imhg05_helper.c"
> +
> +/* For yoga7_14itl5_coefs */
> +#include "yoga7_14itl5_coefs.c"
> +
> enum {
> ALC269_FIXUP_GPIO2,
> ALC269_FIXUP_SONY_VAIO,
> @@ -6561,6 +6567,9 @@ enum {
> ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP,
> ALC623_FIXUP_LENOVO_THINKSTATION_P340,
> ALC255_FIXUP_ACER_HEADPHONE_AND_MIC,
> + ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS,
> + ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE,
> + ALC287_FIXUP_YOGA7_14ITL_SPEAKERS,
> };
>
> static const struct hda_fixup alc269_fixups[] = {
> @@ -8088,6 +8097,24 @@ static const struct hda_fixup alc269_fixups[] = {
> .chained = true,
> .chain_id = ALC269_FIXUP_THINKPAD_ACPI,
> },
> + [ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS] = {
> + .type = HDA_FIXUP_VERBS,
> + .v.verbs = legion_15imhg05_coefs,
> + .chained = true,
> + .chain_id = ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE,
> + },
> + [ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE] = {
> + .type = HDA_FIXUP_FUNC,
> + .v.func = alc287_fixup_legion_15imhg05_speakers,
> + .chained = true,
> + .chain_id = ALC269_FIXUP_HEADSET_MODE,
> + },
> + [ALC287_FIXUP_YOGA7_14ITL_SPEAKERS] = {
> + .type = HDA_FIXUP_VERBS,
> + .v.verbs = yoga7_14itl5_coefs,
> + .chained = true,
> + .chain_id = ALC269_FIXUP_HEADSET_MODE,
> + },
> [ALC295_FIXUP_ASUS_DACS] = {
> .type = HDA_FIXUP_FUNC,
> .v.func = alc295_fixup_asus_dacs,
> @@ -8520,6 +8547,8 @@ static const struct snd_pci_quirk
> alc269_fixup_tbl[] = {
> SND_PCI_QUIRK(0x17aa, 0x3818, "Lenovo C940",
> ALC298_FIXUP_LENOVO_SPK_VOLUME),
> SND_PCI_QUIRK(0x17aa, 0x3827, "Ideapad S740",
> ALC285_FIXUP_IDEAPAD_S740_COEF),
> SND_PCI_QUIRK(0x17aa, 0x3843, "Yoga 9i",
> ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP),
> + SND_PCI_QUIRK(0x17aa, 0x3813, "Lenovo Legion 7",
> ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),
> + SND_PCI_QUIRK(0x17aa, 0x3852, "Lenovo Yoga 7 14ITL5",
> ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
> 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, 0x3978, "Lenovo B50-70",
> ALC269_FIXUP_DMIC_THINKPAD_ACPI),
> diff --git a/sound/pci/hda/yoga7_14itl5_coefs.c
> b/sound/pci/hda/yoga7_14itl5_coefs.c
> new file mode 100644
> index 000000000000..a437fe042a1d
> --- /dev/null
> +++ b/sound/pci/hda/yoga7_14itl5_coefs.c
> @@ -0,0 +1,29 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/* Fixes for Lenovo Yoga 7 14ITL5 speaker output. */
> +
> +static const struct hda_verb yoga7_14itl5_coefs[] = {
> +{0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x41 },
> +{0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x2 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x0 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x0 },
> +{0x20, 0x4b0, 0x20 },
> +
> +// set right speaker Yoga 7i.
> +{0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x46 },
> +
> +{0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0xc },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x0 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x2a },
> +{0x20, 0x4b0, 0x20 },
> +{0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x2 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x0 },
> +{0x20, AC_VERB_SET_PROC_COEF, 0x0 },
> +{0x20, 0x4b0, 0x20 },
> +{}
> +};
> +
More information about the Alsa-devel
mailing list