From nobody Tue Dec 16 15:25:48 2025 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 6DC7814B965; Tue, 6 May 2025 09:59:24 +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=1746525566; cv=fail; b=s2saUBC3IAwovNBlKPCaltgg+A1uSj5dBo+B4zUg5VvU1RLJHAtox7FcqPhW/gN5fk83b4qEc0Cc5+ymCJ8N3544I54nzdlGVJLx8fciTtfY93gcKbuhxhjOWckZEAV0nR8tXgYcqjhsAPYE8arA5oJb8RpitodO83JezJKv2zk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746525566; c=relaxed/simple; bh=oOY0XHFCH73Q6NBYL0JtRMejacb2Uo4XZXkj0kHo0/M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=XARCLDdHNXef9YDC5hQ5FMajZQOAzcZuS1MPJrUFgA6tJTDVsJQV63QhnwasCSv8xVvOkWc6E2i/D+iCr7TEVo59ASPcBh/YGdU3ngSt5lURbSbErvpnxPE8ehM6Iwbagdf3sGCqUUxlN6GbSa24IrFyqeGM+L5KgUNq2odODi4= 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=opfx78hF; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=S+YiT0a9; 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="opfx78hF"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="S+YiT0a9" Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5460I0Hj010201; Tue, 6 May 2025 04:59:21 -0500 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=JwNkKkCYqmeDTvoKK6HcIY+7+3SEVKjEOU/mNrWmAvc=; b= opfx78hFdONaOrTiwXTIESE4BvrqfpypJ5zBCKvnOkXp4C6tj+/mzqqzmkVHJR3V qoAcuG786hBITOSvVWzBJ+5Uc3fVgGf7KG9HHZ2SK22Br3Dd4hMk/l7aFz35PHbq ZftH4ZTEn67QGGRKdhBARFjmZhOvhh8fng+Hri0p0HvUFBRlE5RPTRHsRORPKCVq f2/GU7ocSlHbS+rlVSI5Z8dTHiEz17f2dk1ORDSrQxavqNrzGE6NXtlVfbemx5YD KnixbySO8SSSeaKrYAOAWbgOyK7trY/g+NMChm7tzmoDoR5rlY0RKIUPYMOr7TKR mekEtcJWSAE5QkXnJt6CIQ== Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2045.outbound.protection.outlook.com [104.47.55.45]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 46ew4n9dnt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 06 May 2025 04:59:21 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=j3WfrjNUTX+777YPKSZlZ0wbKbtuxNCPdecvuFtDeDx9zhGA3kfgHpk2y6x4GVTz4svVmxFVt4hY+5AF2ENzLEJyTP8HF3HBQzQmb34Bu4iYh7fsRejL/Pv3zVPpFHO3aT++dF0EVOMi1qe8wqUakBX+kPZ88GmUQWP8MLavm9CIPXWfFSi+uAdWCMffEq11kdh0mfkLrSNKeWIGlFEGvgH4gflaN7Xi0TCRsL+ruDyBVPsxZTY33TjKMeZRHj1BDPoUvtA/SWlvPJ2fFXQuDNClwbopHTE8/nsBJ2/laMhPrS5LHEMVN3jEQ+6KKgpTI/+m6iifdwT5oBnj1pMZRg== 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=JwNkKkCYqmeDTvoKK6HcIY+7+3SEVKjEOU/mNrWmAvc=; b=kwwC9YxcJfYW3QVahBqD7+tvL5yxzpJ6j2IlrAiUSGt7cIo4HfwkMCn2zCBIxEzWTsCUBXMIzeTPh6wI1Pnv3bR3hcA/2FOsgLr2Pjp2+0HPv8O8NUL5piALF77AvdZujncazn9SnWFNpgoJr7hyLNFca/VmJDfuV0mIjVnnt+GlhfjOFudCqNKQMUwxTUO8I8hr7FyK1+gsrVNgQzr0HCKaOleE8XQGqXxg/XpC+f6M6WYIGiFrMvl+wH+iQ6N0m04snDyMlYxcGW+2BZVW5cTlFHuBWZwsazAOHx0530MJyY6f4u5d51Kay+9OF9Hr6nO9po6ZXcYmaJ/KrbEKrg== 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=JwNkKkCYqmeDTvoKK6HcIY+7+3SEVKjEOU/mNrWmAvc=; b=S+YiT0a985huc4ad1mG+uHwSF97/DcplM7LYgWMxgSlRbJDFTHGfCnN2WZAWE02jM2Usag5VLhjCtycP+sWE6wZH+jB53dpSY8LJP2akJ06sBHVyepjSc5i/hUipoZVa2dBnV25UxGQ87iL35qm9OI+Z22gofHLVqvriz3LOvJE= Received: from DM6PR03CA0067.namprd03.prod.outlook.com (2603:10b6:5:100::44) by DS0PR19MB7441.namprd19.prod.outlook.com (2603:10b6:8:142::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.24; Tue, 6 May 2025 09:59:14 +0000 Received: from DS2PEPF00003445.namprd04.prod.outlook.com (2603:10b6:5:100:cafe::13) by DM6PR03CA0067.outlook.office365.com (2603:10b6:5:100::44) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8699.31 via Frontend Transport; Tue, 6 May 2025 09:59:14 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: Fail (protection.outlook.com: domain of opensource.cirrus.com does not designate 84.19.233.75 as permitted sender) receiver=protection.outlook.com; client-ip=84.19.233.75; helo=edirelay1.ad.cirrus.com; Received: from edirelay1.ad.cirrus.com (84.19.233.75) by DS2PEPF00003445.mail.protection.outlook.com (10.167.17.72) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8722.18 via Frontend Transport; Tue, 6 May 2025 09:59:13 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id 107C7406547; Tue, 6 May 2025 09:59:12 +0000 (UTC) Received: from lonswws02.ad.cirrus.com (lonswws02.ad.cirrus.com [198.90.188.42]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTP id DA49A82255C; Tue, 6 May 2025 09:59:11 +0000 (UTC) From: Stefan Binding To: Mark Brown Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com, Stefan Binding Subject: [PATCH RESEND v1 1/5] ASoC: cs35l56: Add Index based on ACPI HID or SDW ID to select regmap config Date: Tue, 6 May 2025 10:58:46 +0100 Message-ID: <20250506095903.10827-2-sbinding@opensource.cirrus.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250506095903.10827-1-sbinding@opensource.cirrus.com> References: <20250506095903.10827-1-sbinding@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: DS2PEPF00003445:EE_|DS0PR19MB7441:EE_ X-MS-Office365-Filtering-Correlation-Id: 5a741d22-b2e0-408f-e172-08dd8c84a7d4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|61400799027|82310400026|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?7XggPGT/cd8vOCMaM92ade2hiKHxrgh2JNHi1sCmfxTUykIpXSHghj5VigiY?= =?us-ascii?Q?wAhrLeFM7pe2Qn2XhK52VjKKKmrfJNfmj2KFKQWPzjWCFLDgWAUAoAlsk2Lk?= =?us-ascii?Q?JiV4C/N/bDb2rayYd3riCRiBpGMEuUUOD/Jm1iIDRERT1wxKd7ohwHnq+/00?= =?us-ascii?Q?BFUUiwIjLOnsedG+aWr/U05D9xRUMVUbgeN4GDdZK5ZcmalYixDZyqZvfz4H?= =?us-ascii?Q?Un2Cb/UWtbFMlUvyfJ/8vnbvEL2n2etfe5bX05YLFrVJmiolTgQQmgmVKEPO?= =?us-ascii?Q?3MKGaO3o28WtpcQcagR3tsl9+Wbqg6kM3hVzx4p2htoQkkeHj/RDpu0VUksG?= =?us-ascii?Q?JkIyUrWekRpMp66pCBp+7JUGV/b1rOXMjGe/1Dnuop2FXPJMe+Cw7Xv/+6GU?= =?us-ascii?Q?Dc9RUvRaqJoSk7zlIZ1JxzK4l+4DqpZ1Ot3p9QNKqUxR/weebkHzOSUJS4Sl?= =?us-ascii?Q?CcJ+bQPs6GyVAA/x82dptXfecUc7PtfW+4nZW8VxF3+x1ekpr5DoirC9qsjV?= =?us-ascii?Q?kCjugAhJqTfmqeOBxkVmAUsvrpnNRLw3dPzr5wiPnXdxFIu5gskvPQ67h98E?= =?us-ascii?Q?I09s2VD2xmyttFL02K9XrXDZCilgFQstFBoXzYGu5fLfzUKw+v79pzkYcCz3?= =?us-ascii?Q?ueiS+MrAeXUbXhjKhPgX+oQ7VOe4hx2lklGXEXcFyo73NeWWIFV8LZ6py3Ov?= =?us-ascii?Q?jkwq5mmDlXmFWUJf70Du4zNyP0b1TavSmDaw9NHuHzpsen/kG0hSChIok/J2?= =?us-ascii?Q?VKHx8nKWzJn+tvK4r4tCDpGj8uE5hSRNZ7HJdTsxOlEDCTeNu4mgIX8rQy4f?= =?us-ascii?Q?9nnaP8fhyPiiP6PAUq1Jb7SzUURWwjevKMH64ty1YnA4e2XsjVv/HybNkf+U?= =?us-ascii?Q?8VO8E9eB+YyVirt1DGAC0sD4RZeMVzLKgM0xXLO+Zu5Qz49PseNRorEvGfSp?= =?us-ascii?Q?dQf+4b72LcP0ZUqPWo7epjCCAj+INMfVqNPrIgMO3oBmAZBd2V7Xgen7kgwC?= =?us-ascii?Q?X8l+tpHKWW4I2+A9C6/Ui/agi/EaeGlJb4boKdrNaWwtr3RQb+JxZoITti4P?= =?us-ascii?Q?xHD8EmW1cYy7VALO9I4ysHg1KcrAEvhCqyVPajQPrTtkBDlVg9fsLButyqYo?= =?us-ascii?Q?YqYSI1Yo5FnWGuORVoUeiqQiyY+43kd8BNFNFuSwUTOJ5bhTt48zi5jeUoRL?= =?us-ascii?Q?iMSh+2pQ3f+w7znoSOpWonU5TuSRc8Gv2tPKdDsivnTcC4M9oS1x6T69fP77?= =?us-ascii?Q?2skzbjqNCn95KvAIkd2Io5Ajymj3nYT7lA7jvsAWYGsVJlwnR47oOe4cWMo0?= =?us-ascii?Q?J30HiEGpzRn85/lS9PW6yEMUjmAQFk5H5LE1LI9+O9XmxfkadQhnZ/oC/hWN?= =?us-ascii?Q?BKQI6mY/X6f6dbL+klbHjs+6x2q8mD6PBWO7Lh+QNnOx5V85VDaNZ1zPE28y?= =?us-ascii?Q?2TnRbcfjnJLupe2LXJN8JiwV5KShG8S5svPv88DBvx2XBfb9H+T72m7yxBWM?= =?us-ascii?Q?wy3HDWK28+zsFrzO1gEPaBGkZWLdpiyOdNRD?= 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)(376014);DIR:OUT;SFP:1102; X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 May 2025 09:59:13.2888 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5a741d22-b2e0-408f-e172-08dd8c84a7d4 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-AuthSource: DS2PEPF00003445.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR19MB7441 X-Authority-Analysis: v=2.4 cv=KoJN2XWN c=1 sm=1 tr=0 ts=6819dd79 cx=c_pps a=R19XVbJ/69TrMGWtO/A4Aw==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=dt9VzEwgFbYA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=w1d2syhTAAAA:8 a=2BTUUkmCcW1H-Px24zoA:9 a=BGLuxUZjE2igh1l4FkT-:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA2MDA5NSBTYWx0ZWRfX56fsDIcKQ2QZ 82TgqqqD8vYYOOggQfGYlmHPtQN59ttzWK4vGh0ZqqTSwEei2Y6gPs6NiT+uminUUH7CfjNBS8n AivZSQuW/EmZEVzZ1oHm8hGkgwCABw+Cf7NhL2mV+QZqCKyUswLrkseFa89Q0PA+QA2r7SbxdTn Hp0OE/Uu0q7JDl4sC3ddk42EAhzZnvw7EZYVO1A9yq/GYhe5fv0t6SZtpHa6YroNMz8l+bT+g/6 PEHW4+MfXbMUi/eueJEs6MZfdlKconDDeywq3SAPOQw6pCp9NYLIZSDbRFxTcP3LPzWItapeKl2 uuBggqsquVN88AD1Ti+/aFBeotg4rv8BzrPemMsj3zPS2Df4zYLCu9VNDGDyuESqswgjip3ImpR z5UnmVnkrPENMzFVszQTYkA1l4Aw4CQQAWotQo4fwwaHIh48zWJI3wugdWKlJ5+F+ftr1daN X-Proofpoint-ORIG-GUID: JeduW6pATUMb_Utq1bV19ruzH_TxO4vk X-Proofpoint-GUID: JeduW6pATUMb_Utq1bV19ruzH_TxO4vk X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" This is to prepare for further products using slightly different regmap configs. Signed-off-by: Stefan Binding --- sound/soc/codecs/cs35l56-i2c.c | 16 +++++++++++++--- sound/soc/codecs/cs35l56-sdw.c | 16 +++++++++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/sound/soc/codecs/cs35l56-i2c.c b/sound/soc/codecs/cs35l56-i2c.c index 8a518df1e16e..5962914e2180 100644 --- a/sound/soc/codecs/cs35l56-i2c.c +++ b/sound/soc/codecs/cs35l56-i2c.c @@ -17,9 +17,10 @@ =20 static int cs35l56_i2c_probe(struct i2c_client *client) { + unsigned int id =3D (u32)(uintptr_t)i2c_get_match_data(client); struct cs35l56_private *cs35l56; struct device *dev =3D &client->dev; - const struct regmap_config *regmap_config =3D &cs35l56_regmap_i2c; + const struct regmap_config *regmap_config; int ret; =20 cs35l56 =3D devm_kzalloc(dev, sizeof(struct cs35l56_private), GFP_KERNEL); @@ -30,6 +31,15 @@ static int cs35l56_i2c_probe(struct i2c_client *client) cs35l56->base.can_hibernate =3D true; =20 i2c_set_clientdata(client, cs35l56); + + switch (id) { + case 0x3556: + regmap_config =3D &cs35l56_regmap_i2c; + break; + default: + return -ENODEV; + } + cs35l56->base.regmap =3D devm_regmap_init_i2c(client, regmap_config); if (IS_ERR(cs35l56->base.regmap)) { ret =3D PTR_ERR(cs35l56->base.regmap); @@ -57,14 +67,14 @@ static void cs35l56_i2c_remove(struct i2c_client *clien= t) } =20 static const struct i2c_device_id cs35l56_id_i2c[] =3D { - { "cs35l56" }, + { "cs35l56", 0x3556 }, {} }; MODULE_DEVICE_TABLE(i2c, cs35l56_id_i2c); =20 #ifdef CONFIG_ACPI static const struct acpi_device_id cs35l56_asoc_acpi_match[] =3D { - { "CSC355C", 0 }, + { "CSC355C", 0x3556 }, {}, }; MODULE_DEVICE_TABLE(acpi, cs35l56_asoc_acpi_match); diff --git a/sound/soc/codecs/cs35l56-sdw.c b/sound/soc/codecs/cs35l56-sdw.c index 3f91cb3f9ae7..d178357e1196 100644 --- a/sound/soc/codecs/cs35l56-sdw.c +++ b/sound/soc/codecs/cs35l56-sdw.c @@ -509,6 +509,7 @@ static int cs35l56_sdw_probe(struct sdw_slave *peripher= al, const struct sdw_devi { struct device *dev =3D &peripheral->dev; struct cs35l56_private *cs35l56; + const struct regmap_config *regmap_config; int ret; =20 cs35l56 =3D devm_kzalloc(dev, sizeof(*cs35l56), GFP_KERNEL); @@ -521,8 +522,17 @@ static int cs35l56_sdw_probe(struct sdw_slave *periphe= ral, const struct sdw_devi =20 dev_set_drvdata(dev, cs35l56); =20 + switch ((unsigned int)id->driver_data) { + case 0x3556: + case 0x3557: + regmap_config =3D &cs35l56_regmap_sdw; + break; + default: + return -ENODEV; + } + cs35l56->base.regmap =3D devm_regmap_init(dev, &cs35l56_regmap_bus_sdw, - peripheral, &cs35l56_regmap_sdw); + peripheral, regmap_config); if (IS_ERR(cs35l56->base.regmap)) { ret =3D PTR_ERR(cs35l56->base.regmap); return dev_err_probe(dev, ret, "Failed to allocate register map\n"); @@ -562,8 +572,8 @@ static const struct dev_pm_ops cs35l56_sdw_pm =3D { }; =20 static const struct sdw_device_id cs35l56_sdw_id[] =3D { - SDW_SLAVE_ENTRY(0x01FA, 0x3556, 0), - SDW_SLAVE_ENTRY(0x01FA, 0x3557, 0), + SDW_SLAVE_ENTRY(0x01FA, 0x3556, 0x3556), + SDW_SLAVE_ENTRY(0x01FA, 0x3557, 0x3557), {}, }; MODULE_DEVICE_TABLE(sdw, cs35l56_sdw_id); --=20 2.43.0 From nobody Tue Dec 16 15:25:48 2025 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 3A57026FDAA; Tue, 6 May 2025 09:59:28 +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=1746525571; cv=fail; b=k4c6wGgFGs7/shA2uWdYJbv9jthYG0ld0opm24q31oI4Atsos5YbGinlJBhzz+Jg1d4mCTEdJPTcdKEPN43+/BzGD5WZ2rDc258vOPEKQLIOqBkCrtL4rRLgVxRKeAAe9pxWop9wDvA1AD/OXGonbj/URLqWpHT4dklqEHxbwnA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746525571; c=relaxed/simple; bh=NqIUB9WKeNES7sjhNCqmuv3Hr5f0Cb4Cd2JwwTmlD58=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=IQPTWSNkt7MMYf8qpYbop9C4mBnmkv86GY+nUuVeDwPW9ciN5O1l+IugMQVNxZUd4PN+ItLz6XeYZlj5cIF351uSyi4JBjUdKGKa9nkXl3FIMfSYz9h/yghTr42Z9E2w0pwZYUQ2DJji/nI39DlxVFgejhIJGUc8nZN0HHU7NV8= 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=Lr0R8lbl; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=MCKOMM85; 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="Lr0R8lbl"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="MCKOMM85" Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5460I0Hk010201; Tue, 6 May 2025 04:59:26 -0500 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=rS4c3ej823xQWgLmZk2jT7HTuUcX6zfYH0KRV43gbuI=; b= Lr0R8lblU9fclUrdPhlKA/1FXIOagZNp2Cr9pnYpklmgu5FB5jrlUPsdEeSzHAZQ 4I6Ml23rQ1mXVoG4PVevcmaheV9q02MRQENOro6l7MLYodS5fUZIxfMxAom3rXst yaMfzsZ+LPGvvg2HOXIVq37ChyeUEprbPHUsGRIPpe6kzJ27Srm7rMnqmdshrl1V 0UuYun7y/6MsF8aLb9EjFpBbWrNzjmjJdrd8WJgGCdCebKA04wjdtzBtJZ4WRoTl Rw0fwnu2+C6vcA0uWJK/kZj9VFgljsqwq/s7LDXhgUcywviFmkVTBAKaOC6GbMiY l2Z4XtLTDmIoTc8FSwxZMA== Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2175.outbound.protection.outlook.com [104.47.55.175]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 46ew4n9dnx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 06 May 2025 04:59:25 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fgQWJYuYh7cdv6CRE+jPPs+1Fb/GhwIlh1Z3brsgiparzjinl0SLTcYCKdGEeGh0VHylCmipfgiet7UAS4zYHxfv63WmwsaIwe7XsO14XXZcLds2oepKQm3tISG2xaNh7NoZ2h7mpnvPhTf3vz2Sr0LBgRm1nswBpcFloEy7IOvfOb+TCLSrirSB8iy4VFDkeThP6WHYS9Fkae8W+YYrG+HoCgQRcGxwkGET68nds/RhNUOp8ogY5fXmTxlWTke7vWYfwNIr5Vkj69bHuwve9APRqsuFiGegl2TfMXnr5KF8GXg0yPchp91rS0j4hsPeXmXxKGBB6bRitCU2rh0wxg== 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=rS4c3ej823xQWgLmZk2jT7HTuUcX6zfYH0KRV43gbuI=; b=d9MsVsrhSZeJp710G2j/lSzWu0E8sYXA9+EBJaOsqU5+YdaEjxy30Gj1xEAsuSMzwWBUKUUosXnbEH697zetB7OyZvX2SB8hYgt2FKooyuCVkf82UaIcF1RYVdHgLO78pRc/Dx1QgCB59qVJJzqBWMD3KyZJPhjgKBJgLdlKya8+U6tjs1kb6VkbB4yXRajcQXfQ3Wasn4WmCMUSQbu45vO8BOI0sNwVRLtaysivQ23ylKOD9FV+chY2r1pik6JB4pW/5y3wjoCSEdQp8gSfuvUKj0MI576LFxiF2cctCWh16fhHHgyu7DAGfiEnVDdilyCDNH9CrqESjDJIouFwuQ== 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=rS4c3ej823xQWgLmZk2jT7HTuUcX6zfYH0KRV43gbuI=; b=MCKOMM854a+U0bMx840a6v58pVszwdphBHYSFeShI07D9H766/JLHuVHb4hHI2cd8wb2LeBKSVEPyHBl0HEYzdcDy7SGSQDCEEGwjkd5hcmMicyLBybGjh+NOaSepw8HCU0hxi7C+nzhD2t8VU+oVV20zx38L1x4ywCLua0UOXI= Received: from PH8P221CA0064.NAMP221.PROD.OUTLOOK.COM (2603:10b6:510:349::16) by SJ0PR19MB5384.namprd19.prod.outlook.com (2603:10b6:a03:3d7::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.24; Tue, 6 May 2025 09:59:14 +0000 Received: from SA2PEPF000015CB.namprd03.prod.outlook.com (2603:10b6:510:349:cafe::2) by PH8P221CA0064.outlook.office365.com (2603:10b6:510:349::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8722.20 via Frontend Transport; Tue, 6 May 2025 09:59:13 +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 SA2PEPF000015CB.mail.protection.outlook.com (10.167.241.201) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8722.18 via Frontend Transport; Tue, 6 May 2025 09:59:13 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id 3F20F40654A; Tue, 6 May 2025 09:59:12 +0000 (UTC) Received: from lonswws02.ad.cirrus.com (lonswws02.ad.cirrus.com [198.90.188.42]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTP id 158B5820270; Tue, 6 May 2025 09:59:12 +0000 (UTC) From: Stefan Binding To: Mark Brown Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com, Stefan Binding Subject: [PATCH RESEND v1 2/5] ASoC: cs35l56: Add struct to index firmware registers Date: Tue, 6 May 2025 10:58:47 +0100 Message-ID: <20250506095903.10827-3-sbinding@opensource.cirrus.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250506095903.10827-1-sbinding@opensource.cirrus.com> References: <20250506095903.10827-1-sbinding@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: SA2PEPF000015CB:EE_|SJ0PR19MB5384:EE_ X-MS-Office365-Filtering-Correlation-Id: f5fd4b7c-7196-40de-fa7f-08dd8c84a7da X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|36860700013|61400799027; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?M0d2cjvTh3A1anp12xioTHqWWZLV19nwOvUS/7VZwyY4zdYk46uadE7uWyKd?= =?us-ascii?Q?/tj5Cqwo0bgu9LQUZPkR6rCDbOs0JsU19u4QGC4S7wEFzq6dgdNBP2Jwvzj8?= =?us-ascii?Q?Nj1+yWQo6/cewaIi67AhfBU2/RKiA0GtE6vcLignknafJ0QIG5Ea9CN5fV3O?= =?us-ascii?Q?GL8PrWRiOEe5OTpytFnavn+jmt/27mJolM+uhPB66RqZSbQor41fvneTKfjj?= =?us-ascii?Q?reE6RU9xb0TqMiLO+664XFWdcvdqlBxqjt9VmeEPGopNLAGUUkhOUPYnXyxK?= =?us-ascii?Q?Nnc+zyMz7kNoDn3/mmWtr1krHdvogeG1PBi2kLzKbZpCWMmCCQQii1bEQz8n?= =?us-ascii?Q?re7xpupUmJCj0ANasA/iU3ykLJbdahX1Gh06mF62pXv6P+G20hshPUCeRF9C?= =?us-ascii?Q?ALYTJ1/JbrjOoKrcOXsyMB3x8ZSwa3UDzjjkcuAqcNQrOKd7PtI3YgFMgthU?= =?us-ascii?Q?Puvh+tYgGOLulGU8lXeS2G1R/wMvFSC+ieYktEQIBO7tvB72htq3PWwUTIVy?= =?us-ascii?Q?dp27W5a5pLh+4yC95osB7EqmvkNhhF4PG96jptFjtJFqI0RfGfiSdXIAA0RU?= =?us-ascii?Q?P8YvbRu+Vmh3NkSli/v3jp0XhfMjTpLf7Ky8yUZ3R8j/jHB/7nv/hdxUnNvj?= =?us-ascii?Q?nwtQUtsKdsFu6RIXPqEu+83SxY+veIB5d4s46+cCsljyXHPdtFYS7e3cBoph?= =?us-ascii?Q?ADyDLsHLKKgG8PzdHuZBA6jKRVBd8hfKtB9Mr2e7lmEkwyB2MC2MeL/kLL7P?= =?us-ascii?Q?mb7C587JCs69O8MJLcCtp9urr8fVqQDg8XRBWptpOMDqxz2zwAh2jza3DNxu?= =?us-ascii?Q?q9vgyOLVx0Nx92nEqOOfj32Nwb1MXeSWswZnykDXMu+7jveTARkn5YtHtXNH?= =?us-ascii?Q?Qa+XFKM169+5OkJMXfzmhzyOYu68YmzytZosS5ZqQ9ZdwshQNiE64UKIz/Fy?= =?us-ascii?Q?PhTfpRravgnQBLBWLpyj215hiXXao1jtXFpbLIeRmJbUVWQvOp6O10QETvF0?= =?us-ascii?Q?3mBWmYOJSLo/Y0G3TxBAsNbJrnXMhPUt7yU7lmmWl0Ez8Q4sNKobYOK6Dy+d?= =?us-ascii?Q?xAQcmaYcVcy+8ofwrfikZfkXmu7gzNfm9L5k7Wq7nIGOeAJuJDEBeDnBdVF3?= =?us-ascii?Q?+kRTBa7gpdJP0ed9uYdWMJ8p3FX6wni+A9c46W5YoyQh6Q4yhXlM19P9z3ys?= =?us-ascii?Q?hXhrBdu7XNzOj+vTPkTTvKnL+81fDcVhCmRAGTdNm08oUaGMEtZRjaXrFm8y?= =?us-ascii?Q?CUqWEqQ3hkmLGPFjta88xfMiJyPvilioiwkCvQwcDpAyJ8EuZ3eglEimnBay?= =?us-ascii?Q?yd52DigjT3Mp4EcpCJ+xIAfxceMhwXCBp/WrRD4fUUaScoAefQFDJN6NyXHC?= =?us-ascii?Q?aADhRKHJhmmEVpjAPGAhMdNgdffiA6dCQ+aTDOOQZ64SKnZKxgP8y/cX4OpI?= =?us-ascii?Q?KreY8rt6uh6RLsWjPkptV2stHjReg1P+3mXCit2IrWieXY2ICNJ+tGhblamP?= =?us-ascii?Q?ftzt4dDe+yze4lJk5K8aUuGSINEiOGJczaWR?= 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)(376014)(82310400026)(36860700013)(61400799027);DIR:OUT;SFP:1102; X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 May 2025 09:59:13.3427 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f5fd4b7c-7196-40de-fa7f-08dd8c84a7da 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-AuthSource: SA2PEPF000015CB.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR19MB5384 X-Authority-Analysis: v=2.4 cv=KoJN2XWN c=1 sm=1 tr=0 ts=6819dd7d cx=c_pps a=F+2k2gSOfOtDHduSTNWrfg==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=dt9VzEwgFbYA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=w1d2syhTAAAA:8 a=2i3JVGJO97D1DHyOKxEA:9 a=BGLuxUZjE2igh1l4FkT-:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA2MDA5NSBTYWx0ZWRfX4kDn4qtI6hrf Ugeaz+mkzpc3OnRUSyXabAg0ytn9L742iF3ax4dlcriid3/SipLLmiW+Gi3nfQ5nVf3jwWyrDnQ Uuv8WPFDZFkRl7QE59u7tOA+Pjcpv1EwxYfDE+g4qDZf4viTqM0/p1E+YUSaLDs9HO/9lIzNJgf qkPIvaGgZ550ImtUH15yv/mgDI8QFSaRNcxvhs9aS653ppJwbPSV1ti000jiCyNSieLn7QDSOor 4x9j2wQkwzkM/Dt/B6DN8nKdCe46rRNRe46fAf0PBf1K+La5KUKW2mX28aCZsTzMgjqoO2M0npG ntkh/bjCmfWiaYbFs00FDiElzvIPaqWwjUw+i0+YUc0/NIB2qLPr5017EqKo/AEGzFFFaEXF6GR hYw1ywF9bH5h1v0VkBTwGtdxZYWwponRtEhXk2heVX5BIzD4S+pstXrsetU0MCZ59nFoSyRy X-Proofpoint-ORIG-GUID: SBbUvh_jLsdOYidX4AVBhHRrMqqcJ5Rz X-Proofpoint-GUID: SBbUvh_jLsdOYidX4AVBhHRrMqqcJ5Rz X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" Firmware based registers may be different addresses across different device ids and revision ids. Create a structure to store and access these addresses. Signed-off-by: Stefan Binding --- include/sound/cs35l56.h | 11 ++++++++ sound/pci/hda/cs35l56_hda.c | 5 ++-- sound/pci/hda/cs35l56_hda_i2c.c | 3 +++ sound/pci/hda/cs35l56_hda_spi.c | 3 +++ sound/soc/codecs/cs35l56-i2c.c | 1 + sound/soc/codecs/cs35l56-sdw.c | 1 + sound/soc/codecs/cs35l56-shared.c | 42 ++++++++++++++++++++++++------- sound/soc/codecs/cs35l56-spi.c | 3 +++ sound/soc/codecs/cs35l56.c | 5 ++-- 9 files changed, 61 insertions(+), 13 deletions(-) diff --git a/include/sound/cs35l56.h b/include/sound/cs35l56.h index 5d653a3491d0..d712cb79652b 100644 --- a/include/sound/cs35l56.h +++ b/include/sound/cs35l56.h @@ -267,6 +267,14 @@ struct cs35l56_spi_payload { } __packed; static_assert(sizeof(struct cs35l56_spi_payload) =3D=3D 10); =20 +struct cs35l56_fw_reg { + unsigned int fw_ver; + unsigned int halo_state; + unsigned int pm_cur_stat; + unsigned int prot_sts; + unsigned int transducer_actual_ps; +}; + struct cs35l56_base { struct device *dev; struct regmap *regmap; @@ -283,6 +291,7 @@ struct cs35l56_base { struct cirrus_amp_cal_data cal_data; struct gpio_desc *reset_gpio; struct cs35l56_spi_payload *spi_payload_buf; + const struct cs35l56_fw_reg *fw_reg; }; =20 static inline bool cs35l56_is_otp_register(unsigned int reg) @@ -311,6 +320,8 @@ extern const struct regmap_config cs35l56_regmap_i2c; extern const struct regmap_config cs35l56_regmap_spi; extern const struct regmap_config cs35l56_regmap_sdw; =20 +extern const struct cs35l56_fw_reg cs35l56_fw_reg; + extern const struct cirrus_amp_cal_controls cs35l56_calibration_controls; =20 extern const char * const cs35l56_tx_input_texts[CS35L56_NUM_INPUT_SRC]; diff --git a/sound/pci/hda/cs35l56_hda.c b/sound/pci/hda/cs35l56_hda.c index 235d22049aa9..5660cf7087fe 100644 --- a/sound/pci/hda/cs35l56_hda.c +++ b/sound/pci/hda/cs35l56_hda.c @@ -68,7 +68,7 @@ static void cs35l56_hda_play(struct cs35l56_hda *cs35l56) if (ret =3D=3D 0) { /* Wait for firmware to enter PS0 power state */ ret =3D regmap_read_poll_timeout(cs35l56->base.regmap, - CS35L56_TRANSDUCER_ACTUAL_PS, + cs35l56->base.fw_reg->transducer_actual_ps, val, (val =3D=3D CS35L56_PS0), CS35L56_PS0_POLL_US, CS35L56_PS0_TIMEOUT_US); @@ -665,7 +665,8 @@ static void cs35l56_hda_fw_load(struct cs35l56_hda *cs3= 5l56) =20 regcache_sync(cs35l56->base.regmap); =20 - regmap_clear_bits(cs35l56->base.regmap, CS35L56_PROTECTION_STATUS, + regmap_clear_bits(cs35l56->base.regmap, + cs35l56->base.fw_reg->prot_sts, CS35L56_FIRMWARE_MISSING); cs35l56->base.fw_patched =3D true; =20 diff --git a/sound/pci/hda/cs35l56_hda_i2c.c b/sound/pci/hda/cs35l56_hda_i2= c.c index c7b836613149..d10209e4eddd 100644 --- a/sound/pci/hda/cs35l56_hda_i2c.c +++ b/sound/pci/hda/cs35l56_hda_i2c.c @@ -26,6 +26,9 @@ static int cs35l56_hda_i2c_probe(struct i2c_client *clt) #ifdef CS35L56_WAKE_HOLD_TIME_US cs35l56->base.can_hibernate =3D true; #endif + + cs35l56->base.fw_reg =3D &cs35l56_fw_reg; + cs35l56->base.regmap =3D devm_regmap_init_i2c(clt, &cs35l56_regmap_i2c); if (IS_ERR(cs35l56->base.regmap)) { ret =3D PTR_ERR(cs35l56->base.regmap); diff --git a/sound/pci/hda/cs35l56_hda_spi.c b/sound/pci/hda/cs35l56_hda_sp= i.c index 903578466905..f57533d3d728 100644 --- a/sound/pci/hda/cs35l56_hda_spi.c +++ b/sound/pci/hda/cs35l56_hda_spi.c @@ -29,6 +29,9 @@ static int cs35l56_hda_spi_probe(struct spi_device *spi) #ifdef CS35L56_WAKE_HOLD_TIME_US cs35l56->base.can_hibernate =3D true; #endif + + cs35l56->base.fw_reg =3D &cs35l56_fw_reg; + cs35l56->base.regmap =3D devm_regmap_init_spi(spi, &cs35l56_regmap_spi); if (IS_ERR(cs35l56->base.regmap)) { ret =3D PTR_ERR(cs35l56->base.regmap); diff --git a/sound/soc/codecs/cs35l56-i2c.c b/sound/soc/codecs/cs35l56-i2c.c index 5962914e2180..38c391d11c78 100644 --- a/sound/soc/codecs/cs35l56-i2c.c +++ b/sound/soc/codecs/cs35l56-i2c.c @@ -35,6 +35,7 @@ static int cs35l56_i2c_probe(struct i2c_client *client) switch (id) { case 0x3556: regmap_config =3D &cs35l56_regmap_i2c; + cs35l56->base.fw_reg =3D &cs35l56_fw_reg; break; default: return -ENODEV; diff --git a/sound/soc/codecs/cs35l56-sdw.c b/sound/soc/codecs/cs35l56-sdw.c index d178357e1196..2e0422b41385 100644 --- a/sound/soc/codecs/cs35l56-sdw.c +++ b/sound/soc/codecs/cs35l56-sdw.c @@ -526,6 +526,7 @@ static int cs35l56_sdw_probe(struct sdw_slave *peripher= al, const struct sdw_devi case 0x3556: case 0x3557: regmap_config =3D &cs35l56_regmap_sdw; + cs35l56->base.fw_reg =3D &cs35l56_fw_reg; break; default: return -ENODEV; diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-s= hared.c index e28bfefa72f3..bc8f9379bc74 100644 --- a/sound/soc/codecs/cs35l56-shared.c +++ b/sound/soc/codecs/cs35l56-shared.c @@ -253,7 +253,8 @@ int cs35l56_firmware_shutdown(struct cs35l56_base *cs35= l56_base) if (ret) return ret; =20 - ret =3D regmap_read_poll_timeout(cs35l56_base->regmap, CS35L56_DSP1_PM_C= UR_STATE, + ret =3D regmap_read_poll_timeout(cs35l56_base->regmap, + cs35l56_base->fw_reg->pm_cur_stat, val, (val =3D=3D CS35L56_HALO_STATE_SHUTDOWN), CS35L56_HALO_STATE_POLL_US, CS35L56_HALO_STATE_TIMEOUT_US); @@ -278,7 +279,9 @@ int cs35l56_wait_for_firmware_boot(struct cs35l56_base = *cs35l56_base) CS35L56_HALO_STATE_POLL_US, CS35L56_HALO_STATE_TIMEOUT_US, false, - cs35l56_base->regmap, CS35L56_DSP1_HALO_STATE, &val); + cs35l56_base->regmap, + cs35l56_base->fw_reg->halo_state, + &val); =20 if (poll_ret) { dev_err(cs35l56_base->dev, "Firmware boot timed out(%d): HALO_STATE=3D%#= x\n", @@ -395,9 +398,17 @@ void cs35l56_system_reset(struct cs35l56_base *cs35l56= _base, bool is_soundwire) return; } =20 - regmap_multi_reg_write_bypassed(cs35l56_base->regmap, - cs35l56_system_reset_seq, - ARRAY_SIZE(cs35l56_system_reset_seq)); + switch (cs35l56_base->type) { + case 0x54: + case 0x56: + case 0x57: + regmap_multi_reg_write_bypassed(cs35l56_base->regmap, + cs35l56_system_reset_seq, + ARRAY_SIZE(cs35l56_system_reset_seq)); + break; + default: + break; + } =20 /* On SoundWire the registers won't be accessible until it re-enumerates.= */ if (is_soundwire) @@ -514,7 +525,9 @@ int cs35l56_is_fw_reload_needed(struct cs35l56_base *cs= 35l56_base) return ret; } =20 - ret =3D regmap_read(cs35l56_base->regmap, CS35L56_PROTECTION_STATUS, &val= ); + ret =3D regmap_read(cs35l56_base->regmap, + cs35l56_base->fw_reg->prot_sts, + &val); if (ret) dev_err(cs35l56_base->dev, "Failed to read PROTECTION_STATUS: %d\n", ret= ); else @@ -562,7 +575,7 @@ int cs35l56_runtime_suspend_common(struct cs35l56_base = *cs35l56_base) =20 /* Firmware must have entered a power-save state */ ret =3D regmap_read_poll_timeout(cs35l56_base->regmap, - CS35L56_TRANSDUCER_ACTUAL_PS, + cs35l56_base->fw_reg->transducer_actual_ps, val, (val >=3D CS35L56_PS3), CS35L56_PS3_POLL_US, CS35L56_PS3_TIMEOUT_US); @@ -752,7 +765,8 @@ int cs35l56_read_prot_status(struct cs35l56_base *cs35l= 56_base, unsigned int prot_status; int ret; =20 - ret =3D regmap_read(cs35l56_base->regmap, CS35L56_PROTECTION_STATUS, &pro= t_status); + ret =3D regmap_read(cs35l56_base->regmap, + cs35l56_base->fw_reg->prot_sts, &prot_status); if (ret) { dev_err(cs35l56_base->dev, "Get PROTECTION_STATUS failed: %d\n", ret); return ret; @@ -760,7 +774,8 @@ int cs35l56_read_prot_status(struct cs35l56_base *cs35l= 56_base, =20 *fw_missing =3D !!(prot_status & CS35L56_FIRMWARE_MISSING); =20 - ret =3D regmap_read(cs35l56_base->regmap, CS35L56_DSP1_FW_VER, fw_version= ); + ret =3D regmap_read(cs35l56_base->regmap, + cs35l56_base->fw_reg->fw_ver, fw_version); if (ret) { dev_err(cs35l56_base->dev, "Get FW VER failed: %d\n", ret); return ret; @@ -1045,6 +1060,15 @@ const struct regmap_config cs35l56_regmap_sdw =3D { }; EXPORT_SYMBOL_NS_GPL(cs35l56_regmap_sdw, "SND_SOC_CS35L56_SHARED"); =20 +const struct cs35l56_fw_reg cs35l56_fw_reg =3D { + .fw_ver =3D CS35L56_DSP1_FW_VER, + .halo_state =3D CS35L56_DSP1_HALO_STATE, + .pm_cur_stat =3D CS35L56_DSP1_PM_CUR_STATE, + .prot_sts =3D CS35L56_PROTECTION_STATUS, + .transducer_actual_ps =3D CS35L56_TRANSDUCER_ACTUAL_PS, +}; +EXPORT_SYMBOL_NS_GPL(cs35l56_fw_reg, "SND_SOC_CS35L56_SHARED"); + MODULE_DESCRIPTION("ASoC CS35L56 Shared"); MODULE_AUTHOR("Richard Fitzgerald "); MODULE_AUTHOR("Simon Trimmer "); diff --git a/sound/soc/codecs/cs35l56-spi.c b/sound/soc/codecs/cs35l56-spi.c index ca6c03a8766d..c2ddee22cd23 100644 --- a/sound/soc/codecs/cs35l56-spi.c +++ b/sound/soc/codecs/cs35l56-spi.c @@ -25,6 +25,9 @@ static int cs35l56_spi_probe(struct spi_device *spi) return -ENOMEM; =20 spi_set_drvdata(spi, cs35l56); + + cs35l56->base.fw_reg =3D &cs35l56_fw_reg; + cs35l56->base.regmap =3D devm_regmap_init_spi(spi, regmap_config); if (IS_ERR(cs35l56->base.regmap)) { ret =3D PTR_ERR(cs35l56->base.regmap); diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c index b3158a84b87a..c1d8bfb803b9 100644 --- a/sound/soc/codecs/cs35l56.c +++ b/sound/soc/codecs/cs35l56.c @@ -174,7 +174,7 @@ static int cs35l56_play_event(struct snd_soc_dapm_widge= t *w, case SND_SOC_DAPM_POST_PMU: /* Wait for firmware to enter PS0 power state */ ret =3D regmap_read_poll_timeout(cs35l56->base.regmap, - CS35L56_TRANSDUCER_ACTUAL_PS, + cs35l56->base.fw_reg->transducer_actual_ps, val, (val =3D=3D CS35L56_PS0), CS35L56_PS0_POLL_US, CS35L56_PS0_TIMEOUT_US); @@ -760,7 +760,8 @@ static void cs35l56_patch(struct cs35l56_private *cs35l= 56, bool firmware_missing goto err_unlock; } =20 - regmap_clear_bits(cs35l56->base.regmap, CS35L56_PROTECTION_STATUS, + regmap_clear_bits(cs35l56->base.regmap, + cs35l56->base.fw_reg->prot_sts, CS35L56_FIRMWARE_MISSING); cs35l56->base.fw_patched =3D true; =20 --=20 2.43.0 From nobody Tue Dec 16 15:25:48 2025 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 4365B26D4D3; Tue, 6 May 2025 09:59:27 +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=1746525570; cv=fail; b=BY+dFWh+IqibZhRQidEu2AYvfPH/c8lng1EEKlJmxKzZeRCqPW7CO0TXVFa3bOXY596fADwc7zSWo9Mpr3PA5mnHLnnXBBtv5iDz/hZzLGghouJcAMROxfwhMItfYAlMF1eZs+eUIW2UetdnKecym5ZYMrfRq762Lc/FpFiKgds= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746525570; c=relaxed/simple; bh=el4lnsOYczckEfw3PyPzPpqLthrOqJhPQL/mj/5bSiY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NjIprSj1KFP8TjrDC/7i5fxwmQNzxN+K4qSPOrRtumrhrsahjEpSOi7gB1r3O8jztt9pHCwKN/qVTdx/NJWMVILqhNonnTR79/3n0cld5rZQE07ptoQELqGYTEnZmFEh2k4jfB+VDLB1S68jtl+COtmtn5Q/FcSqi/HMSciFFQ0= 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=I478yaeZ; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=TJ/Gi5li; 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="I478yaeZ"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="TJ/Gi5li" Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5460Gxh0009174; Tue, 6 May 2025 04:59:25 -0500 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=v1OytRehWpTtFkVJpRsTd4CjuYtwyza6r1PgHfmlXCk=; b= I478yaeZ3f75ouYvG2UYk7qVztwih2RN1KtCQBGvwXQBgQLBz4r6g7yM43f8FCbn HrxdhsZbqE3eHASsXJzbfHl9aJ5riO2fw6OCgqapjtuvzHDWgGebOgzbd+Z5zLMh eKL1JuEBWDPcH58gO3Tsd2Y+3GvtyBoUCPru0ClZ+x9JpgTaPeXVjbd+HNBxonUF e2GaTEqKq/H7vf4Xtj/c/j5Bqk05BYB4TGG6Py3sYcb0RoCEBj2RK0L19kKdpuS0 qnhD9RgwvCO3q4pTBkoFxGAWsRlvww4CKAKLxvckJR2/DS5at6u4u8hu/UuVoHch VkLZ0e3x4fB/lUsCCyixFw== Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2042.outbound.protection.outlook.com [104.47.66.42]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 46ew4n9dnw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 06 May 2025 04:59:24 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yQ2wnCBNFSP0tRV/GYjEIsgMbc6PF8Zo9ApJRBtGfe9O/ZEtd9+YaQlhx1QgCUW9M5UrbY1f0ONC1cLmzisTBgR+Ap8EaAYG/7isRorHED92PvfChhSQyOz3GVO65A2zkHkWuC1GlZEp9+KE00j5cEBC+RB9yv++GWE+ca62x+KVymcxVlIIhfdZvnZlJUdAUyS8RJxSuHwdyN3CzwRii2gHpk0bk7En9NJ24Pi2hjjLYhceIDQU/pTvIXbWLuFtAa4R8ke3oLQ/d7qZEr3BEknUGIUsHGod7GRliR8a12+EQhqQmsYzbg6YAaMGMKjyhO4D1Min4lXAO2HQzZVQGw== 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=v1OytRehWpTtFkVJpRsTd4CjuYtwyza6r1PgHfmlXCk=; b=mP+9/IFIonoumGp7yVNejuTt8Ca4n6kWCZzpZysivZ3B9C8AY0cv9KblPtab8+MM2sICFg/c56dL/qpbO+RI/p2sxOdalF8J1gCQzBUfQl5iIRYO6pwNxFGUpupZiN/nfG98Smb2Ek8b4Q7Ps5niipGwjIowLSMxHufpubCQYJcOpX7JBZ6/r8h0O+MnGHgCw1cavJGwNxjWrozjtsXT05cNoU+sDmI+Srsq7HLkEIiGwwvPwpIzh91SUaM0gwnUSDztG5lvL1MSohvxwVXX63E0c6SH6sH+B6dmVF3lMlqidmekgR/+Sc1uiKDlkBwKnEnY1safqXuk1KbTp7+KEg== 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=v1OytRehWpTtFkVJpRsTd4CjuYtwyza6r1PgHfmlXCk=; b=TJ/Gi5liFEzGaxFKn6TXxsvpmOuaWqZsNLgSolxz82PnaKCDS2zCDlBcpc9yA7KYwr/QQ2Dxce2ugDlD2I+3mpO9pOrzj76nDe5Lvh+z1xTnkekxoWWei1Dyh9LI64LnMvNtS6k4fja0wwhntfsBo0Z9ZSuS5kM8gQ/MdI52l0k= Received: from DM6PR03CA0096.namprd03.prod.outlook.com (2603:10b6:5:333::29) by SJ0PR19MB4591.namprd19.prod.outlook.com (2603:10b6:a03:279::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.24; Tue, 6 May 2025 09:59:14 +0000 Received: from DS2PEPF00003443.namprd04.prod.outlook.com (2603:10b6:5:333:cafe::ea) by DM6PR03CA0096.outlook.office365.com (2603:10b6:5:333::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8699.32 via Frontend Transport; Tue, 6 May 2025 09:59:14 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: Fail (protection.outlook.com: domain of opensource.cirrus.com does not designate 84.19.233.75 as permitted sender) receiver=protection.outlook.com; client-ip=84.19.233.75; helo=edirelay1.ad.cirrus.com; Received: from edirelay1.ad.cirrus.com (84.19.233.75) by DS2PEPF00003443.mail.protection.outlook.com (10.167.17.70) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8722.18 via Frontend Transport; Tue, 6 May 2025 09:59:13 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id 707B240654D; Tue, 6 May 2025 09:59:12 +0000 (UTC) Received: from lonswws02.ad.cirrus.com (lonswws02.ad.cirrus.com [198.90.188.42]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTP id 45A2C820270; Tue, 6 May 2025 09:59:12 +0000 (UTC) From: Stefan Binding To: Mark Brown Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com, Stefan Binding Subject: [PATCH RESEND v1 3/5] ASoC: cs35l56: Add Mute, Volume and Posture registers to firmware register list Date: Tue, 6 May 2025 10:58:48 +0100 Message-ID: <20250506095903.10827-4-sbinding@opensource.cirrus.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250506095903.10827-1-sbinding@opensource.cirrus.com> References: <20250506095903.10827-1-sbinding@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: DS2PEPF00003443:EE_|SJ0PR19MB4591:EE_ X-MS-Office365-Filtering-Correlation-Id: c2c02039-c5d7-439f-bfc8-08dd8c84a82a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|376014|61400799027; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?pPPZ045le8QERPCaaITdedUYKJiWSrLLMVbtI57YKVfc3jjfggWLXo2vxhCd?= =?us-ascii?Q?96eRAI+w8DnaimWddGaaP+j2UYnxpK039plGAHJs4XxI3pVwijovaskpRCbJ?= =?us-ascii?Q?cQHqAmXxI+3awSmnB4zhKqAC727/VUWV0wv4yeSolrhXqPx+TDOKu3Ke557R?= =?us-ascii?Q?v1ED/G3ETlro1h4rFFSBMPZOEpoyiTTM5FcuusdeKtPxKIOfViq4HdgaXaLB?= =?us-ascii?Q?cpZC9d8rMbFgsDP0WZHxSGjlcvfQoOvM8YJAbWlM1lH5sOLvvQAfH8KN8laV?= =?us-ascii?Q?Lkdm8GCE4yIVO7kBGV99c6gxrKri8F2enBrD9pu8v2I2vuvl54zPB3e3FwdA?= =?us-ascii?Q?zrMoRwA7WZc+1pgITAq0d0m0go9DuRN5NYIvvhDuWpdtaV3LagR3XKEpbn2T?= =?us-ascii?Q?yzOPH6DmgUChscRDO4NfpwcH5Q4qstzOZu78YLpOXkcUrlAf5UkaWNAaFyi4?= =?us-ascii?Q?MMRu3YF8GuWiG1QTuTpym0EDiSzLktJj/krivGABfN9MR4Pv+TYH0BkARhov?= =?us-ascii?Q?XXWVTdHSR3JAsaHjXkj8Yxq1NdQKQ9wow4Q4bmhbyfjIgpgofra5vCAjl2HO?= =?us-ascii?Q?lU6HTNb9lCOTo0NckCCx5Lih+u3AhSe+zWXcELrLXtOmQ6diHJD6hBDO02G1?= =?us-ascii?Q?wYAZ48VU5FJ7hmzx3U8ZO9V9QwVwWg0rRBnmeN72oXxRJvYq8RuSmbgh2Y34?= =?us-ascii?Q?edoGPdmQbBHoMNXRMWjtE3ClEBWFEdAgLv2zADYEM4L+AB35s+vemBt4mfj7?= =?us-ascii?Q?UUpndWLUqJ8U3gnt2F12/jQfzLBj0MBTARU4QlMS6J4kp0E3zwpSMiswFB+P?= =?us-ascii?Q?rDDWoQ3ig0+QTa2lsNtBISlksjjied9bKlXUVK3nsewNH/t5EffOP7gIcsGL?= =?us-ascii?Q?Wyes7RN0gtKW6ZqlfqoSkEXaJBO17sZuKgqiSTqnzQOaU480IgHqhlI3hp0F?= =?us-ascii?Q?lcCCzE+Vl+OA2NEq+6xGTk9vXzPEz3zSanh+PJsGzxyzhLy7Bu50WIRpkjvp?= =?us-ascii?Q?Rrb5HXqbg8uhwe0GX6hM+BLLV3yxgmnRscJUubbF6k6gOeY6+33qrqlhC2Mf?= =?us-ascii?Q?IZ0bvKI9RlrPgYLiZ2Ks7WYD7QeblkEuOJm16UUOt0xV+MWRJW5pRllA6g4O?= =?us-ascii?Q?be5p6QYRSt15P0ImxecDtwSvjddMERNJXBYQ5esp1quDKYSkn6C4z9EMmm3o?= =?us-ascii?Q?XSctlTvMbQXGmlIvafyLRIkRS1/XCwkyKaQqqMba9EjPsI7iuCVGi0U74Zz3?= =?us-ascii?Q?Gsy0S5a0ZYhBqEbp0356r7PZ/N7PHJYAFsFCCQa8dHjqO2iCF+SWqulGcaDe?= =?us-ascii?Q?lyupSE3xkaOI2VnmM+V7aTTcuoM4mUT30YoNGvF1eD9GCK0iQCOgVav1eztJ?= =?us-ascii?Q?Vm/XKlWtdwpntGGvWL3jG2PZ60oRtNx3u3Rh01aHEOc6OQcIW+075KlG9mYJ?= =?us-ascii?Q?VYFqsfo84olej1ClZslZXUekZH5YDcQ98LdJx0T/hJvegzlQOiyz9fFakeT+?= =?us-ascii?Q?XpLo6qWs1VJNIEa1aNnSS03zy33UheFMAJiJ?= 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)(82310400026)(376014)(61400799027);DIR:OUT;SFP:1102; X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 May 2025 09:59:13.8584 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c2c02039-c5d7-439f-bfc8-08dd8c84a82a 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-AuthSource: DS2PEPF00003443.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR19MB4591 X-Authority-Analysis: v=2.4 cv=KoJN2XWN c=1 sm=1 tr=0 ts=6819dd7c cx=c_pps a=ZuQraZtzrhlqXEa35WAx3g==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=dt9VzEwgFbYA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=w1d2syhTAAAA:8 a=QglkZ7J-TCNlRGhXK3QA:9 a=BGLuxUZjE2igh1l4FkT-:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA2MDA5NSBTYWx0ZWRfX7C+a3llVO+C8 8F2/U0MISJuQHKDtQBT520BEAMsAEX9oUVRO2tMSOzOkgTEemUy2gzJkqD7P1ayvPUAzenVZxNX Z8roQDOJNBHMvG14+nozWV4b8WPtcjfv0g6YaTi4PCIylOtWavKR5/4rq/fAgaxnQEwj024N9PF RV+CL6jgaxuBBK8uZNthQ11+AYMNa4bD4q5Sudtz/lL8FICa9+9QNs8CdS20oyPIubzXR3Vfv8u WsXgMdXoNUQkaHPd4nHu2EiSpeWJFhqCz/3y5k7wEwpJmUeIFJPYiqsXBC4isgEdzWl/+rqBCVz E5XeJQuXAGZheHNJ0qWUjh6hmGAmQlq3nyWAOjItX+KUPdFMNhnxdzxM3G3Blx76vqXOz8gWXSq JKURdRGX4LgMd2tVoY9nBMNMYgic81UDRQ5ASwhS0WLNvR7ZREA0PfTQYxopvc6lfAUmrVpa X-Proofpoint-ORIG-GUID: jrmPr_bcgXMq3SrRciOzBdmo5ii_Ex5M X-Proofpoint-GUID: jrmPr_bcgXMq3SrRciOzBdmo5ii_Ex5M X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" Registers to set Mute, Volume and Posture are inside firmware, which means they should be added to the list of registers set inside firmware, in case they vary across Device or Revision. These three registers are also used for controls, so additional handling is required to be able to obtain and set the register inside ALSA controls. Signed-off-by: Stefan Binding --- include/sound/cs35l56.h | 3 +++ sound/pci/hda/cs35l56_hda.c | 17 +++++++---------- sound/soc/codecs/cs35l56-shared.c | 25 ++++++++++++++++++++++++- sound/soc/codecs/cs35l56.c | 19 +++++++++++++++++-- 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/include/sound/cs35l56.h b/include/sound/cs35l56.h index d712cb79652b..3abe4fbd2085 100644 --- a/include/sound/cs35l56.h +++ b/include/sound/cs35l56.h @@ -273,6 +273,9 @@ struct cs35l56_fw_reg { unsigned int pm_cur_stat; unsigned int prot_sts; unsigned int transducer_actual_ps; + unsigned int user_mute; + unsigned int user_volume; + unsigned int posture_number; }; =20 struct cs35l56_base { diff --git a/sound/pci/hda/cs35l56_hda.c b/sound/pci/hda/cs35l56_hda.c index 5660cf7087fe..b6fecf119261 100644 --- a/sound/pci/hda/cs35l56_hda.c +++ b/sound/pci/hda/cs35l56_hda.c @@ -237,7 +237,8 @@ static int cs35l56_hda_posture_get(struct snd_kcontrol = *kcontrol, =20 cs35l56_hda_wait_dsp_ready(cs35l56); =20 - ret =3D regmap_read(cs35l56->base.regmap, CS35L56_MAIN_POSTURE_NUMBER, &p= os); + ret =3D regmap_read(cs35l56->base.regmap, + cs35l56->base.fw_reg->posture_number, &pos); if (ret) return ret; =20 @@ -260,10 +261,8 @@ static int cs35l56_hda_posture_put(struct snd_kcontrol= *kcontrol, =20 cs35l56_hda_wait_dsp_ready(cs35l56); =20 - ret =3D regmap_update_bits_check(cs35l56->base.regmap, - CS35L56_MAIN_POSTURE_NUMBER, - CS35L56_MAIN_POSTURE_MASK, - pos, &changed); + ret =3D regmap_update_bits_check(cs35l56->base.regmap, cs35l56->base.fw_r= eg->posture_number, + CS35L56_MAIN_POSTURE_MASK, pos, &changed); if (ret) return ret; =20 @@ -305,7 +304,7 @@ static int cs35l56_hda_vol_get(struct snd_kcontrol *kco= ntrol, =20 cs35l56_hda_wait_dsp_ready(cs35l56); =20 - ret =3D regmap_read(cs35l56->base.regmap, CS35L56_MAIN_RENDER_USER_VOLUME= , &raw_vol); + ret =3D regmap_read(cs35l56->base.regmap, cs35l56->base.fw_reg->user_volu= me, &raw_vol); =20 if (ret) return ret; @@ -339,10 +338,8 @@ static int cs35l56_hda_vol_put(struct snd_kcontrol *kc= ontrol, =20 cs35l56_hda_wait_dsp_ready(cs35l56); =20 - ret =3D regmap_update_bits_check(cs35l56->base.regmap, - CS35L56_MAIN_RENDER_USER_VOLUME, - CS35L56_MAIN_RENDER_USER_VOLUME_MASK, - raw_vol, &changed); + ret =3D regmap_update_bits_check(cs35l56->base.regmap, cs35l56->base.fw_r= eg->user_volume, + CS35L56_MAIN_RENDER_USER_VOLUME_MASK, raw_vol, &changed); if (ret) return ret; =20 diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-s= hared.c index bc8f9379bc74..da982774bb4d 100644 --- a/sound/soc/codecs/cs35l56-shared.c +++ b/sound/soc/codecs/cs35l56-shared.c @@ -38,7 +38,9 @@ static const struct reg_sequence cs35l56_patch[] =3D { { CS35L56_SWIRE_DP3_CH3_INPUT, 0x00000029 }, { CS35L56_SWIRE_DP3_CH4_INPUT, 0x00000028 }, { CS35L56_IRQ1_MASK_18, 0x1f7df0ff }, +}; =20 +static const struct reg_sequence cs35l56_patch_fw[] =3D { /* These are not reset by a soft-reset, so patch to defaults. */ { CS35L56_MAIN_RENDER_USER_MUTE, 0x00000000 }, { CS35L56_MAIN_RENDER_USER_VOLUME, 0x00000000 }, @@ -47,8 +49,26 @@ static const struct reg_sequence cs35l56_patch[] =3D { =20 int cs35l56_set_patch(struct cs35l56_base *cs35l56_base) { - return regmap_register_patch(cs35l56_base->regmap, cs35l56_patch, + int ret; + + ret =3D regmap_register_patch(cs35l56_base->regmap, cs35l56_patch, ARRAY_SIZE(cs35l56_patch)); + if (ret) + return ret; + + + switch (cs35l56_base->type) { + case 0x54: + case 0x56: + case 0x57: + ret =3D regmap_register_patch(cs35l56_base->regmap, cs35l56_patch_fw, + ARRAY_SIZE(cs35l56_patch_fw)); + break; + default: + break; + } + + return ret; } EXPORT_SYMBOL_NS_GPL(cs35l56_set_patch, "SND_SOC_CS35L56_SHARED"); =20 @@ -1066,6 +1086,9 @@ const struct cs35l56_fw_reg cs35l56_fw_reg =3D { .pm_cur_stat =3D CS35L56_DSP1_PM_CUR_STATE, .prot_sts =3D CS35L56_PROTECTION_STATUS, .transducer_actual_ps =3D CS35L56_TRANSDUCER_ACTUAL_PS, + .user_mute =3D CS35L56_MAIN_RENDER_USER_MUTE, + .user_volume =3D CS35L56_MAIN_RENDER_USER_VOLUME, + .posture_number =3D CS35L56_MAIN_POSTURE_NUMBER, }; EXPORT_SYMBOL_NS_GPL(cs35l56_fw_reg, "SND_SOC_CS35L56_SHARED"); =20 diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c index c1d8bfb803b9..a4a1d09097fc 100644 --- a/sound/soc/codecs/cs35l56.c +++ b/sound/soc/codecs/cs35l56.c @@ -838,6 +838,7 @@ static int cs35l56_component_probe(struct snd_soc_compo= nent *component) struct cs35l56_private *cs35l56 =3D snd_soc_component_get_drvdata(compone= nt); struct dentry *debugfs_root =3D component->debugfs_root; unsigned short vendor, device; + int ret; =20 BUILD_BUG_ON(ARRAY_SIZE(cs35l56_tx_input_texts) !=3D ARRAY_SIZE(cs35l56_t= x_input_values)); =20 @@ -877,6 +878,22 @@ static int cs35l56_component_probe(struct snd_soc_comp= onent *component) debugfs_create_bool("can_hibernate", 0444, debugfs_root, &cs35l56->base.c= an_hibernate); debugfs_create_bool("fw_patched", 0444, debugfs_root, &cs35l56->base.fw_p= atched); =20 + + switch (cs35l56->base.type) { + case 0x54: + case 0x56: + case 0x57: + ret =3D snd_soc_add_component_controls(component, cs35l56_controls, + ARRAY_SIZE(cs35l56_controls)); + break; + default: + ret =3D -ENODEV; + break; + } + + if (ret) + return dev_err_probe(cs35l56->base.dev, ret, "unable to add controls\n"); + queue_work(cs35l56->dsp_wq, &cs35l56->dsp_work); =20 return 0; @@ -932,8 +949,6 @@ static const struct snd_soc_component_driver soc_compon= ent_dev_cs35l56 =3D { .num_dapm_widgets =3D ARRAY_SIZE(cs35l56_dapm_widgets), .dapm_routes =3D cs35l56_audio_map, .num_dapm_routes =3D ARRAY_SIZE(cs35l56_audio_map), - .controls =3D cs35l56_controls, - .num_controls =3D ARRAY_SIZE(cs35l56_controls), =20 .set_bias_level =3D cs35l56_set_bias_level, =20 --=20 2.43.0 From nobody Tue Dec 16 15:25:48 2025 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 14D542701B4; Tue, 6 May 2025 09:59:29 +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=1746525572; cv=fail; b=Mbm0GebKQlE7RaL4ogT+Y98CQkvqC6oT+JwIlZ3DjmmAX2fKI0P+EFPNu19q9UDqlcNSHRLxIs+8M22Tj+ytdQncVW8hGY7ltSf2IinZuOWTzI6TMRLOCAQb6Gr7O7E7ZxIRp1+DHzS+VTy40mvAWC4Us5n0EWyr1qvRuSuppGU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746525572; c=relaxed/simple; bh=nCdPFwtleOLX9Im3Fz2AesZWmPZe4GNt/4GAuY4RswU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=mcuYBi4wdUyvhLTYxtwPAW8c2EZN2cnUnbrT7ZeulHX5toN2pelXbr8nJCgeuoRQlCAxqMIxi0wwVAjArS2twFsBugVXk+65Iq3pCp3JMGRvNQBwlytvPhc215AiYkLR/u0E26KDCqw67Gvwug80bEpuFN0p/CsWmmWEMQKmskk= 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=QrpSX8PM; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=BzOwQ2vw; 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="QrpSX8PM"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="BzOwQ2vw" Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5460I0Hm010201; Tue, 6 May 2025 04:59:27 -0500 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=S/QbRk2seyUY78y+9D8RMnNeTe8MdhV3nroM1nhzdrw=; b= QrpSX8PMx1hLDbQ/zYo8o16n1ecMmy2mO+KaV3F8Pts5qqxur8sHAuguaOHdU1fT 8xGgOzEn/2csfwwvwCVIWi1iOoFeqXq1pRhc7lzYfi4RI179p18UkkXIZQ5kPK6z +K6nDgaw+VBC4JyeGigBwLDMOIDoA6BlEY60b7dyPFMez1J/Dhj+rjAhkBg+rhJr pZ+O1VxEBzeBg/5YWgU4EorOTXxLT63qgu4az3RLzIcqqqrN2IC7DJ057MjdnK6Z nV71YX2bkjNS/7yV45kxjwEAixn51I/0liJ16LUsjhqJYEbmHdKhItGj1V3kwJlR RnjJ00+uA8VqPIQcAerReQ== Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2173.outbound.protection.outlook.com [104.47.59.173]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 46ew4n9dp0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 06 May 2025 04:59:26 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CtxesBKC3p75tzSZR5p5it5iX23/REG9I9ATsvqBNbRYeEwqWKWCkwMEW0k24LnmnRgVKBs2qR9BBPQuGaVt+WuhF78at0oolseX5O0czDH1noEAJ9aT4yw5HkO47/XjrGl5U7pQ3gqUt2nW5Dv1a/ST4Qh+4xNLCa9SOTrRFOc3xIHJMiM62poXcCJNUySRAhQyCRwy2Z8N1DLLVq1BOppALO22IsMLgyGkSvkbYDmadPCgmEvLTWfkCRU2cdtroNOADei/z/NoUHA1Mu4gb0OgYSK8UongDgyc9u29Sln1yjJjMC0voBINoGj6fvisnXR+tBAp5XSNgoo6IYM3pw== 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=S/QbRk2seyUY78y+9D8RMnNeTe8MdhV3nroM1nhzdrw=; b=MCN49ooO2KKQUobZBAO+EtUjhjODEbYTH33xHFCIcd33yh6nPZBI/h4Ksf4UvNMsuimlR4yw/c3GiKkwKNwSNpja2u/x+H6NvGo6ariORMpxpkcR4Tm5fUl4tB0WkJ8kSIr5KHCr68vb3PTr4460TZRGWXZ2JZyzpuUKUlae6aihMyHdA4Uk8wIXxyuICinIjoWK09G4mE4msQq5i/QDG7vq85Rlj7wTv96lHW4v508YKrsSIdjP1dKCxbqK4q9IseW1Zrz3I+wXELua1JpNJOO3124JxUuU51B32ojnT9iY9CTdbvVM06eogbQqcq1O4Fzs25vulSG5cV5dd+ymtw== 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=S/QbRk2seyUY78y+9D8RMnNeTe8MdhV3nroM1nhzdrw=; b=BzOwQ2vw7HseQm8r8+9l4fyrN9irp57mAJhpO2INAaf4OJXBZi7pnvKwKdIVnsUBvxLqzEBu0Gq7+dTyx8/ft7g6s6FcpnkPLe9iev7G7owgSDqJhYHBXtpYuHcQ4+ZdfKNFJDAzx4SkvKiOSwKmrwEkCLCgpcJtXakBuHwymKI= Received: from PH8P221CA0055.NAMP221.PROD.OUTLOOK.COM (2603:10b6:510:349::8) by PH7PR19MB5918.namprd19.prod.outlook.com (2603:10b6:510:1d9::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.26; Tue, 6 May 2025 09:59:14 +0000 Received: from SA2PEPF000015CB.namprd03.prod.outlook.com (2603:10b6:510:349:cafe::c8) by PH8P221CA0055.outlook.office365.com (2603:10b6:510:349::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8722.20 via Frontend Transport; Tue, 6 May 2025 09:59:14 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: Fail (protection.outlook.com: domain of opensource.cirrus.com does not designate 84.19.233.75 as permitted sender) receiver=protection.outlook.com; client-ip=84.19.233.75; helo=edirelay1.ad.cirrus.com; Received: from edirelay1.ad.cirrus.com (84.19.233.75) by SA2PEPF000015CB.mail.protection.outlook.com (10.167.241.201) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8722.18 via Frontend Transport; Tue, 6 May 2025 09:59:13 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id A2D3D40654E; Tue, 6 May 2025 09:59:12 +0000 (UTC) Received: from lonswws02.ad.cirrus.com (lonswws02.ad.cirrus.com [198.90.188.42]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTP id 7669882255C; Tue, 6 May 2025 09:59:12 +0000 (UTC) From: Stefan Binding To: Mark Brown Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com, Stefan Binding Subject: [PATCH RESEND v1 4/5] ASoC: cs35l56: Add initial support for CS35L63 for I2C and SoundWire Date: Tue, 6 May 2025 10:58:49 +0100 Message-ID: <20250506095903.10827-5-sbinding@opensource.cirrus.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250506095903.10827-1-sbinding@opensource.cirrus.com> References: <20250506095903.10827-1-sbinding@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: SA2PEPF000015CB:EE_|PH7PR19MB5918:EE_ X-MS-Office365-Filtering-Correlation-Id: 8f8429f0-6abb-49f7-f45d-08dd8c84a819 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|376014|61400799027; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?g3Z/jNwUlQIy3yIAQV0x3pErp6UNe8qEVyze7ew9UqJsExyTkcXY7yq9At8d?= =?us-ascii?Q?MG2pLkPlC5+g51xixvML8AxIaNLZhq2kH0V4chSC/JPA1PC/kzEz0j4Jv7QW?= =?us-ascii?Q?tweKzHHs1cK18/VLe8GweQJK3XCrCrSzMvBJvRP8qrpeMsfxbDCRmXqF/MOi?= =?us-ascii?Q?Mxxi190XSvSHT9wOjnOQmWbGH42AItO3MS9uct/DpD22kRSxaqOl66xi5fDP?= =?us-ascii?Q?wtAbGiUeduEyqNbmrNVsU+oHy7dEke0Zb0xH78wQ/wNoWwrJ+Id+UlkVRK+o?= =?us-ascii?Q?lVmup2lsrrDI9Kt9z0ujs9KJRwpOoZr7fsUh6EhD1eYMKhZ6Y99cI08qXjfp?= =?us-ascii?Q?b73NDl33M7AH+mQrHsvkBafxxNsWIsx8Ylmbv7V54QquML/L88eKqBJtLpCw?= =?us-ascii?Q?OGjYBbu5IK4W3RBTNl5PS1oipcrW4+s/5j74iOokGBABLLJTbFogFpzBwqc8?= =?us-ascii?Q?vx22v5FNkxRmqLNI0kFypbO1pwZviMVzNH7eNRlX7ZW4erxbPQVoFcfv6lNG?= =?us-ascii?Q?b4RoorNdtK9fcBS4s5DGCdYobERW2zBK/oWxeSf9ai2SdrKV7C3rRsx00dwR?= =?us-ascii?Q?x+00A5JM5UflArRjtEEEc7SYhhfk8/RoUrAe9XwNrrKOOnOMK3bCQ2lFVp7p?= =?us-ascii?Q?vNLG8zprMfVSFaG++kizl0ttvXRXn7L7N9JNKENtx0pKNSwvk0Q953YD0VSX?= =?us-ascii?Q?fR4FesFTQV5bwgm/zujMMOed86eQu7Pw9FwxRO1NjMBfpnPhsSz6xumCE1OQ?= =?us-ascii?Q?+uHiVQ2u/rlUhOFIE8VNlVO6Dd8yv3v6ADAzl7+qGwb8HwL84hZOvxsDtnmz?= =?us-ascii?Q?4H8+fTaPxMcNjncm5C932s7m6wiaCf8D9FlCxKK6f8qFn6hQK+q3YjMklHRa?= =?us-ascii?Q?lwDUMtSk326qoEuapltRkrn0pngNszjr7+b+5a9W0T1mLbb7mDbrW8Lww67y?= =?us-ascii?Q?T+QrHHXSy1BtOlUOLiWjmyUaNt8aJWIWAzLIHioDmJs84wcPqaY3uHJ+uxX4?= =?us-ascii?Q?yOj6Yy3n7uVBcMTPBqdeP0Uh0A/CGpAK8+OdOTItkWxxaqszwQIutoWqYmeM?= =?us-ascii?Q?OBTfdbJdKuv1LgE4x0fA4Rt6y4RVDQxh14SBzDB+qdAa5jWkaD+6mAQpy201?= =?us-ascii?Q?pIW1psVZTpY5S7BrTjYYEq34uEIDUm4K9GJynCCrKXi/cPES7uvcED/8DolH?= =?us-ascii?Q?vi6XO2GPaUK9Znyff1SB7D+MK4qeX6xyAqR8IrKajnvwFvQhVQaO2BDdnWe+?= =?us-ascii?Q?VylLsjkoI3blI4KPK7xtiw8sFgcYdcaTbqfPz8LguaHEAc9aOAEQ097U2Kod?= =?us-ascii?Q?4Toq6iG2wy3PdAUrdZvwiv6K8nv2pfREIlUK8Abbrki6JwOG/1VjspwXTakc?= =?us-ascii?Q?JKC1u/lBkHN+IJF8S7h5MB21UHHsBwz0EC/YxYpMwzvpXYpTYF6Yu8+izdpK?= =?us-ascii?Q?prB9Tx+VbRS4UE1gE8T4MLNE8aKr3jCsIxRxrhomwU45iObJPY8fexGc+Jnq?= =?us-ascii?Q?eGaVtypItr+tH7neGE1H1ptTBVxfWohlLOTA?= 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)(82310400026)(376014)(61400799027);DIR:OUT;SFP:1102; X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 May 2025 09:59:13.7514 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8f8429f0-6abb-49f7-f45d-08dd8c84a819 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-AuthSource: SA2PEPF000015CB.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR19MB5918 X-Authority-Analysis: v=2.4 cv=KoJN2XWN c=1 sm=1 tr=0 ts=6819dd7e cx=c_pps a=H8RDR50mQ1szzU+C1Tr1+Q==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=dt9VzEwgFbYA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=w1d2syhTAAAA:8 a=_UruoEx0gL58JRCOsKwA:9 a=BGLuxUZjE2igh1l4FkT-:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA2MDA5NSBTYWx0ZWRfX632TYbpgpayb eOvhd6SuXRhPee6wXZwstAQT4ERCWl3D/jnXMROdO4N256AnB7Fga+S4cwXZGUnpGpQkoBMhUSU hGPd0vP1a7H2nisSfMp+y+3eXJFOLREApGJpEV/cmQ9Vj9y/AuWSqfiUqyh+byr8s1RG8KQCZzn Nwup91Vh32znCHRB6qELtmK1LNahIBa+3gI/CjyHu4c9H9lspdw8nO5RC6YhKheYyPvP6cwwewH xbMoieTrFxQ49BRqHqFaIe4CX0wLhPoFS3EFMtEWFivIwvCV3EClRN3s+3nr7B6uKlSrY9jKo6d 6/p0gyuJfJE9Lr/YuXn53xYuZ+qdOWcq/G9yQ9NCU227d93qWBlWiNV5FwbGTkqgkoXOsoehTKL 7dikS3MrY2jzFcbCY2paHQoij1aMlpsPQxDfw3s7DlWvpRtFrbrj05SUVHYN2cr44ypDbUca X-Proofpoint-ORIG-GUID: l3PbjQjKPPtD15IIQjMYGpA-ML2Bo_UV X-Proofpoint-GUID: l3PbjQjKPPtD15IIQjMYGpA-ML2Bo_UV X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" CS35L63 uses a similar control interface to CS35L56 so support for it can be added into the CS35L56 driver. New regmap configs have been added to support CS35L63. CS35L63 only has SoundWire and I2C control interfaces. Signed-off-by: Stefan Binding --- include/sound/cs35l56.h | 12 +++ sound/soc/codecs/cs35l56-i2c.c | 6 ++ sound/soc/codecs/cs35l56-sdw.c | 74 ++++++++++++++++++ sound/soc/codecs/cs35l56-shared.c | 123 +++++++++++++++++++++++++++++- sound/soc/codecs/cs35l56.c | 23 ++++++ sound/soc/codecs/cs35l56.h | 1 + 6 files changed, 237 insertions(+), 2 deletions(-) diff --git a/include/sound/cs35l56.h b/include/sound/cs35l56.h index 3abe4fbd2085..e16e1a94c8a1 100644 --- a/include/sound/cs35l56.h +++ b/include/sound/cs35l56.h @@ -104,6 +104,15 @@ #define CS35L56_DSP1_PMEM_0 0x3800000 #define CS35L56_DSP1_PMEM_5114 0x3804FE8 =20 +#define CS35L63_DSP1_FW_VER CS35L56_DSP1_FW_VER +#define CS35L63_DSP1_HALO_STATE 0x280396C +#define CS35L63_DSP1_PM_CUR_STATE 0x28042C8 +#define CS35L63_PROTECTION_STATUS 0x340009C +#define CS35L63_TRANSDUCER_ACTUAL_PS 0x34000F4 +#define CS35L63_MAIN_RENDER_USER_MUTE 0x3400020 +#define CS35L63_MAIN_RENDER_USER_VOLUME 0x3400028 +#define CS35L63_MAIN_POSTURE_NUMBER 0x3400068 + /* DEVID */ #define CS35L56_DEVID_MASK 0x00FFFFFF =20 @@ -322,8 +331,11 @@ static inline bool cs35l56_is_spi(struct cs35l56_base = *cs35l56) extern const struct regmap_config cs35l56_regmap_i2c; extern const struct regmap_config cs35l56_regmap_spi; extern const struct regmap_config cs35l56_regmap_sdw; +extern const struct regmap_config cs35l63_regmap_i2c; +extern const struct regmap_config cs35l63_regmap_sdw; =20 extern const struct cs35l56_fw_reg cs35l56_fw_reg; +extern const struct cs35l56_fw_reg cs35l63_fw_reg; =20 extern const struct cirrus_amp_cal_controls cs35l56_calibration_controls; =20 diff --git a/sound/soc/codecs/cs35l56-i2c.c b/sound/soc/codecs/cs35l56-i2c.c index 38c391d11c78..073f1796ae29 100644 --- a/sound/soc/codecs/cs35l56-i2c.c +++ b/sound/soc/codecs/cs35l56-i2c.c @@ -37,6 +37,10 @@ static int cs35l56_i2c_probe(struct i2c_client *client) regmap_config =3D &cs35l56_regmap_i2c; cs35l56->base.fw_reg =3D &cs35l56_fw_reg; break; + case 0x3563: + regmap_config =3D &cs35l63_regmap_i2c; + cs35l56->base.fw_reg =3D &cs35l63_fw_reg; + break; default: return -ENODEV; } @@ -69,6 +73,7 @@ static void cs35l56_i2c_remove(struct i2c_client *client) =20 static const struct i2c_device_id cs35l56_id_i2c[] =3D { { "cs35l56", 0x3556 }, + { "cs35l63", 0x3563 }, {} }; MODULE_DEVICE_TABLE(i2c, cs35l56_id_i2c); @@ -76,6 +81,7 @@ MODULE_DEVICE_TABLE(i2c, cs35l56_id_i2c); #ifdef CONFIG_ACPI static const struct acpi_device_id cs35l56_asoc_acpi_match[] =3D { { "CSC355C", 0x3556 }, + { "CSC356C", 0x3563 }, {}, }; MODULE_DEVICE_TABLE(acpi, cs35l56_asoc_acpi_match); diff --git a/sound/soc/codecs/cs35l56-sdw.c b/sound/soc/codecs/cs35l56-sdw.c index 2e0422b41385..13f602f51bf3 100644 --- a/sound/soc/codecs/cs35l56-sdw.c +++ b/sound/soc/codecs/cs35l56-sdw.c @@ -393,6 +393,74 @@ static int cs35l56_sdw_update_status(struct sdw_slave = *peripheral, return 0; } =20 +static int cs35l63_sdw_kick_divider(struct cs35l56_private *cs35l56, + struct sdw_slave *peripheral) +{ + unsigned int curr_scale_reg, next_scale_reg; + int curr_scale, next_scale, ret; + + if (!cs35l56->base.init_done) + return 0; + + if (peripheral->bus->params.curr_bank) { + curr_scale_reg =3D SDW_SCP_BUSCLOCK_SCALE_B1; + next_scale_reg =3D SDW_SCP_BUSCLOCK_SCALE_B0; + } else { + curr_scale_reg =3D SDW_SCP_BUSCLOCK_SCALE_B0; + next_scale_reg =3D SDW_SCP_BUSCLOCK_SCALE_B1; + } + + /* + * Current clock scale value must be different to new value. + * Modify current to guarantee this. If next still has the dummy + * value we wrote when it was current, the core code has not set + * a new scale so restore its original good value + */ + curr_scale =3D sdw_read_no_pm(peripheral, curr_scale_reg); + if (curr_scale < 0) { + dev_err(cs35l56->base.dev, "Failed to read current clock scale: %d\n", c= urr_scale); + return curr_scale; + } + + next_scale =3D sdw_read_no_pm(peripheral, next_scale_reg); + if (next_scale < 0) { + dev_err(cs35l56->base.dev, "Failed to read next clock scale: %d\n", next= _scale); + return next_scale; + } + + if (next_scale =3D=3D CS35L56_SDW_INVALID_BUS_SCALE) { + next_scale =3D cs35l56->old_sdw_clock_scale; + ret =3D sdw_write_no_pm(peripheral, next_scale_reg, next_scale); + if (ret < 0) { + dev_err(cs35l56->base.dev, "Failed to modify current clock scale: %d\n", + ret); + return ret; + } + } + + cs35l56->old_sdw_clock_scale =3D curr_scale; + ret =3D sdw_write_no_pm(peripheral, curr_scale_reg, CS35L56_SDW_INVALID_B= US_SCALE); + if (ret < 0) { + dev_err(cs35l56->base.dev, "Failed to modify current clock scale: %d\n",= ret); + return ret; + } + + dev_dbg(cs35l56->base.dev, "Next bus scale: %#x\n", next_scale); + + return 0; +} + +static int cs35l56_sdw_bus_config(struct sdw_slave *peripheral, + struct sdw_bus_params *params) +{ + struct cs35l56_private *cs35l56 =3D dev_get_drvdata(&peripheral->dev); + + if ((cs35l56->base.type =3D=3D 0x63) && (cs35l56->base.rev < 0xa1)) + return cs35l63_sdw_kick_divider(cs35l56, peripheral); + + return 0; +} + static int __maybe_unused cs35l56_sdw_clk_stop(struct sdw_slave *periphera= l, enum sdw_clk_stop_mode mode, enum sdw_clk_stop_type type) @@ -408,6 +476,7 @@ static const struct sdw_slave_ops cs35l56_sdw_ops =3D { .read_prop =3D cs35l56_sdw_read_prop, .interrupt_callback =3D cs35l56_sdw_interrupt, .update_status =3D cs35l56_sdw_update_status, + .bus_config =3D cs35l56_sdw_bus_config, #ifdef DEBUG .clk_stop =3D cs35l56_sdw_clk_stop, #endif @@ -528,6 +597,10 @@ static int cs35l56_sdw_probe(struct sdw_slave *periphe= ral, const struct sdw_devi regmap_config =3D &cs35l56_regmap_sdw; cs35l56->base.fw_reg =3D &cs35l56_fw_reg; break; + case 0x3563: + regmap_config =3D &cs35l63_regmap_sdw; + cs35l56->base.fw_reg =3D &cs35l63_fw_reg; + break; default: return -ENODEV; } @@ -575,6 +648,7 @@ static const struct dev_pm_ops cs35l56_sdw_pm =3D { static const struct sdw_device_id cs35l56_sdw_id[] =3D { SDW_SLAVE_ENTRY(0x01FA, 0x3556, 0x3556), SDW_SLAVE_ENTRY(0x01FA, 0x3557, 0x3557), + SDW_SLAVE_ENTRY(0x01FA, 0x3563, 0x3563), {}, }; MODULE_DEVICE_TABLE(sdw, cs35l56_sdw_id); diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-s= hared.c index da982774bb4d..76ddb1cf6889 100644 --- a/sound/soc/codecs/cs35l56-shared.c +++ b/sound/soc/codecs/cs35l56-shared.c @@ -47,6 +47,13 @@ static const struct reg_sequence cs35l56_patch_fw[] =3D { { CS35L56_MAIN_POSTURE_NUMBER, 0x00000000 }, }; =20 +static const struct reg_sequence cs35l63_patch_fw[] =3D { + /* These are not reset by a soft-reset, so patch to defaults. */ + { CS35L63_MAIN_RENDER_USER_MUTE, 0x00000000 }, + { CS35L63_MAIN_RENDER_USER_VOLUME, 0x00000000 }, + { CS35L63_MAIN_POSTURE_NUMBER, 0x00000000 }, +}; + int cs35l56_set_patch(struct cs35l56_base *cs35l56_base) { int ret; @@ -64,6 +71,10 @@ int cs35l56_set_patch(struct cs35l56_base *cs35l56_base) ret =3D regmap_register_patch(cs35l56_base->regmap, cs35l56_patch_fw, ARRAY_SIZE(cs35l56_patch_fw)); break; + case 0x63: + ret =3D regmap_register_patch(cs35l56_base->regmap, cs35l63_patch_fw, + ARRAY_SIZE(cs35l63_patch_fw)); + break; default: break; } @@ -102,6 +113,36 @@ static const struct reg_default cs35l56_reg_defaults[]= =3D { { CS35L56_MAIN_POSTURE_NUMBER, 0x00000000 }, }; =20 +static const struct reg_default cs35l63_reg_defaults[] =3D { + /* no defaults for OTP_MEM - first read populates cache */ + + { CS35L56_ASP1_ENABLES1, 0x00000000 }, + { CS35L56_ASP1_CONTROL1, 0x00000028 }, + { CS35L56_ASP1_CONTROL2, 0x18180200 }, + { CS35L56_ASP1_CONTROL3, 0x00000002 }, + { CS35L56_ASP1_FRAME_CONTROL1, 0x03020100 }, + { CS35L56_ASP1_FRAME_CONTROL5, 0x00020100 }, + { CS35L56_ASP1_DATA_CONTROL1, 0x00000018 }, + { CS35L56_ASP1_DATA_CONTROL5, 0x00000018 }, + { CS35L56_ASP1TX1_INPUT, 0x00000000 }, + { CS35L56_ASP1TX2_INPUT, 0x00000000 }, + { CS35L56_ASP1TX3_INPUT, 0x00000000 }, + { CS35L56_ASP1TX4_INPUT, 0x00000000 }, + { CS35L56_SWIRE_DP3_CH1_INPUT, 0x00000018 }, + { CS35L56_SWIRE_DP3_CH2_INPUT, 0x00000019 }, + { CS35L56_SWIRE_DP3_CH3_INPUT, 0x00000029 }, + { CS35L56_SWIRE_DP3_CH4_INPUT, 0x00000028 }, + { CS35L56_IRQ1_MASK_1, 0x8003ffff }, + { CS35L56_IRQ1_MASK_2, 0xffff7fff }, + { CS35L56_IRQ1_MASK_4, 0xe0ffffff }, + { CS35L56_IRQ1_MASK_8, 0x8c000fff }, + { CS35L56_IRQ1_MASK_18, 0x0760f000 }, + { CS35L56_IRQ1_MASK_20, 0x15c00000 }, + { CS35L63_MAIN_RENDER_USER_MUTE, 0x00000000 }, + { CS35L63_MAIN_RENDER_USER_VOLUME, 0x00000000 }, + { CS35L63_MAIN_POSTURE_NUMBER, 0x00000000 }, +}; + static bool cs35l56_is_dsp_memory(unsigned int reg) { switch (reg) { @@ -199,7 +240,7 @@ static bool cs35l56_precious_reg(struct device *dev, un= signed int reg) } } =20 -static bool cs35l56_volatile_reg(struct device *dev, unsigned int reg) +static bool cs35l56_common_volatile_reg(unsigned int reg) { switch (reg) { case CS35L56_DEVID: @@ -237,12 +278,32 @@ static bool cs35l56_volatile_reg(struct device *dev, = unsigned int reg) case CS35L56_DSP1_SCRATCH3: case CS35L56_DSP1_SCRATCH4: return true; + default: + return cs35l56_is_dsp_memory(reg); + } +} + +static bool cs35l56_volatile_reg(struct device *dev, unsigned int reg) +{ + switch (reg) { case CS35L56_MAIN_RENDER_USER_MUTE: case CS35L56_MAIN_RENDER_USER_VOLUME: case CS35L56_MAIN_POSTURE_NUMBER: return false; default: - return cs35l56_is_dsp_memory(reg); + return cs35l56_common_volatile_reg(reg); + } +} + +static bool cs35l63_volatile_reg(struct device *dev, unsigned int reg) +{ + switch (reg) { + case CS35L63_MAIN_RENDER_USER_MUTE: + case CS35L63_MAIN_RENDER_USER_VOLUME: + case CS35L63_MAIN_POSTURE_NUMBER: + return false; + default: + return cs35l56_common_volatile_reg(reg); } } =20 @@ -405,6 +466,11 @@ static const struct reg_sequence cs35l56_system_reset_= seq[] =3D { REG_SEQ0(CS35L56_DSP_VIRTUAL1_MBOX_1, CS35L56_MBOX_CMD_SYSTEM_RESET), }; =20 +static const struct reg_sequence cs35l63_system_reset_seq[] =3D { + REG_SEQ0(CS35L63_DSP1_HALO_STATE, 0), + REG_SEQ0(CS35L56_DSP_VIRTUAL1_MBOX_1, CS35L56_MBOX_CMD_SYSTEM_RESET), +}; + void cs35l56_system_reset(struct cs35l56_base *cs35l56_base, bool is_sound= wire) { /* @@ -426,6 +492,11 @@ void cs35l56_system_reset(struct cs35l56_base *cs35l56= _base, bool is_soundwire) cs35l56_system_reset_seq, ARRAY_SIZE(cs35l56_system_reset_seq)); break; + case 0x63: + regmap_multi_reg_write_bypassed(cs35l56_base->regmap, + cs35l63_system_reset_seq, + ARRAY_SIZE(cs35l63_system_reset_seq)); + break; default: break; } @@ -844,6 +915,9 @@ int cs35l56_hw_init(struct cs35l56_base *cs35l56_base) case 0x35A56: case 0x35A57: break; + case 0x35A630: + devid =3D devid >> 4; + break; default: dev_err(cs35l56_base->dev, "Unknown device %x\n", devid); return ret; @@ -1080,6 +1154,39 @@ const struct regmap_config cs35l56_regmap_sdw =3D { }; EXPORT_SYMBOL_NS_GPL(cs35l56_regmap_sdw, "SND_SOC_CS35L56_SHARED"); =20 +const struct regmap_config cs35l63_regmap_i2c =3D { + .reg_bits =3D 32, + .val_bits =3D 32, + .reg_stride =3D 4, + .reg_base =3D 0x8000, + .reg_format_endian =3D REGMAP_ENDIAN_BIG, + .val_format_endian =3D REGMAP_ENDIAN_BIG, + .max_register =3D CS35L56_DSP1_PMEM_5114, + .reg_defaults =3D cs35l63_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(cs35l63_reg_defaults), + .volatile_reg =3D cs35l63_volatile_reg, + .readable_reg =3D cs35l56_readable_reg, + .precious_reg =3D cs35l56_precious_reg, + .cache_type =3D REGCACHE_MAPLE, +}; +EXPORT_SYMBOL_NS_GPL(cs35l63_regmap_i2c, "SND_SOC_CS35L56_SHARED"); + +const struct regmap_config cs35l63_regmap_sdw =3D { + .reg_bits =3D 32, + .val_bits =3D 32, + .reg_stride =3D 4, + .reg_format_endian =3D REGMAP_ENDIAN_LITTLE, + .val_format_endian =3D REGMAP_ENDIAN_BIG, + .max_register =3D CS35L56_DSP1_PMEM_5114, + .reg_defaults =3D cs35l63_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(cs35l63_reg_defaults), + .volatile_reg =3D cs35l63_volatile_reg, + .readable_reg =3D cs35l56_readable_reg, + .precious_reg =3D cs35l56_precious_reg, + .cache_type =3D REGCACHE_MAPLE, +}; +EXPORT_SYMBOL_NS_GPL(cs35l63_regmap_sdw, "SND_SOC_CS35L56_SHARED"); + const struct cs35l56_fw_reg cs35l56_fw_reg =3D { .fw_ver =3D CS35L56_DSP1_FW_VER, .halo_state =3D CS35L56_DSP1_HALO_STATE, @@ -1092,6 +1199,18 @@ const struct cs35l56_fw_reg cs35l56_fw_reg =3D { }; EXPORT_SYMBOL_NS_GPL(cs35l56_fw_reg, "SND_SOC_CS35L56_SHARED"); =20 +const struct cs35l56_fw_reg cs35l63_fw_reg =3D { + .fw_ver =3D CS35L63_DSP1_FW_VER, + .halo_state =3D CS35L63_DSP1_HALO_STATE, + .pm_cur_stat =3D CS35L63_DSP1_PM_CUR_STATE, + .prot_sts =3D CS35L63_PROTECTION_STATUS, + .transducer_actual_ps =3D CS35L63_TRANSDUCER_ACTUAL_PS, + .user_mute =3D CS35L63_MAIN_RENDER_USER_MUTE, + .user_volume =3D CS35L63_MAIN_RENDER_USER_VOLUME, + .posture_number =3D CS35L63_MAIN_POSTURE_NUMBER, +}; +EXPORT_SYMBOL_NS_GPL(cs35l63_fw_reg, "SND_SOC_CS35L56_SHARED"); + MODULE_DESCRIPTION("ASoC CS35L56 Shared"); MODULE_AUTHOR("Richard Fitzgerald "); MODULE_AUTHOR("Simon Trimmer "); diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c index a4a1d09097fc..cdb283ed938c 100644 --- a/sound/soc/codecs/cs35l56.c +++ b/sound/soc/codecs/cs35l56.c @@ -84,6 +84,25 @@ static const struct snd_kcontrol_new cs35l56_controls[] = =3D { cs35l56_dspwait_get_volsw, cs35l56_dspwait_put_volsw), }; =20 +static const struct snd_kcontrol_new cs35l63_controls[] =3D { + SOC_SINGLE_EXT("Speaker Switch", + CS35L63_MAIN_RENDER_USER_MUTE, 0, 1, 1, + cs35l56_dspwait_get_volsw, cs35l56_dspwait_put_volsw), + SOC_SINGLE_S_EXT_TLV("Speaker Volume", + CS35L63_MAIN_RENDER_USER_VOLUME, + CS35L56_MAIN_RENDER_USER_VOLUME_SHIFT, + CS35L56_MAIN_RENDER_USER_VOLUME_MIN, + CS35L56_MAIN_RENDER_USER_VOLUME_MAX, + CS35L56_MAIN_RENDER_USER_VOLUME_SIGNBIT, + 0, + cs35l56_dspwait_get_volsw, + cs35l56_dspwait_put_volsw, + vol_tlv), + SOC_SINGLE_EXT("Posture Number", CS35L63_MAIN_POSTURE_NUMBER, + 0, 255, 0, + cs35l56_dspwait_get_volsw, cs35l56_dspwait_put_volsw), +}; + static SOC_VALUE_ENUM_SINGLE_DECL(cs35l56_asp1tx1_enum, CS35L56_ASP1TX1_INPUT, 0, CS35L56_ASP_TXn_SRC_MASK, @@ -886,6 +905,10 @@ static int cs35l56_component_probe(struct snd_soc_comp= onent *component) ret =3D snd_soc_add_component_controls(component, cs35l56_controls, ARRAY_SIZE(cs35l56_controls)); break; + case 0x63: + ret =3D snd_soc_add_component_controls(component, cs35l63_controls, + ARRAY_SIZE(cs35l63_controls)); + break; default: ret =3D -ENODEV; break; diff --git a/sound/soc/codecs/cs35l56.h b/sound/soc/codecs/cs35l56.h index 8a987ec01507..200f695efca3 100644 --- a/sound/soc/codecs/cs35l56.h +++ b/sound/soc/codecs/cs35l56.h @@ -51,6 +51,7 @@ struct cs35l56_private { u8 asp_slot_count; bool tdm_mode; bool sysclk_set; + u8 old_sdw_clock_scale; }; =20 extern const struct dev_pm_ops cs35l56_pm_ops_i2c_spi; --=20 2.43.0 From nobody Tue Dec 16 15:25:48 2025 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 78971272E75; Tue, 6 May 2025 09:59:31 +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=1746525574; cv=fail; b=Zl9Bn0jyoE/lO57X1MMEKEzlViJV7VkeaAD3zcM0eCi+mI8FuWvKhdqlDGkb/K1NtxxcY6jY0Pup4QOZLWQ3qUwhtxi1cpi6gJjZkeDFq+iI9Z/6jUt/kfCT6Q2eYqPugNZh/Wplpo+Sxh9Ix8pPjmQ8YRxR0SEiWsj5Ds+hU5Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746525574; c=relaxed/simple; bh=sMg+l+DwviDy/O90xXItjc+uyyFkzAI5vS3bYFfSkog=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=J9B6mLnWPdnCDdRjQbHvQ25feiw+R4aGh4jSG1TehIGDiuFaPhNvPAUG3O/05WsZX7gK4WfYvohJ80jAIeNUq42iqcRv+D8L+PrmfrIjBS0HNXdzaDLjFTN8ChvurttB2h0g7NypvzuzH/W3Txjh2ypX/46f1/VyCkQU6pF2r0w= 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=FUX/wSO4; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=i+wYORT6; 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="FUX/wSO4"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="i+wYORT6" Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5460I0Hl010201; Tue, 6 May 2025 04:59:26 -0500 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=j0hWv08HP1GeLP//o9dhysk0Fb8tP3kqDf3PGfVekT8=; b= FUX/wSO4Jzs/tcAkbeEXKZzeIumpoCLxZoew23702w/iI3FaSQ11WZ5BUP98vGX6 ZayQWmfGHQnO7upLufkCPFg9YMfrAohLgRQ+rsYtlFaAWZoEqpQup65dVJe1wZ3u cemIzi3WaB2bY33ZYd7sG9a0zRcgU7/eclIXeRp5xg66v/K3Nox5MGs06F+qON/w Hm4hNNoWJlmi59BWGSf1Q0qnppP3c0KYj1zNvUpK/xFonJFDC9GFEjgaxVJs2F5Q uXHKplxS4fGx3fV2azsG/WMKzEKVvCzA1rMSY/fy26UzrPH7k6gNMDSF8+Y/PwyH bTn216oFsDwozvwa75HMvw== Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2049.outbound.protection.outlook.com [104.47.58.49]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 46ew4n9dny-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 06 May 2025 04:59:25 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hN42N2KEhgm39hQ+MSzeDh7zvxJ8fJ5ayHKCMBM8H1WKDvT7Ntej1e9SJFH7rarablvoqsE4xPTcogewImUbxpm9vhqzmUgrfoYMLgAbCKCvem9FIub6yXQmEQIhZsHMGIr0bM5EkPlGYvgYd4/V8yrxTsZGiz1EtgeTOjv1+tOwo9+2Tc54FLi3rQZVt1JFu6Pp5IV1BJI8FUGhRTbYhv3DmpNkH9CNCNjzUFiTdApIjbFWjRiRedE9LkO+wdiYyaISYG/549luZuCgvnzS514mSfZBk3cCsJXo3A530neAyBTEGIAFTSK/nkSCwZFiWLQz/2N/TNuC2tEyFCGskQ== 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=j0hWv08HP1GeLP//o9dhysk0Fb8tP3kqDf3PGfVekT8=; b=LQ3DjwXBo8uxHOmVH2erntcwcy3sOywiHS6yKqauMvem5T/eoT2Qwi5BtLdmo0g+GI5JBaUNRFQOzsGDLz8mMhhSVAY+n92CAvof4hQDmsd2CFCiX4odSbAdEjEVcXS+5AJPX/c/4qx6IXqAvXx9SLFPCy/cCM93DpTp5HSuB+5BiK5HZbpg1f4V0eEwROyoZSBx2clCALvrAMQV+jD1LZmcL6A8NgDfWaRUraqdTHmFSpdhAbCV4an3W/rbfNZEupNF18Ra3wJLCsdzLP/lFU12r3JUsh5lvBpPmOFch81lpFVyIOq3l7PPEpQ7x1suhfzLY/3Ki0/0qBDZep+MzA== 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=j0hWv08HP1GeLP//o9dhysk0Fb8tP3kqDf3PGfVekT8=; b=i+wYORT6Vek5AnuIQfn+NHMK1gtUCl8a5gFuM1Wj8+geeFEPDwSl7Z+HjElND/+oEPEgWoGutLc9ShwPxizXTgiGcLFBux9/ovfclVmdkF12ADb6/pVU4uow2mPYn5bsIe5DfkvwgLvFrUYDk30xdMYNQA+koq5G0Wfu/p9cCQ0= Received: from SA9PR13CA0001.namprd13.prod.outlook.com (2603:10b6:806:21::6) by BY3PR19MB5202.namprd19.prod.outlook.com (2603:10b6:a03:36a::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.26; Tue, 6 May 2025 09:59:16 +0000 Received: from SN1PEPF000397AF.namprd05.prod.outlook.com (2603:10b6:806:21:cafe::4e) by SA9PR13CA0001.outlook.office365.com (2603:10b6:806:21::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8722.17 via Frontend Transport; Tue, 6 May 2025 09:59:16 +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 SN1PEPF000397AF.mail.protection.outlook.com (10.167.248.53) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8722.18 via Frontend Transport; Tue, 6 May 2025 09:59:15 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id D21B040654F; Tue, 6 May 2025 09:59:12 +0000 (UTC) Received: from lonswws02.ad.cirrus.com (lonswws02.ad.cirrus.com [198.90.188.42]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTP id A84A8820270; Tue, 6 May 2025 09:59:12 +0000 (UTC) From: Stefan Binding To: Mark Brown Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com, Stefan Binding Subject: [PATCH RESEND v1 5/5] ASoC: cs35l56: Read Silicon ID from DIE_STS registers for CS35L63 Date: Tue, 6 May 2025 10:58:50 +0100 Message-ID: <20250506095903.10827-6-sbinding@opensource.cirrus.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250506095903.10827-1-sbinding@opensource.cirrus.com> References: <20250506095903.10827-1-sbinding@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: SN1PEPF000397AF:EE_|BY3PR19MB5202:EE_ X-MS-Office365-Filtering-Correlation-Id: d963f972-8889-487d-2e2a-08dd8c84a912 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|61400799027|36860700013|376014|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?A3raG0pv2+T1KUhxnlG7kk2tpXy08VyNVzMkCmQUD+3ztNzsga8J/4wxNpYi?= =?us-ascii?Q?tr5zXqjVfLTxeQF4BikTW3qtf1Kvi3HzZGjYprjR9XjmPlvZLzQ6p2zpmS3F?= =?us-ascii?Q?u4b/8visK/BC0mWd+A20x7iAAl1WIMhFDSrB4gL1dahWTg/KtWlNZX9WeXaQ?= =?us-ascii?Q?dLQIKpZP2GrnxVn91nIj1N/ZbCuFlfUJ+Ptwj4YYwjbbwUo5KllFQ+GGteHY?= =?us-ascii?Q?ko5Xc7AO2ixNAurvI3ldY9J3EJvY3UFv3cDgmDLuZqOL40yp03R72CV7gxgF?= =?us-ascii?Q?3ArP1gSDFb8zfB/E7c+MXQQWyD5ZHaVf8oC4R+NAiiFG9jYwuVh0oN2X007d?= =?us-ascii?Q?SO4Gn6hDI8mYeCUlmPiNb2y4fx4FTo8spVJZqi9xzKp4/JLtOeZop4vufXyE?= =?us-ascii?Q?jya7pj98kDMVGiuWatjXygBM99N+AOo17aAq83LEhy2YT2h2DpovjRMIci0J?= =?us-ascii?Q?6z+sD6EKaHJamhV1aFyX0BpRx/OcorOhP9w9t5ML9q0V+cMdz0e5UmFIkfo+?= =?us-ascii?Q?GdRKuK8d3W4smpWE7kiDkyP1a+YKvWN2jOdYk5Uj7g3RZGnru9C4Z0aNK7Tx?= =?us-ascii?Q?Z/LccFlCZJ+vKzfrws9ZVYrR9BUpzcoQa9QnbivrRaF1lvAL4IjPcST/1FUN?= =?us-ascii?Q?NDe4xw6jxPN31XDZ9RPbsXFQKwlngoLd4DaI8CHqWXEx2w9mkJM/viFNIvqo?= =?us-ascii?Q?wZcFEIKeI9+MpG02gyWJrDVGOOWP98gwZSxuz0Q5nTXsPni/tfhJx7aZEoDr?= =?us-ascii?Q?lpyD/Lk9/vaSyCcDcHSJQK37v2ieQq2owdI4henlkY9qGCIQOhgtzFzIzrzl?= =?us-ascii?Q?fGVpToZpYISvFWC+I9OMDX4xWYKi4dVAuxhuuKxjyKPdYAIl60DutOIseyl1?= =?us-ascii?Q?kJ9fHiWnF/bko2PxAoTPC36zf0BxE6zjLvmbnW6zdPzc5mtrp67Tn0/g4gkQ?= =?us-ascii?Q?aTrFfYK13i3ZFryW7roQHkosePNtkMj3sLIsdtEHzA0qCvhTA19qzLEdFCh5?= =?us-ascii?Q?6ovxOGClQum3G6idk8F5vIoFTTxT06+Nl4vYTeW2VjZV1+BZMX+gvRXdsOK+?= =?us-ascii?Q?PEC+yClKYdviHjfFO1MuvEhdvtEkiCrzTBga5i2d9bmU3iGNpyTia0yg3hrx?= =?us-ascii?Q?YQFUXz+X2SnE1R8VqQ219ZtDfYIED948bGc83qPookzA+3kWeYQ4fi9SHJZx?= =?us-ascii?Q?mUxzlwyzqNBipNwWuXqljG0xS34EfYsGRaN/joIDUh1XBS7ia0oKA5H8xJwy?= =?us-ascii?Q?oAKUBQ/En54TvY6jwGN/GnQ4dAROoJ51tRdMzcdombUiof2IZE/N0ItApqta?= =?us-ascii?Q?qcFErGN5dIJ03Y4SYoyiPMPt3n72425Qc3sawoSGOpUrBswUzGHPAt9o0Ral?= =?us-ascii?Q?fL/s/EIZLf2np7EoIzlnYSSa9mfmcVkkX/YB2w91bvr8emMApEfhj9gWAHBy?= =?us-ascii?Q?mPdM4OpxP9p/ts3lUUoEtEFYUUyYavxkHW9PdsTbLZom5ZWdNHVuT4WkgeWI?= =?us-ascii?Q?ZqcbzDKJmwf4iuFXUBIZx/pPdx4gvPjs7Ad/?= X-Forefront-Antispam-Report: CIP:84.19.233.75;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:edirelay1.ad.cirrus.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(61400799027)(36860700013)(376014)(82310400026);DIR:OUT;SFP:1102; X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 May 2025 09:59:15.3821 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d963f972-8889-487d-2e2a-08dd8c84a912 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-AuthSource: SN1PEPF000397AF.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY3PR19MB5202 X-Authority-Analysis: v=2.4 cv=KoJN2XWN c=1 sm=1 tr=0 ts=6819dd7e cx=c_pps a=SX8rmsjRxG1z7ITso5uGAQ==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=dt9VzEwgFbYA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=w1d2syhTAAAA:8 a=CWbckqrqqy4M3qBwpBwA:9 a=BGLuxUZjE2igh1l4FkT-:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA2MDA5NSBTYWx0ZWRfX1Vcp876VTMil K1GAcBeEpffs02l/3XbmZRNUPY5RARS4k9lFSNkpnXuAPiiSjqmoFFVasHtM2Sko6rNznURSTxC /BuzwyaLmdABWWTFURnA0EZ51MHhX2d5bwZVljr65SWdD8jMZ7+osj005nFQQi2JJ8flCXwg+7y Hcju3lgRSyex6ZFcnxlqJRX3ZC1szY3ZRoslFLeNQSn9BDC2oAF8/jB0ULHuuFpl2RAyTG7n9sY mTnihUlkbDa1ijxvd5CORRSXQ1NoEnM0pMsRf6vYe4LoAPG+P+Rv7PgDds6RRTTY1zSWQmsw1D0 joVrw4yeIl78G6N2eTpWeaMSbOxd40nEMGtKILXv8946JvwCNYZWO/XiZ/nmkpcW9IbjQC0orh5 CtsXbgisgsZLGu7a8GCXhaHuSUvaJJfZIShDb6R5ULuvRAB8On7TqbBq0c778mJy/OgmaSje X-Proofpoint-ORIG-GUID: SU-Y_s3DZve_kOCLFj1OeVrlpTK7AyKG X-Proofpoint-GUID: SU-Y_s3DZve_kOCLFj1OeVrlpTK7AyKG X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" On CS35L63 the DIE_STS registers are populated by the Firmware from OTP, so the driver can read these registers directly, rather than obtaining them from OTP. Signed-off-by: Stefan Binding --- include/sound/cs35l56.h | 2 ++ sound/soc/codecs/cs35l56-shared.c | 39 ++++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/include/sound/cs35l56.h b/include/sound/cs35l56.h index e16e1a94c8a1..63f2c63f7c59 100644 --- a/include/sound/cs35l56.h +++ b/include/sound/cs35l56.h @@ -71,6 +71,8 @@ #define CS35L56_DSP_VIRTUAL1_MBOX_6 0x0011034 #define CS35L56_DSP_VIRTUAL1_MBOX_7 0x0011038 #define CS35L56_DSP_VIRTUAL1_MBOX_8 0x001103C +#define CS35L56_DIE_STS1 0x0017040 +#define CS35L56_DIE_STS2 0x0017044 #define CS35L56_DSP_RESTRICT_STS1 0x00190F0 #define CS35L56_DSP1_XMEM_PACKED_0 0x2000000 #define CS35L56_DSP1_XMEM_PACKED_6143 0x2005FFC diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-s= hared.c index 76ddb1cf6889..7f768718b69b 100644 --- a/sound/soc/codecs/cs35l56-shared.c +++ b/sound/soc/codecs/cs35l56-shared.c @@ -214,6 +214,8 @@ static bool cs35l56_readable_reg(struct device *dev, un= signed int reg) case CS35L56_DSP_VIRTUAL1_MBOX_6: case CS35L56_DSP_VIRTUAL1_MBOX_7: case CS35L56_DSP_VIRTUAL1_MBOX_8: + case CS35L56_DIE_STS1: + case CS35L56_DIE_STS2: case CS35L56_DSP_RESTRICT_STS1: case CS35L56_DSP1_SYS_INFO_ID ... CS35L56_DSP1_SYS_INFO_END: case CS35L56_DSP1_AHBM_WINDOW_DEBUG_0: @@ -802,13 +804,29 @@ static int cs35l56_read_silicon_uid(struct cs35l56_ba= se *cs35l56_base, u64 *uid) unique_id |=3D (u32)pte.x | ((u32)pte.y << 8) | ((u32)pte.wafer_id << 16)= | ((u32)pte.dvs << 24); =20 - dev_dbg(cs35l56_base->dev, "UniqueID =3D %#llx\n", unique_id); - *uid =3D unique_id; =20 return 0; } =20 +static int cs35l63_read_silicon_uid(struct cs35l56_base *cs35l56_base, u64= *uid) +{ + u32 tmp[2]; + int ret; + + ret =3D regmap_bulk_read(cs35l56_base->regmap, CS35L56_DIE_STS1, tmp, ARR= AY_SIZE(tmp)); + if (ret) { + dev_err(cs35l56_base->dev, "Cannot obtain CS35L56_DIE_STS: %d\n", ret); + return ret; + } + + *uid =3D tmp[1]; + *uid <<=3D 32; + *uid |=3D tmp[0]; + + return 0; +} + /* Firmware calibration controls */ const struct cirrus_amp_cal_controls cs35l56_calibration_controls =3D { .alg_id =3D 0x9f210, @@ -829,10 +847,25 @@ int cs35l56_get_calibration(struct cs35l56_base *cs35= l56_base) if (cs35l56_base->secured) return 0; =20 - ret =3D cs35l56_read_silicon_uid(cs35l56_base, &silicon_uid); + switch (cs35l56_base->type) { + case 0x54: + case 0x56: + case 0x57: + ret =3D cs35l56_read_silicon_uid(cs35l56_base, &silicon_uid); + break; + case 0x63: + ret =3D cs35l63_read_silicon_uid(cs35l56_base, &silicon_uid); + break; + default: + ret =3D -ENODEV; + break; + } + if (ret < 0) return ret; =20 + dev_dbg(cs35l56_base->dev, "UniqueID =3D %#llx\n", silicon_uid); + ret =3D cs_amp_get_efi_calibration_data(cs35l56_base->dev, silicon_uid, cs35l56_base->cal_index, &cs35l56_base->cal_data); --=20 2.43.0