lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <335eb6d4-424e-43e5-8990-3d87ad579e7c@opensource.cirrus.com>
Date: Mon, 15 Apr 2024 10:55:33 +0100
From: Stefan Binding <sbinding@...nsource.cirrus.com>
To: ArcticLampyrid <ArcticLampyrid@...look.com>, <james.schulman@...rus.com>,
        <david.rhodes@...rus.com>, <rf@...nsource.cirrus.com>
CC: <patches@...nsource.cirrus.com>, <linux-sound@...r.kernel.org>,
        <linux-kernel@...r.kernel.org>, <stable@...r.kernel.org>
Subject: Re: [PATCH] ALSA: hda/realtek: Fix internal speakers for Legion
 Y9000X 2022 IAH7

Hi,

On 13/04/2024 14:07, ArcticLampyrid wrote:
> This fixes the sound not working from internal speakers on
> Lenovo Legion Y9000X 2022 IAH7 models.
>
> Signed-off-by: ArcticLampyrid <ArcticLampyrid@...look.com>
> Cc: <stable@...r.kernel.org>
> ---
>   sound/pci/hda/cs35l41_hda_property.c | 17 +++++++++++++++++
>   sound/pci/hda/patch_realtek.c        |  1 +
>   2 files changed, 18 insertions(+)
>
> diff --git a/sound/pci/hda/cs35l41_hda_property.c b/sound/pci/hda/cs35l41_hda_property.c
> index 8fb688e41..244e41d51 100644
> --- a/sound/pci/hda/cs35l41_hda_property.c
> +++ b/sound/pci/hda/cs35l41_hda_property.c
> @@ -109,6 +109,7 @@ static const struct cs35l41_config cs35l41_config_table[] = {
>   	{ "10431F1F", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 0, 0, 0 },
>   	{ "10431F62", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 0, 0, 0 },
>   	{ "10433A60", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
> +	{ "17AA386E", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 0, 0, 0 },

According to the ACPI that I have access to, this is not correct - the 
Speaker ID is on index 2 not index 1.
Index 1 has a reference to the interrupt line. Therefore this should be:

	{ "17AA386E", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 2, -1, 0, 0, 0 },

>   	{ "17AA386F", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, -1, -1, 0, 0, 0 },
>   	{ "17AA3877", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 0, 0, 0 },
>   	{ "17AA3878", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 0, 0, 0 },
> @@ -414,6 +415,21 @@ static int lenovo_legion_no_acpi(struct cs35l41_hda *cs35l41, struct device *phy
>   	return 0;
>   }
>   
> +/*
> + * Some devices just have a single interrupt line for multiple amps, for which we
> + * should just register the interrupt for the first amp. Otherwise, we would meet EBUSY
> + * when registering the interrupt for the second amp.
> + */
> +static int single_interrupt_dsd_config(struct cs35l41_hda *cs35l41, struct device *physdev, int id,
> +			       const char *hid)
> +{
> +	generic_dsd_config(cs35l41, physdev, id, hid);
> +	if (id != 0x40) {
> +		cs35l41->hw_cfg.gpio2.func = CS35L41_NOT_USED;
> +	}
> +	return 0;
> +}
> +

According to the schematics I have access to, both amps have a reset 
line. The reason for any issue you see may be
because you have assigned the speaker id for the interrupt gpio in ACPI 
as mentioned above.

Thanks,

Stefan

>   struct cs35l41_prop_model {
>   	const char *hid;
>   	const char *ssid;
> @@ -500,6 +516,7 @@ static const struct cs35l41_prop_model cs35l41_prop_model_table[] = {
>   	{ "CSC3551", "10431F1F", generic_dsd_config },
>   	{ "CSC3551", "10431F62", generic_dsd_config },
>   	{ "CSC3551", "10433A60", generic_dsd_config },
> +	{ "CSC3551", "17AA386E", single_interrupt_dsd_config },
>   	{ "CSC3551", "17AA386F", generic_dsd_config },
>   	{ "CSC3551", "17AA3877", generic_dsd_config },
>   	{ "CSC3551", "17AA3878", generic_dsd_config },
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index cdcb28aa9..ac729187f 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -10382,6 +10382,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
>   	SND_PCI_QUIRK(0x17aa, 0x3853, "Lenovo Yoga 7 15ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
>   	SND_PCI_QUIRK(0x17aa, 0x3855, "Legion 7 16ITHG6", ALC287_FIXUP_LEGION_16ITHG6),
>   	SND_PCI_QUIRK(0x17aa, 0x3869, "Lenovo Yoga7 14IAL7", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
> +	SND_PCI_QUIRK(0x17aa, 0x386e, "Legion Y9000X 2022 IAH7", ALC287_FIXUP_CS35L41_I2C_2),
>   	SND_PCI_QUIRK(0x17aa, 0x386f, "Legion 7i 16IAX7", ALC287_FIXUP_CS35L41_I2C_2),
>   	SND_PCI_QUIRK(0x17aa, 0x3870, "Lenovo Yoga 7 14ARB7", ALC287_FIXUP_YOGA7_14ARB7_I2C),
>   	SND_PCI_QUIRK(0x17aa, 0x3877, "Lenovo Legion 7 Slim 16ARHA7", ALC287_FIXUP_CS35L41_I2C_2),

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ