From nobody Sat Feb 7 08:44:18 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 8759A2E3B1C; Fri, 23 Jan 2026 15:10:16 +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=1769181030; cv=fail; b=Vk8P4hflaeiDLRaCSsC0Q+AG5CoHbggwbnQFeNzX0t2JxEbJR1TxpCJXqgTZyrc6ehfCvOMoroucRj9Ni5jDLXptAm+qYgi1/e40Vot+ol1vhXBIK/xkuTe7YA0aKEjuiU+El0FEJeq1t0RoNa8AgCo1Xx9yr6aeggEwuPy5vec= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769181030; c=relaxed/simple; bh=GSLu4caccebvXuqJDTR9Ishb7HIOeS11JD1AdadWztw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PJpqYJVUeaB0WBIVmPVJhQfqKDND6UZ7FQBr0xB2F+ikN9a0XFdoTBz/4GS/5OlsoDbUhTY7poUGGXp7MkMHM+bqZ7vK2BINr0sc9GgQX6sCj1FSkqlxjlceAqYBrmhjeHkZJKz4LKJ+/VtlrGZxjIhtHuHeLolrcxwjNza5LDs= 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=NH/+dBJZ; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=lNk/jFnu; 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="NH/+dBJZ"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="lNk/jFnu" 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 60N5eaXK3358802; Fri, 23 Jan 2026 09:09:58 -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=61jFpIR+KDCSIbIR+Je9mX1nl2ePnt128AHcsCZmOBA=; b= NH/+dBJZQsCUGj8bBxSixUud5npMnLkwkoKZEFQhMQiS2u9VaLoynmNlRX1tfQMg blsjX1J6IZ9soxV8sW3wxSWU13sRTBRE3hErkBpTfGBFiPnHWSeY7LV4Jkk9kPoK p4r3FDP+Xxh+5dDp0KgP37xZJIVcthzjsbmKEW1cjzwKYb22FAW5+XdmCVQiWdNM YCdTEEMP7WT9Q7skoIrmb3yy4UuAK+NPMySVtC9WN645RCahSS5x93g0+6FHQYnb 26KWRQcrotDa7SNubzUDvbpLZIO8m6uUFNSsP6GeH2tRNhVUZB/PV71BGGKQ/yX1 CCKXnCeu1gg30eq4okbqwA== Received: from sn4pr2101cu001.outbound.protection.outlook.com (mail-southcentralusazon11022083.outbound.protection.outlook.com [40.93.195.83]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 4br8q1ypdn-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 23 Jan 2026 09:09:58 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=h8yIYRtlfz4WzHqrGilLeJLj5euGZP7sKUXhUUUUm7v+rSIqW1x+Z2Y2cKZLwCTd9Eht/n9HY9K+e0n7YFN5xUzn0/xHMmD81M61Y07+iOMLeUjFeFsrk6f5eWuka1j8qO8MkuU2hMKGEqUpZmf+e2qyFT5CQHtu13vK+QssO8NgqVEsDsNhVlOsU/AlublAn8YUM6Uc6+na5buXCwWVBU1TfeyuS+EAwHLb0VFxx8L3OwyzzNscB6WSg/tU0xZtruqVGp5HqwTN2cQOGTzkTpQzUOzmkBC4FyLQvWsSGuRGLy93dlihhG0J5JIjFamEl4LVQgN/KJu43Zp5zdcTmg== 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=61jFpIR+KDCSIbIR+Je9mX1nl2ePnt128AHcsCZmOBA=; b=GcdM2JBLb7lS3aWyykmkob/Xeg0WV6GSIx/RfTdX6/njslVYHulGvCw14jvqf6nMGpR7RYWttCDZRSoxP9eNA3cx/51M0BA0JMD9yqklT+DESmnd8HPUBnPSkYECTHp/leeEu33ctX48N2O21LNI7kVX6zBFgGTqkwgqBiLBpCOS3rkAaYVCeZATS3pY7PHMC1wT4APWrMtlx54l0eYMb0VmpEc7Zi+RMPRPT8Qc6wvnVT1UE4iMEUJRD/DgD6rmWd5XlXQdFSDrYi0srL6RIyCDl4W8KOLtKiyJwrs2K27cuI3VS0p2TIvVRX32BfZaB6JvRP3DIAL6K3mysLVjNw== 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=61jFpIR+KDCSIbIR+Je9mX1nl2ePnt128AHcsCZmOBA=; b=lNk/jFnuNm3N4rqaUqTQV/K7U4aKOKzlaWzkkts98jpla34ROaG76Aa2zW9j1jSvaXMGvX1RX98It/9f3dHJZ3nCRdGcz+N8KqpLWebpORlzsu82+p96MDDLTafQtn+IvkmabRKNMHqFbVLF3VFUDPiHm2b/ojHuz9BOR49zSzI= Received: from CH5P220CA0001.NAMP220.PROD.OUTLOOK.COM (2603:10b6:610:1ef::7) by DS0PR19MB7348.namprd19.prod.outlook.com (2603:10b6:8:152::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.11; Fri, 23 Jan 2026 15:09:53 +0000 Received: from CH2PEPF00000149.namprd02.prod.outlook.com (2603:10b6:610:1ef:cafe::4c) by CH5P220CA0001.outlook.office365.com (2603:10b6:610:1ef::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9542.11 via Frontend Transport; Fri, 23 Jan 2026 15:09:48 +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 CH2PEPF00000149.mail.protection.outlook.com (10.167.244.106) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9542.4 via Frontend Transport; Fri, 23 Jan 2026 15:09:52 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id 912DB406541; Fri, 23 Jan 2026 15:09:51 +0000 (UTC) Received: from upx-mtl-008.ad.cirrus.com (upx-mtl-008.ad.cirrus.com [198.90.251.5]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id 66CCA82024A; Fri, 23 Jan 2026 15:09:51 +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 v3 1/4] ASoC: sdw_utils: Add CS42L43B codec info Date: Fri, 23 Jan 2026 15:09:36 +0000 Message-ID: <20260123150945.100038-2-mstrozek@opensource.cirrus.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20260123150945.100038-1-mstrozek@opensource.cirrus.com> References: <20260123150945.100038-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: CH2PEPF00000149:EE_|DS0PR19MB7348:EE_ X-MS-Office365-Filtering-Correlation-Id: 3ad52dfb-ec87-4a95-bd84-08de5a9175e0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|61400799027|7416014|376014|36860700013|54012099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?h7KCxnFpnoTx0Mj3aVgdEUsv3IKseYizNfcN462hzGSdWGd5+E/NAF+YlI/f?= =?us-ascii?Q?29PDjab/XGASRQVXyZE2wL9T8OZw/ajAjSzm9/pky25lPJZqQOBTD5bqKcS0?= =?us-ascii?Q?TP0lMcadwR/uCRiibOLC9GGWBy0SYEVJssNeOYy9IHgS9dDfe+CV2rUieLK3?= =?us-ascii?Q?iZuJ7CHI0M0PqtlJUiv4OjkVnio2Q4TBCyxWdfcufoZr0mNFFafFDjBqcu18?= =?us-ascii?Q?L+VJE28aTQvGwHOG4gi/IuChwRWA/K7vlJrYN1UwQF4vtuKov6a+1/Ce8RfX?= =?us-ascii?Q?QnePWgCXf8Pc5h5k57ojo8dzGMZb+FGLw0n9N7bEycoRpndt8WzoVK+pYsbq?= =?us-ascii?Q?G3BKum4TSfitbr20pjP56sCL41HelOqQ0iJjn6MHSdKuZ5eEY+6xpRL7OZw7?= =?us-ascii?Q?1lm8cC8coJVaLOFQp8noq+A4O8wItPkyZvG6I/akFY9er7Hu83UAFUo0FsOj?= =?us-ascii?Q?PoNeGGrE8StKflsRSirroHGY+Gk2qH386M18RU7wmmsQhfZvsQUjE7Ocfipj?= =?us-ascii?Q?8axjFLOa090+0h8j9hg5D2N43HoCsYh2rqfNi1YAhgZoI1bEja+Kej6EVL8s?= =?us-ascii?Q?Czd7Hz7yn+DGA4mkhDe6mSLBpvXhls0l36eooskJDMx9cTwDcUVDfsOJNydr?= =?us-ascii?Q?StUlNSOPEVH7EuALr256XOxcwEVYNaOlFHn6L5yBU+zAFYuPEBnxCm65M0ij?= =?us-ascii?Q?H8e4d59m6pN4ZQpBkQCnA3FwLeOZVyZlyRAsMI6DlkbmHuUIEg5s4nPzymSN?= =?us-ascii?Q?n5ZkSjKUTRcP/4mvGEg5sIu5wFzShvPV6oNFkvk5EbLvNPaDfYtiVeDVEocF?= =?us-ascii?Q?AHa7LoA/Dga6la/R/F85Fj2aQPviTRPx7j7syZAEaAaK2vNy0txoutacYsxR?= =?us-ascii?Q?iBue2JbcEXGGL8D21HPX0vxloxxdHY3mYL7dvdkO+3O58ls06TY9oeBJMlCN?= =?us-ascii?Q?GL8QxdNpdFSgtIn9CbV5p/s3qA5M75ClRolFX67X1Px8/P6/t/fKDopPBlqg?= =?us-ascii?Q?GqpSNnsf6TMw5z0J+nnuMtNGujWFkz1E3l61s0G0grP82D+XUJx1gce768kT?= =?us-ascii?Q?NJNWP1n+SXrQXR+86Rgoi0PUTrjIoPX+r0weCEo6s1/5kSpqXw+O7rDmWu1m?= =?us-ascii?Q?EUAZ3h0QV86wPskzyMLnHwmOHq21vr7/4HclODeRKlwzq1esX/TwE8S0aWJV?= =?us-ascii?Q?4FUkIynx2TXGM++0pTr5ZdPMgZLdVcWiRl7jjo5niHBRqdxrBRi7P7CZd2tC?= =?us-ascii?Q?Rnv7j/Impg7fB7howpDE0B8ixanfGE84pICI9T4fBTq4HjxfeBmX9kMDyld0?= =?us-ascii?Q?woJvss4hcbl44kFm1WKbhs4BfjP2C5CwSBnrT3lP8Vg5bWU5t1dB0ICtqth+?= =?us-ascii?Q?cHN6iuvMPZbuYYfwWwqwyTA5LpRKGqsYOZ8ZjL+AZr8fcN6uBAOmNLcHTJ5/?= =?us-ascii?Q?JyQDaG/mKqHpncj7Dpzz7ObT1bdyJKVSJRhlvONoh1MmZA35iEoIam0hMOLc?= =?us-ascii?Q?zwNk5DM8a1mfVEf96pPkTOaQ/GrW9/kXbDekAE35gSOUWRDP3IxJpsyvfjMz?= =?us-ascii?Q?jneMQXtdgn5+OVMNAli18mIVjNQhWoh3onK3CBwOYReBBRf8fB8j5j9TYPBZ?= =?us-ascii?Q?PmQDx2+8IdPVXDOgdrxNyEnfQZLU1mktCetT+1D1TpH2khbZdHHdFzVXat+u?= =?us-ascii?Q?+p+Fxg=3D=3D?= 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)(82310400026)(61400799027)(7416014)(376014)(36860700013)(54012099003);DIR:OUT;SFP:1102; X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 15:09:52.5295 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3ad52dfb-ec87-4a95-bd84-08de5a9175e0 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-CH2PEPF00000149.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR19MB7348 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTIzMDExOCBTYWx0ZWRfX0vVHIRFo0Lww GYgnDW61WBCrBKalv+yirSn5DxGxFj9bHYL1cco4PsFInDQfcueD/bMQ5ME6+9Jv9adjdzF1cFA wkhKb+QsCAuZyEmDT8D+dbiXM/bBumllhgeCSbOAR/YUGIsdHX9clxtMbTspqH8+YSQEUzX02O9 BOMk2hBH4MhI5qt9KjYUUEUkCr75wVAOiFcmAiVIHeSNTmYSDWnJ93yCJBw0snnUIMkK/Qkpd8r ntzNz//uDzxO+jjnUvhM2nTNIQeTi77DoWlzttmq+7X7ov6EYWA6excH9axNvOS2901/zu0k+DY Mt+Db7UYiiFODVjWuEyF+3maa7mN6ovgGK+B76uVhfOhfWk6ZRXPTFBJCQZFsysnyAAQrFgrNHR wzPaWCbCv1vPhw4rI+63AUizwwg6UEXrNG+CPY6uOsUMDnPEQo4KJBut6LmYU+INfguT7qqLC9g Kp5dHjmd8nNREt0ZFPA== X-Proofpoint-GUID: wQV3naduVk_NDb9Au95lLvkppUs-lhyW X-Proofpoint-ORIG-GUID: wQV3naduVk_NDb9Au95lLvkppUs-lhyW X-Authority-Analysis: v=2.4 cv=JbmxbEKV c=1 sm=1 tr=0 ts=69738f46 cx=c_pps a=qXrkyhrtrlo5bn8cMY6OCA==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=vUbySO9Y5rIA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=w1d2syhTAAAA:8 a=tJGs-QWwAZckUbUC11UA:9 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 or v3 --- 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 2f3c9698a0e8..196f17c908f8 100644 --- a/sound/soc/sdw_utils/soc_sdw_utils.c +++ b/sound/soc/sdw_utils/soc_sdw_utils.c @@ -721,6 +721,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.48.1 From nobody Sat Feb 7 08:44:18 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 7DD3F33506B; Fri, 23 Jan 2026 15:10:19 +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=1769181035; cv=fail; b=Q2BZu/MtuxJwlWT9qscUhrCnEUN/7ubkId84wY1/dkDapXmgQbDr4QLUaXCF+KAXvjYKUMNv5EKhpDc0rHwxFADTj+CXuaRs1Ph1Jp49h1wRUKcG1oJ8UMCPTCtBQczJE6/7ZJieYHX8x9cBCSXDTXw5lPYBkcUriIE3uZJoiM4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769181035; c=relaxed/simple; bh=NITOH1KxCtzbWeD3kapAuPxTYhIVbDz0AsGz4LCsWe4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JRq4UXuvx5LMqkZbWzEB740Ecrw1yxFLrRPHOv7oiVZP16TAXZBMnzt/wBxQ1ME0TaJb10NsZFtxmOTNpBj8J+lsw21SI1S2q80bMlEY2G2IAXzwSM7OxwCfGZZUNVGcB+huUwgLgeSRe8zm5NtI8ChaJwPKG3bMLYlxjt7WLeQ= 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=GaoUFt+5; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=Ije4MARW; 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="GaoUFt+5"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="Ije4MARW" 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 60N6oVT73471213; Fri, 23 Jan 2026 09:09:58 -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=hcSRshBSZKCkPfP/kfIPJsh60jTz7Xz/jIxxWjqu+J8=; b= GaoUFt+5zl6I18abfxNK8/AenIJ9FJv8THr7SQ9McOo0Y9NGdiqJYBBN3h5yMwhj rtZ3OXCqPUjUIBD8vk1p0QMjGvu4anI33VX0pztuH1xyrbPAraEyyEUP02A5uKNz L7N27jb1YP2fkOQG8Yo1HV7N88O1VhfzlhhtSSJQakJEbDXMy4/2+BWSkrM+NI4X nX4+KWs8Fq9SRtvmOS0w7MU033IhKsGSU/qo+7Q1/3ABF2ReG6vXK/p8LXhuHRpi Ev/5KR3fDKGaUbVo4vEiOnagAFs+rripUf11E4cDAOrmFFjUWgCwmsSl/RwlkxXI 6U1i6+XIzzRH0DKBpdzo0w== Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11020072.outbound.protection.outlook.com [52.101.56.72]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 4br8q1ypdk-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 23 Jan 2026 09:09:58 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IJ337tqnfYpkErPWwMDRKzChwRGFaqigjZAm30lfO8vEadnzsiSt6O+8Ql9BnBFMLHjCgdszI4vh7IqZaC7VmKPGa5vYm/OL7L9FlGmwUZcsbTglZxUT2UhWBIixRq45kggeg9e2EzKRLRDVFXUxUwJp1VKIvfBL1O9Yjx75hHi4+N2BEdBr3daXujCbOLuBfd8PxIBUgJxP2wEibElfOrHtG/bQFQAQc++XWshijjj4mAE3QDdkWQeaiQS/nWV7YyTPbDtKcXcyM7XovcMdlpedq4VrhizvqrtjglLhJKv44AGV1W/En+uzbyVA7fSNZfxtq1mHaiIr/V2UZTNfDg== 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=hcSRshBSZKCkPfP/kfIPJsh60jTz7Xz/jIxxWjqu+J8=; b=O6b/GNlFLHx0l2L9PkeEvf3V102wASSiNs5XqccskcGQzluJqyg2c2d+n/WJXY9bNyMXzZOY+7vr2wDfQboIiAahks1UbG55V9RRdgwm5P5W+DPivi0dazd4/x2NxZlmepmx/GymoBgM0wDc58fzAtxHXs+zLmw7fIGo+rW7Xj8sHpbdZ/nyb7bfX4o7pTST4duLx6X1kiwYvCOdi1BY1z/2oO+9O+16GPLh/UJXbnlfh+e8czsrr3mSBq/BGzUig87QZrMTi3V+yMidw1ycUyXjve/hM753Bfk6Y9v5MShXpdneTMiJmafRFFgQTjObkKn/mTPV3b+xK5QY7ZT11Q== 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=hcSRshBSZKCkPfP/kfIPJsh60jTz7Xz/jIxxWjqu+J8=; b=Ije4MARWvxGz1vxrXR87geIjcuH4euh2TaySHp06jyogXGybvSXVqr9mZrB/Rx4SL+s0YSim2Gj7TLp2r2HnplgFncNW7OupHJelMBPT2KcoO6/NPRpeByME/rmL4LXCPs3xnUe/abn8N9y7JUsLj6hK/y/wPNxySToZKxjy9i0= Received: from SJ0PR05CA0191.namprd05.prod.outlook.com (2603:10b6:a03:330::16) by DM4PR19MB5833.namprd19.prod.outlook.com (2603:10b6:8:64::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.11; Fri, 23 Jan 2026 15:09:54 +0000 Received: from CO1PEPF000042AA.namprd03.prod.outlook.com (2603:10b6:a03:330:cafe::c4) by SJ0PR05CA0191.outlook.office365.com (2603:10b6:a03:330::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.4 via Frontend Transport; Fri, 23 Jan 2026 15:09:50 +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 CO1PEPF000042AA.mail.protection.outlook.com (10.167.243.39) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.3 via Frontend Transport; Fri, 23 Jan 2026 15:09:52 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id 9680F406542; Fri, 23 Jan 2026 15:09:51 +0000 (UTC) Received: from upx-mtl-008.ad.cirrus.com (upx-mtl-008.ad.cirrus.com [198.90.251.5]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id 6AD0A82024B; Fri, 23 Jan 2026 15:09:51 +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 v3 2/4] ASoC: dt-bindings: cirrus,cs42l43: Add CS42L43B variant Date: Fri, 23 Jan 2026 15:09:37 +0000 Message-ID: <20260123150945.100038-3-mstrozek@opensource.cirrus.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20260123150945.100038-1-mstrozek@opensource.cirrus.com> References: <20260123150945.100038-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: CO1PEPF000042AA:EE_|DM4PR19MB5833:EE_ X-MS-Office365-Filtering-Correlation-Id: 05322026-7dd0-48ca-4bfa-08de5a917625 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|61400799027|376014|7416014|36860700013|54012099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?v/cQxDp1SiKoIQ3HWtrj7itQC2MoBSIrC2gbZLqgT3hlltDyqyHC/3B+5zEo?= =?us-ascii?Q?M3O+G8+QX6tx9iIu36PVvdb1I6cAiveBJQ6U+XIvor6kcygv/+oC3+GfwC6k?= =?us-ascii?Q?x2FDAkltqtbJzr0AnvvVV++y1Z6U+YfG8TpE0yl83MhDAQImRP5nihJoK+bX?= =?us-ascii?Q?ElyEn1RtQcMSqUWN3CEVlSyAJwlfBZjjTq9D3xLfCVQrriaQYil4vaJil4z1?= =?us-ascii?Q?8aLqvxdnEJY4yewJ3hekngRr5SO5W4as/cVyu7vQ0Jo7BBBOhjvkmUQMO83/?= =?us-ascii?Q?+0ocbqbvvrdJudANvB4if4tz74SEmfeD1aTbTAZ+2zUDonSaa1KqVsRjbLg8?= =?us-ascii?Q?OX6mS/qQSKLlH20+AVin3nDTGa9jJyU5+Acu3QMLAZqz5c3hlj/mqfyMKwpt?= =?us-ascii?Q?RD3PHK8Lez1oRPxEfB2YU8pL3aGzEByezp0LFQOt5yk6zheX4e+Uop8WuRbN?= =?us-ascii?Q?VF4dy4rQeI3zcQN5vES8Xg3QRAusD3xihAhSojjwjVNIZ2J4ObFu6KE2511R?= =?us-ascii?Q?D51RTL2i1Cl47XxO8fGkMBjSG0dY8ceuimaAU6VePk3MP8JJGB7BZD2BYnUm?= =?us-ascii?Q?wjixqLA9NXxIVaIvNd9UPcbmZ0HtFc6m6RfGyWg5aajlCeUIXHv6v1vP1fKS?= =?us-ascii?Q?fwJc56r6Nj//cITxsGmyk/ccuwMu+HtTZYY5xqmcbkWHQC+bcBqFAi5xx2Iz?= =?us-ascii?Q?0moRRuKByKHzFilkSc0Vq4XEBU6pQNcZy5strK6WzYTOyBrWp18kMlVcjjOr?= =?us-ascii?Q?X77a1pK9XD494SbsFpml53uQlFGI19drQxEe7UES+Z4RZjdh4BDLTzb4qeX8?= =?us-ascii?Q?gtgw3fzw6MtgC9wTuhUZLIQO2iQ8zU9n6neZXLQIykDeegonMNwAAmlngMTi?= =?us-ascii?Q?NqBZd50TvdksCDNpnejy3CywhlRXD2o3SD7M+gKKqnA3CTFd37Vu50e9imc/?= =?us-ascii?Q?3kJnqmbC7RoQYGnSkDxJuK3C+lichBeT28H4ie9jYnsk+Mux4M7ooYATb4ZZ?= =?us-ascii?Q?cMPF96N/07uZkJsK26/knskBVm1J8wbdQp18xC3G/R3F0EP8uzRSaKoyQ826?= =?us-ascii?Q?1AIhb3ngaLT/V2vDd3VV3F4/SCAXSrJLBbh22ryZXmprArGyOzenpP3gQc0D?= =?us-ascii?Q?rfaWfs+Cb6fNs2y/PWNKEAmF5vRr9KVx9mj9K/b/sBo6+gXGJwA0rugITSJp?= =?us-ascii?Q?A7f1flods4EAUm5QKTjB60CfmNZ71ev01gVvOyIL3nO53SnqFl9OAtQrmdtL?= =?us-ascii?Q?91W1TxC0As/PHgUA/z6ekihGAOB3uXq280R7PRTSDsvrZmYlO2IfFawKJyh8?= =?us-ascii?Q?1y6Bjsx5l+G8FkBzMV6zdngUDqJcy5tpEMQYeNKwxjg1J2LVw1oDdE2GiW7m?= =?us-ascii?Q?I53Td4GPhZQGjaBJ5G48Fc2jgPMdZRghZNZ/hKEr/LYLCB6fTwQwsBv2zGPp?= =?us-ascii?Q?U8r+4jMm+WDdySRxszbal5s2ZLN7iWg57EcC2C/R0aI+beQdo1NH/B7alt0K?= =?us-ascii?Q?Bwnhgn7QMIR1W7o6TQJTDKQVIFsZGLOxk6npssEmxStRmi3Z0QPnbKSXM+iQ?= =?us-ascii?Q?LMkwogKr1EqiPI9lzc//I4X+/Yjx+BIs4R1Zny15MBC//hsOBNN/QWE2zDBh?= =?us-ascii?Q?+7+UnD/9tTQBN9r+82S7JjYwxgUbMd0kziN92UV08zCpIguA3NM4bI55KVcw?= =?us-ascii?Q?Mi72jg=3D=3D?= 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)(82310400026)(61400799027)(376014)(7416014)(36860700013)(54012099003);DIR:OUT;SFP:1102; X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 15:09:52.8942 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 05322026-7dd0-48ca-4bfa-08de5a917625 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-CO1PEPF000042AA.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR19MB5833 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTIzMDExOCBTYWx0ZWRfXx/zK85mgm1jS qc6K/RW4UVqbWSlErvkagcWOR02ugQXCIYSxpuyKR+mjiL6+9KjZpTW8Y4iO/389DVnw8MpVzOo +iD+HqwbBh2UKG5kTVgM0Mje+K3bJh7vrL2QOQRshSZsl1ia16qdjJdpKp2NurjK08jgkJtg+lz So1c+498YXaH19FAQhzDuAKmPlnpGWy2YALhpn8UbDEcB+dMta+WiRKGLdooSVX/t/E80bKt6IT fdpiH+qW9jROM09Z5JIQtO3i2eYRkmk5jI48TIPGFT7+/redlYw6i31Z71t8MgcR7YTKhkVlw39 GMfCFxOrmXwxvZLgm3mgEOraCcOd/NZ/9yg2HbEJijJ7TWTUsxJkQYqDf8tBI77CUeT9YAI623A F1rCJwJL0z2siPW0Jt/hLiwAtdlHVNldho6yAnyKksa9ed93arHcgRJGY4WoglD0YbGdNgcWCJg 2H5SAonvX2ULlc9GQww== X-Proofpoint-GUID: DlZHUJ2fLXwR8RVoN_QyrrxfwUTQZWe5 X-Proofpoint-ORIG-GUID: DlZHUJ2fLXwR8RVoN_QyrrxfwUTQZWe5 X-Authority-Analysis: v=2.4 cv=JbmxbEKV c=1 sm=1 tr=0 ts=69738f46 cx=c_pps a=EuzLu2ZwJ/NCzAOim5xawA==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=vUbySO9Y5rIA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=w1d2syhTAAAA:8 a=aSH8VwKN-Jk11-2aqjcA:9 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 --- 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 99a536601cc7..376928d1f64b 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.48.1 From nobody Sat Feb 7 08:44:18 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 032F52FDC55; Fri, 23 Jan 2026 15:10:14 +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=1769181039; cv=fail; b=obUt8qdN/XbhtX5vYQjgwE2uDwODtzIq5uZ45VTxa4NwuiUuYcTwz8qvxekCTIJ04kGP7QlRLlQoqROMOifZ90wnj2XbzbCXGCHof9tbv5/YLrVORl+SWGt4aLPz5zGThLDvZshO+w0ijR7oeorsF6ioHUVk6mdMonh9K19n57U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769181039; c=relaxed/simple; bh=gLvQlX7xkyxE6K5MoOmZK52PrqGiORJ59Ppv0Ufshho=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=cVmqbvy8enOq7SKKwn5l/Msas6X4U/QYlZtDfu4Ca855shKdQ1m0a4ZH8sPAyToYehDCHweNu5IQJnD795YZ8KXN1Niq4Mv2UMtrJo8uNU5n3nnLSfYtpM7+ol33Gqb3tF0m0RhSlpxZoq86oehL7O7uvg3Kg0T6UUxXm3ZxZWo= 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=kNItIIhN; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=jS/g565X; 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="kNItIIhN"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="jS/g565X" 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 60N6oVT63471213; Fri, 23 Jan 2026 09:09:56 -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=LMgcV28TJJ3+7IKTVARQ/P4aiMxT8g8N/lh+vQFVfUw=; b= kNItIIhN2egz+SSuq2n7RsfIeK819qXsBsuUhN3JNMIWXk5wHH2NO2dFy8CcPVwD Q6cgz5yzdx9H6hYch0+IPp9pnYp5uDIFd8drZPNgBjObac5vC7GtY+emE6yXMlK4 Rtfv2QrjJle3aNWBK2wM1l0dz6ImfTkZTINmPHXc6ET4KGg9XuBvceqCJwM2rWD6 8dqo3GaH5/BicZoAqjy5+ZAUSazVZWmjk2z+OhrXhrZJrsqPfWdA4f37u68KWfRM yQNB6w4w53U10D+ReiCrBCtdV4trd5bLXCawujiXcUAiR/V45e/HMfsTe65Y3O0P DPEylu5lmH1c1DyCOifUiA== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022105.outbound.protection.outlook.com [52.101.43.105]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 4br8q1ypdg-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 23 Jan 2026 09:09:56 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VScqhl2yr3QYZyDSZobRndM2KEpywAlh4ocqOjzrZE7f4k84s4yEjnM5hnZ8LgNX34DcbP0WwgY6lP5winwAmQffn61q0A70ldv9Sfu27v+iHhVZ4UBDPxK+P9ZdnSOysr4YtQxqrbooV3myhAZb+/tGKFEpwr1ILmNqTqI5jxkRJrfQyd4Q06I9P7Z8pz8UDP6MKkHhPHTNuwRusLR/7UDYxYcKm1oD10p4fQgMo4PjarK9MVKqMvFO3Hw4rygM09Fzk7B4Bzt02jPcO12gLZgiaAAKaA3V1Hp1P8GnfnNOQ/a8dwnvpWKVdC+/BXldkGQ+AO6WQO6JMDrWJY1BGQ== 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=LMgcV28TJJ3+7IKTVARQ/P4aiMxT8g8N/lh+vQFVfUw=; b=MRRZjA6i/RoNj9WtGmVRs7//md+DwWRQUPCMgJnk1lhbI0xsyqobISWBoa2yNUSUDqYCSGZzxV6vKeqONUcp75bRRlbrCuSP0oJQFjZRrHw4gqd9zun/AMzJrG3c2X5WuUaypmBy0EObJIXahWmnKKrrXa6P3mP/pAR1eHdx3/TqeXx4FicjRfJD1y/Q1sx7+hzxXMN/1JKWRZZPL3D/arvx8BDPpPY9qmbPRU6UkqTv7wvx+fYOYjnrdHuYZG0E1zpnMAYDHnTpYwBfbGqmyjrI34A2vsxtzT09v4Ukuk4vR+lY04wtFx6XSabj7a9ubzFe5pvChE4KV2tpubPi+g== 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=LMgcV28TJJ3+7IKTVARQ/P4aiMxT8g8N/lh+vQFVfUw=; b=jS/g565XbJjh+3SlH5gol2vBlQHbD8Bvwl6oifFOYra0aHSAS2XtQYwq7khb6fzh1L3WuMqmpQ6bDB2ZwU63w+y2RF7Y2EIu5U0Q3P3Q3l8/Qi/z+ROLqb8gA2ykcxgYta4OqCW+vEuAEQHs3C3ZSxnmvgdxsPUXED3wJndPpjs= Received: from CH2PR14CA0008.namprd14.prod.outlook.com (2603:10b6:610:60::18) by BL1PR19MB5770.namprd19.prod.outlook.com (2603:10b6:208:392::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.11; Fri, 23 Jan 2026 15:09:53 +0000 Received: from CH1PEPF0000A34C.namprd04.prod.outlook.com (2603:10b6:610:60:cafe::b0) by CH2PR14CA0008.outlook.office365.com (2603:10b6:610:60::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9542.10 via Frontend Transport; Fri, 23 Jan 2026 15:09:37 +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 CH1PEPF0000A34C.mail.protection.outlook.com (10.167.244.6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.3 via Frontend Transport; Fri, 23 Jan 2026 15:09:52 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id A35E6406543; Fri, 23 Jan 2026 15:09:51 +0000 (UTC) Received: from upx-mtl-008.ad.cirrus.com (upx-mtl-008.ad.cirrus.com [198.90.251.5]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id 6D975820257; Fri, 23 Jan 2026 15:09:51 +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 v3 3/4] mfd: cs42l43: Add support for the B variant Date: Fri, 23 Jan 2026 15:09:38 +0000 Message-ID: <20260123150945.100038-4-mstrozek@opensource.cirrus.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20260123150945.100038-1-mstrozek@opensource.cirrus.com> References: <20260123150945.100038-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: CH1PEPF0000A34C:EE_|BL1PR19MB5770:EE_ X-MS-Office365-Filtering-Correlation-Id: 770f84d5-eb01-435d-0852-08de5a917600 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|61400799027|7416014|376014|36860700013|82310400026|54012099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?M/RJIrlGuncqBB8uVYr5CwEnBmuN1VAG5rFZ8ACZYfAWpy+ZkOJ52txPWWyB?= =?us-ascii?Q?tY0hvRBySHs10CQ7rFiSGH8MaZjaTBPyl4VtdXQYxC3UeCgKvyx3vv+fjM+j?= =?us-ascii?Q?Q9tFRFRn47gar3PFJFuVQROH/vtODI7JlwhZec/UjjzoPvwS5sZzNbixt62U?= =?us-ascii?Q?iEo8lBUiJFN69VQsBvrR9EHlrYXU5rr7XoahAHbZ6d8+2CfnLbxMqB6LR8ww?= =?us-ascii?Q?ZX2R0lqnO4EUT0RYpGRmJX06s+Wrdgj42twwqtSDOHZ+eNHoLSXoZFo045Qj?= =?us-ascii?Q?FrSemOmNed1pZ9TQwqNXskbWqFJaU8IJq65P+clO4n5tNc+KwesPC6ep+c60?= =?us-ascii?Q?1BljU15dbI0d6zusjz4t6AKAwCpJ+rUFSFA+UxmAbnQk+N0tkDnNJccAI4dc?= =?us-ascii?Q?7/xN7hbv+UXnhQu2zWv3kgtUEMwevbkzORT/qMIBBLUCORbWHsZqSBFKubLj?= =?us-ascii?Q?U/I0O9tYkEcN7RBlYHABuUY/XVL4S5BLQWmBAWksTqNLChtlVspg3/ttwZXG?= =?us-ascii?Q?8FC9ukP04L/5ZikY5LhfYG3suE3OUWuAY3k+ihizwVEetvGyGjKMGr4H3akU?= =?us-ascii?Q?MGNsQk+tF7sqYC913rB1wUFUBazYl/176L4xYCoa842NlWn5a2jOtklT+KLX?= =?us-ascii?Q?d4m743LKX6wF5dlXsfiFQHU3Lf9H6gBT2TLAdl1I8YsUAh0AM0VXDKR0T/t+?= =?us-ascii?Q?ns/PuA/PahPhUzYqVCXCuv6t8d8LkbLJ+HaZMILK/zexF7WfrnAtTWtlsfID?= =?us-ascii?Q?m+VD69SbZJ05JOidDqwPTkcUDVnaKxgbuk71N57cdDmAaGnWxtUrwVuZl2CN?= =?us-ascii?Q?oR1mWprT5wKz5vvKDro9ocA01pih5djYx053X41SRWSJM58QL5IPd2G1e59L?= =?us-ascii?Q?wJd/ke0Hv+pg7UyNOSrCe8F3GcsE0Gp2ObIw+MdKWXJ4WXs+AQvwapeFkoot?= =?us-ascii?Q?ha1C9mcDfmofS+N/SZcSxTJQqKW8pn5eNucUQPrgoXXZvOtf6nOI9fvnudRY?= =?us-ascii?Q?8BLR3pAJXVoZzYIHzAnE6mPc0FizCRg2E61alb9UnIU8VtYFGf2ZvZ4EGY3m?= =?us-ascii?Q?LFn7LgKpL1A1oA7gaYkURMPP/Ku36ucfvyruZMnyFPKfFPzb+py2A5A5H9KS?= =?us-ascii?Q?a5w8tNgECuZl8d0KnON9Etz+XnDdPZIqrNKqsCw8KOTkG+3poRPLMI8M9S3P?= =?us-ascii?Q?KDcVMBgFa8Cb2m6NSPBYuHQBA/mNkn8hlOFcfAhO84Nvu/UzqECJOWFPgYhy?= =?us-ascii?Q?a0/tpCd8TSV6oASuMbtl/ccsk/AFe3XlUno5g84QEajphrmvBuKjkiXjWj/f?= =?us-ascii?Q?EYpou71zGwaKoDQLG8Ld5Lg4xdr7Xw0UimQbceoJ+1mfiSJzMMPCnxWLw7s3?= =?us-ascii?Q?YnBR47XStPGIi42WRDTjI0uIlaq97AwMbUzB6i82jhD16dndQoLmCA6qJ3OV?= =?us-ascii?Q?psF9xMS5c45laQgsGqkBWFy9uxHqKsAfeZhjs83cvhswz+6oggwJzEa9QLpM?= =?us-ascii?Q?tfJY7ClWjeHCLqERvtiTtr54jqxhHpFaU9KmocnnLKoL9mTPqMeRnhuCn4/d?= =?us-ascii?Q?qa1peB1Sp8JqhePhNDnLGayaqeeB0gr+GVarQK9yNdASUdFCSMP1BKYN/jVr?= =?us-ascii?Q?68eK3sFFjF1R2bfuKlsh7+163rqDUN9XYf0DRZXecYFxxLbnZnmiNe4Ac8Ak?= =?us-ascii?Q?SD7+ww=3D=3D?= 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:ErrorRetry;CAT:NONE;SFS:(13230040)(61400799027)(7416014)(376014)(36860700013)(82310400026)(54012099003);DIR:OUT;SFP:1102; X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 15:09:52.7343 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 770f84d5-eb01-435d-0852-08de5a917600 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-CH1PEPF0000A34C.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR19MB5770 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTIzMDExOCBTYWx0ZWRfX7NbpxlBp4Axx V3rio2i55q5nAdn3101AFf33fDb+nMVtzKHA6ADw7mEQgQGvGkyToxs30oHWoE4mjZL7G+N1o1B RteigH7YwqZs+VknPv9WaQs5YwC5ju7x0z83UQcVSOA+KDD/pZGFOxUx/knJoQb573eKpk86AIN lIEWcvJl78nMt/qckuGCkjqvRLHLIVo513UAifIXxSwoDVjWVdsTHgVzpOuTfxQxmFHoceybil8 nlkfsvzB9vQ9agzgc4Hv9Ddhx5ayy2Yy+WBmHBMH8OY/dy2u7/wEacRkgERYrZE5zeFBaunHg9V EW8+ePBdHkY4wZGXtZYuPVCqxFygGsfQv4jNNgXMgPt7XdBECj3V+0S4zzhwyjOobdiPJpdmTpF spCi4Ng7o32kpbFq6HbOp2hl6j4XrDsgWlNDFJhW6emt6GOSheRdtLJg/ZnW95LINlzPbartzFq 150lka/UtoShUsy2Ofw== X-Proofpoint-GUID: ySWqqaSDCGyA33n02BmXlpuQ_nP-Kkqj X-Proofpoint-ORIG-GUID: ySWqqaSDCGyA33n02BmXlpuQ_nP-Kkqj X-Authority-Analysis: v=2.4 cv=JbmxbEKV c=1 sm=1 tr=0 ts=69738f44 cx=c_pps a=x+YQLAOB2Ab8tpUMZgnrtQ==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=vUbySO9Y5rIA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=w1d2syhTAAAA:8 a=XPwATKmoEvXA9jVZorMA:9 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 --- 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 a2ab001a600a..7f3bf05f2fff 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 (int)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 023f7e1a30f8..4b11cf5de614 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 (int)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 107cfb983fec..57980b3388ac 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%06x)\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 f3da783930f5..a0068f6572e2 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 c39a49269cb7..68831f113589 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 2239d8585e78..8313f9e8c722 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; + int variant_id; }; #endif /* CS42L43_CORE_EXT_H */ -- 2.48.1 From nobody Sat Feb 7 08:44:18 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 63F39328243; Fri, 23 Jan 2026 15:10:20 +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=1769181038; cv=fail; b=X9rE7F5ysiNOvFG703S5Vfy+sU4krBsFh0I9EbXzwUp+0gVG4gS3RHEYLW+POIehlvSI80w7zgQWbHD/37XqCujAHJ8AlG5Ck/WauX92ORAFkQaCJKmJjUR9XeX+SV32gceYFE0kKDzAC8Ncopluwht8KMUJPKVPYoJ1VmjHiag= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769181038; c=relaxed/simple; bh=Aq5FFdiHeqx9ykILvhX55bSNTbIiRPwNzHN1HSwuezQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=HFHowpYySYgOwepD2RBk91GET+HmXFWyZFy9j0qId7/dLDyugyoCD0KStVnxzrmXfRKBc+5u4YTGlF6QeYfXW7VbCUPeFu+MOu47+s2S6SY5T8QSIONZ56T2khJ9C2gbCujojt/29i1ECuN7o3N7ZoX+WZvROrY3JW+vUn79H7U= 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=ddV1zwuI; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=yUnWg6PA; 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="ddV1zwuI"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="yUnWg6PA" 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 60N7Ctup604851; Fri, 23 Jan 2026 09:09:56 -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=W+ffFdZRH+/ZJiQzGCOrLv+w6Y4JP+HTrTRJUwjG8GQ=; b= ddV1zwuIOlzBmTYAp8gMPgnEGL2cx3iNVQCneutSDyCjOyLAdk4d5aktjEv9o0HT /5QT9OU6WhhRerdw+0S9vifiOrrXYjAs1KfthfGWAQlAasUJN5C5ncAPdWFfgAwx gsFnQs+fFDgnbX09uIVqIjbXwHKtDFEHuSmJuGf15TC7ZSe4Or36eMd8rmsVG45J 0UqwW6j3z4f8U5zDG3qaFUw0rbAyex65BilWugNxGR3shrxHSrOs43KDvtwdLroC ftO2R752m/HeBjNLwTnPryZTrLAEF/mqVu4PD5Cc4ohqLebEgPRfV7YpbZqY0CDd ks3WsG5Z0CD1TFIQ/b9Xyg== Received: from ph7pr06cu001.outbound.protection.outlook.com (mail-westus3azon11020113.outbound.protection.outlook.com [52.101.201.113]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 4br7qjyv9p-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 23 Jan 2026 09:09:56 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qWP2nC7nQhHvFDJjbYhQLKu3LJ5dJR0pMQ0lg7lTmK9IlTN2rwT6anORQgdE7KaCn1iX1W9BC1oFieUil1lh0V4TTXbSI5p0LkKp8L7OjlJqTRpxIJz75BROHdtCVFxkIUzCY9vs88kjBN0ml5BjTDK7Klazc6C+O05IpPoFQgRAsOxO/5HQVUQ/WaHJMTq+72ZCaSZD/RhF5snNZcMX/roVkndbaorULdKFpKwi8H/ekJSHfU54cXsR8cGt6YfJ88Jcb58VbqXMIZ0yUYnCm08EZaDiMRV6w9BgSTHvj7CUelKp5aTt/XQYwneC9oglCXadcsRw8qckuSGOCrLggw== 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=W+ffFdZRH+/ZJiQzGCOrLv+w6Y4JP+HTrTRJUwjG8GQ=; b=Yw3hJi+GCQ8d1/mC/gaDRdJIpsYCkn9AWf6zNTBFN/IdYVz7+jSaBX4jqFpVkkxq78ixFhltPVJe0J8Dhh7hjlgXqj+X4P9ED/tPNbdqPZYeVXs73omAKP5gin6pOEFkMfj1tizLcZKzXWcp2/TtU1rT2ffbjiYKYLVwXjxn/hU+4YgJTc8ERdVXb2xKa5Q4BR1mbYipD5waP4RFMFcmzvZoikeA/Kp2MhjTvgrtpdrZtaqP17MOwjW30yuKEb6LoXL7fdf4iLtdYzCpZzSMjHshl/QsXGmftq8HHid7rfLJGv+9RZ3ad9Q0B8H5paARwqQtP/v6Kqc1xZkRO0IySQ== 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=W+ffFdZRH+/ZJiQzGCOrLv+w6Y4JP+HTrTRJUwjG8GQ=; b=yUnWg6PAmD6pjcywRbN2g+tR2RAQwBhN+h12TYl7/UoTJa1SD/G0Rn2JK+sXe1E5hy9OTD811Bm/dXbYgiSQnvivXOOF6jDCbtnhaLD16w9LmXA6QyHUsH6hvC5nVasHMU3WQVuh8u/T+kBYSc2X602n7lgKgz+z+y+PdsFuCC0= Received: from CH2PR15CA0026.namprd15.prod.outlook.com (2603:10b6:610:51::36) by SA6PR19MB8630.namprd19.prod.outlook.com (2603:10b6:806:411::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.11; Fri, 23 Jan 2026 15:09:53 +0000 Received: from CH1PEPF0000A347.namprd04.prod.outlook.com (2603:10b6:610:51:cafe::95) by CH2PR15CA0026.outlook.office365.com (2603:10b6:610:51::36) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9542.10 via Frontend Transport; Fri, 23 Jan 2026 15:09:49 +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 CH1PEPF0000A347.mail.protection.outlook.com (10.167.244.7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.3 via Frontend Transport; Fri, 23 Jan 2026 15:09:52 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id A455B406544; Fri, 23 Jan 2026 15:09:51 +0000 (UTC) Received: from upx-mtl-008.ad.cirrus.com (upx-mtl-008.ad.cirrus.com [198.90.251.5]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id 7217082025A; Fri, 23 Jan 2026 15:09:51 +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 v3 4/4] ASoC: cs42l43: Add support for the B variant Date: Fri, 23 Jan 2026 15:09:39 +0000 Message-ID: <20260123150945.100038-5-mstrozek@opensource.cirrus.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20260123150945.100038-1-mstrozek@opensource.cirrus.com> References: <20260123150945.100038-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: CH1PEPF0000A347:EE_|SA6PR19MB8630:EE_ X-MS-Office365-Filtering-Correlation-Id: 85840c01-b780-4745-1abb-08de5a917621 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|61400799027|82310400026|7416014|376014|54012099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?GU4MNv+Fe/x3DnGOHaW0Jdn7kYwCryNS0xMPRj3drSDyn0t2jMQwxoHtPZ8+?= =?us-ascii?Q?CvPW4dJWFXRBSX7UVg16delhqY/oYcH2fjWFOeq9yvBTQB/MuANthdKnZKy/?= =?us-ascii?Q?+Pp4UTIN4pIjRn6wbQVKv9O5yUtHxQvpsGWhStSlpvNk2+T6C3+80TrhWRRI?= =?us-ascii?Q?t37ioyFS5DeenZ8A+H9RsLzXJxdaeuIHfevW2wJ+Oazg2x6vQSGiZItMH7ob?= =?us-ascii?Q?VNwH/XoUIv6ipNGBPnS8WjP7nIQ2KMWkwJSyMF1FHJ5UCDbHaPrw7pq7bRNb?= =?us-ascii?Q?LRj5Kt3GO9mMB89rq1HQR3sKze19NH7XKvgxVgTmIbezjQNb5rCaWyAo3VJS?= =?us-ascii?Q?odDilxpB0F8GTJMuIEQaA3kt6JPdXGq0/v8nq+nNldPqOcNeQvyRDMI8fYEc?= =?us-ascii?Q?wq2SmpYwUop+JphBs071Ox8jdrppFSmj2rlHS3+AHutkAhKEfFjHjeC8zvvj?= =?us-ascii?Q?zH+JCa9nYv3h5H1YbcT3HEjiQkcBopwkWbtY677aV5mZJ3J5ISdoPwKnLle4?= =?us-ascii?Q?7Cw45AMmDZUvxEn2mEGxXBwJIn7P0Qz1cUmMy2voStBiWqtmnC6C0wHKUuQ6?= =?us-ascii?Q?sbv+9jQiVWH3eu/z39/z1Ghd1IhbcDraDJUBUMBy5Ogux/On6XGwZWHVTY7j?= =?us-ascii?Q?S6AjfCQI6Bo4c16qiaNc6rRmhofceFfYO3W0RNRRoRvSeu1F/+m+rRld2F2z?= =?us-ascii?Q?QEdr8Fo1KVErm6RsLQdtIV2AvPZD/1Ws3da3EUobcBXdkRBJ7ZIsE2tXVP5k?= =?us-ascii?Q?f61lpcxSgA5lQ8OWJ3X+W6B0k0CiubQrk28jG/hURjdvN1QlZT3xebsFHOhI?= =?us-ascii?Q?+m6tB9f8RxtgIAQBXtJxodWRwiPGt+htenW1UStaS56AyFCFqm0sHw//R64s?= =?us-ascii?Q?cOv/Npz41jeFAn+Q64hJvrAK5h9hDn1v8yvlq5SYB8d+9BHZrxI1N76WRF3V?= =?us-ascii?Q?3PtsPUjKb4hcKHAOw5ocHwavzGkD5tQom94twSwxEnJpQs4ykHsPGezSYuH2?= =?us-ascii?Q?Yv+aUWb9U9B/vjCudc5W2NBHZ1KlO7E+VPv2rRaWOG9tgcDpRBlVSDNd8+zY?= =?us-ascii?Q?zjO1vpYuvnuFUC7VBpWY6EzJ/ZJWVqtm3eUwh384/UkmErkjmv9tZPt44Uhx?= =?us-ascii?Q?vgWljArJGTOtkHLjcNTfa0+4LUrg4leQxdO7AFP2bTUS8zWe2fdzM3wYVLdJ?= =?us-ascii?Q?HwFG7iSFT2fqMktBxsR9P7H8D89CZZ03nc+6A/M6SW8P5efYlUyf9kzFUwuk?= =?us-ascii?Q?82fN7LRAvE44OD9XX2fxmBxiEM1k3vRFghEVWQThw7UPhlA5bAIm8t2t1PQw?= =?us-ascii?Q?q1K7jMSWIEkCJuMyhHpMnhWJXdnFIJXsaPvTSfDr540gDnj4fnfEIRFy5gWH?= =?us-ascii?Q?ZyaAiy06w0+DsPuGmq0Da91MUDHK3yoJpPhg/XjUyIcdyTDXHiD1/qJ8VAKx?= =?us-ascii?Q?/oxpmxxcIsElyTZo2LZgGBH28qsGeh3QSwScW5hAfMQdt0BDLtcmPFTSmr9o?= =?us-ascii?Q?pG8RGTrmaHja/46ncO8CspEs0jdXC3dq+r9QBKB6LONZCnGWIokPiZK1Tz9k?= =?us-ascii?Q?u6u1OkL3et1qLmV/Sbs/s33wpatOFPiTs9XVbGvd7FPwVXbOn9YaE5SXVtOh?= =?us-ascii?Q?HhK/QrxmzDwImOKifpcxyPM1oFTPU1OrcW5T5vxVEkzhDgrn4IqcOCDU+Xed?= =?us-ascii?Q?Wj83nA=3D=3D?= 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)(36860700013)(61400799027)(82310400026)(7416014)(376014)(54012099003);DIR:OUT;SFP:1102; X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2026 15:09:52.9512 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 85840c01-b780-4745-1abb-08de5a917621 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-CH1PEPF0000A347.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA6PR19MB8630 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTIzMDExOCBTYWx0ZWRfX12KJO9SvQ8Ns YHpQuQV61bwhGMz9KkFpoyXmkV3bc6vILIC2kIJpwlMXDW1fifViFBHHN9YoYVnO/V/sh0wwFGv rfFNOYwc6+iyq42M/ufXZrZ8CrrTTY0jTWZAW4u1gGudK8lK1zjpd/KUsRcxsiZWsrcpEl3MOdT EHoLqCWP3Qt0X3n1PitQXxvtwngei3c4oMokVPOX87whI4246bFa1CH5HjMMiJa/tDpikZ3NJmf UCyAqjqhRQry2HeCtfukJHMUTXI2KMfaTGR2R7Xz1raQFLnlOCPhrUIPxPpeXldHevGtJmdIRwg kjCp9WxEV+7WgwU9F/Ubefpms6uJy+ScTR4IGurOnxIm5nKHxdVNDKVfouWKQ0ZC0X/UYbKSwri xn5aftxynQXnq/24XtguGGve1iDDEXAlYBGmskpKOEqd9enfi/NTBPf8xEed8LpzDGc8rJDOMj6 rlhHwAjjYPY68Lmo6hg== X-Proofpoint-GUID: dffgsCk5Ns8gbrbzVQVLoP5NFKK7NonA X-Authority-Analysis: v=2.4 cv=GrRPO01C c=1 sm=1 tr=0 ts=69738f44 cx=c_pps a=ecT/4VdmJWkC/4d2ldM4Bg==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=vUbySO9Y5rIA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=w1d2syhTAAAA:8 a=M7tb3-_zZpdRxA06ow8A:9 X-Proofpoint-ORIG-GUID: dffgsCk5Ns8gbrbzVQVLoP5NFKK7NonA 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. 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 fd02d8a57e0f..842d16e39de8 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 b2fa2cd1d99f..fd50feb26ae9 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.48.1