From nobody Tue Apr 7 18:45:35 2026 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) (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 776903F074C; Fri, 27 Feb 2026 13:02:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.152.168 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772197355; cv=fail; b=sg5zWiWKU2EZBhkXtGdFk8rTRlRxCvmYU4BE5Z65HsDscEwynzuxuRHKGsx4rOgyipi+aSVAdjJGuzbMh623PX7BYs74Ef8c+xNYsyFwxYnK1BMLNc3hvjcWlHUDsasQ/nrzAEva6+DQL4MOpKAdlDMmdWE9ZBcs8TTqh6fcK58= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772197355; c=relaxed/simple; bh=1jW6eOYZF2grhiSwbdcuTGtwj2ZqQCyYdJVcDxYxssQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Ho1rPTjGmgm0kH/fgKT2/EodxbYxCeAE0bq0z5lig/0FALd+HNAuHjYu/qThpKWStHJURRh70bjkX073YxLDpLRWJe87liMGUW3RS8jkc5w4IZtV0HGCQIMXV0F967x2jCS4fHZ0F+2Jp2bhxIJfltu6sONAfbf1pXpRrdtzdYM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=opensource.cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=EIFSdnZs; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=ZfeAWPQe; arc=fail smtp.client-ip=67.231.152.168 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="EIFSdnZs"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="ZfeAWPQe" Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61RCxKsi3721156; Fri, 27 Feb 2026 07:02:18 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= PODMain02222019; bh=2ghMa5df0xnW+POQh3/72KS6t9oRcQnW3hhL/BwPp6A=; b= EIFSdnZsBJ/nc4vYR1JEO3spZhXrqLGomqi236usvB7zNqOR4qE/Cn71E0svIevI djP7thSR6cbbW/k2+k/f931vHZpwDDx/xO0Xho7uO8RX2EF6W038QbLFkkXlWSrX FiO2xOk/4s+ws135ReHpzFOwCCTX6/QDlnhXSNb58PA/PHrX4FIz0YVktBsAUqvX V1XmZ192A9uF5LVQho5MVkXk5UCEy2WirAGXDVn9Q95cQoGbBwXe0pLBdIRwK9IZ NzhZnwQ988HoYLsqSjHC8d9tgY2+Z2A6Rs3+fm6HVS//R2/EhVJS72m/UGevwS5A SC0gjEUpc/LJ4D/SUb6Q5A== Received: from ph7pr06cu001.outbound.protection.outlook.com (mail-westus3azon11020112.outbound.protection.outlook.com [52.101.201.112]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 4cfa0j76c4-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 27 Feb 2026 07:02:18 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OzbrMDqAmSphYWIQGIJIvXN2H3AssGbYxZECbyE+g5Y+GQTCh8W6eD9n03MVXNt+e8EfavOtJZCPZqJt9KMkjwjwQriKPo6KuDhJbWWtyFr05wdGUzz48NjMSLtbtjlrzs0W+lwQUrqRNfJDGU+qOnsVCfskMwaBjkc2wVs7eFsfHj4YTLtPbTZLJFA4aC7WoQfTWHTD91j6O1UDi0FTOuo/QgWF6iLDurmOi/XAmw+O5t25a8qKv6kLyUb68m8DKtgu8u4d6mPFe8AGU4ySmh0M1TDElvd5V7nRngglt4FPlN5AfKhlAJXN7StAZ3o+VusVNufEZgkLvHovmOg7xw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2ghMa5df0xnW+POQh3/72KS6t9oRcQnW3hhL/BwPp6A=; b=wxgVu1ibnpkhqxPs3ySl33c2JzL6FZEYsJiVjzD7kyKIhs32VXfJyGHtg1Q4hka1Saf7wD3yDQ9IzjSwUIys7qFut6hucdWJup+Vv+KxG+sx8pwW4Ri3VPmWG8f0PCGrAxfGj/nW9qDYJgkjXQkj+FwtKIcqlmavVL+ShfXkjmCmsF12W+zHY192WukwzdJU2AOSeJnBWQ2E9HVHDImoiZL0AA4qSSBt2+Z9eYp9DghzhqzVAEzxnfbc8KS9xvhnKZSBE2HFTUy72qL7WX7kYSXj53oWuStdaUmIX7k/OEXetZkpFO4CToFo0UXUa1qEriTWacIXhtHypPBuchzGeQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=opensource.cirrus.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=opensource.cirrus.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus4.onmicrosoft.com; s=selector2-cirrus4-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2ghMa5df0xnW+POQh3/72KS6t9oRcQnW3hhL/BwPp6A=; b=ZfeAWPQeY1bQMFWqNdakm/ElQjRjRpgphCs3gFPoJXwkd03FWdnvV/CClZkflkASHy1sISejRrRZVRtL/EMP034P8VV2nTEKmxMqKBiMVqCU8Eo/JMKumiUkQlQyeMXQBk0Dkppsj96JWsgIPaKp2iDkvRPEqgdmgu9MliVtQo0= Received: from SN7PR04CA0025.namprd04.prod.outlook.com (2603:10b6:806:f2::30) by MW4PR19MB6794.namprd19.prod.outlook.com (2603:10b6:303:207::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.14; Fri, 27 Feb 2026 13:02:15 +0000 Received: from SA2PEPF00003F63.namprd04.prod.outlook.com (2603:10b6:806:f2:cafe::75) by SN7PR04CA0025.outlook.office365.com (2603:10b6:806:f2::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.27 via Frontend Transport; Fri, 27 Feb 2026 13:02:14 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: Fail (protection.outlook.com: domain of opensource.cirrus.com does not designate 84.19.233.75 as permitted sender) receiver=protection.outlook.com; client-ip=84.19.233.75; helo=edirelay1.ad.cirrus.com; Received: from edirelay1.ad.cirrus.com (84.19.233.75) by SA2PEPF00003F63.mail.protection.outlook.com (10.167.248.38) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9654.16 via Frontend Transport; Fri, 27 Feb 2026 13:02:14 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id AC9A3406543; Fri, 27 Feb 2026 13:02:12 +0000 (UTC) Received: from ediswws03.ad.cirrus.com (ediswws03.ad.cirrus.com [198.90.208.11]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id 70925820257; Fri, 27 Feb 2026 13:02:12 +0000 (UTC) From: Maciej Strozek To: Mark Brown , Takashi Iwai , Lee Jones , Krzysztof Kozlowski Cc: Jaroslav Kysela , Bard Liao , Peter Ujfalusi , linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, patches@opensource.cirrus.com, devicetree@vger.kernel.org, Maciej Strozek Subject: [PATCH v4 RESEND 1/4] ASoC: sdw_utils: Add CS42L43B codec info Date: Fri, 27 Feb 2026 13:00:58 +0000 Message-ID: <20260227130120.3070893-2-mstrozek@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260227130120.3070893-1-mstrozek@opensource.cirrus.com> References: <20260227130120.3070893-1-mstrozek@opensource.cirrus.com> 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 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA2PEPF00003F63:EE_|MW4PR19MB6794:EE_ X-MS-Office365-Filtering-Correlation-Id: d33c2143-2b63-479f-9c87-08de76006d92 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|61400799027|36860700013|7416014|376014|82310400026|54012099003; X-Microsoft-Antispam-Message-Info: 5g2t961+oTJD53GIqbfm70dVMC0hLeyekgiftKuh1+onHNFVvn2PjsCkI9SBE6wf1qnYxk7jbGLOI/nLEx2IEJ1m3K4z/UgOPZktSIXxMIzbmTXl4jQP+FDX619WTJCyCNRitcF7pWMpVsX5vsXhSdpGqxyTez3Gmdb8Yc5GC7Jz671a0jShvGh4RkrISxgej7V7wnXAXrdkQx1zOKxvMrQU9J41Z1n7Pw7CFmSAghRNPuIuGb84IKdROwCjOz9Mfa760Mi2ihbJ+EQLtUe4m5K4JtU+HxzIpciY7O39+VyLwQ4OSp8W4v1w7wZrade28WOpVRBBGAZ0Usp6LWl7IL2unWIqDG7oJ+1kMpeG1XHyUC6DSzLD0vrzUqmBQPngcL+IwDbiuDUGgHFPIlbeDJvGMtj+5irvEt2QnOd3amsUTdY+bLZ/C4ovoJtx8ETvbB+Glatm0rnctLfiWCAo/cd4aofOHud8YEDu31z34Qjn1UOF1OcHs9CT01bBSgzYAMbAxA8GsTlPpWMoDwsXJVUrIL7tRl7yFWRVjr/IvV5avOecglgORLKJjAcW7fEPngBR+qXnbbKa9ejBMtF6BL+/sDB+jbZkBQjpUAH3X2MCsWm2mCk9JzlxoKxxngKHG47P+Q+rIRTZfZUNUXmzlKmfNV1zQRAnjVWSrS9dhG1ig8yh0BPAuompAn5ME+9OrOox2HrF78sW9MqweTnzp6SXvxolI/QvQmtu2LPQsDlObQXcwrL4gtw/XUofFOoyZ79RvvXQ6Ak3GAOtCs9A14in9VPorvYWy8VS80lSVpUiXzszsjlmVfc6j62w0BMAWhCiMrH57rIrNRCamkwNgA== X-Forefront-Antispam-Report: CIP:84.19.233.75;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:edirelay1.ad.cirrus.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(61400799027)(36860700013)(7416014)(376014)(82310400026)(54012099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: EW2YWedkf+bhqcltoqMosoLrgV1Zv+iR7ydWPbiZtgXljGvOjSQClkP0bE2FrHjFQtpqWU5iUJlZaal+b+CWn54jP7EA3OoGrarVipAJsDIB5ilgVICEmlQyXChMx8mntzNFHeuXSkWeFWWcZljzZUpDfrYx6G+WPRoU71PUr6ym/bvFHvTWezJAEZjfpFO5EZrwX+xZKzqe3hvWCURXMnO6kscSlW4ImPj2LmqVQlvR5xL9DGUP42/PiUD6Pjz/cVk5xA3NJuFAQ2150lSraQO/HpMi2gF3nX6CBN8Dwqr+FM69Oz830sXX4VhJ+81WAxngDK1ejP7Al5eX+SN9eggg62NWof99+pfVf07/E94TN4J37c5TOX7RbcSkYpnoSqoztEa4gOU54dBOBB+CLQ8/6epiNDpUxANnEvGMnAN/47T0vPiyGhrRs7KbUHC/ X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2026 13:02:14.0814 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d33c2143-2b63-479f-9c87-08de76006d92 X-MS-Exchange-CrossTenant-Id: bec09025-e5bc-40d1-a355-8e955c307de8 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bec09025-e5bc-40d1-a355-8e955c307de8;Ip=[84.19.233.75];Helo=[edirelay1.ad.cirrus.com] X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TreatMessagesAsInternal-SA2PEPF00003F63.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR19MB6794 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI3MDExNSBTYWx0ZWRfXyKVd9nkq2atq /c8DQK/AsESaCKR4SDjcJ7QrM2SqxWoqyw82L/0rftIwmjmSHGLNBlj1eMVQ0iaSdCrAszaJ3CT IkzKFlZ5t7oFeHm8YLwD9aka7Nhic4U9dKD8KR6nHwZ8URaso/Txu7U+BNUVSvQizTYpX883jIg t2PPZ+sneMrKiAKpAMG2eZgavHh2rnT0VFZkljEuzcG97MzCdOknJnlLv3jOxvYAliQxj2pFcAz h4hCpR6wPRMZg/9oewF5kqqFX5CGndOFUNK0ataXMYtigmcjprsVlpm0jP9Z5tapZJT9SCUptnO AfK2KCmenora7AFybRf1KyfzlgyIKdpDMfzB0OsBCuixWjiZNvtx0O5cyLEE+qXXKdjdpncM6id rltgA/VEBNHm8lIo2KcpncyDG0wjDYd7mYW6CsIfBdWCA0B4Dg0xo9H3JgWuwgzom4Xqvt15USO nNZHWnp3fGnVvNpTMZA== X-Authority-Analysis: v=2.4 cv=Q/7fIo2a c=1 sm=1 tr=0 ts=69a195da cx=c_pps a=cE3fiHRxMl4nLvvI2vbFbA==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iX4cTi3TZMoOKdANLEfx:22 a=KfkQE9S9VqCBgivYGm0O:22 a=w1d2syhTAAAA:8 a=tJGs-QWwAZckUbUC11UA:9 X-Proofpoint-GUID: wC9pTNYpiar4wceaw8wNHbC_hKclkARb X-Proofpoint-ORIG-GUID: wC9pTNYpiar4wceaw8wNHbC_hKclkARb X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" Add codec_info for a new variant of CS42L43. It can resue existing info but needs a new part_id. Signed-off-by: Maciej Strozek --- No changes in v2, v3, v4 --- sound/soc/sdw_utils/soc_sdw_utils.c | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/sound/soc/sdw_utils/soc_sdw_utils.c b/sound/soc/sdw_utils/soc_= sdw_utils.c index eeeb91dded9da..15333d52e396b 100644 --- a/sound/soc/sdw_utils/soc_sdw_utils.c +++ b/sound/soc/sdw_utils/soc_sdw_utils.c @@ -723,6 +723,60 @@ struct asoc_sdw_codec_info codec_info_list[] =3D { }, .dai_num =3D 4, }, + { + .part_id =3D 0x2A3B, + .name_prefix =3D "cs42l43", + .count_sidecar =3D asoc_sdw_bridge_cs35l56_count_sidecar, + .add_sidecar =3D asoc_sdw_bridge_cs35l56_add_sidecar, + .dais =3D { + { + .direction =3D {true, false}, + .codec_name =3D "cs42l43-codec", + .dai_name =3D "cs42l43-dp5", + .dai_type =3D SOC_SDW_DAI_TYPE_JACK, + .dailink =3D {SOC_SDW_JACK_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID}, + .rtd_init =3D asoc_sdw_cs42l43_hs_rtd_init, + .controls =3D generic_jack_controls, + .num_controls =3D ARRAY_SIZE(generic_jack_controls), + .widgets =3D generic_jack_widgets, + .num_widgets =3D ARRAY_SIZE(generic_jack_widgets), + }, + { + .direction =3D {false, true}, + .codec_name =3D "cs42l43-codec", + .dai_name =3D "cs42l43-dp1", + .dai_type =3D SOC_SDW_DAI_TYPE_MIC, + .dailink =3D {SOC_SDW_UNUSED_DAI_ID, SOC_SDW_DMIC_DAI_ID}, + .rtd_init =3D asoc_sdw_cs42l43_dmic_rtd_init, + .widgets =3D generic_dmic_widgets, + .num_widgets =3D ARRAY_SIZE(generic_dmic_widgets), + .quirk =3D SOC_SDW_CODEC_MIC, + .quirk_exclude =3D true, + }, + { + .direction =3D {false, true}, + .codec_name =3D "cs42l43-codec", + .dai_name =3D "cs42l43-dp2", + .dai_type =3D SOC_SDW_DAI_TYPE_JACK, + .dailink =3D {SOC_SDW_UNUSED_DAI_ID, SOC_SDW_JACK_IN_DAI_ID}, + }, + { + .direction =3D {true, false}, + .codec_name =3D "cs42l43-codec", + .dai_name =3D "cs42l43-dp6", + .dai_type =3D SOC_SDW_DAI_TYPE_AMP, + .dailink =3D {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID}, + .init =3D asoc_sdw_cs42l43_spk_init, + .rtd_init =3D asoc_sdw_cs42l43_spk_rtd_init, + .controls =3D generic_spk_controls, + .num_controls =3D ARRAY_SIZE(generic_spk_controls), + .widgets =3D generic_spk_widgets, + .num_widgets =3D ARRAY_SIZE(generic_spk_widgets), + .quirk =3D SOC_SDW_CODEC_SPKR | SOC_SDW_SIDECAR_AMPS, + }, + }, + .dai_num =3D 4, + }, { .part_id =3D 0x4245, .name_prefix =3D "cs42l45", -- 2.47.3 From nobody Tue Apr 7 18:45:35 2026 Received: from mx0b-001ae601.pphosted.com (mx0a-001ae601.pphosted.com [67.231.149.25]) (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 E506B3F0765; Fri, 27 Feb 2026 13:02:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.149.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772197355; cv=fail; b=Z3SAKYya3MJyEdC4UHyxpJ6q/quR1ZO/lfrhzNjE7KOjObDdtc0KHF/oOmZELVepQvvkLsQfx0fkr0vplMGv5SPD9MUh6XYCGwEWUGIDHhjU3irKphKjQsPA45lXIh483JMEUXfnPElnhmO6eP4Do0nHIq1tOK7G1n/dppavv3w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772197355; c=relaxed/simple; bh=pkoPzOtpUNO6HUynnj1SaKZGhJN69/IrEFI0c0MyLRA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=fFxQKgsTMqkQYxCRiNnt4FMkVuVMCMZpdvxalUiGZU7JlPS1MxuSTIQTrTOkPbvWrYZJvMNvIc/Bkwd0QsfIR7psqF4NYnGYy/Pralsklr5U94V5QHSMHWCdUhygwY6J7pVHBlZ17tmxZUE7ZQQA6/eJ8IHwa4yCZr+jJweT2i4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=opensource.cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=f750Wuqb; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=uLUyTWQv; arc=fail smtp.client-ip=67.231.149.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="f750Wuqb"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="uLUyTWQv" Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61R86S0a2680887; Fri, 27 Feb 2026 07:02:21 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= PODMain02222019; bh=xUoKAk4gIbr8LqD0XOXVdM/gaDTPzywNDJ0Zjw8L8d0=; b= f750Wuqbr58RT2j90NE6mPuJtMNKUGKk9FYJhiZ/IBA6JGf8g+lnlRYZfyoMv/MV QiFKDg6DWi1Pb2dcO+OMzM35900TRv0cUCdayx+P0HxBDAk1CK8VUfQib9hkEYSm a4I8cEyFEhZpon+rD+P7KcD/jJjF3D0EcZodQs9JTZ/ycCafsSZcJCCuJbpcdRek SSCB+1qoKxHu318sVw3r/zw6kstbbGUVpk3JPwYHQOnesVwzswqZKfUd6vR8VzUH o9FF16nVCUeNUqKXaSfYnQfNMB+2+G9x1fez6bndgXbxUEO+FK9TIyTeXql9zIO4 654B6WcAR/PZPTmZI2/l0g== Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazon11023094.outbound.protection.outlook.com [40.107.201.94]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 4cjmds1fh5-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 27 Feb 2026 07:02:21 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nWeaqo9sAEt2e6s92AxE9rwieswEnyrpKw3TcEwH2SnoICYLmXST/tK4s1xd5E2jJ8bZ1KsGdMNZs02S3pvhamjpYVXBR5zTa5lcyfPq4+G+VODq/pQ2RVtkKrXCnDNCV/sSChT8Zhh95LqorKajRM4bFrHhNNHhUHdDLIpVuy41s+5wrARPiP8Ed/MdNlkmSM9mXa0RO5V84h8cym6hfSaJoZjXkWeU3ZinZckpBLnHAfbRic9HydQrM7cKuZ6/wbi6sNZyWpa9CevUgOJ0kNuo1caOCX9Rx3JjvR7Ht9vl7JcMiyclhTHZ9jj1c2dOZtz8qjFs9mJSjvhfPQ2seQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xUoKAk4gIbr8LqD0XOXVdM/gaDTPzywNDJ0Zjw8L8d0=; b=ANKBmRQvFhdcJ9D/0sTMKAWu+HH7+aZLDANrz0SgD/y7gE/RRirKpGoUhwNQGzD7sKxyb+kirilACenFat9f6vFSt+feNtQrR+5dsXHMLFQXCESI17duAUZBX9KXKxzChUCFElVvDC5w5nKpKiHXzJhmOgh53FdTSQ3UyI5KfDfeV/vpc5h94Yyg0EPbJwoA5Tb6Kt+0kYN5+6guOmWJafW7BrFZddwMY60AhFlRT98YXRAzKHLRmvFkXXhl4Arj7B61Pea12Zg9XDQ1XfqYCkuQUDoxnnOozsm7DrA/OS3gHQwrz07rs50C4/WZWqd/1Eemaaywqdwxv/LoCUEz8g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=opensource.cirrus.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=opensource.cirrus.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus4.onmicrosoft.com; s=selector2-cirrus4-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xUoKAk4gIbr8LqD0XOXVdM/gaDTPzywNDJ0Zjw8L8d0=; b=uLUyTWQv4XuRX8lxmSzqfS28OFRg6jSxY70qtln0hnedSE9vsW7El/NObfuVKq23RgCuWrlLI+HrRLfQQiN1uOC5Ky7ad4YW4FzEZOBuNwNp1zKNfUrThP4CNRpbDBK9WHokPt5KD6vQz1hpmRTKgX64XVyN+RGab70R83JjEAY= Received: from SN7PR04CA0003.namprd04.prod.outlook.com (2603:10b6:806:f2::8) by PH3PPF1B58125D8.namprd19.prod.outlook.com (2603:10b6:518:1::c09) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Fri, 27 Feb 2026 13:02:15 +0000 Received: from SA2PEPF00003F63.namprd04.prod.outlook.com (2603:10b6:806:f2:cafe::34) by SN7PR04CA0003.outlook.office365.com (2603:10b6:806:f2::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.27 via Frontend Transport; Fri, 27 Feb 2026 13:02:06 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: Fail (protection.outlook.com: domain of opensource.cirrus.com does not designate 84.19.233.75 as permitted sender) receiver=protection.outlook.com; client-ip=84.19.233.75; helo=edirelay1.ad.cirrus.com; Received: from edirelay1.ad.cirrus.com (84.19.233.75) by SA2PEPF00003F63.mail.protection.outlook.com (10.167.248.38) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9654.16 via Frontend Transport; Fri, 27 Feb 2026 13:02:14 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id AB615406542; Fri, 27 Feb 2026 13:02:12 +0000 (UTC) Received: from ediswws03.ad.cirrus.com (ediswws03.ad.cirrus.com [198.90.208.11]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id 755E6820258; Fri, 27 Feb 2026 13:02:12 +0000 (UTC) From: Maciej Strozek To: Mark Brown , Takashi Iwai , Lee Jones , Krzysztof Kozlowski Cc: Jaroslav Kysela , Bard Liao , Peter Ujfalusi , linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, patches@opensource.cirrus.com, devicetree@vger.kernel.org, Maciej Strozek , Krzysztof Kozlowski Subject: [PATCH v4 RESEND 2/4] ASoC: dt-bindings: cirrus,cs42l43: Add CS42L43B variant Date: Fri, 27 Feb 2026 13:00:59 +0000 Message-ID: <20260227130120.3070893-3-mstrozek@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260227130120.3070893-1-mstrozek@opensource.cirrus.com> References: <20260227130120.3070893-1-mstrozek@opensource.cirrus.com> 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 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA2PEPF00003F63:EE_|PH3PPF1B58125D8:EE_ X-MS-Office365-Filtering-Correlation-Id: eae3a8ae-9a53-4ee4-1343-08de76006d91 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|61400799027|7416014|376014|82310400026|36860700013|54012099003; X-Microsoft-Antispam-Message-Info: gYYYPBTVZCqkYnWfVnJH+F8pWMsoyFttMgJzbVb5/ZbyDHi59sGUlx+lFSZs/gHLFPck32AhKGNNLvp81ST0aanjziZO8tnV0QnNBYGhlRXRsZOo8TUUYGvyH+ri/Zha3iqEBlIDvbVcjeAH7WrnXL3EfHgKYwGFm9hhaYrJQh0gINwMqBIG54KrNju0FHY4Rg/NEOtzO/1hWnmfYNzmyu2Q+BQTzCyutPml3Q5m3m8h0r7b4kK+YfFW1XtPYQHmIRcLHN0IAiGTug2ZYWY+ZCYkh/TnoVQbKsaY7MNsPFACX4+l+P1kf9DGl/PJVOJieZkZmly9cGBohT+egBFbCoL8PheBs6a6kBbCH/Cjof/stwx14bW5raxl4IgZDmVM5rE93rZ+wjUX4O+/XLUAHU8Fr+meiN+8q0vq78Or44yiRHGeOcSW6nv02rtrp/YldKb39t9dssaMOkLB4VkDxo/IbszO5LrlFUwLRbl1LVoiqxuUDRH0ysbwPs4sQO20thZc5swOVKi4F0qbw920NU0P0WZTGno+KNZjUmW8hwHaSx86bl711qTt504x7srHJrsQsqTq0JOLFo89KP4a2J21K3AtFqc8r8kK0+maZT7q1UVUCAxEOu3b6AFiE3jjySd7ZZ+GArlKeUNUFMXoIcDxff7LpsbwT7a6Ti6/iNkCg3k46PTiOxZBqetGpG7EsB//5l+/zCfHUXfe9c9bv5Qg3ABUw3BmX12q/rUOG+KH2XsTECRg+vS6hbdXOc4dNLHtRFtNc2wR2V0MNV+Cmvl6RjPBOJjKY6S1ATrAZdAOlbCO1bOfF21wwKjjAukOkHS/NxYD1J/JC+wQitU7nw== X-Forefront-Antispam-Report: CIP:84.19.233.75;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:edirelay1.ad.cirrus.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(61400799027)(7416014)(376014)(82310400026)(36860700013)(54012099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: nfaMKexaLJgsqhNUqPqKiiNlwuQqeLk6lDFqjFNmgETZuvn0qoFhhiSLkXYSHSuIe+YaC6WBaaLm5sewetfwDst/7M5oJdL5vr5gt73sA/N6etN1/qN7/3d3CgaPKj3DmSBbk4ogczAeMAJLBtV01m3iIY1DJLN9RTJRtdWtqsb2ECNT9a50RU4XpSyjxg/pcfUwNecuXX2xehcdduqGmk7YhRVPlg22j/Pj3mQ5JVBcsxpBbKBZaTr+aalPNiJ1lQDwbYo53mDeDTgygXZLDxszkeGEnHTaOq+zBbsngR2irQS8b+Tx7+b31zGN7zPOPaj0+znEJBM8FZGJ8pCWtIWJ09RRldT5RLXKLVVlws2b9p+6rRWicrHHmEbrhG6AQDNlmu2PthyqkRFoOFY61Dg7LG5GorOhAWv/qRMYj6/y1szGZjlbr3O/U+KPLH2O X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2026 13:02:14.0709 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: eae3a8ae-9a53-4ee4-1343-08de76006d91 X-MS-Exchange-CrossTenant-Id: bec09025-e5bc-40d1-a355-8e955c307de8 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bec09025-e5bc-40d1-a355-8e955c307de8;Ip=[84.19.233.75];Helo=[edirelay1.ad.cirrus.com] X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TreatMessagesAsInternal-SA2PEPF00003F63.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF1B58125D8 X-Authority-Analysis: v=2.4 cv=dO2rWeZb c=1 sm=1 tr=0 ts=69a195dd cx=c_pps a=8Q3VSxVeqSVE8Qz93TfAXw==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iX4cTi3TZMoOKdANLEfx:22 a=Dj2-6B8FqX4mGL0U3gbX:22 a=EUspDBNiAAAA:8 a=w1d2syhTAAAA:8 a=aSH8VwKN-Jk11-2aqjcA:9 X-Proofpoint-GUID: PZMjqcYLdBhFjBNpaRFc0Nk3VK6FYyzw X-Proofpoint-ORIG-GUID: PZMjqcYLdBhFjBNpaRFc0Nk3VK6FYyzw X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI3MDExNCBTYWx0ZWRfX2QHip7aUaSNM OWPnSc/W9boDd1M0QiEwBlUcA2CXBWCrjcii2NwjQ6B8V5TbEAK9ZXtSDSN09buuSh4gN3xFvLQ lRCLDE83ZAGZqQN8df89uubK7Pp7irsna/jCC1ljhye+CATcUw1jBJ9tX+urwtj8zDDDXNUUd0V 1O1S7pRalZhvPUiEoepOo5U/TGgM08xQ9WJB+lLMDgsI2AaJj/0B6NVJQfQ0CAzvQ1RTmCb8O9p UTsXcDCMuxGU7QlE0aQTbqVbez2mW6r91Yj8/GvwpNqoqHeWSb+2Ic86fZEiBzJE6+yrnyEJi4B jyywsJ21Efk0FhpWs0yHVPWgZbFSyKq9yq2TnTPJ9pxbiikBXN7XiGyrW9B0fbQqEiVxtBN5uUL +t+s2JqcJowxKjVx42wLAUPZChjEtNEBvneVlENinGPkrfEv9DZCkFnkjcMyMNEwnzmG2JhI3Xl VHuzisZRsa3hVBegsXw== X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" CS42L43B variant adds dedicated PDM interface, SoundWire Clock Gearing support and more decimators to ISRCs. Acked-by: Krzysztof Kozlowski Signed-off-by: Maciej Strozek --- No changes in v4 v3: added Acked-by from Krzysztof --- Documentation/devicetree/bindings/sound/cirrus,cs42l43.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/cirrus,cs42l43.yaml b/= Documentation/devicetree/bindings/sound/cirrus,cs42l43.yaml index 99a536601cc7e..376928d1f64bf 100644 --- a/Documentation/devicetree/bindings/sound/cirrus,cs42l43.yaml +++ b/Documentation/devicetree/bindings/sound/cirrus,cs42l43.yaml @@ -16,6 +16,8 @@ description: | DAC for headphone output, two integrated Class D amplifiers for loudspeakers, and two ADCs for wired headset microphone input or stereo line input. PDM inputs are provided for digital microphones. + CS42L43B variant adds dedicated PDM interface, SoundWire Clock Gearing + support and more decimators to ISRCs. allOf: - $ref: dai-common.yaml# @@ -24,6 +26,7 @@ properties: compatible: enum: - cirrus,cs42l43 + - cirrus,cs42l43b reg: maxItems: 1 -- 2.47.3 From nobody Tue Apr 7 18:45:35 2026 Received: from mx0b-001ae601.pphosted.com (mx0a-001ae601.pphosted.com [67.231.149.25]) (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 817B122424C; Fri, 27 Feb 2026 13:03:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.149.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772197425; cv=fail; b=Sfhp+M8VCnq81U7fOfvfkPZxMnthpc446yFqQgpXiYta+/0YZfSB7iVsF2TLVAI84c+FHCw05qk9ZotLUaW2nHNkzbwo7qkfHslB6UFjcs+dPx5aiKEg/sLvO6zqqX8gqSZr8EBvp/+WoI1RGnv7rjt73F/T7mViRCp+mE11fCw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772197425; c=relaxed/simple; bh=eCQzzQarrowADTgzpYIjTmihHgZj9ckI48uMeghQWLM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=GWv5FqyVHyvgfZtcDRbgB1fV+PDNaqBKM0V93fmXqRr7ruJu9X9/xKzTAuFHg9ISB5LOSBO4PLxjKwgnNsJIKeG/uJs9iw2n5bWv8mW/pKWtFUwIgDwHWRrTp6kq/8w02oGOXqmE1i5dYz/5K3+UOWMHrAKmm+ckBl/m4T9qu8I= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=opensource.cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=dk6UL390; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=wCooMY77; arc=fail smtp.client-ip=67.231.149.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="dk6UL390"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="wCooMY77" Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61R5054P2382702; Fri, 27 Feb 2026 07:03:33 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= PODMain02222019; bh=F4emaFBkL/nARGAtVnUWj08IqlcvM6Fah8cKxEvNnvk=; b= dk6UL390RluxREQVZioHJZGLRmnZtxZB9sHgrucZqVmbUC/vW0W8VqAODa25KYwZ 66Pvc3zLZThHhQ47hJeTTjs1N9/W8XylyZC/63OASh0MIlUkVSScE8cY4bzItFtu 7T1Zcx/vlVj+3H+dGQC8sbdnJdWvxgwFVfkX2oqvdBsH/1XJ0Qny6yGQaAa3Lty5 l48ejlActv6uBuzqdtHJQ/8o81Qe7ehOo7ywUeLKb1ANBWVvSJuwFvao3i4EXODS DkTn7LPyTqU/KZBRcefgTf43NuymeYNykxBPzEdqaFkxZDhm5fBBVDSetXrctG8G laWuv1TL5vanGA++7cBiLQ== Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11021074.outbound.protection.outlook.com [40.93.194.74]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 4cjmds1fjb-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 27 Feb 2026 07:03:33 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gD+Vh03uEBn5QKtHvNLhsawQsL2xVhtje9yLNmqYwoygSt9y5Z4FBan3uQBOqk0t/YDUIfnTvDftX/pjjUpGYmXhopi6r+meBZk/fEzNhg4ukghSw9nMwsbBHZ+OnWus0QfuFzIY5MSlLZvz/14OirAJr3hl7nLnPMKEq4U+f7mzC6JOYaL/c8oAzoJPBho8TwMHKzGuhOctGeGcLW/vaGhG/ESBFcgsTNNd8WJRvcHngbBS1rZigoR1oueAaJ5Fpf4i9cWv+pkhbAxQSTwbTjgvCzO6aKCHUY+LytkJ0DskWSwhHkTw8SvKbV1mGh0ZqkGHpM7PtRx1fJttakohjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=F4emaFBkL/nARGAtVnUWj08IqlcvM6Fah8cKxEvNnvk=; b=FZougWDX6OlI5zPE9HeJs/n4yULtkONMhuMvVj81XC/xCv0h0VQ1qNYJSMHjlH3eJJsRFR56jsmXK9GMBddxX/oN/EEdBO/MdVo1bcBz+adqt0c4SiTuD4Pv07R5ZmaB9LNfSbLxYbxVnfV4v08jiDlFx7TBSX5VClXkNDR6TWQzmlpOPY+ywUVL9eepAfx96/hiHHSfn1U0c0oPzfl1aaO3kRjug5FEZTAlxT0I833TA3XmjkzjsM9X+wSfTeeQSyrvth7GJpoPcI9729qFUICmf91O34DZvrBGf3+xHPY69Mq4AOaApWs/WV2Rpfj0Mn8MVuI2c/vzEzYxe8c1ZQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=opensource.cirrus.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=opensource.cirrus.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus4.onmicrosoft.com; s=selector2-cirrus4-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=F4emaFBkL/nARGAtVnUWj08IqlcvM6Fah8cKxEvNnvk=; b=wCooMY77zN2K329pobN2XPVA3WZIjFFxDOWSlFRBrS9HtPN2XdZ/GKI++lIiWn/a5BEytfQvszfgqSsf3UGZi5vDgy2iXHbhRHeCZ2gU8Dtl6vjwnzA0ozef6AnedzZ75ZCvthZOqFhUsmMkfgWbzV0jf/vlp/31c+4miwIq4VM= Received: from SA9PR13CA0063.namprd13.prod.outlook.com (2603:10b6:806:23::8) by DS4PPFED68AC8DF.namprd19.prod.outlook.com (2603:10b6:f:fc00::a5e) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.16; Fri, 27 Feb 2026 13:02:15 +0000 Received: from SA2PEPF00003F65.namprd04.prod.outlook.com (2603:10b6:806:23:cafe::2a) by SA9PR13CA0063.outlook.office365.com (2603:10b6:806:23::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.20 via Frontend Transport; Fri, 27 Feb 2026 13:02:14 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: Fail (protection.outlook.com: domain of opensource.cirrus.com does not designate 84.19.233.75 as permitted sender) receiver=protection.outlook.com; client-ip=84.19.233.75; helo=edirelay1.ad.cirrus.com; Received: from edirelay1.ad.cirrus.com (84.19.233.75) by SA2PEPF00003F65.mail.protection.outlook.com (10.167.248.40) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9654.16 via Frontend Transport; Fri, 27 Feb 2026 13:02:14 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id B08B6406545; Fri, 27 Feb 2026 13:02:12 +0000 (UTC) Received: from ediswws03.ad.cirrus.com (ediswws03.ad.cirrus.com [198.90.208.11]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id 79136822542; Fri, 27 Feb 2026 13:02:12 +0000 (UTC) From: Maciej Strozek To: Mark Brown , Takashi Iwai , Lee Jones , Krzysztof Kozlowski Cc: Jaroslav Kysela , Bard Liao , Peter Ujfalusi , linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, patches@opensource.cirrus.com, devicetree@vger.kernel.org, Maciej Strozek Subject: [PATCH v4 RESEND 3/4] mfd: cs42l43: Add support for the B variant Date: Fri, 27 Feb 2026 13:01:00 +0000 Message-ID: <20260227130120.3070893-4-mstrozek@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260227130120.3070893-1-mstrozek@opensource.cirrus.com> References: <20260227130120.3070893-1-mstrozek@opensource.cirrus.com> 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 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA2PEPF00003F65:EE_|DS4PPFED68AC8DF:EE_ X-MS-Office365-Filtering-Correlation-Id: f1de8d3a-bca3-46fc-060f-08de76006d9c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|61400799027|7416014|376014|82310400026|36860700013|54012099003; X-Microsoft-Antispam-Message-Info: WSB+RcGNh9G94WI4McJRmWVuulJBOM0ACs+gMugXL031IOTHOL+87q5LXZyY3h3XhCetssM3/W9s5rheZASbYqVpZJIWZti0Iq009cXjoHJGQdD4yP6x5Nis4ruoQWWmpQob0Ggf4NEvwig1eWNAVVkEtet3p0W3PCxDmztBACVk6R4nCKL8dsN7ypwbwvoByk5K9/xPzWH9CXA6lOxzrdWqt32if7DFiY+8CJX/3JGiecmqtE83k36yd1Mw5X2nuytlomwfZS/11EQH5xtwat9Pdpk7sLJDlwH/a/R7xYEK7RS6jQgDhtX5yJKVGPkxAQx5EYwhiP2LHMYTvs501BnJiBS2wQqgHjjIBbT1ZcUUQpsqRAwukZot3dkzfWs8FiQ5Hlj8KeMG4nMp54QEabtvUfL4pAt6ZU0PILc7I/tG5UppIUFfEGuIy8008jGUhtqXwBpPcPYxmpNMu8aICfoXvZrePG5PoExO7gmE5BDFjD/JtH8ARyceGJAlzWcmcvL+hAJNzEyWu2ifxxli7C3FmsuDQUf4WuyVybfW1/cTBydCBkDA481KktvnvBinUlgKltHuQm6TExvTklH5k1/i6aR/kzHsljCrgitOQozPnUNdvhOkHIy3PO0tnOm+Vpeu9UDv2OmMwNkYR4AHGQMYzRPsnbhS1O2zvl64hQ9mfX0a51NYBv8J4o5fmu+yhlHCRbO6DVW+kK2UURYBFmXIc2+7BiWciqpes42T6oeTo7UDi6oEok5bL3Z1FTcrx3wEfsfkndWaYRT9uOoRMbRGg+jIirZDcI5WvWed8UbkI4ozOl4XtwuyjOMZ3MstnCLPbsOyWgCtgnoPrHmK8g== X-Forefront-Antispam-Report: CIP:84.19.233.75;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:edirelay1.ad.cirrus.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(61400799027)(7416014)(376014)(82310400026)(36860700013)(54012099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Lt+T4fSnQ45DsslqRlYDaMAhQckIrWmxg2PQt+Ql3eOchn3P0gI06n9lz1jCCaW/IIVikROirvZw4J+nE9/34XxClGQRy8FTONEtVDpQpPefCS5HD9feoiw+P/GMVK0dsVWRrQhrqj3XSdAUhIK+z/Ua2R2LDfLYHpyxhwvHRR66UWyxu5MgpYOdSzTFN8W3b1QYC1Z3rN5yAZlragdfmu6vrBRmqiDcDg+14mlluEbH6RbEvnPCJVO3gdRYhYQdImwgikufnGIa7x9G27VcZW/wFvfSwEnHI/WMj2B5I+D18bgajAym+OWXGGr2DX6g1wlo5/lUgQIxyXttr2ptg/1PB+wLNwXTzCYJt+AqvJgVdidnC1IltgOq4wsh8sWjduH4No33Ax2k4hCOdihUUYPNyIpkx12eeFMnSrVhXNhzKjEYH4H4kKl2MS5MBRlA X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2026 13:02:14.1443 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f1de8d3a-bca3-46fc-060f-08de76006d9c X-MS-Exchange-CrossTenant-Id: bec09025-e5bc-40d1-a355-8e955c307de8 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bec09025-e5bc-40d1-a355-8e955c307de8;Ip=[84.19.233.75];Helo=[edirelay1.ad.cirrus.com] X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TreatMessagesAsInternal-SA2PEPF00003F65.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PPFED68AC8DF X-Authority-Analysis: v=2.4 cv=dO2rWeZb c=1 sm=1 tr=0 ts=69a19625 cx=c_pps a=pHX0GuESvmlUVbyXmFftrw==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iX4cTi3TZMoOKdANLEfx:22 a=Dj2-6B8FqX4mGL0U3gbX:22 a=w1d2syhTAAAA:8 a=XPwATKmoEvXA9jVZorMA:9 X-Proofpoint-GUID: pGN-aQj0BmuH99oe2jax0pqlqQG_oB1a X-Proofpoint-ORIG-GUID: pGN-aQj0BmuH99oe2jax0pqlqQG_oB1a X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI3MDExNCBTYWx0ZWRfXwXI6xY7xfrpU KONl9zFJogUXaj4HHWHSotA/FpML+NTE/qhcl1svFN0CqLI97GPL4SmsYpe01TkciJtUMHhPCwW uKl/ur+E/WX+HEGXjUBStN/jRh5Giy/2C6XR+34ISYk5dflY3o6RtGLHza7iSN+xQefQIxZdYeu K7uRfm/hji+9DLilQlqCe5XbRW/qoYTMjxWPVf8e1qaOx1//ziIydQS6heI8oMNi/Rrtv+1HBnW F+OXVmH5o53GcCGtXVtlIv904woNs8F8yUgLix9Tpd+6VKV36YsLiUngC2k2yzoSxS+g3U+cU7z 3AzWBZreCHqTOWxQD+7IMzZznsRbj4FBmeL1Jd4z0Fq4fhXFjDLO3nNXUVrtlGwGY/VNMZT+XD3 pTfpMg6yq5w9mC5FRSupTRC22TokqpBgBfDFx7HAakBweUGhTuHn252/3sAMrKIMRE8Uxj6dHYY wMwuaU9lXAWCn6atN2A== X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" Introducing CS42L43B codec, a variant of CS42L43 which can be driven by the same driver. Changes in CS42L43 driver specific for CS42L43B: - Decimator 1 and 2 are dedicated to ADC, can't be selected for PDM - Decimators 3 and 4 are connected to PDM1 - Added Decimator 5 and 6 for PDM2 - Supports SoundWire Clock Gearing - Updated ROM requiring no patching - Reduced RAM space - Each ISRC has 4 decimators now Signed-off-by: Maciej Strozek Acked-by: Lee Jones --- Changes in v4: - change variant_id to long int Changes in v3: - fix incorrect type cast (long -> int) in cs42l43-i2c.c Changes in v2: - Rework the mechanism to identify the new variant along with some error handling improvements. - Added some comments in cs42l43_readable_register() for clarity. - Add handling of the I2C path for the B variant --- drivers/mfd/cs42l43-i2c.c | 7 ++- drivers/mfd/cs42l43-sdw.c | 4 +- drivers/mfd/cs42l43.c | 93 +++++++++++++++++++++++++++----- drivers/mfd/cs42l43.h | 2 +- include/linux/mfd/cs42l43-regs.h | 76 ++++++++++++++++++++++++++ include/linux/mfd/cs42l43.h | 1 + 6 files changed, 166 insertions(+), 17 deletions(-) diff --git a/drivers/mfd/cs42l43-i2c.c b/drivers/mfd/cs42l43-i2c.c index a2ab001a600ae..0a0ab5e549a5a 100644 --- a/drivers/mfd/cs42l43-i2c.c +++ b/drivers/mfd/cs42l43-i2c.c @@ -47,6 +47,7 @@ static int cs42l43_i2c_probe(struct i2c_client *i2c) cs42l43->irq =3D i2c->irq; /* A device on an I2C is always attached by definition. */ cs42l43->attached =3D true; + cs42l43->variant_id =3D (long)device_get_match_data(cs42l43->dev); cs42l43->regmap =3D devm_regmap_init_i2c(i2c, &cs42l43_i2c_regmap); if (IS_ERR(cs42l43->regmap)) @@ -58,7 +59,8 @@ static int cs42l43_i2c_probe(struct i2c_client *i2c) #if IS_ENABLED(CONFIG_OF) static const struct of_device_id cs42l43_of_match[] =3D { - { .compatible =3D "cirrus,cs42l43", }, + { .compatible =3D "cirrus,cs42l43", .data =3D (void *)CS42L43_DEVID_VAL }, + { .compatible =3D "cirrus,cs42l43b", .data =3D (void *)CS42L43B_DEVID_VAL= }, {} }; MODULE_DEVICE_TABLE(of, cs42l43_of_match); @@ -66,7 +68,8 @@ MODULE_DEVICE_TABLE(of, cs42l43_of_match); #if IS_ENABLED(CONFIG_ACPI) static const struct acpi_device_id cs42l43_acpi_match[] =3D { - { "CSC4243", 0 }, + { "CSC4243", CS42L43_DEVID_VAL }, + { "CSC2A3B", CS42L43B_DEVID_VAL }, {} }; MODULE_DEVICE_TABLE(acpi, cs42l43_acpi_match); diff --git a/drivers/mfd/cs42l43-sdw.c b/drivers/mfd/cs42l43-sdw.c index 023f7e1a30f8c..794c983781750 100644 --- a/drivers/mfd/cs42l43-sdw.c +++ b/drivers/mfd/cs42l43-sdw.c @@ -178,6 +178,7 @@ static int cs42l43_sdw_probe(struct sdw_slave *sdw, con= st struct sdw_device_id * cs42l43->dev =3D dev; cs42l43->sdw =3D sdw; + cs42l43->variant_id =3D (long)id->driver_data; cs42l43->regmap =3D devm_regmap_init_sdw(sdw, &cs42l43_sdw_regmap); if (IS_ERR(cs42l43->regmap)) @@ -188,7 +189,8 @@ static int cs42l43_sdw_probe(struct sdw_slave *sdw, con= st struct sdw_device_id * } static const struct sdw_device_id cs42l43_sdw_id[] =3D { - SDW_SLAVE_ENTRY(0x01FA, 0x4243, 0), + SDW_SLAVE_ENTRY(0x01FA, 0x4243, (void *) CS42L43_DEVID_VAL), + SDW_SLAVE_ENTRY(0x01FA, 0x2A3B, (void *) CS42L43B_DEVID_VAL), {} }; MODULE_DEVICE_TABLE(sdw, cs42l43_sdw_id); diff --git a/drivers/mfd/cs42l43.c b/drivers/mfd/cs42l43.c index 107cfb983fec4..166881751e698 100644 --- a/drivers/mfd/cs42l43.c +++ b/drivers/mfd/cs42l43.c @@ -115,9 +115,14 @@ const struct reg_default cs42l43_reg_default[CS42L43_N= _DEFAULTS] =3D { { CS42L43_DECIM_HPF_WNF_CTRL2, 0x00000001 }, { CS42L43_DECIM_HPF_WNF_CTRL3, 0x00000001 }, { CS42L43_DECIM_HPF_WNF_CTRL4, 0x00000001 }, + { CS42L43B_DECIM_HPF_WNF_CTRL5, 0x00000001 }, + { CS42L43B_DECIM_HPF_WNF_CTRL6, 0x00000001 }, { CS42L43_DMIC_PDM_CTRL, 0x00000000 }, { CS42L43_DECIM_VOL_CTRL_CH1_CH2, 0x20122012 }, { CS42L43_DECIM_VOL_CTRL_CH3_CH4, 0x20122012 }, + { CS42L43B_DECIM_VOL_CTRL_CH1_CH2, 0x20122012 }, + { CS42L43B_DECIM_VOL_CTRL_CH3_CH4, 0x20122012 }, + { CS42L43B_DECIM_VOL_CTRL_CH5_CH6, 0x20122012 }, { CS42L43_INTP_VOLUME_CTRL1, 0x00000180 }, { CS42L43_INTP_VOLUME_CTRL2, 0x00000180 }, { CS42L43_AMP1_2_VOL_RAMP, 0x00000022 }, @@ -155,8 +160,12 @@ const struct reg_default cs42l43_reg_default[CS42L43_N= _DEFAULTS] =3D { { CS42L43_SWIRE_DP2_CH2_INPUT, 0x00000000 }, { CS42L43_SWIRE_DP3_CH1_INPUT, 0x00000000 }, { CS42L43_SWIRE_DP3_CH2_INPUT, 0x00000000 }, + { CS42L43B_SWIRE_DP3_CH3_INPUT, 0x00000000 }, + { CS42L43B_SWIRE_DP3_CH4_INPUT, 0x00000000 }, { CS42L43_SWIRE_DP4_CH1_INPUT, 0x00000000 }, { CS42L43_SWIRE_DP4_CH2_INPUT, 0x00000000 }, + { CS42L43B_SWIRE_DP4_CH3_INPUT, 0x00000000 }, + { CS42L43B_SWIRE_DP4_CH4_INPUT, 0x00000000 }, { CS42L43_ASRC_INT1_INPUT1, 0x00000000 }, { CS42L43_ASRC_INT2_INPUT1, 0x00000000 }, { CS42L43_ASRC_INT3_INPUT1, 0x00000000 }, @@ -169,10 +178,14 @@ const struct reg_default cs42l43_reg_default[CS42L43_= N_DEFAULTS] =3D { { CS42L43_ISRC1INT2_INPUT1, 0x00000000 }, { CS42L43_ISRC1DEC1_INPUT1, 0x00000000 }, { CS42L43_ISRC1DEC2_INPUT1, 0x00000000 }, + { CS42L43B_ISRC1DEC3_INPUT1, 0x00000000 }, + { CS42L43B_ISRC1DEC4_INPUT1, 0x00000000 }, { CS42L43_ISRC2INT1_INPUT1, 0x00000000 }, { CS42L43_ISRC2INT2_INPUT1, 0x00000000 }, { CS42L43_ISRC2DEC1_INPUT1, 0x00000000 }, { CS42L43_ISRC2DEC2_INPUT1, 0x00000000 }, + { CS42L43B_ISRC2DEC3_INPUT1, 0x00000000 }, + { CS42L43B_ISRC2DEC4_INPUT1, 0x00000000 }, { CS42L43_EQ1MIX_INPUT1, 0x00800000 }, { CS42L43_EQ1MIX_INPUT2, 0x00800000 }, { CS42L43_EQ1MIX_INPUT3, 0x00800000 }, @@ -269,6 +282,8 @@ EXPORT_SYMBOL_NS_GPL(cs42l43_reg_default, "MFD_CS42L43"= ); bool cs42l43_readable_register(struct device *dev, unsigned int reg) { + struct cs42l43 *cs42l43 =3D dev_get_drvdata(dev); + switch (reg) { case CS42L43_DEVID: case CS42L43_REVID: @@ -292,7 +307,6 @@ bool cs42l43_readable_register(struct device *dev, unsi= gned int reg) case CS42L43_ADC_B_CTRL1 ... CS42L43_ADC_B_CTRL2: case CS42L43_DECIM_HPF_WNF_CTRL1 ... CS42L43_DECIM_HPF_WNF_CTRL4: case CS42L43_DMIC_PDM_CTRL: - case CS42L43_DECIM_VOL_CTRL_CH1_CH2 ... CS42L43_DECIM_VOL_CTRL_CH3_CH4: case CS42L43_INTP_VOLUME_CTRL1 ... CS42L43_INTP_VOLUME_CTRL2: case CS42L43_AMP1_2_VOL_RAMP: case CS42L43_ASP_CTRL: @@ -387,8 +401,16 @@ bool cs42l43_readable_register(struct device *dev, uns= igned int reg) case CS42L43_BOOT_CONTROL: case CS42L43_BLOCK_EN: case CS42L43_SHUTTER_CONTROL: - case CS42L43_MCU_SW_REV ... CS42L43_MCU_RAM_MAX: - return true; + case CS42L43B_MCU_SW_REV ... CS42L43B_MCU_RAM_MAX: + return true; // registers present on all variants + case CS42L43_MCU_SW_REV ... CS42L43B_MCU_SW_REV - 1: + case CS42L43B_MCU_RAM_MAX + 1 ... CS42L43_MCU_RAM_MAX: + case CS42L43_DECIM_VOL_CTRL_CH1_CH2 ... CS42L43_DECIM_VOL_CTRL_CH3_CH4: + return cs42l43->variant_id =3D=3D CS42L43_DEVID_VAL; // regs only in CS4= 2L43 variant + case CS42L43B_DECIM_VOL_CTRL_CH1_CH2 ... CS42L43B_DECIM_HPF_WNF_CTRL6: + case CS42L43B_SWIRE_DP3_CH3_INPUT ... CS42L43B_SWIRE_DP4_CH4_INPUT: + case CS42L43B_ISRC1DEC3_INPUT1 ... CS42L43B_ISRC2DEC4_INPUT1: + return cs42l43->variant_id =3D=3D CS42L43B_DEVID_VAL; // regs only in CS= 42L43B variant default: return false; } @@ -597,15 +619,27 @@ static int cs42l43_wait_for_attach(struct cs42l43 *cs= 42l43) static int cs42l43_mcu_stage_2_3(struct cs42l43 *cs42l43, bool shadow) { unsigned int need_reg =3D CS42L43_NEED_CONFIGS; + unsigned int boot_reg; unsigned int val; int ret; - if (shadow) - need_reg =3D CS42L43_FW_SH_BOOT_CFG_NEED_CONFIGS; + switch (cs42l43->variant_id) { + case CS42L43_DEVID_VAL: + if (shadow) + need_reg =3D CS42L43_FW_SH_BOOT_CFG_NEED_CONFIGS; + boot_reg =3D CS42L43_BOOT_STATUS; + break; + case CS42L43B_DEVID_VAL: + need_reg =3D CS42L43B_NEED_CONFIGS; + boot_reg =3D CS42L43B_BOOT_STATUS; + break; + default: + return -EINVAL; + } regmap_write(cs42l43->regmap, need_reg, 0); - ret =3D regmap_read_poll_timeout(cs42l43->regmap, CS42L43_BOOT_STATUS, + ret =3D regmap_read_poll_timeout(cs42l43->regmap, boot_reg, val, (val =3D=3D CS42L43_MCU_BOOT_STAGE3), CS42L43_MCU_POLL_US, CS42L43_MCU_CMD_TIMEOUT_US); if (ret) { @@ -644,13 +678,25 @@ static int cs42l43_mcu_stage_3_2(struct cs42l43 *cs42= l43) */ static int cs42l43_mcu_disable(struct cs42l43 *cs42l43) { - unsigned int val; + unsigned int val, cfg_reg, ctrl_reg; int ret; - regmap_write(cs42l43->regmap, CS42L43_FW_MISSION_CTRL_MM_MCU_CFG_REG, - CS42L43_FW_MISSION_CTRL_MM_MCU_CFG_DISABLE_VAL); - regmap_write(cs42l43->regmap, CS42L43_FW_MISSION_CTRL_MM_CTRL_SELECTION, - CS42L43_FW_MM_CTRL_MCU_SEL_MASK); + switch (cs42l43->variant_id) { + case CS42L43_DEVID_VAL: + cfg_reg =3D CS42L43_FW_MISSION_CTRL_MM_MCU_CFG_REG; + ctrl_reg =3D CS42L43_FW_MISSION_CTRL_MM_CTRL_SELECTION; + break; + case CS42L43B_DEVID_VAL: + cfg_reg =3D CS42L43B_FW_MISSION_CTRL_MM_MCU_CFG_REG; + ctrl_reg =3D CS42L43B_FW_MISSION_CTRL_MM_CTRL_SELECTION; + break; + default: + return -EINVAL; + } + + regmap_write(cs42l43->regmap, cfg_reg, CS42L43_FW_MISSION_CTRL_MM_MCU_CFG= _DISABLE_VAL); + regmap_write(cs42l43->regmap, ctrl_reg, CS42L43_FW_MM_CTRL_MCU_SEL_MASK); + regmap_write(cs42l43->regmap, CS42L43_MCU_SW_INTERRUPT, CS42L43_CONTROL_I= ND_MASK); regmap_write(cs42l43->regmap, CS42L43_MCU_SW_INTERRUPT, 0); @@ -740,18 +786,32 @@ static int cs42l43_mcu_update_step(struct cs42l43 *cs= 42l43) { unsigned int mcu_rev, bios_rev, boot_status, secure_cfg; bool patched, shadow; + int boot_status_reg, mcu_sw_rev_reg; int ret; + switch (cs42l43->variant_id) { + case CS42L43_DEVID_VAL: + boot_status_reg =3D CS42L43_BOOT_STATUS; + mcu_sw_rev_reg =3D CS42L43_MCU_SW_REV; + break; + case CS42L43B_DEVID_VAL: + boot_status_reg =3D CS42L43B_BOOT_STATUS; + mcu_sw_rev_reg =3D CS42L43B_MCU_SW_REV; + break; + default: + return -EINVAL; + } + /* Clear any stale software interrupt bits. */ regmap_read(cs42l43->regmap, CS42L43_SOFT_INT, &mcu_rev); - ret =3D regmap_read(cs42l43->regmap, CS42L43_BOOT_STATUS, &boot_status); + ret =3D regmap_read(cs42l43->regmap, boot_status_reg, &boot_status); if (ret) { dev_err(cs42l43->dev, "Failed to read boot status: %d\n", ret); return ret; } - ret =3D regmap_read(cs42l43->regmap, CS42L43_MCU_SW_REV, &mcu_rev); + ret =3D regmap_read(cs42l43->regmap, mcu_sw_rev_reg, &mcu_rev); if (ret) { dev_err(cs42l43->dev, "Failed to read firmware revision: %d\n", ret); return ret; @@ -918,6 +978,13 @@ static void cs42l43_boot_work(struct work_struct *work) switch (devid) { case CS42L43_DEVID_VAL: + case CS42L43B_DEVID_VAL: + if (devid !=3D cs42l43->variant_id) { + dev_err(cs42l43->dev, + "Device ID (0x%06x) does not match variant ID (0x%06lx)\n", + devid, cs42l43->variant_id); + goto err; + } break; default: dev_err(cs42l43->dev, "Unrecognised devid: 0x%06x\n", devid); diff --git a/drivers/mfd/cs42l43.h b/drivers/mfd/cs42l43.h index f3da783930f53..a0068f6572e2c 100644 --- a/drivers/mfd/cs42l43.h +++ b/drivers/mfd/cs42l43.h @@ -9,7 +9,7 @@ #ifndef CS42L43_CORE_INT_H #define CS42L43_CORE_INT_H -#define CS42L43_N_DEFAULTS 176 +#define CS42L43_N_DEFAULTS 189 struct dev_pm_ops; struct device; diff --git a/include/linux/mfd/cs42l43-regs.h b/include/linux/mfd/cs42l43-r= egs.h index c39a49269cb7d..68831f113589d 100644 --- a/include/linux/mfd/cs42l43-regs.h +++ b/include/linux/mfd/cs42l43-regs.h @@ -1181,4 +1181,80 @@ /* CS42L43_FW_MISSION_CTRL_MM_MCU_CFG_REG */ #define CS42L43_FW_MISSION_CTRL_MM_MCU_CFG_DISABLE_VAL 0xF05AA50F +/* CS42L43B VARIANT REGISTERS */ +#define CS42L43B_DEVID_VAL 0x0042A43B + +#define CS42L43B_DECIM_VOL_CTRL_CH1_CH2 0x00008280 +#define CS42L43B_DECIM_VOL_CTRL_CH3_CH4 0x00008284 + +#define CS42L43B_DECIM_VOL_CTRL_CH5_CH6 0x00008290 +#define CS42L43B_DECIM_VOL_CTRL_UPDATE 0x0000829C + +#define CS42L43B_DECIM_HPF_WNF_CTRL5 0x000082A0 +#define CS42L43B_DECIM_HPF_WNF_CTRL6 0x000082A4 + +#define CS42L43B_SWIRE_DP3_CH3_INPUT 0x0000C320 +#define CS42L43B_SWIRE_DP3_CH4_INPUT 0x0000C330 +#define CS42L43B_SWIRE_DP4_CH3_INPUT 0x0000C340 +#define CS42L43B_SWIRE_DP4_CH4_INPUT 0x0000C350 + +#define CS42L43B_ISRC1DEC3_INPUT1 0x0000C780 +#define CS42L43B_ISRC1DEC4_INPUT1 0x0000C790 +#define CS42L43B_ISRC2DEC3_INPUT1 0x0000C7A0 +#define CS42L43B_ISRC2DEC4_INPUT1 0x0000C7B0 + +#define CS42L43B_FW_MISSION_CTRL_NEED_CONFIGS 0x00117E00 +#define CS42L43B_FW_MISSION_CTRL_HAVE_CONFIGS 0x00117E04 +#define CS42L43B_FW_MISSION_CTRL_PATCH_START_ADDR_REG 0x00117E08 +#define CS42L43B_FW_MISSION_CTRL_MM_CTRL_SELECTION 0x00117E0C +#define CS42L43B_FW_MISSION_CTRL_MM_MCU_CFG_REG 0x00117E10 + +#define CS42L43B_MCU_SW_REV 0x00117314 +#define CS42L43B_PATCH_START_ADDR 0x00117318 +#define CS42L43B_CONFIG_SELECTION 0x0011731C +#define CS42L43B_NEED_CONFIGS 0x00117320 +#define CS42L43B_BOOT_STATUS 0x00117330 + +#define CS42L43B_FW_MISSION_CTRL_NEED_CONFIGS 0x00117E00 +#define CS42L43B_FW_MISSION_CTRL_HAVE_CONFIGS 0x00117E04 +#define CS42L43B_FW_MISSION_CTRL_PATCH_START_ADDR_REG 0x00117E08 +#define CS42L43B_FW_MISSION_CTRL_MM_CTRL_SELECTION 0x00117E0C +#define CS42L43B_FW_MISSION_CTRL_MM_MCU_CFG_REG 0x00117E10 + +#define CS42L43B_MCU_RAM_MAX 0x00117FFF + +/* CS42L43B_DECIM_DECIM_VOL_CTRL_CH5_CH6 */ +#define CS42L43B_DECIM6_MUTE_MASK 0x80000000 +#define CS42L43B_DECIM6_MUTE_SHIFT 31 +#define CS42L43B_DECIM6_VOL_MASK 0x3FC00000 +#define CS42L43B_DECIM6_VOL_SHIFT 22 +#define CS42L43B_DECIM6_PATH1_VOL_FALL_RATE_MASK 0x00380000 +#define CS42L43B_DECIM6_PATH1_VOL_FALL_RATE_SHIFT 19 +#define CS42L43B_DECIM6_PATH1_VOL_RISE_RATE_MASK 0x00070000 +#define CS42L43B_DECIM6_PATH1_VOL_RISE_RATE_SHIFT 16 +#define CS42L43B_DECIM5_MUTE_MASK 0x00008000 +#define CS42L43B_DECIM5_MUTE_SHIFT 15 +#define CS42L43B_DECIM5_VOL_MASK 0x00003FC0 +#define CS42L43B_DECIM5_VOL_SHIFT 6 +#define CS42L43B_DECIM5_PATH1_VOL_FALL_RATE_MASK 0x00000038 +#define CS42L43B_DECIM5_PATH1_VOL_FALL_RATE_SHIFT 3 +#define CS42L43B_DECIM5_PATH1_VOL_RISE_RATE_MASK 0x00000007 +#define CS42L43B_DECIM5_PATH1_VOL_RISE_RATE_SHIFT 0 + +/* CS42L43B_DECIM_VOL_CTRL_UPDATE */ +#define CS42L43B_DECIM6_PATH1_VOL_TRIG_MASK 0x00000800 +#define CS42L43B_DECIM6_PATH1_VOL_TRIG_SHIFT 11 +#define CS42L43B_DECIM5_PATH1_VOL_TRIG_MASK 0x00000100 +#define CS42L43B_DECIM5_PATH1_VOL_TRIG_SHIFT 8 +#define CS42L43B_DECIM4_VOL_UPDATE_MASK 0x00000020 +#define CS42L43B_DECIM4_VOL_UPDATE_SHIFT 5 + +/* CS42L43_ISRC1_CTRL..CS42L43_ISRC2_CTRL */ +#define CS42L43B_ISRC_DEC4_EN_MASK 0x00000008 +#define CS42L43B_ISRC_DEC4_EN_SHIFT 3 +#define CS42L43B_ISRC_DEC4_EN_WIDTH 1 +#define CS42L43B_ISRC_DEC3_EN_MASK 0x00000004 +#define CS42L43B_ISRC_DEC3_EN_SHIFT 2 +#define CS42L43B_ISRC_DEC3_EN_WIDTH 1 + #endif /* CS42L43_CORE_REGS_H */ diff --git a/include/linux/mfd/cs42l43.h b/include/linux/mfd/cs42l43.h index 2239d8585e785..ff0f7e365a19f 100644 --- a/include/linux/mfd/cs42l43.h +++ b/include/linux/mfd/cs42l43.h @@ -98,6 +98,7 @@ struct cs42l43 { bool sdw_pll_active; bool attached; bool hw_lock; + long variant_id; }; #endif /* CS42L43_CORE_EXT_H */ -- 2.47.3 From nobody Tue Apr 7 18:45:35 2026 Received: from mx0b-001ae601.pphosted.com (mx0a-001ae601.pphosted.com [67.231.149.25]) (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 260703F0777; Fri, 27 Feb 2026 13:02:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.149.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772197356; cv=fail; b=KHHgpmJyySr4KYsTYYX99bBJwIdlHpUZp0poF2/mY6b0veT/DTuMBnNigsj6Pm0ppvCm89Mpr7+FJKCZcI6+lh2SdZNDfBdRatMUPj6p48ljhpQhE/+fAwvGKAzyXmxEerC03sjvDRFHqWWmgtl7E+Z3tn0pmI1WMYFdbEnvrXw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772197356; c=relaxed/simple; bh=lESxh+HoKqlVtZgfygzyX34YESHjvYNh2LlN4EvM5JQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OcVdSJdtDdRSiDnweaC3QsA0mHWNzNQLLjpMXIsg75pfKRBUCvoQuQN4TLZM6++dI5oUfwuPc/ZyTjCTCBqaDEbVakBF5ShymGIzPyKgs/sDf25YYYiOdzaw83BcOwxbdSDxL//JePlMtqBRhSEwwcweBcZIOIHtvsCHNoX96mw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=opensource.cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=OzWaaOVA; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=0Gw1aRzQ; arc=fail smtp.client-ip=67.231.149.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="OzWaaOVA"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="0Gw1aRzQ" Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61R4ostH2367068; Fri, 27 Feb 2026 07:02:21 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= PODMain02222019; bh=sXahs4y9dlcg7AWOaWLQKL5UViqO7n/zfquaiZ0BnXM=; b= OzWaaOVA3trNI2Wm1aAVpMO7Cm3fnm28RWcHge7ze3RycHqSKKPuiSQAR2fIEACz wN1JTkeAHTc+bO4nn7DgNo6f63KFKE1qUd29vfIeFKqzcannJyfcspWq6dKw8NeQ llfJSzbcNg1w5i2tONyrodbZUWsTE2s5Nln+clnnb0iVCLFksW2DmqNJO/WFmpSE ZQTG5YiIjZXCUuxamTBLEVAEkCan4XFvczdVfW05sMeSIDPrr5/YiCzGZpyeaPXi V8JpMmsNf6z015va+JIUPo3IwRSRArtQCohJVdU0ZPM8qMGC4Elp7bh+zeSHD2Gp +mpIo7N3buKogotUEEGAIw== Received: from bl0pr03cu003.outbound.protection.outlook.com (mail-eastusazon11022142.outbound.protection.outlook.com [52.101.53.142]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 4cjmds1fh7-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 27 Feb 2026 07:02:20 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zMRvMPKjbMqoPEi4dM1aZIKpahgCvhnON0GZQMvVYW1jj9Fab5xoGwacb61vNjIO36SssgUmjEbe4YU6BIcq27uqd5WybMm0ursaR96SzlONThyJlZj1IO+6BfIpdQ5xzbRkUYrFGny5ZH1VOtiFWlH4aU5O40RHD1KadHzXGjwfTF8AyZvHbbUVkV8+NOwAi6NcWiLPL42j8D7gk/qGShqhx3Y8iXCYuZWfDW2YJ9pWp3e28hD7WKQWTfaJbJweZCeSe5PMEfcng5XxrBvDxPiO3iFLMsT6OMED+ubliWKou98z2KUVR3AZGGDDo1PU+BbnjSV6WsGo59McqjmmQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sXahs4y9dlcg7AWOaWLQKL5UViqO7n/zfquaiZ0BnXM=; b=tBlixoQ3iSXhR27x1XVsesk29F8O2mDXAOfxV+gnKCLrMCmtC7c3uuMLIySt+grk2lxKIZfG3jANoZlD4Yo8EQS1FxpLMoqNlWuD9K6xUQoBO+ZYSDohx4ClGxR2rd/wACE+B32tnWQeNaaVX4d6syzx8UzeTPog+txYoxJ4u2FAV0V8Vef6lj757g8WMd3R3yKKwTLB1Svw+5GU/zOqS+w2n+3ZBDvhCW2zVRhlPmhJYVAMeVirjFL+hn7NJjBu9yas8CR4DtVPEsgMJkzjSMGzdEn0peHGQ+3s2WxGaTEKKZkiOKShVudAnqtKDSwrrIWPjdG6W8D9QPgWTgZLbQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=opensource.cirrus.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=opensource.cirrus.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus4.onmicrosoft.com; s=selector2-cirrus4-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sXahs4y9dlcg7AWOaWLQKL5UViqO7n/zfquaiZ0BnXM=; b=0Gw1aRzQYnlArHBsTIxhPCqHNBdnDJxpjvDc6qnIyCQJYZRtgbvm30VIe06M3KuO+HheYX59Z6dUg/eel1vx8OdKw2S4hGsUWltKnkTr8+ygU/fHOTmetZmj9pW/2qixWDgxO3xwG4IgwzUGf6nq+liL4d0rJ1YMufrMlLR3hxc= Received: from CH3P220CA0003.NAMP220.PROD.OUTLOOK.COM (2603:10b6:610:1e8::17) by DS0PR19MB8433.namprd19.prod.outlook.com (2603:10b6:8:1be::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.16; Fri, 27 Feb 2026 13:02:14 +0000 Received: from CH2PEPF0000009D.namprd02.prod.outlook.com (2603:10b6:610:1e8:cafe::58) by CH3P220CA0003.outlook.office365.com (2603:10b6:610:1e8::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.27 via Frontend Transport; Fri, 27 Feb 2026 13:02:11 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: Fail (protection.outlook.com: domain of opensource.cirrus.com does not designate 84.19.233.75 as permitted sender) receiver=protection.outlook.com; client-ip=84.19.233.75; helo=edirelay1.ad.cirrus.com; Received: from edirelay1.ad.cirrus.com (84.19.233.75) by CH2PEPF0000009D.mail.protection.outlook.com (10.167.244.25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9654.16 via Frontend Transport; Fri, 27 Feb 2026 13:02:13 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id B07BD406544; Fri, 27 Feb 2026 13:02:12 +0000 (UTC) Received: from ediswws03.ad.cirrus.com (ediswws03.ad.cirrus.com [198.90.208.11]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id 81E39822543; Fri, 27 Feb 2026 13:02:12 +0000 (UTC) From: Maciej Strozek To: Mark Brown , Takashi Iwai , Lee Jones , Krzysztof Kozlowski Cc: Jaroslav Kysela , Bard Liao , Peter Ujfalusi , linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, patches@opensource.cirrus.com, devicetree@vger.kernel.org, Maciej Strozek Subject: [PATCH v4 RESEND 4/4] ASoC: cs42l43: Add support for the B variant Date: Fri, 27 Feb 2026 13:01:01 +0000 Message-ID: <20260227130120.3070893-5-mstrozek@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260227130120.3070893-1-mstrozek@opensource.cirrus.com> References: <20260227130120.3070893-1-mstrozek@opensource.cirrus.com> 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 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PEPF0000009D:EE_|DS0PR19MB8433:EE_ X-MS-Office365-Filtering-Correlation-Id: 9aa9248a-16ae-49c2-61d6-08de76006d57 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|61400799027|376014|7416014|36860700013|82310400026|54012099003; X-Microsoft-Antispam-Message-Info: PQeKxHzCpuL16cLXFCe2GutlOfk71ERjMieAQD4C8aDHpEoRiiy8+8djeYvPsJxY0ojb+bw3Ay6soi7hYFLxf8eNIH8sFRsoFw5E7elpe2/j74QKvZ0JqzHCS/bDCYKithy5ykkA33Ln34tQLJGTAVmt5c4BEMilSsgfN2z69JjM/a5mEzCX/9JpGU+FSl973HGhp9R7p5GJ4bKpWNbesJPLScWnUzyodh/gbAoxeIBBUTBm2qznbfsvNnmRZoawVeAVOhJk/8y7ASYkBByINo914Y9Kw0bYno6OII3mpxwPSQKm1v06mAPdmt0M2nnc3P8VIVECkZX2+ErpSnUv5pg0YWnMetJ7Ilko00OXC0bT9fC5ChMpfvYW0eiDt3N8zdq1XVgsEPnS6CFC4R89E3Yl9XSa+Q+EYkQaF8kwqmPy4zokQbD/G+ai8w60pqr2oSoXEQjt+9g/GzOXPpypVxAHc5yX8OslvHP7GcgzPtl807xaGXJR3fpEsMVEB/j2Iqy6ts+LC98EHjvqTm7rV/eeeRrjfI9+cmDkvmggWAEZxBEG5ja++pGYrMv0X0wqSgVKn4+BynkLl1I9lpYbsTxyeQxMoXvFFmaAxEACo9aWfIWA2UPAYeyHm1SkJl323ee5hgIjplv4mAE/tHzOOqO2ePbKtEAalz0TrW7nObpjh02GF0rwXJJ1QxMkmoOrbv20/NS7ny8H8Vx1dLzu1FYZdpZdU3UMjq2spQKmxAkZgskgOEJ+muagB4TTIT7cBymsvTDw5ZwoiXSahPeBbKnumpc5nuMkoIsTnM8VrJO+wFwdgkiyUtUvc+mKrAg4celCPh2cGAbx6LvmNXn4vg== X-Forefront-Antispam-Report: CIP:84.19.233.75;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:edirelay1.ad.cirrus.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(61400799027)(376014)(7416014)(36860700013)(82310400026)(54012099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: jHEfxMH3c+WkqpfndLLGOCzI7Zy2r9u1rfmQ9e8DaMyvxnmwsS03XfkSjwuoD+wimcWH2pAzO4lpfE3Nddku74mRsxDan8IRCF68YeSWnhFjWnOWDRmblVWxaKYDWTBRHeHxnrdaHLkl15SNo0WMjznV9/JCOlZVG5EWV1aQLr89OvydKE1fqlMqIVXXOLKVmuc64YvfwmIH7QAT+dVvIUaOPRQ7SaD6NN0YcfewyeLANsip9z14XsV5BRCrtrQigvePeMUCAq1yoTyDi18VVH6MjP7L+FT64kfQUhBooBGMraoCIX4bmxduom51ZjegF1SFKwOJUOAmINtP2pQ80n2PakQlGc+bL+Umwn/1OsgrlTHWSacnN9pen8YB4Dqrz8nWU763rvifL7pwExHQsr9CmdKHmNKw4G1zriYwJo4llvxbjN2pEtX4Q0KGY3V8 X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2026 13:02:13.7356 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9aa9248a-16ae-49c2-61d6-08de76006d57 X-MS-Exchange-CrossTenant-Id: bec09025-e5bc-40d1-a355-8e955c307de8 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bec09025-e5bc-40d1-a355-8e955c307de8;Ip=[84.19.233.75];Helo=[edirelay1.ad.cirrus.com] X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TreatMessagesAsInternal-CH2PEPF0000009D.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR19MB8433 X-Authority-Analysis: v=2.4 cv=dO2rWeZb c=1 sm=1 tr=0 ts=69a195dd cx=c_pps a=3xBwYUWp8GiLX146WrkxpA==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iX4cTi3TZMoOKdANLEfx:22 a=Dj2-6B8FqX4mGL0U3gbX:22 a=w1d2syhTAAAA:8 a=M7tb3-_zZpdRxA06ow8A:9 X-Proofpoint-GUID: J6fi5nN7PVIyxK8pjT3kAzRXmaFF04Eo X-Proofpoint-ORIG-GUID: J6fi5nN7PVIyxK8pjT3kAzRXmaFF04Eo X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI3MDExNCBTYWx0ZWRfX/XTW5G5cL86z FiBTPL1WqzR9yJvLId6QbqOxL6EZaQ9lULi+uCGv4kPrglQGfIfLGjS9fzdtlxeUtBV+Vm46Lk5 2zKA/zs29pjaxjvGWdode1wpPrKezhqRWJr2lRNz4QV75PIpXmXICcLpDbNirOo2dF5UNT5N+i/ GlJUGMwnLqmkGTBDg/DIVNZ+4U0N6KGD7UfPvu++Aqr8LQVwj3BMzLln8DtosEwGj0C2UQJgU4R Y2vYFsWdeZOJAnoBWFOJna+xEbG8VnD9wQTExuhzNg3ECw1vDyteyTX69+sNwCQhjnybvp36Aig JpyqSekvgrXkuaA2CZzJfqPnCK7kt813OwUs3n8uYOtvj7NhGxVCrAJJ8dW9uRGDH0jrg7tZL2L HymLKWa0unNe9U95d9Ac24wGz3pQkV8ZevlOeoEzSUq1mo0bAN9SyMz6/wHlkJ1T84GQcmZA3ZI l4SpI/E93MtjMJFEzHw== X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" Introducing CS42L43B codec, a variant of CS42L43 which can be driven by the same driver. Changes in CS42L43 driver specific for CS42L43B: - Decimator 1 and 2 are dedicated to ADC, can't be selected for PDM - Decimators 3 and 4 are connected to PDM1 - Added Decimator 5 and 6 for PDM2 - Supports SoundWire Clock Gearing - Updated ROM requiring no patching - Reduced RAM space - Each ISRC has 4 decimators now Signed-off-by: Maciej Strozek --- No changes in v3, v4 Changes in v2: - Adjustments to variant identification following fixes from v2 mfd patch --- sound/soc/codecs/cs42l43.c | 756 ++++++++++++++++++++++++++++++------- sound/soc/codecs/cs42l43.h | 4 +- 2 files changed, 625 insertions(+), 135 deletions(-) diff --git a/sound/soc/codecs/cs42l43.c b/sound/soc/codecs/cs42l43.c index fd02d8a57e0f2..842d16e39de87 100644 --- a/sound/soc/codecs/cs42l43.c +++ b/sound/soc/codecs/cs42l43.c @@ -45,12 +45,25 @@ static SOC_VALUE_ENUM_SINGLE_DECL(cs42l43_##name##_enum= , reg, \ static const struct snd_kcontrol_new cs42l43_##name##_mux =3D \ SOC_DAPM_ENUM("Route", cs42l43_##name##_enum) +#define CS42L43B_DECL_MUX(name, reg) \ +static SOC_VALUE_ENUM_SINGLE_DECL(cs42l43_##name##_enum, reg, \ + 0, CS42L43_MIXER_SRC_MASK, \ + cs42l43b_mixer_texts, cs42l43b_mixer_values); \ +static const struct snd_kcontrol_new cs42l43_##name##_mux =3D \ + SOC_DAPM_ENUM("Route", cs42l43_##name##_enum) + #define CS42L43_DECL_MIXER(name, reg) \ CS42L43_DECL_MUX(name##_in1, reg); \ CS42L43_DECL_MUX(name##_in2, reg + 0x4); \ CS42L43_DECL_MUX(name##_in3, reg + 0x8); \ CS42L43_DECL_MUX(name##_in4, reg + 0xC) +#define CS42L43B_DECL_MIXER(name, reg) \ + CS42L43B_DECL_MUX(name##_in1, reg); \ + CS42L43B_DECL_MUX(name##_in2, reg + 0x4); \ + CS42L43B_DECL_MUX(name##_in3, reg + 0x8); \ + CS42L43B_DECL_MUX(name##_in4, reg + 0xC) + #define CS42L43_DAPM_MUX(name_str, name) \ SND_SOC_DAPM_MUX(name_str " Input", SND_SOC_NOPM, 0, 0, &cs42l43_##name##= _mux) @@ -99,11 +112,23 @@ static const struct snd_kcontrol_new cs42l43_##name##_= mux =3D \ { name_str, "EQ1", "EQ" }, \ { name_str, "EQ2", "EQ" } +#define CS42L43B_BASE_ROUTES(name_str) \ + { name_str, "Decimator 5", "Decimator 5" }, \ + { name_str, "Decimator 6", "Decimator 6" }, \ + { name_str, "ISRC1 DEC3", "ISRC1DEC3" }, \ + { name_str, "ISRC1 DEC4", "ISRC1DEC4" }, \ + { name_str, "ISRC2 DEC3", "ISRC2DEC3" }, \ + { name_str, "ISRC2 DEC4", "ISRC2DEC4" } + #define CS42L43_MUX_ROUTES(name_str, widget) \ { widget, NULL, name_str " Input" }, \ { name_str " Input", NULL, "Mixer Core" }, \ CS42L43_BASE_ROUTES(name_str " Input") +#define CS42L43B_MUX_ROUTES(name_str, widget) \ + CS42L43_MUX_ROUTES(name_str, widget), \ + CS42L43B_BASE_ROUTES(name_str " Input") + #define CS42L43_MIXER_ROUTES(name_str, widget) \ { name_str " Mixer", NULL, name_str " Input 1" }, \ { name_str " Mixer", NULL, name_str " Input 2" }, \ @@ -116,6 +141,13 @@ static const struct snd_kcontrol_new cs42l43_##name##_= mux =3D \ CS42L43_BASE_ROUTES(name_str " Input 3"), \ CS42L43_BASE_ROUTES(name_str " Input 4") +#define CS42L43B_MIXER_ROUTES(name_str, widget) \ + CS42L43_MIXER_ROUTES(name_str, widget), \ + CS42L43B_BASE_ROUTES(name_str " Input 1"), \ + CS42L43B_BASE_ROUTES(name_str " Input 2"), \ + CS42L43B_BASE_ROUTES(name_str " Input 3"), \ + CS42L43B_BASE_ROUTES(name_str " Input 4") + #define CS42L43_MIXER_VOLUMES(name_str, base) \ SOC_SINGLE_RANGE_TLV(name_str " Input 1 Volume", base, \ CS42L43_MIXER_VOL_SHIFT, 0x20, 0x50, 0, \ @@ -300,6 +332,7 @@ static int cs42l43_startup(struct snd_pcm_substream *su= bstream, struct snd_soc_d struct snd_soc_component *component =3D dai->component; struct cs42l43_codec *priv =3D snd_soc_component_get_drvdata(component); struct cs42l43 *cs42l43 =3D priv->core; + int ret; int provider =3D !dai->id || !!regmap_test_bits(cs42l43->regmap, CS42L43_ASP_CLK_CONFIG2, CS42L43_ASP_MASTER_MODE_MASK); @@ -309,6 +342,14 @@ static int cs42l43_startup(struct snd_pcm_substream *s= ubstream, struct snd_soc_d else priv->constraint.mask =3D CS42L43_CONSUMER_RATE_MASK; + if (cs42l43->variant_id =3D=3D CS42L43_DEVID_VAL && (dai->id =3D=3D 3 || = dai->id =3D=3D 4)) { + ret =3D snd_pcm_hw_constraint_minmax(substream->runtime, + SNDRV_PCM_HW_PARAM_CHANNELS, + 1, 2); + if (ret < 0) + return ret; + } + return snd_pcm_hw_constraint_list(substream->runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &priv->constraint); @@ -590,12 +631,25 @@ static int cs42l43_dai_probe(struct snd_soc_dai *dai) "Decimator 2 Switch", "Decimator 3 Switch", "Decimator 4 Switch", + "Decimator 5 Switch", + "Decimator 6 Switch", }; - int i; + int control_size, i; static_assert(ARRAY_SIZE(controls) =3D=3D ARRAY_SIZE(priv->kctl)); - for (i =3D 0; i < ARRAY_SIZE(controls); i++) { + switch (priv->core->variant_id) { + case CS42L43_DEVID_VAL: + control_size =3D ARRAY_SIZE(controls) - 2; // ignore Decimator 5 and 6 + break; + case CS42L43B_DEVID_VAL: + control_size =3D ARRAY_SIZE(controls); + break; + default: + return -EINVAL; + } + + for (i =3D 0; i < control_size; i++) { if (priv->kctl[i]) continue; @@ -703,7 +757,7 @@ static struct snd_soc_dai_driver cs42l43_dais[] =3D { .capture =3D { .stream_name =3D "DP3 Capture", .channels_min =3D 1, - .channels_max =3D 2, + .channels_max =3D 4, .rates =3D SNDRV_PCM_RATE_KNOT, .formats =3D CS42L43_SDW_FORMATS, }, @@ -715,7 +769,7 @@ static struct snd_soc_dai_driver cs42l43_dais[] =3D { .capture =3D { .stream_name =3D "DP4 Capture", .channels_min =3D 1, - .channels_max =3D 2, + .channels_max =3D 4, .rates =3D SNDRV_PCM_RATE_KNOT, .formats =3D CS42L43_SDW_FORMATS, }, @@ -808,6 +862,10 @@ static SOC_ENUM_SINGLE_DECL(cs42l43_dec3_wnf_corner, C= S42L43_DECIM_HPF_WNF_CTRL3 CS42L43_DECIM_WNF_CF_SHIFT, cs42l43_wnf_corner_text); static SOC_ENUM_SINGLE_DECL(cs42l43_dec4_wnf_corner, CS42L43_DECIM_HPF_WNF= _CTRL4, CS42L43_DECIM_WNF_CF_SHIFT, cs42l43_wnf_corner_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec5_wnf_corner, CS42L43B_DECIM_HPF_W= NF_CTRL5, + CS42L43_DECIM_WNF_CF_SHIFT, cs42l43_wnf_corner_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec6_wnf_corner, CS42L43B_DECIM_HPF_W= NF_CTRL6, + CS42L43_DECIM_WNF_CF_SHIFT, cs42l43_wnf_corner_text); static const char * const cs42l43_hpf_corner_text[] =3D { "3Hz", "12Hz", "48Hz", "96Hz", @@ -821,6 +879,10 @@ static SOC_ENUM_SINGLE_DECL(cs42l43_dec3_hpf_corner, C= S42L43_DECIM_HPF_WNF_CTRL3 CS42L43_DECIM_HPF_CF_SHIFT, cs42l43_hpf_corner_text); static SOC_ENUM_SINGLE_DECL(cs42l43_dec4_hpf_corner, CS42L43_DECIM_HPF_WNF= _CTRL4, CS42L43_DECIM_HPF_CF_SHIFT, cs42l43_hpf_corner_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec5_hpf_corner, CS42L43B_DECIM_HPF_W= NF_CTRL5, + CS42L43_DECIM_HPF_CF_SHIFT, cs42l43_hpf_corner_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec6_hpf_corner, CS42L43B_DECIM_HPF_W= NF_CTRL6, + CS42L43_DECIM_HPF_CF_SHIFT, cs42l43_hpf_corner_text); static SOC_ENUM_SINGLE_DECL(cs42l43_dec1_ramp_up, CS42L43_DECIM_VOL_CTRL_C= H1_CH2, CS42L43_DECIM1_VI_RAMP_SHIFT, cs42l43_ramp_text); @@ -839,6 +901,31 @@ static SOC_ENUM_SINGLE_DECL(cs42l43_dec4_ramp_up, CS42= L43_DECIM_VOL_CTRL_CH3_CH4 static SOC_ENUM_SINGLE_DECL(cs42l43_dec4_ramp_down, CS42L43_DECIM_VOL_CTRL= _CH3_CH4, CS42L43_DECIM4_VD_RAMP_SHIFT, cs42l43_ramp_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec1_ramp_up, CS42L43B_DECIM_VOL_CTRL= _CH1_CH2, + CS42L43_DECIM1_VI_RAMP_SHIFT, cs42l43_ramp_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec1_ramp_down, CS42L43B_DECIM_VOL_CT= RL_CH1_CH2, + CS42L43_DECIM1_VD_RAMP_SHIFT, cs42l43_ramp_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec2_ramp_up, CS42L43B_DECIM_VOL_CTRL= _CH1_CH2, + CS42L43_DECIM2_VI_RAMP_SHIFT, cs42l43_ramp_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec2_ramp_down, CS42L43B_DECIM_VOL_CT= RL_CH1_CH2, + CS42L43_DECIM2_VD_RAMP_SHIFT, cs42l43_ramp_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec3_ramp_up, CS42L43B_DECIM_VOL_CTRL= _CH3_CH4, + CS42L43_DECIM3_VI_RAMP_SHIFT, cs42l43_ramp_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec3_ramp_down, CS42L43B_DECIM_VOL_CT= RL_CH3_CH4, + CS42L43_DECIM3_VD_RAMP_SHIFT, cs42l43_ramp_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec4_ramp_up, CS42L43B_DECIM_VOL_CTRL= _CH3_CH4, + CS42L43_DECIM4_VI_RAMP_SHIFT, cs42l43_ramp_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec4_ramp_down, CS42L43B_DECIM_VOL_CT= RL_CH3_CH4, + CS42L43_DECIM4_VD_RAMP_SHIFT, cs42l43_ramp_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec5_ramp_up, CS42L43B_DECIM_VOL_CTRL= _CH5_CH6, + CS42L43B_DECIM5_PATH1_VOL_RISE_RATE_SHIFT, cs42l43_ramp_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec5_ramp_down, CS42L43B_DECIM_VOL_CT= RL_CH5_CH6, + CS42L43B_DECIM5_PATH1_VOL_FALL_RATE_SHIFT, cs42l43_ramp_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec6_ramp_up, CS42L43B_DECIM_VOL_CTRL= _CH5_CH6, + CS42L43B_DECIM6_PATH1_VOL_RISE_RATE_SHIFT, cs42l43_ramp_text); +static SOC_ENUM_SINGLE_DECL(cs42l43b_dec6_ramp_down, CS42L43B_DECIM_VOL_CT= RL_CH5_CH6, + CS42L43B_DECIM6_PATH1_VOL_FALL_RATE_SHIFT, cs42l43_ramp_text); + static DECLARE_TLV_DB_SCALE(cs42l43_speaker_tlv, -6400, 50, 0); static SOC_ENUM_SINGLE_DECL(cs42l43_speaker_ramp_up, CS42L43_AMP1_2_VOL_RA= MP, @@ -898,6 +985,37 @@ static const unsigned int cs42l43_mixer_values[] =3D { 0x58, 0x59, // EQ1, 2 }; +static const char * const cs42l43b_mixer_texts[] =3D { + "None", + "Tone Generator 1", "Tone Generator 2", + "Decimator 1", "Decimator 2", "Decimator 3", "Decimator 4", "Decimator 5"= , "Decimator 6", + "ASPRX1", "ASPRX2", "ASPRX3", "ASPRX4", "ASPRX5", "ASPRX6", + "DP5RX1", "DP5RX2", "DP6RX1", "DP6RX2", "DP7RX1", "DP7RX2", + "ASRC INT1", "ASRC INT2", "ASRC INT3", "ASRC INT4", + "ASRC DEC1", "ASRC DEC2", "ASRC DEC3", "ASRC DEC4", + "ISRC1 INT1", "ISRC1 INT2", + "ISRC1 DEC1", "ISRC1 DEC2", "ISRC1 DEC3", "ISRC1 DEC4", + "ISRC2 INT1", "ISRC2 INT2", + "ISRC2 DEC1", "ISRC2 DEC2", "ISRC2 DEC3", "ISRC2 DEC4", + "EQ1", "EQ2", +}; + +static const unsigned int cs42l43b_mixer_values[] =3D { + 0x00, // None + 0x04, 0x05, // Tone Generator 1, 2 + 0x10, 0x11, 0x80, 0x81, 0x12, 0x13, // Decimator 1, 2, 3, 4, 5, 6 + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, // ASPRX1,2,3,4,5,6 + 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, // DP5, 6, 7RX1, 2 + 0x40, 0x41, 0x42, 0x43, // ASRC INT1, 2, 3, 4 + 0x44, 0x45, 0x46, 0x47, // ASRC DEC1, 2, 3, 4 + 0x50, 0x51, // ISRC1 INT1, 2 + 0x52, 0x53, 0x78, 0x79, // ISRC1 DEC1, 2, 3, 4 + 0x54, 0x55, // ISRC2 INT1, 2 + 0x56, 0x57, 0x7A, 0x7B, // ISRC2 DEC1, 2, 3, 4 + 0x58, 0x59, // EQ1, 2 +}; + +/* A variant */ CS42L43_DECL_MUX(asptx1, CS42L43_ASPTX1_INPUT); CS42L43_DECL_MUX(asptx2, CS42L43_ASPTX2_INPUT); CS42L43_DECL_MUX(asptx3, CS42L43_ASPTX3_INPUT); @@ -946,6 +1064,63 @@ CS42L43_DECL_MIXER(amp2, CS42L43_AMP2MIX_INPUT1); CS42L43_DECL_MIXER(amp3, CS42L43_AMP3MIX_INPUT1); CS42L43_DECL_MIXER(amp4, CS42L43_AMP4MIX_INPUT1); +/* B variant */ +CS42L43B_DECL_MUX(b_asptx1, CS42L43_ASPTX1_INPUT); +CS42L43B_DECL_MUX(b_asptx2, CS42L43_ASPTX2_INPUT); +CS42L43B_DECL_MUX(b_asptx3, CS42L43_ASPTX3_INPUT); +CS42L43B_DECL_MUX(b_asptx4, CS42L43_ASPTX4_INPUT); +CS42L43B_DECL_MUX(b_asptx5, CS42L43_ASPTX5_INPUT); +CS42L43B_DECL_MUX(b_asptx6, CS42L43_ASPTX6_INPUT); + +CS42L43B_DECL_MUX(b_dp1tx1, CS42L43_SWIRE_DP1_CH1_INPUT); +CS42L43B_DECL_MUX(b_dp1tx2, CS42L43_SWIRE_DP1_CH2_INPUT); +CS42L43B_DECL_MUX(b_dp1tx3, CS42L43_SWIRE_DP1_CH3_INPUT); +CS42L43B_DECL_MUX(b_dp1tx4, CS42L43_SWIRE_DP1_CH4_INPUT); +CS42L43B_DECL_MUX(b_dp2tx1, CS42L43_SWIRE_DP2_CH1_INPUT); +CS42L43B_DECL_MUX(b_dp2tx2, CS42L43_SWIRE_DP2_CH2_INPUT); +CS42L43B_DECL_MUX(b_dp3tx1, CS42L43_SWIRE_DP3_CH1_INPUT); +CS42L43B_DECL_MUX(b_dp3tx2, CS42L43_SWIRE_DP3_CH2_INPUT); +CS42L43B_DECL_MUX(b_dp3tx3, CS42L43B_SWIRE_DP3_CH3_INPUT); +CS42L43B_DECL_MUX(b_dp3tx4, CS42L43B_SWIRE_DP3_CH4_INPUT); +CS42L43B_DECL_MUX(b_dp4tx1, CS42L43_SWIRE_DP4_CH1_INPUT); +CS42L43B_DECL_MUX(b_dp4tx2, CS42L43_SWIRE_DP4_CH2_INPUT); +CS42L43B_DECL_MUX(b_dp4tx3, CS42L43B_SWIRE_DP4_CH3_INPUT); +CS42L43B_DECL_MUX(b_dp4tx4, CS42L43B_SWIRE_DP4_CH4_INPUT); + +CS42L43B_DECL_MUX(b_asrcint1, CS42L43_ASRC_INT1_INPUT1); +CS42L43B_DECL_MUX(b_asrcint2, CS42L43_ASRC_INT2_INPUT1); +CS42L43B_DECL_MUX(b_asrcint3, CS42L43_ASRC_INT3_INPUT1); +CS42L43B_DECL_MUX(b_asrcint4, CS42L43_ASRC_INT4_INPUT1); +CS42L43B_DECL_MUX(b_asrcdec1, CS42L43_ASRC_DEC1_INPUT1); +CS42L43B_DECL_MUX(b_asrcdec2, CS42L43_ASRC_DEC2_INPUT1); +CS42L43B_DECL_MUX(b_asrcdec3, CS42L43_ASRC_DEC3_INPUT1); +CS42L43B_DECL_MUX(b_asrcdec4, CS42L43_ASRC_DEC4_INPUT1); + +CS42L43B_DECL_MUX(b_isrc1int1, CS42L43_ISRC1INT1_INPUT1); +CS42L43B_DECL_MUX(b_isrc1int2, CS42L43_ISRC1INT2_INPUT1); +CS42L43B_DECL_MUX(b_isrc1dec1, CS42L43_ISRC1DEC1_INPUT1); +CS42L43B_DECL_MUX(b_isrc1dec2, CS42L43_ISRC1DEC2_INPUT1); +CS42L43B_DECL_MUX(b_isrc1dec3, CS42L43B_ISRC1DEC3_INPUT1); +CS42L43B_DECL_MUX(b_isrc1dec4, CS42L43B_ISRC1DEC4_INPUT1); +CS42L43B_DECL_MUX(b_isrc2int1, CS42L43_ISRC2INT1_INPUT1); +CS42L43B_DECL_MUX(b_isrc2int2, CS42L43_ISRC2INT2_INPUT1); +CS42L43B_DECL_MUX(b_isrc2dec1, CS42L43_ISRC2DEC1_INPUT1); +CS42L43B_DECL_MUX(b_isrc2dec2, CS42L43_ISRC2DEC2_INPUT1); +CS42L43B_DECL_MUX(b_isrc2dec3, CS42L43B_ISRC2DEC3_INPUT1); +CS42L43B_DECL_MUX(b_isrc2dec4, CS42L43B_ISRC2DEC4_INPUT1); + +CS42L43B_DECL_MUX(b_spdif1, CS42L43_SPDIF1_INPUT1); +CS42L43B_DECL_MUX(b_spdif2, CS42L43_SPDIF2_INPUT1); + +CS42L43B_DECL_MIXER(b_eq1, CS42L43_EQ1MIX_INPUT1); +CS42L43B_DECL_MIXER(b_eq2, CS42L43_EQ2MIX_INPUT1); + +CS42L43B_DECL_MIXER(b_amp1, CS42L43_AMP1MIX_INPUT1); +CS42L43B_DECL_MIXER(b_amp2, CS42L43_AMP2MIX_INPUT1); + +CS42L43B_DECL_MIXER(b_amp3, CS42L43_AMP3MIX_INPUT1); +CS42L43B_DECL_MIXER(b_amp4, CS42L43_AMP4MIX_INPUT1); + static int cs42l43_dapm_get_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { @@ -1174,44 +1349,6 @@ static const struct snd_kcontrol_new cs42l43_control= s[] =3D { SOC_ENUM("Decimator 3 HPF Corner Frequency", cs42l43_dec3_hpf_corner), SOC_ENUM("Decimator 4 HPF Corner Frequency", cs42l43_dec4_hpf_corner), - SOC_SINGLE_TLV("Decimator 1 Volume", CS42L43_DECIM_VOL_CTRL_CH1_CH2, - CS42L43_DECIM1_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), - SOC_SINGLE_EXT("Decimator 1 Switch", CS42L43_DECIM_VOL_CTRL_CH1_CH2, - CS42L43_DECIM1_MUTE_SHIFT, 1, 1, - cs42l43_decim_get, cs42l43_dapm_put_volsw), - SOC_SINGLE_TLV("Decimator 2 Volume", CS42L43_DECIM_VOL_CTRL_CH1_CH2, - CS42L43_DECIM2_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), - SOC_SINGLE_EXT("Decimator 2 Switch", CS42L43_DECIM_VOL_CTRL_CH1_CH2, - CS42L43_DECIM2_MUTE_SHIFT, 1, 1, - cs42l43_decim_get, cs42l43_dapm_put_volsw), - SOC_SINGLE_TLV("Decimator 3 Volume", CS42L43_DECIM_VOL_CTRL_CH3_CH4, - CS42L43_DECIM3_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), - SOC_SINGLE_EXT("Decimator 3 Switch", CS42L43_DECIM_VOL_CTRL_CH3_CH4, - CS42L43_DECIM3_MUTE_SHIFT, 1, 1, - cs42l43_decim_get, cs42l43_dapm_put_volsw), - SOC_SINGLE_TLV("Decimator 4 Volume", CS42L43_DECIM_VOL_CTRL_CH3_CH4, - CS42L43_DECIM4_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), - SOC_SINGLE_EXT("Decimator 4 Switch", CS42L43_DECIM_VOL_CTRL_CH3_CH4, - CS42L43_DECIM4_MUTE_SHIFT, 1, 1, - cs42l43_decim_get, cs42l43_dapm_put_volsw), - - SOC_ENUM_EXT("Decimator 1 Ramp Up", cs42l43_dec1_ramp_up, - cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), - SOC_ENUM_EXT("Decimator 1 Ramp Down", cs42l43_dec1_ramp_down, - cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), - SOC_ENUM_EXT("Decimator 2 Ramp Up", cs42l43_dec2_ramp_up, - cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), - SOC_ENUM_EXT("Decimator 2 Ramp Down", cs42l43_dec2_ramp_down, - cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), - SOC_ENUM_EXT("Decimator 3 Ramp Up", cs42l43_dec3_ramp_up, - cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), - SOC_ENUM_EXT("Decimator 3 Ramp Down", cs42l43_dec3_ramp_down, - cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), - SOC_ENUM_EXT("Decimator 4 Ramp Up", cs42l43_dec4_ramp_up, - cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), - SOC_ENUM_EXT("Decimator 4 Ramp Down", cs42l43_dec4_ramp_down, - cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), - SOC_DOUBLE_R_EXT("Speaker Digital Switch", CS42L43_INTP_VOLUME_CTRL1, CS42L43_INTP_VOLUME_CTRL2, CS42L43_AMP_MUTE_SHIFT, 1, 1, @@ -1601,35 +1738,81 @@ static int cs42l43_mic_ev(struct snd_soc_dapm_widge= t *w, unsigned int *val; int ret; - switch (w->shift) { - case CS42L43_ADC1_EN_SHIFT: - case CS42L43_PDM1_DIN_L_EN_SHIFT: - reg =3D CS42L43_DECIM_VOL_CTRL_CH1_CH2; - ramp =3D CS42L43_DECIM1_VD_RAMP_MASK; - mute =3D CS42L43_DECIM1_MUTE_MASK; - val =3D &priv->decim_cache[0]; - break; - case CS42L43_ADC2_EN_SHIFT: - case CS42L43_PDM1_DIN_R_EN_SHIFT: - reg =3D CS42L43_DECIM_VOL_CTRL_CH1_CH2; - ramp =3D CS42L43_DECIM2_VD_RAMP_MASK; - mute =3D CS42L43_DECIM2_MUTE_MASK; - val =3D &priv->decim_cache[1]; - break; - case CS42L43_PDM2_DIN_L_EN_SHIFT: - reg =3D CS42L43_DECIM_VOL_CTRL_CH3_CH4; - ramp =3D CS42L43_DECIM3_VD_RAMP_MASK; - mute =3D CS42L43_DECIM3_MUTE_MASK; - val =3D &priv->decim_cache[2]; - break; - case CS42L43_PDM2_DIN_R_EN_SHIFT: - reg =3D CS42L43_DECIM_VOL_CTRL_CH3_CH4; - ramp =3D CS42L43_DECIM4_VD_RAMP_MASK; - mute =3D CS42L43_DECIM4_MUTE_MASK; - val =3D &priv->decim_cache[3]; - break; - default: - dev_err(priv->dev, "Invalid microphone shift: %d\n", w->shift); + if (cs42l43->variant_id =3D=3D CS42L43_DEVID_VAL) { + switch (w->shift) { + case CS42L43_ADC1_EN_SHIFT: + case CS42L43_PDM1_DIN_L_EN_SHIFT: + reg =3D CS42L43_DECIM_VOL_CTRL_CH1_CH2; + ramp =3D CS42L43_DECIM1_VD_RAMP_MASK; + mute =3D CS42L43_DECIM1_MUTE_MASK; + val =3D &priv->decim_cache[0]; + break; + case CS42L43_ADC2_EN_SHIFT: + case CS42L43_PDM1_DIN_R_EN_SHIFT: + reg =3D CS42L43_DECIM_VOL_CTRL_CH1_CH2; + ramp =3D CS42L43_DECIM2_VD_RAMP_MASK; + mute =3D CS42L43_DECIM2_MUTE_MASK; + val =3D &priv->decim_cache[1]; + break; + case CS42L43_PDM2_DIN_L_EN_SHIFT: + reg =3D CS42L43_DECIM_VOL_CTRL_CH3_CH4; + ramp =3D CS42L43_DECIM3_VD_RAMP_MASK; + mute =3D CS42L43_DECIM3_MUTE_MASK; + val =3D &priv->decim_cache[2]; + break; + case CS42L43_PDM2_DIN_R_EN_SHIFT: + reg =3D CS42L43_DECIM_VOL_CTRL_CH3_CH4; + ramp =3D CS42L43_DECIM4_VD_RAMP_MASK; + mute =3D CS42L43_DECIM4_MUTE_MASK; + val =3D &priv->decim_cache[3]; + break; + default: + dev_err(priv->dev, "Invalid microphone shift: %d\n", w->shift); + return -EINVAL; + } + } else if (cs42l43->variant_id =3D=3D CS42L43B_DEVID_VAL) { + switch (w->shift) { + case CS42L43_ADC1_EN_SHIFT: + reg =3D CS42L43B_DECIM_VOL_CTRL_CH1_CH2; + ramp =3D CS42L43_DECIM1_VD_RAMP_MASK; + mute =3D CS42L43_DECIM1_MUTE_MASK; + val =3D &priv->decim_cache[0]; + break; + case CS42L43_ADC2_EN_SHIFT: + reg =3D CS42L43B_DECIM_VOL_CTRL_CH1_CH2; + ramp =3D CS42L43_DECIM2_VD_RAMP_MASK; + mute =3D CS42L43_DECIM2_MUTE_MASK; + val =3D &priv->decim_cache[1]; + break; + case CS42L43_PDM1_DIN_L_EN_SHIFT: + reg =3D CS42L43B_DECIM_VOL_CTRL_CH3_CH4; + ramp =3D CS42L43_DECIM3_VD_RAMP_MASK; + mute =3D CS42L43_DECIM3_MUTE_MASK; + val =3D &priv->decim_cache[2]; + break; + case CS42L43_PDM1_DIN_R_EN_SHIFT: + reg =3D CS42L43B_DECIM_VOL_CTRL_CH3_CH4; + ramp =3D CS42L43_DECIM4_VD_RAMP_MASK; + mute =3D CS42L43_DECIM4_MUTE_MASK; + val =3D &priv->decim_cache[3]; + break; + case CS42L43_PDM2_DIN_L_EN_SHIFT: + reg =3D CS42L43B_DECIM_VOL_CTRL_CH5_CH6; + ramp =3D CS42L43B_DECIM5_PATH1_VOL_FALL_RATE_MASK; + mute =3D CS42L43B_DECIM5_MUTE_MASK; + val =3D &priv->decim_cache[4]; + break; + case CS42L43_PDM2_DIN_R_EN_SHIFT: + reg =3D CS42L43B_DECIM_VOL_CTRL_CH5_CH6; + ramp =3D CS42L43B_DECIM6_PATH1_VOL_FALL_RATE_MASK; + mute =3D CS42L43B_DECIM6_MUTE_MASK; + val =3D &priv->decim_cache[5]; + break; + default: + dev_err(priv->dev, "Invalid microphone shift: %d\n", w->shift); + return -EINVAL; + } + } else { return -EINVAL; } @@ -1722,11 +1905,6 @@ static const struct snd_soc_dapm_widget cs42l43_widg= ets[] =3D { 0, NULL, 0, cs42l43_mic_ev, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), - SND_SOC_DAPM_MUX("Decimator 1 Mode", SND_SOC_NOPM, 0, 0, - &cs42l43_dec_mode_ctl[0]), - SND_SOC_DAPM_MUX("Decimator 2 Mode", SND_SOC_NOPM, 0, 0, - &cs42l43_dec_mode_ctl[1]), - SND_SOC_DAPM_PGA("Decimator 1", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_PGA("Decimator 2", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_PGA("Decimator 3", SND_SOC_NOPM, 0, 0, NULL, 0), @@ -1871,53 +2049,6 @@ static const struct snd_soc_dapm_widget cs42l43_widg= ets[] =3D { SND_SOC_DAPM_SUPPLY("Mixer Core", CS42L43_BLOCK_EN6, CS42L43_MIXER_EN_SHI= FT, 0, NULL, 0), - CS42L43_DAPM_MUX("ASPTX1", asptx1), - CS42L43_DAPM_MUX("ASPTX2", asptx2), - CS42L43_DAPM_MUX("ASPTX3", asptx3), - CS42L43_DAPM_MUX("ASPTX4", asptx4), - CS42L43_DAPM_MUX("ASPTX5", asptx5), - CS42L43_DAPM_MUX("ASPTX6", asptx6), - - CS42L43_DAPM_MUX("DP1TX1", dp1tx1), - CS42L43_DAPM_MUX("DP1TX2", dp1tx2), - CS42L43_DAPM_MUX("DP1TX3", dp1tx3), - CS42L43_DAPM_MUX("DP1TX4", dp1tx4), - CS42L43_DAPM_MUX("DP2TX1", dp2tx1), - CS42L43_DAPM_MUX("DP2TX2", dp2tx2), - CS42L43_DAPM_MUX("DP3TX1", dp3tx1), - CS42L43_DAPM_MUX("DP3TX2", dp3tx2), - CS42L43_DAPM_MUX("DP4TX1", dp4tx1), - CS42L43_DAPM_MUX("DP4TX2", dp4tx2), - - CS42L43_DAPM_MUX("ASRC INT1", asrcint1), - CS42L43_DAPM_MUX("ASRC INT2", asrcint2), - CS42L43_DAPM_MUX("ASRC INT3", asrcint3), - CS42L43_DAPM_MUX("ASRC INT4", asrcint4), - CS42L43_DAPM_MUX("ASRC DEC1", asrcdec1), - CS42L43_DAPM_MUX("ASRC DEC2", asrcdec2), - CS42L43_DAPM_MUX("ASRC DEC3", asrcdec3), - CS42L43_DAPM_MUX("ASRC DEC4", asrcdec4), - - CS42L43_DAPM_MUX("ISRC1INT1", isrc1int1), - CS42L43_DAPM_MUX("ISRC1INT2", isrc1int2), - CS42L43_DAPM_MUX("ISRC1DEC1", isrc1dec1), - CS42L43_DAPM_MUX("ISRC1DEC2", isrc1dec2), - CS42L43_DAPM_MUX("ISRC2INT1", isrc2int1), - CS42L43_DAPM_MUX("ISRC2INT2", isrc2int2), - CS42L43_DAPM_MUX("ISRC2DEC1", isrc2dec1), - CS42L43_DAPM_MUX("ISRC2DEC2", isrc2dec2), - - CS42L43_DAPM_MUX("SPDIF1", spdif1), - CS42L43_DAPM_MUX("SPDIF2", spdif2), - - CS42L43_DAPM_MIXER("EQ1", eq1), - CS42L43_DAPM_MIXER("EQ2", eq2), - - CS42L43_DAPM_MIXER("Speaker L", amp1), - CS42L43_DAPM_MIXER("Speaker R", amp2), - - CS42L43_DAPM_MIXER("Headphone L", amp3), - CS42L43_DAPM_MIXER("Headphone R", amp4), }; static const struct snd_soc_dapm_route cs42l43_routes[] =3D { @@ -1963,16 +2094,6 @@ static const struct snd_soc_dapm_route cs42l43_route= s[] =3D { { "PDM2L", NULL, "PDM2_DIN" }, { "PDM2R", NULL, "PDM2_DIN" }, - { "Decimator 1 Mode", "PDM", "PDM1L" }, - { "Decimator 1 Mode", "ADC", "ADC1" }, - { "Decimator 2 Mode", "PDM", "PDM1R" }, - { "Decimator 2 Mode", "ADC", "ADC2" }, - - { "Decimator 1", NULL, "Decimator 1 Mode" }, - { "Decimator 2", NULL, "Decimator 2 Mode" }, - { "Decimator 3", NULL, "PDM2L" }, - { "Decimator 4", NULL, "PDM2R" }, - { "ASP Capture", NULL, "ASPTX1" }, { "ASP Capture", NULL, "ASPTX2" }, { "ASP Capture", NULL, "ASPTX3" }, @@ -2060,6 +2181,261 @@ static const struct snd_soc_dapm_route cs42l43_rout= es[] =3D { { "ASRC_DEC4", NULL, "ASRC_DEC" }, { "EQ", NULL, "EQ Clock" }, +}; + +static const struct snd_kcontrol_new cs42l43_a_controls[] =3D { + SOC_ENUM_EXT("Decimator 1 Ramp Up", cs42l43_dec1_ramp_up, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 1 Ramp Down", cs42l43_dec1_ramp_down, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 2 Ramp Up", cs42l43_dec2_ramp_up, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 2 Ramp Down", cs42l43_dec2_ramp_down, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 3 Ramp Up", cs42l43_dec3_ramp_up, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 3 Ramp Down", cs42l43_dec3_ramp_down, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 4 Ramp Up", cs42l43_dec4_ramp_up, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 4 Ramp Down", cs42l43_dec4_ramp_down, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + + SOC_SINGLE_TLV("Decimator 1 Volume", CS42L43_DECIM_VOL_CTRL_CH1_CH2, + CS42L43_DECIM1_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), + SOC_SINGLE_EXT("Decimator 1 Switch", CS42L43_DECIM_VOL_CTRL_CH1_CH2, + CS42L43_DECIM1_MUTE_SHIFT, 1, 1, + cs42l43_decim_get, cs42l43_dapm_put_volsw), + SOC_SINGLE_TLV("Decimator 2 Volume", CS42L43_DECIM_VOL_CTRL_CH1_CH2, + CS42L43_DECIM2_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), + SOC_SINGLE_EXT("Decimator 2 Switch", CS42L43_DECIM_VOL_CTRL_CH1_CH2, + CS42L43_DECIM2_MUTE_SHIFT, 1, 1, + cs42l43_decim_get, cs42l43_dapm_put_volsw), + SOC_SINGLE_TLV("Decimator 3 Volume", CS42L43_DECIM_VOL_CTRL_CH3_CH4, + CS42L43_DECIM3_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), + SOC_SINGLE_EXT("Decimator 3 Switch", CS42L43_DECIM_VOL_CTRL_CH3_CH4, + CS42L43_DECIM3_MUTE_SHIFT, 1, 1, + cs42l43_decim_get, cs42l43_dapm_put_volsw), + SOC_SINGLE_TLV("Decimator 4 Volume", CS42L43_DECIM_VOL_CTRL_CH3_CH4, + CS42L43_DECIM4_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), + SOC_SINGLE_EXT("Decimator 4 Switch", CS42L43_DECIM_VOL_CTRL_CH3_CH4, + CS42L43_DECIM4_MUTE_SHIFT, 1, 1, + cs42l43_decim_get, cs42l43_dapm_put_volsw), +}; + +static const struct snd_kcontrol_new cs42l43_b_controls[] =3D { + SOC_SINGLE_TLV("Decimator 1 Volume", CS42L43B_DECIM_VOL_CTRL_CH1_CH2, + CS42L43_DECIM1_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), + SOC_SINGLE_EXT("Decimator 1 Switch", CS42L43B_DECIM_VOL_CTRL_CH1_CH2, + CS42L43_DECIM1_MUTE_SHIFT, 1, 1, + cs42l43_decim_get, cs42l43_dapm_put_volsw), + SOC_SINGLE_TLV("Decimator 2 Volume", CS42L43B_DECIM_VOL_CTRL_CH1_CH2, + CS42L43_DECIM2_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), + SOC_SINGLE_EXT("Decimator 2 Switch", CS42L43B_DECIM_VOL_CTRL_CH1_CH2, + CS42L43_DECIM2_MUTE_SHIFT, 1, 1, + cs42l43_decim_get, cs42l43_dapm_put_volsw), + SOC_SINGLE_TLV("Decimator 3 Volume", CS42L43B_DECIM_VOL_CTRL_CH3_CH4, + CS42L43_DECIM3_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), + SOC_SINGLE_EXT("Decimator 3 Switch", CS42L43B_DECIM_VOL_CTRL_CH3_CH4, + CS42L43_DECIM3_MUTE_SHIFT, 1, 1, + cs42l43_decim_get, cs42l43_dapm_put_volsw), + SOC_SINGLE_TLV("Decimator 4 Volume", CS42L43B_DECIM_VOL_CTRL_CH3_CH4, + CS42L43_DECIM4_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), + SOC_SINGLE_EXT("Decimator 4 Switch", CS42L43B_DECIM_VOL_CTRL_CH3_CH4, + CS42L43_DECIM4_MUTE_SHIFT, 1, 1, + cs42l43_decim_get, cs42l43_dapm_put_volsw), + SOC_SINGLE_TLV("Decimator 5 Volume", CS42L43B_DECIM_VOL_CTRL_CH5_CH6, + CS42L43B_DECIM5_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), + SOC_SINGLE_EXT("Decimator 5 Switch", CS42L43B_DECIM_VOL_CTRL_CH5_CH6, + CS42L43B_DECIM5_MUTE_SHIFT, 1, 1, + cs42l43_decim_get, cs42l43_dapm_put_volsw), + SOC_SINGLE_TLV("Decimator 6 Volume", CS42L43B_DECIM_VOL_CTRL_CH5_CH6, + CS42L43B_DECIM6_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv), + SOC_SINGLE_EXT("Decimator 6 Switch", CS42L43B_DECIM_VOL_CTRL_CH5_CH6, + CS42L43B_DECIM6_MUTE_SHIFT, 1, 1, + cs42l43_decim_get, cs42l43_dapm_put_volsw), + + SOC_ENUM_EXT("Decimator 1 Ramp Up", cs42l43b_dec1_ramp_up, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 1 Ramp Down", cs42l43b_dec1_ramp_down, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 2 Ramp Up", cs42l43b_dec2_ramp_up, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 2 Ramp Down", cs42l43b_dec2_ramp_down, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 3 Ramp Up", cs42l43b_dec3_ramp_up, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 3 Ramp Down", cs42l43b_dec3_ramp_down, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 4 Ramp Up", cs42l43b_dec4_ramp_up, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 4 Ramp Down", cs42l43b_dec4_ramp_down, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 5 Ramp Up", cs42l43b_dec5_ramp_up, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 5 Ramp Down", cs42l43b_dec5_ramp_down, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 6 Ramp Up", cs42l43b_dec6_ramp_up, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + SOC_ENUM_EXT("Decimator 6 Ramp Down", cs42l43b_dec6_ramp_down, + cs42l43_dapm_get_enum, cs42l43_dapm_put_enum), + + SOC_SINGLE("Decimator 5 WNF Switch", CS42L43B_DECIM_HPF_WNF_CTRL5, + CS42L43_DECIM_WNF_EN_SHIFT, 1, 0), + SOC_SINGLE("Decimator 6 WNF Switch", CS42L43B_DECIM_HPF_WNF_CTRL6, + CS42L43_DECIM_WNF_EN_SHIFT, 1, 0), + + SOC_ENUM("Decimator 5 WNF Corner Frequency", cs42l43b_dec5_wnf_corner), + SOC_ENUM("Decimator 6 WNF Corner Frequency", cs42l43b_dec6_wnf_corner), + + SOC_SINGLE("Decimator 5 HPF Switch", CS42L43B_DECIM_HPF_WNF_CTRL5, + CS42L43_DECIM_HPF_EN_SHIFT, 1, 0), + SOC_SINGLE("Decimator 6 HPF Switch", CS42L43B_DECIM_HPF_WNF_CTRL6, + CS42L43_DECIM_HPF_EN_SHIFT, 1, 0), + + SOC_ENUM("Decimator 5 HPF Corner Frequency", cs42l43b_dec5_hpf_corner), + SOC_ENUM("Decimator 6 HPF Corner Frequency", cs42l43b_dec6_hpf_corner), +}; + +static const struct snd_soc_dapm_widget cs42l43_a_widgets[] =3D { + SND_SOC_DAPM_MUX("Decimator 1 Mode", SND_SOC_NOPM, 0, 0, + &cs42l43_dec_mode_ctl[0]), + SND_SOC_DAPM_MUX("Decimator 2 Mode", SND_SOC_NOPM, 0, 0, + &cs42l43_dec_mode_ctl[1]), + CS42L43_DAPM_MUX("ASPTX1", asptx1), + CS42L43_DAPM_MUX("ASPTX2", asptx2), + CS42L43_DAPM_MUX("ASPTX3", asptx3), + CS42L43_DAPM_MUX("ASPTX4", asptx4), + CS42L43_DAPM_MUX("ASPTX5", asptx5), + CS42L43_DAPM_MUX("ASPTX6", asptx6), + + CS42L43_DAPM_MUX("DP1TX1", dp1tx1), + CS42L43_DAPM_MUX("DP1TX2", dp1tx2), + CS42L43_DAPM_MUX("DP1TX3", dp1tx3), + CS42L43_DAPM_MUX("DP1TX4", dp1tx4), + CS42L43_DAPM_MUX("DP2TX1", dp2tx1), + CS42L43_DAPM_MUX("DP2TX2", dp2tx2), + CS42L43_DAPM_MUX("DP3TX1", dp3tx1), + CS42L43_DAPM_MUX("DP3TX2", dp3tx2), + CS42L43_DAPM_MUX("DP4TX1", dp4tx1), + CS42L43_DAPM_MUX("DP4TX2", dp4tx2), + + CS42L43_DAPM_MUX("ASRC INT1", asrcint1), + CS42L43_DAPM_MUX("ASRC INT2", asrcint2), + CS42L43_DAPM_MUX("ASRC INT3", asrcint3), + CS42L43_DAPM_MUX("ASRC INT4", asrcint4), + CS42L43_DAPM_MUX("ASRC DEC1", asrcdec1), + CS42L43_DAPM_MUX("ASRC DEC2", asrcdec2), + CS42L43_DAPM_MUX("ASRC DEC3", asrcdec3), + CS42L43_DAPM_MUX("ASRC DEC4", asrcdec4), + + CS42L43_DAPM_MUX("ISRC1INT1", isrc1int1), + CS42L43_DAPM_MUX("ISRC1INT2", isrc1int2), + CS42L43_DAPM_MUX("ISRC1DEC1", isrc1dec1), + CS42L43_DAPM_MUX("ISRC1DEC2", isrc1dec2), + CS42L43_DAPM_MUX("ISRC2INT1", isrc2int1), + CS42L43_DAPM_MUX("ISRC2INT2", isrc2int2), + CS42L43_DAPM_MUX("ISRC2DEC1", isrc2dec1), + CS42L43_DAPM_MUX("ISRC2DEC2", isrc2dec2), + + CS42L43_DAPM_MUX("SPDIF1", spdif1), + CS42L43_DAPM_MUX("SPDIF2", spdif2), + + CS42L43_DAPM_MIXER("EQ1", eq1), + CS42L43_DAPM_MIXER("EQ2", eq2), + + CS42L43_DAPM_MIXER("Speaker L", amp1), + CS42L43_DAPM_MIXER("Speaker R", amp2), + + CS42L43_DAPM_MIXER("Headphone L", amp3), + CS42L43_DAPM_MIXER("Headphone R", amp4), +}; + +static const struct snd_soc_dapm_widget cs42l43_b_widgets[] =3D { + SND_SOC_DAPM_AIF_OUT("DP3TX3", NULL, 2, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_OUT("DP3TX4", NULL, 3, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_OUT("DP4TX3", NULL, 2, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_OUT("DP4TX4", NULL, 3, SND_SOC_NOPM, 0, 0), + + SND_SOC_DAPM_PGA("Decimator 5", SND_SOC_NOPM, 0, 0, NULL, 0), + SND_SOC_DAPM_PGA("Decimator 6", SND_SOC_NOPM, 0, 0, NULL, 0), + + SND_SOC_DAPM_PGA("ISRC1DEC3", CS42L43_ISRC1_CTRL, + CS42L43B_ISRC_DEC3_EN_SHIFT, 0, NULL, 0), + SND_SOC_DAPM_PGA("ISRC1DEC4", CS42L43_ISRC1_CTRL, + CS42L43B_ISRC_DEC4_EN_SHIFT, 0, NULL, 0), + SND_SOC_DAPM_PGA("ISRC2DEC3", CS42L43_ISRC2_CTRL, + CS42L43B_ISRC_DEC3_EN_SHIFT, 0, NULL, 0), + SND_SOC_DAPM_PGA("ISRC2DEC4", CS42L43_ISRC2_CTRL, + CS42L43B_ISRC_DEC4_EN_SHIFT, 0, NULL, 0), + + CS42L43_DAPM_MUX("ASPTX1", b_asptx1), + CS42L43_DAPM_MUX("ASPTX2", b_asptx2), + CS42L43_DAPM_MUX("ASPTX3", b_asptx3), + CS42L43_DAPM_MUX("ASPTX4", b_asptx4), + CS42L43_DAPM_MUX("ASPTX5", b_asptx5), + CS42L43_DAPM_MUX("ASPTX6", b_asptx6), + + CS42L43_DAPM_MUX("DP1TX1", b_dp1tx1), + CS42L43_DAPM_MUX("DP1TX2", b_dp1tx2), + CS42L43_DAPM_MUX("DP1TX3", b_dp1tx3), + CS42L43_DAPM_MUX("DP1TX4", b_dp1tx4), + CS42L43_DAPM_MUX("DP2TX1", b_dp2tx1), + CS42L43_DAPM_MUX("DP2TX2", b_dp2tx2), + CS42L43_DAPM_MUX("DP3TX1", b_dp3tx1), + CS42L43_DAPM_MUX("DP3TX2", b_dp3tx2), + CS42L43_DAPM_MUX("DP3TX3", b_dp3tx3), + CS42L43_DAPM_MUX("DP3TX4", b_dp3tx4), + CS42L43_DAPM_MUX("DP4TX1", b_dp4tx1), + CS42L43_DAPM_MUX("DP4TX2", b_dp4tx2), + CS42L43_DAPM_MUX("DP4TX3", b_dp4tx3), + CS42L43_DAPM_MUX("DP4TX4", b_dp4tx4), + + CS42L43_DAPM_MUX("ASRC INT1", b_asrcint1), + CS42L43_DAPM_MUX("ASRC INT2", b_asrcint2), + CS42L43_DAPM_MUX("ASRC INT3", b_asrcint3), + CS42L43_DAPM_MUX("ASRC INT4", b_asrcint4), + CS42L43_DAPM_MUX("ASRC DEC1", b_asrcdec1), + CS42L43_DAPM_MUX("ASRC DEC2", b_asrcdec2), + CS42L43_DAPM_MUX("ASRC DEC3", b_asrcdec3), + CS42L43_DAPM_MUX("ASRC DEC4", b_asrcdec4), + + CS42L43_DAPM_MUX("ISRC1INT1", b_isrc1int1), + CS42L43_DAPM_MUX("ISRC1INT2", b_isrc1int2), + CS42L43_DAPM_MUX("ISRC1DEC1", b_isrc1dec1), + CS42L43_DAPM_MUX("ISRC1DEC2", b_isrc1dec2), + CS42L43_DAPM_MUX("ISRC1DEC3", b_isrc1dec3), + CS42L43_DAPM_MUX("ISRC1DEC4", b_isrc1dec4), + CS42L43_DAPM_MUX("ISRC2INT1", b_isrc2int1), + CS42L43_DAPM_MUX("ISRC2INT2", b_isrc2int2), + CS42L43_DAPM_MUX("ISRC2DEC1", b_isrc2dec1), + CS42L43_DAPM_MUX("ISRC2DEC2", b_isrc2dec2), + CS42L43_DAPM_MUX("ISRC2DEC3", b_isrc2dec3), + CS42L43_DAPM_MUX("ISRC2DEC4", b_isrc2dec4), + + CS42L43_DAPM_MUX("SPDIF1", b_spdif1), + CS42L43_DAPM_MUX("SPDIF2", b_spdif2), + + CS42L43_DAPM_MIXER("EQ1", b_eq1), + CS42L43_DAPM_MIXER("EQ2", b_eq2), + + CS42L43_DAPM_MIXER("Speaker L", b_amp1), + CS42L43_DAPM_MIXER("Speaker R", b_amp2), + + CS42L43_DAPM_MIXER("Headphone L", b_amp3), + CS42L43_DAPM_MIXER("Headphone R", b_amp4), +}; + +static const struct snd_soc_dapm_route cs42l43_a_routes[] =3D { + { "Decimator 1 Mode", "PDM", "PDM1L" }, + { "Decimator 1 Mode", "ADC", "ADC1" }, + { "Decimator 2 Mode", "PDM", "PDM1R" }, + { "Decimator 2 Mode", "ADC", "ADC2" }, + + { "Decimator 1", NULL, "Decimator 1 Mode" }, + { "Decimator 2", NULL, "Decimator 2 Mode" }, + { "Decimator 3", NULL, "PDM2L" }, + { "Decimator 4", NULL, "PDM2R" }, CS42L43_MUX_ROUTES("ASPTX1", "ASPTX1"), CS42L43_MUX_ROUTES("ASPTX2", "ASPTX2"), @@ -2110,6 +2486,81 @@ static const struct snd_soc_dapm_route cs42l43_route= s[] =3D { CS42L43_MIXER_ROUTES("Headphone R", "HP"), }; +static const struct snd_soc_dapm_route cs42l43_b_routes[] =3D { + { "Decimator 1", NULL, "ADC1" }, + { "Decimator 2", NULL, "ADC2" }, + { "Decimator 3", NULL, "PDM1L" }, + { "Decimator 4", NULL, "PDM1R" }, + { "Decimator 5", NULL, "PDM2L" }, + { "Decimator 6", NULL, "PDM2R" }, + + { "DP3 Capture", NULL, "DP3TX3" }, + { "DP3 Capture", NULL, "DP3TX4" }, + { "DP4 Capture", NULL, "DP4TX3" }, + { "DP4 Capture", NULL, "DP4TX4" }, + + { "ISRC1DEC3", NULL, "ISRC1" }, + { "ISRC1DEC4", NULL, "ISRC1" }, + { "ISRC2DEC3", NULL, "ISRC2" }, + { "ISRC2DEC4", NULL, "ISRC2" }, + + CS42L43B_MUX_ROUTES("ASPTX1", "ASPTX1"), + CS42L43B_MUX_ROUTES("ASPTX2", "ASPTX2"), + CS42L43B_MUX_ROUTES("ASPTX3", "ASPTX3"), + CS42L43B_MUX_ROUTES("ASPTX4", "ASPTX4"), + CS42L43B_MUX_ROUTES("ASPTX5", "ASPTX5"), + CS42L43B_MUX_ROUTES("ASPTX6", "ASPTX6"), + + CS42L43B_MUX_ROUTES("DP1TX1", "DP1TX1"), + CS42L43B_MUX_ROUTES("DP1TX2", "DP1TX2"), + CS42L43B_MUX_ROUTES("DP1TX3", "DP1TX3"), + CS42L43B_MUX_ROUTES("DP1TX4", "DP1TX4"), + CS42L43B_MUX_ROUTES("DP2TX1", "DP2TX1"), + CS42L43B_MUX_ROUTES("DP2TX2", "DP2TX2"), + CS42L43B_MUX_ROUTES("DP3TX1", "DP3TX1"), + CS42L43B_MUX_ROUTES("DP3TX2", "DP3TX2"), + CS42L43B_MUX_ROUTES("DP3TX3", "DP3TX3"), + CS42L43B_MUX_ROUTES("DP3TX4", "DP3TX4"), + CS42L43B_MUX_ROUTES("DP4TX1", "DP4TX1"), + CS42L43B_MUX_ROUTES("DP4TX2", "DP4TX2"), + CS42L43B_MUX_ROUTES("DP4TX3", "DP4TX3"), + CS42L43B_MUX_ROUTES("DP4TX4", "DP4TX4"), + + CS42L43B_MUX_ROUTES("ASRC INT1", "ASRC_INT1"), + CS42L43B_MUX_ROUTES("ASRC INT2", "ASRC_INT2"), + CS42L43B_MUX_ROUTES("ASRC INT3", "ASRC_INT3"), + CS42L43B_MUX_ROUTES("ASRC INT4", "ASRC_INT4"), + CS42L43B_MUX_ROUTES("ASRC DEC1", "ASRC_DEC1"), + CS42L43B_MUX_ROUTES("ASRC DEC2", "ASRC_DEC2"), + CS42L43B_MUX_ROUTES("ASRC DEC3", "ASRC_DEC3"), + CS42L43B_MUX_ROUTES("ASRC DEC4", "ASRC_DEC4"), + + CS42L43B_MUX_ROUTES("ISRC1INT1", "ISRC1INT1"), + CS42L43B_MUX_ROUTES("ISRC1INT2", "ISRC1INT2"), + CS42L43B_MUX_ROUTES("ISRC1DEC1", "ISRC1DEC1"), + CS42L43B_MUX_ROUTES("ISRC1DEC2", "ISRC1DEC2"), + CS42L43B_MUX_ROUTES("ISRC1DEC3", "ISRC1DEC3"), + CS42L43B_MUX_ROUTES("ISRC1DEC4", "ISRC1DEC4"), + CS42L43B_MUX_ROUTES("ISRC2INT1", "ISRC2INT1"), + CS42L43B_MUX_ROUTES("ISRC2INT2", "ISRC2INT2"), + CS42L43B_MUX_ROUTES("ISRC2DEC1", "ISRC2DEC1"), + CS42L43B_MUX_ROUTES("ISRC2DEC2", "ISRC2DEC2"), + CS42L43B_MUX_ROUTES("ISRC2DEC3", "ISRC2DEC3"), + CS42L43B_MUX_ROUTES("ISRC2DEC4", "ISRC2DEC4"), + + CS42L43B_MUX_ROUTES("SPDIF1", "SPDIF"), + CS42L43B_MUX_ROUTES("SPDIF2", "SPDIF"), + + CS42L43B_MIXER_ROUTES("EQ1", "EQ"), + CS42L43B_MIXER_ROUTES("EQ2", "EQ"), + + CS42L43B_MIXER_ROUTES("Speaker L", "AMP1"), + CS42L43B_MIXER_ROUTES("Speaker R", "AMP2"), + + CS42L43B_MIXER_ROUTES("Headphone L", "HP"), + CS42L43B_MIXER_ROUTES("Headphone R", "HP"), +}; + static int cs42l43_set_sysclk(struct snd_soc_component *component, int clk= _id, int src, unsigned int freq, int dir) { @@ -2126,8 +2577,14 @@ static int cs42l43_set_sysclk(struct snd_soc_compone= nt *component, int clk_id, static int cs42l43_component_probe(struct snd_soc_component *component) { + struct snd_soc_dapm_context *dapm =3D snd_soc_component_get_dapm(componen= t); struct cs42l43_codec *priv =3D snd_soc_component_get_drvdata(component); + unsigned int num_controls, num_widgets, num_routes; + const struct snd_soc_dapm_widget *widgets; + const struct snd_kcontrol_new *controls; + const struct snd_soc_dapm_route *routes; struct cs42l43 *cs42l43 =3D priv->core; + int ret; snd_soc_component_init_regmap(component, cs42l43->regmap); @@ -2139,6 +2596,39 @@ static int cs42l43_component_probe(struct snd_soc_co= mponent *component) priv->component =3D component; priv->constraint =3D cs42l43_constraint; + switch (cs42l43->variant_id) { + case CS42L43_DEVID_VAL: + controls =3D cs42l43_a_controls; + num_controls =3D ARRAY_SIZE(cs42l43_a_controls); + widgets =3D cs42l43_a_widgets; + num_widgets =3D ARRAY_SIZE(cs42l43_a_widgets); + routes =3D cs42l43_a_routes; + num_routes =3D ARRAY_SIZE(cs42l43_a_routes); + break; + case CS42L43B_DEVID_VAL: + controls =3D cs42l43_b_controls; + num_controls =3D ARRAY_SIZE(cs42l43_b_controls); + widgets =3D cs42l43_b_widgets; + num_widgets =3D ARRAY_SIZE(cs42l43_b_widgets); + routes =3D cs42l43_b_routes; + num_routes =3D ARRAY_SIZE(cs42l43_b_routes); + break; + default: + return -EINVAL; + } + + ret =3D snd_soc_add_component_controls(component, controls, num_controls); + if (ret) + return ret; + + ret =3D snd_soc_dapm_new_controls(dapm, widgets, num_widgets); + if (ret) + return ret; + + ret =3D snd_soc_dapm_add_routes(dapm, routes, num_routes); + if (ret) + return ret; + return 0; } diff --git a/sound/soc/codecs/cs42l43.h b/sound/soc/codecs/cs42l43.h index b2fa2cd1d99f8..fd50feb26ae99 100644 --- a/sound/soc/codecs/cs42l43.h +++ b/sound/soc/codecs/cs42l43.h @@ -61,7 +61,7 @@ struct cs42l43_codec { unsigned int refclk_freq; struct completion pll_ready; - unsigned int decim_cache[4]; + unsigned int decim_cache[6]; unsigned int adc_ena; unsigned int hp_ena; @@ -103,7 +103,7 @@ struct cs42l43_codec { bool hp_ilimited; int hp_ilimit_count; - struct snd_kcontrol *kctl[5]; + struct snd_kcontrol *kctl[7]; }; #if IS_REACHABLE(CONFIG_SND_SOC_CS42L43_SDW) -- 2.47.3