From nobody Thu Sep 24 20:34:28 2026 Received: from forward500a.mail.yandex.net (forward500a.mail.yandex.net [178.154.239.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 18E2D2FD69D; Sun, 20 Sep 2026 09:28:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.154.239.80 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789896529; cv=none; b=AaUCs3Nc4/SXtDzqFpeHaGCckjG7nrCByTs6G58Gyjv+OuiCqqFc5dJ8k0LunaheCk7c15xk2BDlCAeIoD6bt8RmbNCoRby5yQ551cppvlQJe0ktAJUTWLJ/lEH2BgHUkyGewv6h1hsvxbzzGjIBC9PPKbR64asWn6NXAG/TMYA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789896529; c=relaxed/simple; bh=oNyKHqjyScwXJJQ7Ewot/NDNXH3zuT7+mWkU2535y+Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gqdiTf4xfdFAziIM8E7uxoUkluEFa7yyQt3WyaSDR4jp1RDhYxmrBfpjkojpwYc0HNCkRACGm7FNKymSJVdL2Sdhzok+0LlkdP1clRdqpdV+xvczQkr8k2PnvHQylQbfgrh4hUl450USnB5bVj7IpHucQeeAQaFytQrvevPnL1Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ya.ru; spf=pass smtp.mailfrom=ya.ru; dkim=pass (1024-bit key) header.d=ya.ru header.i=@ya.ru header.b=Y0FK9qEj; arc=none smtp.client-ip=178.154.239.80 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ya.ru Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ya.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ya.ru header.i=@ya.ru header.b="Y0FK9qEj" Received: from mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net [IPv6:2a02:6b8:c0f:39a:0:640:15c4:0]) by forward500a.mail.yandex.net (postfix) with ESMTPS id 1E8B3C147B; Sun, 20 Sep 2026 12:28:37 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net (smtp) with ESMTPSA id ASVxuRVdNKo0-nUWTg5CF; Sun, 20 Sep 2026 12:28:36 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ya.ru; s=mail; t=1789896516; bh=36ZUbDZxVroSbV9v3Xm3HcYk31AN564Ob58ZdtT80Dg=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=Y0FK9qEj4/ykuzWvXAyCQIoCAZy9sgXc+uS5RoPnztCfaUqcqFKcRgfKuMdoN9XRC nzqskoIH55JjuD9YPEeD1q/BuBlb9YeExgBcVIBC5UWVYD9U9/DakrsWmcY0w5zwUb q5fwtCr4h7IloV9QdJCA0nDF3lkVlUcBtOyJYndc= Authentication-Results: mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net; dkim=pass header.i=@ya.ru From: Ilya Pavlukhin To: Takashi Iwai Cc: Jaroslav Kysela , David Rhodes , Richard Fitzgerald , "Rafael J . Wysocki" , Len Brown , Hans de Goede , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , linux-sound@vger.kernel.org, patches@opensource.cirrus.com, linux-acpi@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/4] ACPI: scan: Add CLSA0102 to the serial bus ignore list Date: Sun, 20 Sep 2026 12:28:05 +0300 Message-ID: <20260920092808.17234-2-i.pavluhin@ya.ru> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260920092808.17234-1-i.pavluhin@ya.ru> References: <20260920092808.17234-1-i.pavluhin@ya.ru> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Lenovo Yoga Slim 7 Carbon 14ACN6 (82L0) describes the two CS35L41 amplifiers of its bass speakers as a single ACPI node, HID CLSA0102, with two I2cSerialBusV2 resources (0x40 and 0x41), like CLSA0100 and CLSA0101 on the Legion 7. Skip the default I2C enumeration so that serial-multi-instantiate can create a client for each amplifier. Link: https://bugzilla.kernel.org/show_bug.cgi?id=3D215632 Assisted-by: Claude Opus 5 Signed-off-by: Ilya Pavlukhin Acked-by: Rafael J. Wysocki (Intel) --- drivers/acpi/scan.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index f48715ed8..1d9698df9 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c @@ -1768,6 +1768,7 @@ static bool acpi_device_enumeration_by_parent(struct = acpi_device *device) /* Non-conforming _HID for Cirrus Logic already released */ {"CLSA0100", }, {"CLSA0101", }, + {"CLSA0102", }, /* * Some ACPI devs contain SerialBus resources even though they are not * attached to a serial bus at all. --=20 2.43.0 From nobody Thu Sep 24 20:34:28 2026 Received: from forward500a.mail.yandex.net (forward500a.mail.yandex.net [178.154.239.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D6090378D89; Sun, 20 Sep 2026 09:28:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.154.239.80 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789896530; cv=none; b=KGSV1VphVa50S3sAIK6Hc1rhqhSLDM9bId9C33Xf0sEvs6GNIEV+kpQ0X2t8HJXbegMq5+2vm1lkRySZj5a4VmAt7cr3A/2mwvf8tA50HbAV/9t507QU5qRkTWVVsLo1f3hovj05UkB5R+LsP6ZQgL8Y8Z9SXpvEs8gN5S91YlM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789896530; c=relaxed/simple; bh=12XGDR2rva/IpAWRYPi8umReSDWEYYybEMqmiKHU+8Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KVPtlheIY2ZLyza02f3RM82dn6yRQ42W5FVGCSPBOLd7eRQbq8tujLbD9tSCINK7HR385FFd0OUGV2f3tnAeO4cVA9tVkLOqJj2CCjBLnAGNALzWer07LCOa0uFMfCCTIdxD6ETCHpQ7nT+QC4cIQI4Ix8WwOaOnQuCi4ZGdSYs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ya.ru; spf=pass smtp.mailfrom=ya.ru; dkim=pass (1024-bit key) header.d=ya.ru header.i=@ya.ru header.b=Qz2/LxYs; arc=none smtp.client-ip=178.154.239.80 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ya.ru Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ya.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ya.ru header.i=@ya.ru header.b="Qz2/LxYs" Received: from mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net [IPv6:2a02:6b8:c0f:39a:0:640:15c4:0]) by forward500a.mail.yandex.net (postfix) with ESMTPS id 075F6C1495; Sun, 20 Sep 2026 12:28:40 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net (smtp) with ESMTPSA id ASVxuRVdNKo0-YpQIcxqA; Sun, 20 Sep 2026 12:28:39 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ya.ru; s=mail; t=1789896519; bh=1zTjRZSG/PDuJdZoELM+FvZytFL3+esKxf73oey3Jdo=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=Qz2/LxYsdo/hR4c3z5FYscQ6/+1E1uEodrnHDYD4MqWMPHETJ2Nw30Zn+QurluOyN lAXIY1VMjm2062aT7jMGOmHAAbc6TjmT/fml0rfqBptAmxmeW/cvXr8IqMrYrdbk7Z umLBj19Rd0BCw9W8keSPJTTeOGxVO7QumqHhihVk= Authentication-Results: mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net; dkim=pass header.i=@ya.ru From: Ilya Pavlukhin To: Takashi Iwai Cc: Jaroslav Kysela , David Rhodes , Richard Fitzgerald , "Rafael J . Wysocki" , Len Brown , Hans de Goede , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , linux-sound@vger.kernel.org, patches@opensource.cirrus.com, linux-acpi@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/4] platform/x86: serial-multi-instantiate: Add CLSA0102 Date: Sun, 20 Sep 2026 12:28:06 +0300 Message-ID: <20260920092808.17234-3-i.pavluhin@ya.ru> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260920092808.17234-1-i.pavluhin@ya.ru> References: <20260920092808.17234-1-i.pavluhin@ya.ru> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Instantiate both CS35L41 amplifiers of the CLSA0102 node found on the Lenovo Yoga Slim 7 Carbon 14ACN6 (82L0), the same way as for CLSA0100 and CLSA0101. Link: https://bugzilla.kernel.org/show_bug.cgi?id=3D215632 Assisted-by: Claude Opus 5 Signed-off-by: Ilya Pavlukhin --- drivers/platform/x86/serial-multi-instantiate.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/platform/x86/serial-multi-instantiate.c b/drivers/plat= form/x86/serial-multi-instantiate.c index 3e89fcdd4..d535025a3 100644 --- a/drivers/platform/x86/serial-multi-instantiate.c +++ b/drivers/platform/x86/serial-multi-instantiate.c @@ -426,6 +426,7 @@ static const struct acpi_device_id smi_acpi_ids[] =3D { /* Non-conforming _HID for Cirrus Logic already released */ { "CLSA0100", (unsigned long)&cs35l41_hda }, { "CLSA0101", (unsigned long)&cs35l41_hda }, + { "CLSA0102", (unsigned long)&cs35l41_hda }, { } }; MODULE_DEVICE_TABLE(acpi, smi_acpi_ids); --=20 2.43.0 From nobody Thu Sep 24 20:34:28 2026 Received: from forward500a.mail.yandex.net (forward500a.mail.yandex.net [178.154.239.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D214C242D97; Sun, 20 Sep 2026 09:28:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.154.239.80 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789896533; cv=none; b=du3vr7ikn1wx08YUEskvXx3FuXqfCdMfOjAsRzf0erxvzNYhuGNLPB84BZbrJ0TXDg4egvVu6fqCWN7De7x+CPYPXTWWbLe0OEUZMiOveAqbkWPHb2xLjWU1UUcOiDuWzIdvuJatoLUNiikTfZS5ozI+hZ1bStwFFQ8MOj2Jl6Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789896533; c=relaxed/simple; bh=hgwPJRIczXoFYJijp2g4Y8z8LtCYgQWJfBQrybGU1Oc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bP148XQlT0hxcTGTN5CJV4CMIyX84iI/naJ/OPckvnsvQ5YBPVe76pxv93e/9JZgrqEWPVIKihgrhAFH0Uf9Y33AagLVkgAMLmIjwcKVa7gj7ejayJ/5nDZo4pn6AJBkMsqRIf661pLQhxhgDqsvGt1ZSHkM5YR0dRmHE6DE6d8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ya.ru; spf=pass smtp.mailfrom=ya.ru; dkim=pass (1024-bit key) header.d=ya.ru header.i=@ya.ru header.b=C5dXQNLm; arc=none smtp.client-ip=178.154.239.80 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ya.ru Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ya.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ya.ru header.i=@ya.ru header.b="C5dXQNLm" Received: from mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net [IPv6:2a02:6b8:c0f:39a:0:640:15c4:0]) by forward500a.mail.yandex.net (postfix) with ESMTPS id 62832C14B9; Sun, 20 Sep 2026 12:28:42 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net (smtp) with ESMTPSA id ASVxuRVdNKo0-jvq4vgGb; Sun, 20 Sep 2026 12:28:41 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ya.ru; s=mail; t=1789896522; bh=xTyNvZgw1mxOYgf4UvrUhQwzHZVZ2OBTnlIpeAnubEA=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=C5dXQNLm6/Ahufk0GOCSBgI1wx7hmK2mYwm0D/AvNaECMNcU80a2UNoAKEbMX95lH U8V82OtK6efa03bHf/KBsApJJ8AGq4964Kni9dS87+312K+iXfpl0BtpCUcahrZTrY Ezp3DzWiIRtxaJBH0xciaEb4N/5zQSvieqIGncvw= Authentication-Results: mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net; dkim=pass header.i=@ya.ru From: Ilya Pavlukhin To: Takashi Iwai Cc: Jaroslav Kysela , David Rhodes , Richard Fitzgerald , "Rafael J . Wysocki" , Len Brown , Hans de Goede , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , linux-sound@vger.kernel.org, patches@opensource.cirrus.com, linux-acpi@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/4] ALSA: hda: cs35l41: Add support for CLSA0102 Date: Sun, 20 Sep 2026 12:28:07 +0300 Message-ID: <20260920092808.17234-4-i.pavluhin@ya.ru> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260920092808.17234-1-i.pavluhin@ya.ru> References: <20260920092808.17234-1-i.pavluhin@ya.ru> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Lenovo Yoga Slim 7 Carbon 14ACN6 (82L0) drives its bass speakers with two CS35L41 amplifiers, described by ACPI HID CLSA0102 without a _DSD. The node has the same layout as CLSA0100/CLSA0101: both amps in one node, reset on GPIO index 0 and the interrupt on a GpioInt. Unlike the Legion 7 there is no speaker ID GPIO, index 2 is the interrupt line. The Windows driver runs the amps from an external VSPK supply (ExternalVspkControl, boost converter disabled), so use CS35L41_EXT_BOOST with the VSPK switch on GPIO1. With the internal boost converter enabled the amps report "Amp short error" during playback. There is no _SUB in the ACPI node, so the firmware files are looked up by the codec SSID, 17aa3856. Link: https://bugzilla.kernel.org/show_bug.cgi?id=3D215632 Assisted-by: Claude Opus 5 Signed-off-by: Ilya Pavlukhin --- .../hda/codecs/side-codecs/cs35l41_hda_i2c.c | 3 ++ .../codecs/side-codecs/cs35l41_hda_property.c | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/sound/hda/codecs/side-codecs/cs35l41_hda_i2c.c b/sound/hda/cod= ecs/side-codecs/cs35l41_hda_i2c.c index fdf406e92..59b82238f 100644 --- a/sound/hda/codecs/side-codecs/cs35l41_hda_i2c.c +++ b/sound/hda/codecs/side-codecs/cs35l41_hda_i2c.c @@ -23,6 +23,8 @@ static int cs35l41_hda_i2c_probe(struct i2c_client *clt) device_name =3D "CLSA0100"; else if (strstr(dev_name(&clt->dev), "CLSA0101")) device_name =3D "CLSA0101"; + else if (strstr(dev_name(&clt->dev), "CLSA0102")) + device_name =3D "CLSA0102"; else if (strstr(dev_name(&clt->dev), "CSC3551")) device_name =3D "CSC3551"; else @@ -45,6 +47,7 @@ static const struct i2c_device_id cs35l41_hda_i2c_id[] = =3D { static const struct acpi_device_id cs35l41_acpi_hda_match[] =3D { {"CLSA0100", 0 }, {"CLSA0101", 0 }, + {"CLSA0102", 0 }, {"CSC3551", 0 }, {} }; diff --git a/sound/hda/codecs/side-codecs/cs35l41_hda_property.c b/sound/hd= a/codecs/side-codecs/cs35l41_hda_property.c index 416d7bf3e..c4f2bbed0 100644 --- a/sound/hda/codecs/side-codecs/cs35l41_hda_property.c +++ b/sound/hda/codecs/side-codecs/cs35l41_hda_property.c @@ -439,6 +439,33 @@ static int lenovo_legion_no_acpi(struct cs35l41_hda *c= s35l41, struct device *phy return 0; } =20 +/* + * Device CLSA0102 (Lenovo Yoga Slim 7 Carbon 14ACN6) has the same ACPI la= yout as CLSA010(0/1): + * no _DSD, both amps in one node, reset on GPIO index 0. It has no speake= r ID GPIO, the + * interrupt GPIO sits at index 2. The speakers use an external VSPK suppl= y switched by GPIO1 + * (the Windows driver sets ExternalVspkControl and keeps the boost conver= ter off). + */ +static int lenovo_yoga_slim7_carbon_no_acpi(struct cs35l41_hda *cs35l41, s= truct device *physdev, + int id, const char *hid) +{ + struct cs35l41_hw_cfg *hw_cfg =3D &cs35l41->hw_cfg; + + /* check I2C address to assign the index */ + cs35l41->index =3D id =3D=3D 0x40 ? 0 : 1; + cs35l41->channel_index =3D 0; + cs35l41->reset_gpio =3D gpiod_get_index(physdev, NULL, 0, GPIOD_OUT_HIGH); + cs35l41->speaker_id =3D -ENOENT; + hw_cfg->spk_pos =3D cs35l41->index; + hw_cfg->bst_type =3D CS35L41_EXT_BOOST; + hw_cfg->gpio1.func =3D CS35l41_VSPK_SWITCH; + hw_cfg->gpio1.valid =3D true; + hw_cfg->gpio2.func =3D CS35L41_INTERRUPT; + hw_cfg->gpio2.valid =3D true; + hw_cfg->valid =3D true; + + return 0; +} + static int missing_speaker_id_gpio2(struct cs35l41_hda *cs35l41, struct de= vice *physdev, int id, const char *hid) { @@ -463,6 +490,7 @@ struct cs35l41_prop_model { static const struct cs35l41_prop_model cs35l41_prop_model_table[] =3D { { "CLSA0100", NULL, lenovo_legion_no_acpi }, { "CLSA0101", NULL, lenovo_legion_no_acpi }, + { "CLSA0102", NULL, lenovo_yoga_slim7_carbon_no_acpi }, { "CSC3551", "10251826", generic_dsd_config }, { "CSC3551", "1025182C", generic_dsd_config }, { "CSC3551", "10251844", generic_dsd_config }, --=20 2.43.0 From nobody Thu Sep 24 20:34:28 2026 Received: from forward500a.mail.yandex.net (forward500a.mail.yandex.net [178.154.239.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6B1C53DD516; Sun, 20 Sep 2026 09:28:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.154.239.80 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789896529; cv=none; b=LAMMiASdDwPjEdnu0ZY/QTSm5nGF7LvOzuZSPR7T002mJSn/x8kjv1w3lsiQAQZhizpHPMlnu6G3JYVZ7CqtwA3x8aLrlZM1AjEb0nVzK7B+TxkPbDh5AB4K/KlML4uLsMcmeAEqJ0rJ7hDf8+2iGf5c7S11v4D5ZuyJLBu9ZwM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789896529; c=relaxed/simple; bh=yTyBEhS1q5MXbENk9f9ENQ3RJtDy/Bwr+H2KpU42fAs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZiuXZP9UQY8BxXh0YsLnB/HLSKIRe1JH6FryHuiOfFFFfe9evDrJxBPW4fmew8oaOj4veS9BXn1TlTdL7Iet7ukIOXA24yluUKtpOfKJoEbz8gJ5aB7Gov/qUkO7VT1TShf/KRqsS6iC43KAFn2qGkVcBQD8bNzH5P85unsiUOQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ya.ru; spf=pass smtp.mailfrom=ya.ru; dkim=pass (1024-bit key) header.d=ya.ru header.i=@ya.ru header.b=gmoyDYR7; arc=none smtp.client-ip=178.154.239.80 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ya.ru Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ya.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ya.ru header.i=@ya.ru header.b="gmoyDYR7" Received: from mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net [IPv6:2a02:6b8:c0f:39a:0:640:15c4:0]) by forward500a.mail.yandex.net (postfix) with ESMTPS id 80292C14C7; Sun, 20 Sep 2026 12:28:44 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net (smtp) with ESMTPSA id ASVxuRVdNKo0-9P9dmTN4; Sun, 20 Sep 2026 12:28:44 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ya.ru; s=mail; t=1789896524; bh=7uHzFs83OInMmuS6bd4a8PZ6o8dGwYn0VYGOPrrY8u8=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=gmoyDYR70lhI/z+glkASSC4VTllnBMnW5eRzDdRkDEw6ynJ6Wxp9tRMy3aRra0xl/ hNJfQFk5AkABT+aHbtIWgfY6v+eIDoBGkbncbhcGcrlVdScaOz7gfYwsho5BMSmIGD Syk0nfbTeozUwmjxmx7ZWvgHv8ry4syZpL4XahlI= Authentication-Results: mail-nwsmtp-smtp-production-main-84.vla.yp-c.yandex.net; dkim=pass header.i=@ya.ru From: Ilya Pavlukhin To: Takashi Iwai Cc: Jaroslav Kysela , David Rhodes , Richard Fitzgerald , "Rafael J . Wysocki" , Len Brown , Hans de Goede , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , linux-sound@vger.kernel.org, patches@opensource.cirrus.com, linux-acpi@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/4] ALSA: hda/realtek: Add quirk for Lenovo Yoga Slim 7 Carbon 14ACN6 Date: Sun, 20 Sep 2026 12:28:08 +0300 Message-ID: <20260920092808.17234-5-i.pavluhin@ya.ru> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260920092808.17234-1-i.pavluhin@ya.ru> References: <20260920092808.17234-1-i.pavluhin@ya.ru> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The bass speakers of the Lenovo Yoga Slim 7 Carbon 14ACN6 (82L0) are driven by two CS35L41 amplifiers, fed over I2S by the ALC287. The codec only clocks the I2S bus while pin 0x17 is enabled, but the BIOS reports the pin as unconnected (0x411111f0). The amplifiers then never see a clock and fail to power up: cs35l41-hda i2c-CLSA0102:00-cs35l41-hda.0: Enable(1) failed: -110 Configure pin 0x17 as a speaker and keep it on DAC 0x02 together with pin 0x14: with DAC 0x06 the path is powered down during stereo playback, which stops the clock again. Then bind the two CS35L41 amplifiers. The PCI SSID of this machine is 17aa:0000, so match on the codec SSID. Link: https://bugzilla.kernel.org/show_bug.cgi?id=3D215632 Assisted-by: Claude Opus 5 Signed-off-by: Ilya Pavlukhin --- sound/hda/codecs/realtek/alc269.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/a= lc269.c index 8f55c3c00..7856c92df 100644 --- a/sound/hda/codecs/realtek/alc269.c +++ b/sound/hda/codecs/realtek/alc269.c @@ -3448,6 +3448,28 @@ static void alc287_fixup_legion_16ithg6_speakers(str= uct hda_codec *cdc, const st comp_generic_fixup(cdc, action, "i2c", "CLSA0101", "-%s:00-cs35l41-hda.%d= ", 2); } =20 +static void alc287_fixup_yoga_slim7_carbon_speakers(struct hda_codec *cdc, + const struct hda_fixup *fix, int action) +{ + /* + * The bass speakers are driven by two CS35L41 amps fed over I2S. The cod= ec only + * clocks the I2S bus while pin 0x17 is enabled, but the BIOS marks it un= connected. + * Keep the pin on DAC 0x02 with the other speakers: DAC 0x06 gets powere= d down + * with stereo streams, which stops the clock and the amps fail to power = up. + */ + static const struct hda_pintbl pincfgs[] =3D { + { 0x17, 0x90170121 }, + { } + }; + static const hda_nid_t conn[] =3D { 0x02 }; + + if (action =3D=3D HDA_FIXUP_ACT_PRE_PROBE) { + snd_hda_apply_pincfgs(cdc, pincfgs); + snd_hda_override_conn_list(cdc, 0x17, ARRAY_SIZE(conn), conn); + } + comp_generic_fixup(cdc, action, "i2c", "CLSA0102", "-%s:00-cs35l41-hda.%d= ", 2); +} + static void alc285_fixup_asus_ga403u(struct hda_codec *cdc, const struct h= da_fixup *fix, int action) { /* @@ -4328,6 +4350,7 @@ enum { ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE, ALC295_FIXUP_FRAMEWORK_LAPTOP_LIMIT_INT_MIC_BOOST, ALC287_FIXUP_LEGION_16ITHG6, + ALC287_FIXUP_YOGA_SLIM7_CARBON_SPEAKERS, ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK, ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN, ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN, @@ -6690,6 +6713,10 @@ static const struct hda_fixup alc269_fixups[] =3D { .type =3D HDA_FIXUP_FUNC, .v.func =3D alc287_fixup_legion_16ithg6_speakers, }, + [ALC287_FIXUP_YOGA_SLIM7_CARBON_SPEAKERS] =3D { + .type =3D HDA_FIXUP_FUNC, + .v.func =3D alc287_fixup_yoga_slim7_carbon_speakers, + }, [ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK] =3D { .type =3D HDA_FIXUP_VERBS, .v.verbs =3D (const struct hda_verb[]) { @@ -8182,6 +8209,7 @@ static const struct hda_quirk alc269_fixup_tbl[] =3D { SND_PCI_QUIRK(0x17aa, 0x3852, "Lenovo Yoga 7 14ITL5", ALC287_FIXUP_YOGA7_= 14ITL_SPEAKERS), 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_16I= THG6), + HDA_CODEC_QUIRK(0x17aa, 0x3856, "Lenovo Yoga Slim 7 Carbon 14ACN6", ALC28= 7_FIXUP_YOGA_SLIM7_CARBON_SPEAKERS), SND_PCI_QUIRK(0x17aa, 0x3862, "Lenovo IdeaPad Slim 3 15ABR8", ALC269_FIXU= P_LIMIT_INT_MIC_BOOST), SND_PCI_QUIRK(0x17aa, 0x3865, "Lenovo 13X", ALC287_FIXUP_CS35L41_I2C_2), SND_PCI_QUIRK(0x17aa, 0x3866, "Lenovo 13X", ALC287_FIXUP_CS35L41_I2C_2), --=20 2.43.0