From patchwork Mon Apr 7 15:16:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Binding X-Patchwork-Id: 14041086 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CBEAD140E3C; Mon, 7 Apr 2025 15:19:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.152.168 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744039148; cv=fail; b=Lmo0R15zsG0z4wSskskGfY3CXtovbzAmfkCYg/AIZcYerBIAN7Xir1KSW+Soj/vtByiDA5E8kQRUNzRgN9f/7OrQIimKf6u2tOnuM2uI1/7Do4+9onZ0uiu2RXLnSTCuLjxq5iOyyFU9OO0SqB+ouQCpy5GARKBvYgly//B0NRA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744039148; c=relaxed/simple; bh=oOY0XHFCH73Q6NBYL0JtRMejacb2Uo4XZXkj0kHo0/M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QtgwDpgMemTWmhefBqtKfIhiTueilWKxgpK53x+r1NjdsO3XU25tBFj8gHc9vB+5k+pLlm4xfDGKRt4+Ie4NHm1jNM+mSUAxu7Uarahm/DnUMa9ChI+7Bx9hbpH4EUpMS9FFlchOIyXCrrdAW0pzdwHvb7AKPOznh+DnsU+ODH8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=Qmm1UD8F; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=Hf5K6Cuz; arc=fail smtp.client-ip=67.231.152.168 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="Qmm1UD8F"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="Hf5K6Cuz" Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5374i0Xd031389; Mon, 7 Apr 2025 10:19:03 -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= Qmm1UD8FnvZGjDc7/Jrlp13Z6vwmbLgsdE+GiMaE2b2XXvng7LIxwe8p0HEXgTSF KDnVkB+zkRhogm87W/AIUzV+dzA10PtjS36CrEOohQLjWfrwzxzvq667obRevGs7 abAI7if+VX8cli5OutDbD2b0VxeAZEa+a2mrjP6iKDDIB5n0GHGucoVrJO0Je2Rw 9KmSVHHe8OcILViqp+l4sSMgHpuQi2km8aZqKHVBUSErX1VwC8VqEKDi9OsIROlO nPsrIVcSEdHKdl/YTkCTJJBd+AHBIMZ66hkMgJiPmqQKwzjx3eQWz0yml0UKVoPP 88aEg4+knxJDQNedhzPSZQ== Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2046.outbound.protection.outlook.com [104.47.66.46]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 45u0xgje9s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 07 Apr 2025 10:19:02 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ACrWDxad9/EPYEuePY+ZiILdHBhVNGnpg0fgbCYF3RVr7LzUxDqInE/sW41IPDDIL0T9AT0YfOJ6Pu2ZaInq2tSuYRXU/jzKGaRNZfiTLpo1bfCoT63YCbS3j0klTqPeW0i9xiLwjnk7fhtjDqXIKeULx40dn7Af9qt3+gPzBgBIMEeoOy4rNIClNNPK6mFLYaNF/DPTDajt/Yd6y5mnkbz1ddRkiYoaaDcZelqhB7TP7SuJdmXEV28iMfvgDDoft2EBKH5CSDejE+zpbnqCWDsu2LMf0i/zceYWsjP2yMf+cFvODMy9GpQnzJuzkPjkyPr9mhsPc3DRwv8SFTcGpw== 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=elsjARuhohHZs+JhPE0C3QZLplWEXrm/Ce93yH+lG0xE6a2SiN2uzUPegPufIirHwJPNPjbU14qEMXgUaCblBHEKjxmZ5C78ZLtD5zBtLx7PK34u6W4T/q5hPakYBJn+1JC3vitRzz9X2IgLwCQUMyxVx/7vXz3MNkGAbyckzDTf++qctfJDI7XHmsyqIr51ZLSnossjDkuubekS9MAscnWw72EWIyNbzKQXQtgHUlxiue+21Pgx8XZDQYtPu/00M1hz4erRQ4D+kI/G+MnxF/R6Iyo4X42t8U/jmuGPDveV6nZLPJMbrAyW2xCHYS2EnkE7oT9kIRaGkee/ccVetQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=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=Hf5K6Cuzw6qRAE+HA1A3N/cH6DF0Ul5/6LKqTKHIJnkAvhNjs47ZBKHCvw9dAJ/WGOb6cMJ8kaKAhL1Jos1Z5YGW/P7VHQGRJi8/A6vOCPjWmmH1r1Jcf5BBFoaddIt46/9B+3RY1V5V6Ie6PoplXGqZakWnuGdRqVNV8017mhw= Received: from CH5P223CA0020.NAMP223.PROD.OUTLOOK.COM (2603:10b6:610:1f3::9) by CO1PR19MB5127.namprd19.prod.outlook.com (2603:10b6:303:fa::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.33; Mon, 7 Apr 2025 15:18:56 +0000 Received: from CH3PEPF0000000F.namprd04.prod.outlook.com (2603:10b6:610:1f3:cafe::29) by CH5P223CA0020.outlook.office365.com (2603:10b6:610:1f3::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.35 via Frontend Transport; Mon, 7 Apr 2025 15:18:55 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 84.19.233.75) smtp.mailfrom=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 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 CH3PEPF0000000F.mail.protection.outlook.com (10.167.244.40) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.22 via Frontend Transport; Mon, 7 Apr 2025 15:18:55 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id 524E3406544; Mon, 7 Apr 2025 15:18:54 +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 1C2B082255C; Mon, 7 Apr 2025 15:18:54 +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 v1 1/5] ASoC: cs35l56: Add Index based on ACPI HID or SDW ID to select regmap config Date: Mon, 7 Apr 2025 16:16:40 +0100 Message-ID: <20250407151842.143393-2-sbinding@opensource.cirrus.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250407151842.143393-1-sbinding@opensource.cirrus.com> References: <20250407151842.143393-1-sbinding@opensource.cirrus.com> Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000F:EE_|CO1PR19MB5127:EE_ X-MS-Office365-Filtering-Correlation-Id: d7858337-df02-4534-d61a-08dd75e78349 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|36860700013|61400799027|82310400026; X-Microsoft-Antispam-Message-Info: TTIuPkrXAzHND4icFVWMK8n3JAs7bQIwKNYZ5KQ73wUSPYxQjtd7GBDH/rMHZ0V5wcYqTjs7ppKZ2cWkloS8FEARhcyCdtNFFyWRdpLgqSnryerHCI/VGULGiT8m3JCeZYxr+9JkxSGHdwpMp3bNy5dpwPnD+LlAqgVkyiRpizGFXGgtsRRph5tQYlbQIiIiRCJIT2TqoQyX4drik23HRRG+W5PmyqbzsYStwLkoHyv2TZNevnBz9fml8uP0jUCQCXRlFOg3HisSv+aCQgdPJvcpB0W/qT1S71/1UDqFS3+A7zd02ZPF05cFpu3kYWW5gUSIAG+8i6HozgnEDzzNPJDOZtyCoVKKt/Y22egCkco6NXB+13qgYGHLoViNnxm68TwXdl1wv5TrhPK/FBw9qGuXj7hqaIXmY+dCpJz48L2Z7FlxF95CZwH4xkvbSq8r7HqgkJwYmRrjXPmznvgIyjAEqkEySFAYa1SZws4Nz5SmomE1URhfy0XvbQ0nHr1Ar4IJPfaWtv5GlWsDEdp1ogiUI/MG0y71l6IdcAvNogwcWcIUm6uwGAf7BpGrGV4jt4v+CJP5IvPHAVDpknJ4kp857+k4cNhajpFA6uYoa7n6SWRWlpAUfRSmRXNnWuhSVO24hWHfhrPz28hzD481ZetmhYKj/6EvUd24bF1usBnvsn3vB06nNoCp20568CEqFTxlamyVa1ty6coEqn1hLSm7S79XNOhnC/7Eb6Zym025OAmAKX437sdIrwcyS3Am7Q1agmgGYghZdNNWfk7jPHbsYPBh9445MXYvqCQbUmyxlsCuG9i+UjhnJd94YfwCSY6yAB5buBVVDZbsAh/bXLCNEQfyZomqU/9y/bo+1KIrCN+CHDuc2ivr/tDa6qCpsHxSti03d7kwiOqYr2QFBa1WuNfmFdZw8cDbTuKNQzSsHmNF3QVM9O6OObiLlc+ISiD3uST1XR/rg5y1fbGv59oxr7T7siHQkZf/TEgZQxHcoHI+ngXxYW8JUzE/50kA4tBYFTgpYOT7WM11sEHTt3ZATJCSI37mm7bl4w6R7fcucElKnusgh6hmwaknM2LrBdfKtCVBj1INdHt4/4QzSYkG2JkxIEA6yyrv/Jo3glkaR/vWyRFsVg0ZU06CNIdEb9PCt35KkjjluRfm4ou2taB5NQ1FIl9ULqKC+A4UTrEh9j7I0dZ4q08MSPvo4Yf6dLsLHlu1czSZTNQspJeS79E4jNSYYJv+5Yyv5Gx3x0QXY7BnRaIU6SQIvj99I22p6YjtjQ7PVi68j4Qt1WpqW72KkbOTlSWGAz0S/3npvI3+tFv6xsUTqcLebqO/45dOZk/+iDQ8Ne+hrIZXqHUc+JjVwNFkdCeMy9tZDICpz4Kop1M3LtGkARsgs6G3JQAfl/vfwq1lo/noSwrhFuL3aCaVtBeEAnaWrol2JYvodOuAyD3IgCyIoM4ZAwdvTao2pYqMd73eVHNVrfUNXrLGxRn5OLlmzypTqifeKeKt6Ys= 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)(36860700013)(61400799027)(82310400026);DIR:OUT;SFP:1102; X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Apr 2025 15:18:55.4684 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d7858337-df02-4534-d61a-08dd75e78349 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: CH3PEPF0000000F.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR19MB5127 X-Proofpoint-GUID: BMWg-EHbTQxi_kR72yFI7z2N_TkPSDyd X-Authority-Analysis: v=2.4 cv=bOIWIO+Z c=1 sm=1 tr=0 ts=67f3ece6 cx=c_pps a=gaH0ZU3udx4N2M5FeSqnRg==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=XR8D0OoHHMoA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=w1d2syhTAAAA:8 a=2BTUUkmCcW1H-Px24zoA:9 a=BGLuxUZjE2igh1l4FkT-:22 X-Proofpoint-ORIG-GUID: BMWg-EHbTQxi_kR72yFI7z2N_TkPSDyd X-Proofpoint-Spam-Reason: safe 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 @@ static int cs35l56_i2c_probe(struct i2c_client *client) { + unsigned int id = (u32)(uintptr_t)i2c_get_match_data(client); struct cs35l56_private *cs35l56; struct device *dev = &client->dev; - const struct regmap_config *regmap_config = &cs35l56_regmap_i2c; + const struct regmap_config *regmap_config; int ret; cs35l56 = 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 = true; i2c_set_clientdata(client, cs35l56); + + switch (id) { + case 0x3556: + regmap_config = &cs35l56_regmap_i2c; + break; + default: + return -ENODEV; + } + cs35l56->base.regmap = devm_regmap_init_i2c(client, regmap_config); if (IS_ERR(cs35l56->base.regmap)) { ret = PTR_ERR(cs35l56->base.regmap); @@ -57,14 +67,14 @@ static void cs35l56_i2c_remove(struct i2c_client *client) } static const struct i2c_device_id cs35l56_id_i2c[] = { - { "cs35l56" }, + { "cs35l56", 0x3556 }, {} }; MODULE_DEVICE_TABLE(i2c, cs35l56_id_i2c); #ifdef CONFIG_ACPI static const struct acpi_device_id cs35l56_asoc_acpi_match[] = { - { "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 *peripheral, const struct sdw_devi { struct device *dev = &peripheral->dev; struct cs35l56_private *cs35l56; + const struct regmap_config *regmap_config; int ret; cs35l56 = devm_kzalloc(dev, sizeof(*cs35l56), GFP_KERNEL); @@ -521,8 +522,17 @@ static int cs35l56_sdw_probe(struct sdw_slave *peripheral, const struct sdw_devi dev_set_drvdata(dev, cs35l56); + switch ((unsigned int)id->driver_data) { + case 0x3556: + case 0x3557: + regmap_config = &cs35l56_regmap_sdw; + break; + default: + return -ENODEV; + } + cs35l56->base.regmap = devm_regmap_init(dev, &cs35l56_regmap_bus_sdw, - peripheral, &cs35l56_regmap_sdw); + peripheral, regmap_config); if (IS_ERR(cs35l56->base.regmap)) { ret = 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 = { }; static const struct sdw_device_id cs35l56_sdw_id[] = { - 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); From patchwork Mon Apr 7 15:16:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Binding X-Patchwork-Id: 14041090 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 1D7991FDA6F; Mon, 7 Apr 2025 15:19:09 +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=1744039152; cv=fail; b=g85G1qy/ow30d0IArN71W4y6aQGEDhZ31JYR+AIyvl03GnlSZsd3nZne7GecmAlu0gSLL8zHt5fYsgjUToLE7s2ZSSOVp7o2JtNumXkvhQsjE5h54rO/JuKJDyaPps0dpU17rFiOogQj129+ZcSzqmgFLNn8EhFvmLyrXx+mbMg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744039152; c=relaxed/simple; bh=6/Gu/QEbsv7jDJ57vFl3lxmhq8ZaI6KaM0Q0d6Pv7lk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=iVqy+jUjyPSnx1L6ohQZYKedB4B7PaAnIPdeunB3CkPd61j967uHHFkjDCc8ROc6e/Xdg7aqSpxh/rI50B79D0AcT+2tlukoisaBlsN5CxUezqYdt03R+b6k9Y7FPQXGVwUB06/g2zuqRMdcEf2Upaegye2DrN2dNbB6ZAFDwVE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=kUpRpRy1; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=Rxg7hzuc; 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=cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="kUpRpRy1"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="Rxg7hzuc" 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 537CLFdJ002328; Mon, 7 Apr 2025 10:19:06 -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=/ffpUW4N9JClR/nnID+gsV5T/ooBolmtgAXsngtEDec=; b= kUpRpRy1vpGGnWJZ9SOqo+8vl09NdP1FgPsL0uJBcr3s0AXar/1W1TJ0g2cJKHL/ DSHIwDOibqI7RfRRfwDEdnJa/iAq1dMcAExh+tBnwYMMtbYOQB9e63qMmyoxombQ kvQWh5Tqb4BE21rbPpRzRTkYlVqutIP4nBC1i8hLCQobLKeR0Bl1fRc00HnIGdWe jZZnK+hoJGia+OtRKObsY2N5UWA5SkApb7Ta/YsmHbD8OsACecBGH+Hkgw53nIUU v6PMWzfu6tWFHsZsfnkok0uSbqOcYDf8FbpFi7yfM8L04NiGqB9XI2c+FhzUwnd9 LwVrEmOpayM6fFjb7MN/Vw== Received: from nam02-sn1-obe.outbound.protection.outlook.com (mail-sn1nam02lp2046.outbound.protection.outlook.com [104.47.57.46]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 45vemwg9rh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 07 Apr 2025 10:19:06 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NkSsxv9mitJjfwEjnUb8NJivvA4X68AOvefRvkT+TBc6TXgkZNW+RJIM3CVh2bx1zKzMRP7WyNWdG3Cu4Hp0PbJOe/9xEYvw1AJQqfIBhVscHo99d0ZULD54G/qwJxWfidDefDvYrCUJnP/HrFi/JrCGiJfP3YclJK7Cn8ESX9MFNx1k5oQkUsfEF7I7m7Llo+MHzXRv6Hi3mSpZqppdEHyUQtbmczuofMsW9f2DUb5kAO/E/c713Svpsvg7Ct5YNc8/Om2EpxSyrUdmEsQ0Ok3qmYek1SYlGIC2Ffoe/J5D40CL067yNNQkTgdjvE0ZGt+MKk9hb15VdsXa6YwcEg== 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=/ffpUW4N9JClR/nnID+gsV5T/ooBolmtgAXsngtEDec=; b=X42sWu7NioNAKM7piAQZDyltinSoQEdHi29DspqVYJn8pmDOJ0PQ4wQhspOAgh+ZR7KJhE7XSFMwwOXz93t1v8QZhwbitIWQW8b6Z5wZ0dyzZrGAjdcv3czyZQWcZpYUxsP9t05beKULIiI1RJGZ1EF0jtwGuoCHQEci5/mmQJrKpPGc9epARfF7YjmA2JqOWISXBfDFPiqw4eBbZKPOTBDBYaQ3pm5pGFbsKvfOnET98d1C5plcfeun1mFV8X2pJ71lgXvUrun/fdX9an7KDvHaK0R9SvKU5A4K0bHhB2S6O+zR+RyZp4inJ1wk4Lwz9daoVqp5aXYi+zWP/mveJw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=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=/ffpUW4N9JClR/nnID+gsV5T/ooBolmtgAXsngtEDec=; b=Rxg7hzucw5AutrucUYjUiWYTiVaXaP32rpU7Ip5QauaEUZXBmjCJ509YksWorS7jP4nGSENaNmmVinuaPP3BJJC2jsszuufHJ9Taw/IswufTIOzNqFzqTxSJtN6G9/WWPzT71OKlSycCd0U9DCMLglFNaApx5894beIUlfHrUPA= Received: from CH2PR08CA0005.namprd08.prod.outlook.com (2603:10b6:610:5a::15) by DS7PR19MB8832.namprd19.prod.outlook.com (2603:10b6:8:251::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.27; Mon, 7 Apr 2025 15:18:56 +0000 Received: from CH1PEPF0000AD7B.namprd04.prod.outlook.com (2603:10b6:610:5a:cafe::97) by CH2PR08CA0005.outlook.office365.com (2603:10b6:610:5a::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.33 via Frontend Transport; Mon, 7 Apr 2025 15:18:56 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 84.19.233.75) smtp.mailfrom=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 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 CH1PEPF0000AD7B.mail.protection.outlook.com (10.167.244.58) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.22 via Frontend Transport; Mon, 7 Apr 2025 15:18:55 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id 7968240654A; Mon, 7 Apr 2025 15:18:54 +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 481B8820244; Mon, 7 Apr 2025 15:18:54 +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 v1 2/5] ASoC: cs35l56: Add struct to index firmware registers Date: Mon, 7 Apr 2025 16:16:41 +0100 Message-ID: <20250407151842.143393-3-sbinding@opensource.cirrus.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250407151842.143393-1-sbinding@opensource.cirrus.com> References: <20250407151842.143393-1-sbinding@opensource.cirrus.com> Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH1PEPF0000AD7B:EE_|DS7PR19MB8832:EE_ X-MS-Office365-Filtering-Correlation-Id: 164ee1c3-9bbd-49d9-ef1c-08dd75e78356 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|61400799027|36860700013; X-Microsoft-Antispam-Message-Info: Ql++0OpVWHHmre0uyt+VDwVHvmjWUm533khstCzy0TowxvgkEYNMv/hmdY0t8ieC3iS1l098Dh9KYRYl/wmXK56m0UeYK+JjeH0XrqoUuElMfH/ICMlzWZy9QOK53ctQ2mRRKwfcCcsPAg+dEc7+jPw4qHp2YrWvgmQG0lxO6GjVRz81xkcYjmby4mOpTSefATbgenhmul0t8tNV6QiBXzx/SeuE2GXFcmhKVnM7PLFUe2/XSS83UCUu6ByloR3X8WoACocM0mYFOLpBSMRnPBLYoA9DyNVNtJGYyvLDSISuvPcXScRjX0oh5Le1mkNVwDl0R1YmvI8cFRUNLh6OGFR6Y0MS+UCOf9MQRGc/7YJO9wjg9Qof6l6ilNdIwCSUz0INsfPnd+8HKRfbYnpE/+HSHoJWH+zOp25J5ZlY54KEkGkIOWwuOlj+R/0wGwhNmK44mIUClCIhjop6ky3v0Xm3O97sPK+83jsHwlW47q17T9+KkD1h1zV1kU84diNt63CqT0p7+jGlIjxZWs3kQ07V3w1fh+eEl+WMmKUUs0PSwUXuwfay+4ziBVghV99UR8HAh+GdOg1IsnfjlAYONdllY7QAiRiuw67h2fiNurUW/tTW2i3QBu0xiX7L47CO5aU+1d7brlW1GEOpGefqyxZqiKOjHKIEkHSCoU6J5G4DZZNyQgMtI0rHWth9Oowjc7COroDu0GJA208oKa8eyHMd/NCwfhl3KVS+20/ucZ2vbSSNI4MkPRQnFHqzGTmGx4/bBGZuXExUDlbduT8d7/8Idnkj1pXswacTmsPHLKAXrBDjc2hFYuH5S+PeDK8LXe6BebsWKdTIZ8+CD4G0u9pERBXb9V0m0oVEVvgiokpMS9rgBMwMw3wVktBXuXdzKZvBELXZnP6Z+nD/5TBFnPNq1dHq95bFr/LeHbJfnxke9RrXpCCUEuG09od8GoAeyxkRGFvA+NgAItRQJRaLuVMTTBsmWEm0FxZN+tuueIOX0NDOgvMd7Fj/5pMHi/6RMlMGmJnVGkm8SlhIy+Ym+o5PBqIUyQvMB/v7WJPVOnPMjCmGDIKmNmFvMFAQqKdonPiEtWQZD3Bgo6J3Izss6MLgjRhPdgQ4JjD8T1je0fOL0A988hR+x4QMv+0UTTCquUMp7LS6AUML/jNYy7yFXbz8s/XMX5y6DF5/h9S/jH6S15v7qOTDEzsJ0VOU+F5lLzTzh9Z5F3bEwkfJCgkcCjQjOPNgtMZ3pZ8GyTb3ZZOie+RE9V+a660O7PZRAXSfaXv159uQ3KUT5ER7YvW9G2PxU/Y63NoUHH7V5NErtKSd8Z5DZ7MCyvwSx0/IoDmcqMJx3RxvqlC7ZxfyhZlGAepF17k+F3ou3g3BC+QKJ4O0WLPiuaOSr0+fU5fQC/s2vJv4GjCINT66/W2vTjEoU3lm92o/CqikUJwypkMTe6dZaPv4MI8ENoHrZBPuHkilj7bEiwBSuo/DJy3S2DzZqSy7CDqQVRbJvNL9M4CRhRA= 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)(61400799027)(36860700013);DIR:OUT;SFP:1102; X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Apr 2025 15:18:55.5542 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 164ee1c3-9bbd-49d9-ef1c-08dd75e78356 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: CH1PEPF0000AD7B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR19MB8832 X-Proofpoint-GUID: gwVWaq3amToPbO59xjGvY2N-i7JfU3nZ X-Proofpoint-ORIG-GUID: gwVWaq3amToPbO59xjGvY2N-i7JfU3nZ X-Authority-Analysis: v=2.4 cv=bYprUPPB c=1 sm=1 tr=0 ts=67f3ecea cx=c_pps a=eKE3A02riAhCxcKrmNn0fw==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=XR8D0OoHHMoA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=w1d2syhTAAAA:8 a=2i3JVGJO97D1DHyOKxEA:9 a=BGLuxUZjE2igh1l4FkT-:22 X-Proofpoint-Spam-Reason: safe 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) == 10); +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; }; 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; +extern const struct cs35l56_fw_reg cs35l56_fw_reg; + extern const struct cirrus_amp_cal_controls cs35l56_calibration_controls; 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 4ef7878e8fd4..f6257fe45b9f 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 == 0) { /* Wait for firmware to enter PS0 power state */ ret = regmap_read_poll_timeout(cs35l56->base.regmap, - CS35L56_TRANSDUCER_ACTUAL_PS, + cs35l56->base.fw_reg->transducer_actual_ps, val, (val == CS35L56_PS0), CS35L56_PS0_POLL_US, CS35L56_PS0_TIMEOUT_US); @@ -667,7 +667,8 @@ static void cs35l56_hda_fw_load(struct cs35l56_hda *cs35l56) regcache_sync(cs35l56->base.regmap); - 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 = true; diff --git a/sound/pci/hda/cs35l56_hda_i2c.c b/sound/pci/hda/cs35l56_hda_i2c.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 = true; #endif + + cs35l56->base.fw_reg = &cs35l56_fw_reg; + cs35l56->base.regmap = devm_regmap_init_i2c(clt, &cs35l56_regmap_i2c); if (IS_ERR(cs35l56->base.regmap)) { ret = PTR_ERR(cs35l56->base.regmap); diff --git a/sound/pci/hda/cs35l56_hda_spi.c b/sound/pci/hda/cs35l56_hda_spi.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 = true; #endif + + cs35l56->base.fw_reg = &cs35l56_fw_reg; + cs35l56->base.regmap = devm_regmap_init_spi(spi, &cs35l56_regmap_spi); if (IS_ERR(cs35l56->base.regmap)) { ret = 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 = &cs35l56_regmap_i2c; + cs35l56->base.fw_reg = &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 *peripheral, const struct sdw_devi case 0x3556: case 0x3557: regmap_config = &cs35l56_regmap_sdw; + cs35l56->base.fw_reg = &cs35l56_fw_reg; break; default: return -ENODEV; diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-shared.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 *cs35l56_base) if (ret) return ret; - ret = regmap_read_poll_timeout(cs35l56_base->regmap, CS35L56_DSP1_PM_CUR_STATE, + ret = regmap_read_poll_timeout(cs35l56_base->regmap, + cs35l56_base->fw_reg->pm_cur_stat, val, (val == 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); if (poll_ret) { dev_err(cs35l56_base->dev, "Firmware boot timed out(%d): HALO_STATE=%#x\n", @@ -395,9 +398,17 @@ void cs35l56_system_reset(struct cs35l56_base *cs35l56_base, bool is_soundwire) return; } - 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; + } /* 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 *cs35l56_base) return ret; } - ret = regmap_read(cs35l56_base->regmap, CS35L56_PROTECTION_STATUS, &val); + ret = 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) /* Firmware must have entered a power-save state */ ret = regmap_read_poll_timeout(cs35l56_base->regmap, - CS35L56_TRANSDUCER_ACTUAL_PS, + cs35l56_base->fw_reg->transducer_actual_ps, val, (val >= CS35L56_PS3), CS35L56_PS3_POLL_US, CS35L56_PS3_TIMEOUT_US); @@ -752,7 +765,8 @@ int cs35l56_read_prot_status(struct cs35l56_base *cs35l56_base, unsigned int prot_status; int ret; - ret = regmap_read(cs35l56_base->regmap, CS35L56_PROTECTION_STATUS, &prot_status); + ret = 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 *cs35l56_base, *fw_missing = !!(prot_status & CS35L56_FIRMWARE_MISSING); - ret = regmap_read(cs35l56_base->regmap, CS35L56_DSP1_FW_VER, fw_version); + ret = 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 = { }; EXPORT_SYMBOL_NS_GPL(cs35l56_regmap_sdw, "SND_SOC_CS35L56_SHARED"); +const struct cs35l56_fw_reg cs35l56_fw_reg = { + .fw_ver = CS35L56_DSP1_FW_VER, + .halo_state = CS35L56_DSP1_HALO_STATE, + .pm_cur_stat = CS35L56_DSP1_PM_CUR_STATE, + .prot_sts = CS35L56_PROTECTION_STATUS, + .transducer_actual_ps = 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; spi_set_drvdata(spi, cs35l56); + + cs35l56->base.fw_reg = &cs35l56_fw_reg; + cs35l56->base.regmap = devm_regmap_init_spi(spi, regmap_config); if (IS_ERR(cs35l56->base.regmap)) { ret = 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_widget *w, case SND_SOC_DAPM_POST_PMU: /* Wait for firmware to enter PS0 power state */ ret = regmap_read_poll_timeout(cs35l56->base.regmap, - CS35L56_TRANSDUCER_ACTUAL_PS, + cs35l56->base.fw_reg->transducer_actual_ps, val, (val == CS35L56_PS0), CS35L56_PS0_POLL_US, CS35L56_PS0_TIMEOUT_US); @@ -760,7 +760,8 @@ static void cs35l56_patch(struct cs35l56_private *cs35l56, bool firmware_missing goto err_unlock; } - 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 = true; From patchwork Mon Apr 7 15:16:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Binding X-Patchwork-Id: 14041085 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DE1271F8AE5; Mon, 7 Apr 2025 15:19:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.152.168 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744039147; cv=fail; b=MyTJNc5m8lQU417F78AMvEhFf/24by5CPR9ckceCi3nEeFUqGzXewEq+1/ataSSqWkZg9rNriHeO4QtrzajA9k63WOEmYWqOfpb0TjyyXRMC05MmvwrWdV0nf3AE0a0nBdCoYEcsKsT2jZkJVD2/EUE42s+r4WahaFMOMbK/8D8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744039147; c=relaxed/simple; bh=APbcDRaBtdRyWQA6iHzETchws4K1dtqZTwssNlTe4Q4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=nyO9WOTmTPLkEEjYbGXVkpwymZ5dBqSGAKdPJnh6CxxhvBiWodTLbMC5JCUFplfDAPpk5u5LSIA7B3HFtVNF5TURkhLQOp00UPyc7XwZ7PlLVrHGFo23/UFHJJMkBVwj5OSy4Olnq1xXyu8/ZuRs7lgvrDbLgPSdVZKOl3qJzqU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=MqL3D256; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=eFoAA3sq; arc=fail smtp.client-ip=67.231.152.168 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="MqL3D256"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="eFoAA3sq" Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5374i0Xc031389; Mon, 7 Apr 2025 10:19:01 -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=OfEq3kMo/guaL8cyQu+CbHXQ4Nuqef53w6mjdQGSA4s=; b= MqL3D256d/LH8NbXotVLHZhDoLQbMe9VtnspExDkply5/PgTIXTNQTiaMxuXeZOR ft5vwuDF6+d0rT+DEvA/YDBKjGbuS5CP3isCyu8h+bMzVLJB3djta8rSE8IqKSHi kJu0mCBp3RmIItLhSPV19v9Ovdv806E6pydms6WghhzmORYelsGzoy+aeHWtdsiG EQcgXSE7HlOrGksIIODJnFR65U/ET2Z1mi1Pe/3eOkzZAmEmTqCpl23EbSkxUBMf CcS7YzJuGTGTidDOScdGqX3VfLWPJLV8IUDxi0c7nmACmt9WIENVcw5pEyXmG82X CKfUkJBI/np1L7PfgeBEow== Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2041.outbound.protection.outlook.com [104.47.70.41]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 45u0xgje9q-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 07 Apr 2025 10:19:01 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=a5jcDaWJXqbrFtnkf/Pt2LwRPWYcQLAGMvSsrwvwN/W9+kAuToFWz9ceZfWAwTDu1dJJPYlez+5vg1ALTvK+uS+tLYbPgePlKGKIgtQ71aNRBQqEgZpOxgjBQ7vhWGsiMNKcv4UXL/THUeOy63Chk79+HjE2SYgqNjESGCOsk11YsZE49CV3CeZIZ+D8wb5h8Ur8oPo9RED/cbewB2JNv2pPPndv2c+Vkk4VWW996rzQ0vbQgZjsNftLfJlynJGlZsQAjhvBAOiAbGHtxodKEc+SFbSC465vWXx6L24R8dnmDElR4g9rwQr0eYG89YKqqPyDakt2KhnoIzsdqwtlig== 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=OfEq3kMo/guaL8cyQu+CbHXQ4Nuqef53w6mjdQGSA4s=; b=GPy25OX1RbxCcjXyHzJMDd9WhKPO6Zx2FKp8EpyPbdND0pUI7J1gt/tGMVwrzb/zMvxymES7/w89QGoQcPKyI+p2J+65oJInTe9+BvfiuymIXaSlqwucC1zbFF5f4mX1wXrEfHwfeacqR2Mgx/pCpWQBrBV3rmymOrapxG5sW7zHa4aDijTzg+jAq8fFyoSxGeanlGNRyvgZufUGvTIPdv/tD8tXuFpPnqoTo7ZcrwfaCsNkNZu8vPOx0oeYsEIQGOFp7+DqV6LD7jA2izdfH5u0DL9DzmfUG47NoCXYrYIddPnPgQzuBKLKkRu4uaaqnY/BOcRHGkyhH9C8DAQaCQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=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=OfEq3kMo/guaL8cyQu+CbHXQ4Nuqef53w6mjdQGSA4s=; b=eFoAA3sqctMRsoCC6TG27sREPeUlRZXKKAyWyKRBPrZ0W+1Qwvaov1utHNBFQchaRYqiOBIUvA+mG1Ojnt/7bOHI5mQD0ovArUuiJzUA6DtdH2xtaSBFSlk7+Gpndd3wUXfjWECSvFawQoOM75y8TFG3a2YgDWBeAA+DX1S9nXw= Received: from CH0PR03CA0005.namprd03.prod.outlook.com (2603:10b6:610:b0::10) by DM4PR19MB6317.namprd19.prod.outlook.com (2603:10b6:8:a8::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Mon, 7 Apr 2025 15:18:56 +0000 Received: from CH3PEPF0000000E.namprd04.prod.outlook.com (2603:10b6:610:b0:cafe::ba) by CH0PR03CA0005.outlook.office365.com (2603:10b6:610:b0::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.35 via Frontend Transport; Mon, 7 Apr 2025 15:18:56 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 84.19.233.75) smtp.mailfrom=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 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 CH3PEPF0000000E.mail.protection.outlook.com (10.167.244.42) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.22 via Frontend Transport; Mon, 7 Apr 2025 15:18:55 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id 9D1C940654D; Mon, 7 Apr 2025 15:18:54 +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 748A082255C; Mon, 7 Apr 2025 15:18:54 +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 v1 3/5] ASoC: cs35l56: Add Mute, Volume and Posture registers to firmware register list Date: Mon, 7 Apr 2025 16:16:42 +0100 Message-ID: <20250407151842.143393-4-sbinding@opensource.cirrus.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250407151842.143393-1-sbinding@opensource.cirrus.com> References: <20250407151842.143393-1-sbinding@opensource.cirrus.com> Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000E:EE_|DM4PR19MB6317:EE_ X-MS-Office365-Filtering-Correlation-Id: f150db46-bf9c-4f39-3c8a-08dd75e78369 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: qFyjhwlO4c8Yn69SYEzV7t+y9USYP+THLn1XP2esGaYVCSYyd41bh3fzAK0XXy1q21qLRpimdbghIMB+YuhWGxErsvus6VSkF3A5oWF6y0+4BFoGQfjoriDPoD4rB6mWmQ0ZrBK3C+5o0x//4DUrTw8JdLYqMCWzq87IHi8oyKIIzeChyLcObzVPT+TPxlG6P+Q19TcTp9SEjNElQpENfFz6ad2Xyu6r7cJD4w3CmtgtHUNAh3Uk12zoHuht5mGjvETF/9QX7+aducnT5Ra//NrO8ili7TRP6EIhl7XuUZ21jS5EQgDtcTaUAo0Ym7mNqsqgCaND6A+hSW2g1lncUnF6IVteFf8Fs6bKoGhwZeO85OKEfuz27JFcKhI5xWmCbXttEwup3WRTunOi2ZAJWC84mn6zTUR4bHbt8IBo2nksQ44Sop9yWaCUtVoxQSHGC6T57QtGt4UPXUbPk1oSSvbOBOaOFrD7F8y1FPAbjXVYd+AH4TvCeq5LeX8FBWlJTsZu0tNu9oZB3WB3yDViLn8MQGPYYinxWWcn5g0bhHLIYrjMGrGsJNbaSiLs9y+V6nKqRFZD8u2jqGPpKMgTvqVhq2GsxCzr8ai7L+vHclrd3PT2ZKhlmfZZWbYtIIAJJO7Yp5HgfAihfdLhhCoZ8BsWDg84Acbes4CtOdGK1cZJ5ol4cP9IaLiEo0mlQYKnnf5v7YKfdfhHoiJSFKqmBd+7TfvRr2pYUE8Q/rCMINNqbFDdP1MsYBfoFvM9BIwYlkoLlM2j3+hrZdzn1XpBDWa7sX3B3B6Cm0Z+tlTKVJi6W62iUgP7ehaGinluPR0VagFbCCbva/YdPDK4CgtUrvxlKF7gJh0VtK8ZcRw+ckdMBJuSaWhwrXT0lo6P0Aqip3LD963/dLpDOJdZUstst8xESQAwT9sZHq9ErRljyHliHMsYbJ7rT9MA7rrPfevSxdcAElg0Q8a/3k7wBDuQhy8mEAkUDPLiD4fXhA2MOTUE73DFfFooMoJS2TC1NF4LPM9kDObqpEGBucnJ1JHcECyndNG5KZbf+afXTz+GqX6s4jFZWW3KfvQm0IrG09WKj+ZOtsb6/1INQlTCHdRMbGmHY2acbigSEYGiRZAUzGDk2MM3zxR/Qy1cRXOelrPuhTCQFx+Lp8LlxGjd9xNMxKFZ+lXiOLgE07uw14is/LijMNCCZKMHDR3t/p5KziZLCmIj4gtZz3Tz6e8YGZs6nGZM0IYr0cYK+7HwgllpsjCRZJgtB4BptcA5IFlX2h5xHTWHbpX2swRytmzUafkHYvsU7Xbhg12rsROdYbRC0rOJmC8LlVwU7O+YGQBIYBp8ze7X/0YgmgwsMXorpQCDE918sVTMBqrDbZ5ZH3Fpstb7Vxg8PLswzAqEm3BXJCaXknJVglMZxb3vcX362vbinPxZxKphzxOw2cTC67CGIWYI7+2DEAEBD20kASwxSUs6VNgpo3i0wd1HdnS0D50m0OetY2FJdJUM00LmcopsuCE= 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: 07 Apr 2025 15:18:55.5804 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f150db46-bf9c-4f39-3c8a-08dd75e78369 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: CH3PEPF0000000E.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR19MB6317 X-Proofpoint-GUID: eP5hOpw7af1gJZmboNQJl1rJTuR6vtg9 X-Authority-Analysis: v=2.4 cv=bOIWIO+Z c=1 sm=1 tr=0 ts=67f3ece5 cx=c_pps a=ybfeQeV9t1qutTZukg5VSg==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=XR8D0OoHHMoA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=w1d2syhTAAAA:8 a=QglkZ7J-TCNlRGhXK3QA:9 a=BGLuxUZjE2igh1l4FkT-:22 X-Proofpoint-ORIG-GUID: eP5hOpw7af1gJZmboNQJl1rJTuR6vtg9 X-Proofpoint-Spam-Reason: safe 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; }; struct cs35l56_base { diff --git a/sound/pci/hda/cs35l56_hda.c b/sound/pci/hda/cs35l56_hda.c index f6257fe45b9f..61aba1956338 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, cs35l56_hda_wait_dsp_ready(cs35l56); - ret = regmap_read(cs35l56->base.regmap, CS35L56_MAIN_POSTURE_NUMBER, &pos); + ret = regmap_read(cs35l56->base.regmap, + cs35l56->base.fw_reg->posture_number, &pos); if (ret) return ret; @@ -260,10 +261,8 @@ static int cs35l56_hda_posture_put(struct snd_kcontrol *kcontrol, cs35l56_hda_wait_dsp_ready(cs35l56); - ret = regmap_update_bits_check(cs35l56->base.regmap, - CS35L56_MAIN_POSTURE_NUMBER, - CS35L56_MAIN_POSTURE_MASK, - pos, &changed); + ret = regmap_update_bits_check(cs35l56->base.regmap, cs35l56->base.fw_reg->posture_number, + CS35L56_MAIN_POSTURE_MASK, pos, &changed); if (ret) return ret; @@ -305,7 +304,7 @@ static int cs35l56_hda_vol_get(struct snd_kcontrol *kcontrol, cs35l56_hda_wait_dsp_ready(cs35l56); - ret = regmap_read(cs35l56->base.regmap, CS35L56_MAIN_RENDER_USER_VOLUME, &raw_vol); + ret = regmap_read(cs35l56->base.regmap, cs35l56->base.fw_reg->user_volume, &raw_vol); if (ret) return ret; @@ -339,10 +338,8 @@ static int cs35l56_hda_vol_put(struct snd_kcontrol *kcontrol, cs35l56_hda_wait_dsp_ready(cs35l56); - ret = regmap_update_bits_check(cs35l56->base.regmap, - CS35L56_MAIN_RENDER_USER_VOLUME, - CS35L56_MAIN_RENDER_USER_VOLUME_MASK, - raw_vol, &changed); + ret = regmap_update_bits_check(cs35l56->base.regmap, cs35l56->base.fw_reg->user_volume, + CS35L56_MAIN_RENDER_USER_VOLUME_MASK, raw_vol, &changed); if (ret) return ret; diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-shared.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[] = { { CS35L56_SWIRE_DP3_CH3_INPUT, 0x00000029 }, { CS35L56_SWIRE_DP3_CH4_INPUT, 0x00000028 }, { CS35L56_IRQ1_MASK_18, 0x1f7df0ff }, +}; +static const struct reg_sequence cs35l56_patch_fw[] = { /* 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[] = { int cs35l56_set_patch(struct cs35l56_base *cs35l56_base) { - return regmap_register_patch(cs35l56_base->regmap, cs35l56_patch, + int ret; + + ret = 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 = 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"); @@ -1066,6 +1086,9 @@ const struct cs35l56_fw_reg cs35l56_fw_reg = { .pm_cur_stat = CS35L56_DSP1_PM_CUR_STATE, .prot_sts = CS35L56_PROTECTION_STATUS, .transducer_actual_ps = CS35L56_TRANSDUCER_ACTUAL_PS, + .user_mute = CS35L56_MAIN_RENDER_USER_MUTE, + .user_volume = CS35L56_MAIN_RENDER_USER_VOLUME, + .posture_number = CS35L56_MAIN_POSTURE_NUMBER, }; EXPORT_SYMBOL_NS_GPL(cs35l56_fw_reg, "SND_SOC_CS35L56_SHARED"); 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_component *component) struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(component); struct dentry *debugfs_root = component->debugfs_root; unsigned short vendor, device; + int ret; BUILD_BUG_ON(ARRAY_SIZE(cs35l56_tx_input_texts) != ARRAY_SIZE(cs35l56_tx_input_values)); @@ -877,6 +878,22 @@ static int cs35l56_component_probe(struct snd_soc_component *component) debugfs_create_bool("can_hibernate", 0444, debugfs_root, &cs35l56->base.can_hibernate); debugfs_create_bool("fw_patched", 0444, debugfs_root, &cs35l56->base.fw_patched); + + switch (cs35l56->base.type) { + case 0x54: + case 0x56: + case 0x57: + ret = snd_soc_add_component_controls(component, cs35l56_controls, + ARRAY_SIZE(cs35l56_controls)); + break; + default: + ret = -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); return 0; @@ -932,8 +949,6 @@ static const struct snd_soc_component_driver soc_component_dev_cs35l56 = { .num_dapm_widgets = ARRAY_SIZE(cs35l56_dapm_widgets), .dapm_routes = cs35l56_audio_map, .num_dapm_routes = ARRAY_SIZE(cs35l56_audio_map), - .controls = cs35l56_controls, - .num_controls = ARRAY_SIZE(cs35l56_controls), .set_bias_level = cs35l56_set_bias_level, From patchwork Mon Apr 7 15:16:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Binding X-Patchwork-Id: 14041088 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 825AA1F892E; Mon, 7 Apr 2025 15:19:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.152.168 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744039150; cv=fail; b=bj7IW9JcotdLGiv0tUDEbMgXFCE6L2Qau7DUBOz1GbUlPEn8/AgJHmujgNfZilgOiUQWme0p0DG7Mg1VMGqk3lpMm+Hpd6G91fpRGqIbeqjRs51r5y2es0No46PELCx/UuQY99sc4TjTPs6H5IhysxVPCPl5R7i+tqf3GOggyBQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744039150; c=relaxed/simple; bh=nCdPFwtleOLX9Im3Fz2AesZWmPZe4GNt/4GAuY4RswU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=a5CMYU77wW9Hvi8MV3NoQvKVj0TSyABkoPrXj2FeiZJnQuUDuBRcd55liB+9Wl6913rsvVaPCV2q15pdSB25QVFfLbRaEJCuMJsVMcGqpdiOeKcyKCtUZs2wzoY8unlBYXuvgfNoJsNB4reHCW1aLWfC6eNtGOGTgyu746gQ36k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=QTI+Rgh8; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=GVCEe1u4; arc=fail smtp.client-ip=67.231.152.168 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="QTI+Rgh8"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="GVCEe1u4" Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5374i0A0031385; Mon, 7 Apr 2025 10:19:02 -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= QTI+Rgh8PcUx+nO7I/BrUPRL3NQsdm/n/xT9r1ufSPY4D/aKGqTaGhom3JQAQH4Y VyDAVIevpfpyOW7OmSM17H/0tP9JVNVqqI6MNMGfwZz41eBLRGEzpX5rV2VCyPLa sAlOm26NyJ7cx6sbQpbuCoOJOK1K9x1DF0XDHPd5aSVDAiMBeYI1h7SAD4pZ5Zw1 MiT0+kHR6aLOv1Wu+P7I+iRLWi8v4Ng/0g1AN6uSZGINyOSj4tcsbV4ebpfd4+LH JGJBVHy8D0KDQ1NiYowCP0Wwj4A9HxcIovS7FAQOsoOE5iUIg0RQFtD0kJGn3DUo PGyNqXYaXdiPZLoMYPE+dw== Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2175.outbound.protection.outlook.com [104.47.55.175]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 45u0xgje9r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 07 Apr 2025 10:19:02 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kOZDeTbQO8oCiKQsEN68dgXGQr/xNCWVpZnlwODh5e3y2LBmE0gYX1OGJhUlZno8rs+uP+kwUj8RslsM2cn7H46hnKCA11gMU4Dvdpq9WENEoJDkp4piKNcBis9B+NqJnuiIdzIbrrVEnmptj/YN1vGg3KncUHz/DxIG0L9lDbpbuRQFZ6/5OM6gzMY+HN54ketoqu5bYgy5YVlCRm+HzBE1mfl/j86i8dv1q5dBd5J64/1A4ky0DT+3kuEBUkPNdLZVH0+6xi3w0OvRafIjKnxj0ohLC1WwU4hFgd5yTYElD3Sur7zvD1INdBsXJOPEkd0f7mvnGol2055Fte+gBA== 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=o+1CmNHH25NCDaRc9wfUWb1c2QfkalM4S5K/A4dibeWLcGwg8rU9E66OZLG0tHYhoRHonCpSKJWBnpddVBYbPoU/EoHPjq1rA7ARaI/fs98wuTbyuo3hAOG1PBQ+ewwGLQWNdTFdWqytBKqEkDV6zrgiOMMeSQPp3Qky0Z+fP0JZLUX3aiG0b/oThYWJy+IOv+2Q5PtOK8UrL5GFhoRcMzRXIdHx5cpSRqCouOXKTa2C8ua30th8MPnONZ0ES5XphljRkoZjTdIO7si5oH4DmjxCxJPQPx9o+HDzBwbCKAlSwro3t2IlhMt1QsRduSdIcveqQIBXi6mKnFmdamzFyg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=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=GVCEe1u4YqeV3F7tXrwrstf0cwsoqdnjGiq3MYnuUcqYqCkjRjq9NZ8IfwVTz2RTDvuowq3MVfZ0+UnpD+rfHO/iA0faOq0z2iGZQSdnb6C0GCz76NRvY2gCnfeHgKixI0AXW0dFN9GkhgAMafexR4iDOQQ21Uiojy6XWsEf9GI= Received: from CH0P221CA0047.NAMP221.PROD.OUTLOOK.COM (2603:10b6:610:11d::28) by DM4PR19MB6245.namprd19.prod.outlook.com (2603:10b6:8:ae::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.33; Mon, 7 Apr 2025 15:18:57 +0000 Received: from CH3PEPF0000000B.namprd04.prod.outlook.com (2603:10b6:610:11d:cafe::37) by CH0P221CA0047.outlook.office365.com (2603:10b6:610:11d::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.35 via Frontend Transport; Mon, 7 Apr 2025 15:18:56 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 84.19.233.75) smtp.mailfrom=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 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 CH3PEPF0000000B.mail.protection.outlook.com (10.167.244.38) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.22 via Frontend Transport; Mon, 7 Apr 2025 15:18:55 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id C8A8840654E; Mon, 7 Apr 2025 15:18:54 +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 A10CD820244; Mon, 7 Apr 2025 15:18:54 +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 v1 4/5] ASoC: cs35l56: Add initial support for CS35L63 for I2C and SoundWire Date: Mon, 7 Apr 2025 16:16:43 +0100 Message-ID: <20250407151842.143393-5-sbinding@opensource.cirrus.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250407151842.143393-1-sbinding@opensource.cirrus.com> References: <20250407151842.143393-1-sbinding@opensource.cirrus.com> Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000B:EE_|DM4PR19MB6245:EE_ X-MS-Office365-Filtering-Correlation-Id: eb800a98-984f-4bd4-d2b8-08dd75e78388 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|61400799027|376014; X-Microsoft-Antispam-Message-Info: mpByeZmi28fPRU5hCCwqKb1BAVLiRO7kdmtSTR6BVFVcDcmGxB+73npk+02T+hzDYbK0v6+rKNo86u85jp1pq1jCEm4/Y10IkRh+Ti+dOhqwT3IHBZ7oToSitpcIQZKMTo2bPepLK8UT+Gnaq2KPDEl1rTKWSRbtRKtq+e+wyzI0uX0j+8J9FEJIaI0gAiWo0wG4prCuNPejsHEe440RvzzKhZW07egipXnf+3Wj0neS1QoewJBOd3Hr4LpxoDpf41RyBydk71YfdXYKwNjsEbbcK9E4+847z1CTsOnlMtKWmPnzQeT9NziuVsaxGTuqRJ8UFXzUHukoScIds63KBd3bFlU2JA7EJb6mW1k+WRtybPbJZEBvtYg6sTcrswtD/E4lLkJiQq3rqrCZlowDvq0TA7zmMCRHt+lUX6K0Zdbdpg4bIDBR5aAaw1w9JcfLxDAAeQjmdp62CerRgpcLDs7ZU54yUzy8MveAFShHH2YpdiI42K/uj07E+6MRwWrjquRTH+XaUTqi2Pfh5WbdFMcZ6bkv8G8ulhcf80uaRBaIQKllY+PuvlCL9WNWJTllqljjRpQAuvInExEiLv03hHZEmoTdKA5PUqoA8qgQF8HCMndS/SbrjT5z3OnhOnTdPEcxjTWPL2PF6Hg0rnDYSRTPt70bWRhN052D66tIQ521mCdmb4qB/RFB5Q8g1oCf23GSAhsE64yaedQUEqmHoFp3LwDHqsmmAKwBjmGKvnVXDAZCCBnhT4sSipwZm2SSlNMj2IUOtUFE/e8TeFFGKQyrntGKoT8BtB1P8mLOR0MHaOj6Ejg0TZVDZL92HQIew9/ZKNY2jRZ5EKnDO0Fs/Vp3pH1KMYo1S395hGLswGwLe5OP141vAWKNa13mwK2+Dbpw/fBqZX2LW2ppyyCW7o7L6v139J0vIviUQ6dYu/Km/FzqEAyu9hXHYDn8Z0ktVpeOHuPBUdgWBRwIMVd0lYh030H3m4nIOQW8yI7t/Bqpl06CjOH9CeU+Cw2OKqmuqtzVyg4C8iLRU8BGjDsZDhjT8GBKP9e2ZQbZUfhTjvEmgeAuzDvYihiWIPwIdQM6N9uKHCXtDY6NBBQn9Hg67AmHt9YWhsurb2AWsFpP359p9UqKZ1WurTTzsiEc7fWOgxxA8jW0HhyF9KTEy4XS1/HT6WD2Mg74NMnwKiuWuhCQ4VbfxcPxTObkGHwkjIzYUgK9LlVFEmvFF8YF/R7anqIm1X8vLdPwIzUTPXqddE1uHrr9ut+PoQXiw0hLidyCtJgXIysAq0d3YFuv0/zUxJaJW83HEvgmQfsze1Rs0B/CQpUZ5YI7iZK9oT+jtRZDrhIDGq8Ndil94K0NeEDHpJ1b+LepFEAfSKFngZYBvfB98xAFjKY0sC/aKNT2CIJks2WKUk0g6xOPjh6kz4rURj+hgXAN9XgI8D9TC7AEMosXM2+Nj+ZRQXQ+Ak57OPMT3HjlPnAJcO5QPFcGcs0ysOaeBu1JJX2zQdunBv/sAxs= 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)(61400799027)(376014);DIR:OUT;SFP:1102; X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Apr 2025 15:18:55.8655 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: eb800a98-984f-4bd4-d2b8-08dd75e78388 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: CH3PEPF0000000B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR19MB6245 X-Proofpoint-GUID: WA4jZ04pXiu4jEKLl7aUctMmKLk7lqbR X-Authority-Analysis: v=2.4 cv=bOIWIO+Z c=1 sm=1 tr=0 ts=67f3ece6 cx=c_pps a=F+2k2gSOfOtDHduSTNWrfg==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=XR8D0OoHHMoA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=w1d2syhTAAAA:8 a=_UruoEx0gL58JRCOsKwA:9 a=BGLuxUZjE2igh1l4FkT-:22 X-Proofpoint-ORIG-GUID: WA4jZ04pXiu4jEKLl7aUctMmKLk7lqbR X-Proofpoint-Spam-Reason: safe 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 +#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 @@ -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; extern const struct cs35l56_fw_reg cs35l56_fw_reg; +extern const struct cs35l56_fw_reg cs35l63_fw_reg; extern const struct cirrus_amp_cal_controls cs35l56_calibration_controls; 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 = &cs35l56_regmap_i2c; cs35l56->base.fw_reg = &cs35l56_fw_reg; break; + case 0x3563: + regmap_config = &cs35l63_regmap_i2c; + cs35l56->base.fw_reg = &cs35l63_fw_reg; + break; default: return -ENODEV; } @@ -69,6 +73,7 @@ static void cs35l56_i2c_remove(struct i2c_client *client) static const struct i2c_device_id cs35l56_id_i2c[] = { { "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[] = { { "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; } +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 = SDW_SCP_BUSCLOCK_SCALE_B1; + next_scale_reg = SDW_SCP_BUSCLOCK_SCALE_B0; + } else { + curr_scale_reg = SDW_SCP_BUSCLOCK_SCALE_B0; + next_scale_reg = 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 = 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", curr_scale); + return curr_scale; + } + + next_scale = 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 == CS35L56_SDW_INVALID_BUS_SCALE) { + next_scale = cs35l56->old_sdw_clock_scale; + ret = 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 = curr_scale; + ret = sdw_write_no_pm(peripheral, curr_scale_reg, CS35L56_SDW_INVALID_BUS_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 = dev_get_drvdata(&peripheral->dev); + + if ((cs35l56->base.type == 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 *peripheral, 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 = { .read_prop = cs35l56_sdw_read_prop, .interrupt_callback = cs35l56_sdw_interrupt, .update_status = cs35l56_sdw_update_status, + .bus_config = cs35l56_sdw_bus_config, #ifdef DEBUG .clk_stop = cs35l56_sdw_clk_stop, #endif @@ -528,6 +597,10 @@ static int cs35l56_sdw_probe(struct sdw_slave *peripheral, const struct sdw_devi regmap_config = &cs35l56_regmap_sdw; cs35l56->base.fw_reg = &cs35l56_fw_reg; break; + case 0x3563: + regmap_config = &cs35l63_regmap_sdw; + cs35l56->base.fw_reg = &cs35l63_fw_reg; + break; default: return -ENODEV; } @@ -575,6 +648,7 @@ static const struct dev_pm_ops cs35l56_sdw_pm = { static const struct sdw_device_id cs35l56_sdw_id[] = { 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-shared.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[] = { { CS35L56_MAIN_POSTURE_NUMBER, 0x00000000 }, }; +static const struct reg_sequence cs35l63_patch_fw[] = { + /* 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 = regmap_register_patch(cs35l56_base->regmap, cs35l56_patch_fw, ARRAY_SIZE(cs35l56_patch_fw)); break; + case 0x63: + ret = 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[] = { { CS35L56_MAIN_POSTURE_NUMBER, 0x00000000 }, }; +static const struct reg_default cs35l63_reg_defaults[] = { + /* 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, unsigned int reg) } } -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); } } @@ -405,6 +466,11 @@ static const struct reg_sequence cs35l56_system_reset_seq[] = { REG_SEQ0(CS35L56_DSP_VIRTUAL1_MBOX_1, CS35L56_MBOX_CMD_SYSTEM_RESET), }; +static const struct reg_sequence cs35l63_system_reset_seq[] = { + 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_soundwire) { /* @@ -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 = 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 = { }; EXPORT_SYMBOL_NS_GPL(cs35l56_regmap_sdw, "SND_SOC_CS35L56_SHARED"); +const struct regmap_config cs35l63_regmap_i2c = { + .reg_bits = 32, + .val_bits = 32, + .reg_stride = 4, + .reg_base = 0x8000, + .reg_format_endian = REGMAP_ENDIAN_BIG, + .val_format_endian = REGMAP_ENDIAN_BIG, + .max_register = CS35L56_DSP1_PMEM_5114, + .reg_defaults = cs35l63_reg_defaults, + .num_reg_defaults = ARRAY_SIZE(cs35l63_reg_defaults), + .volatile_reg = cs35l63_volatile_reg, + .readable_reg = cs35l56_readable_reg, + .precious_reg = cs35l56_precious_reg, + .cache_type = REGCACHE_MAPLE, +}; +EXPORT_SYMBOL_NS_GPL(cs35l63_regmap_i2c, "SND_SOC_CS35L56_SHARED"); + +const struct regmap_config cs35l63_regmap_sdw = { + .reg_bits = 32, + .val_bits = 32, + .reg_stride = 4, + .reg_format_endian = REGMAP_ENDIAN_LITTLE, + .val_format_endian = REGMAP_ENDIAN_BIG, + .max_register = CS35L56_DSP1_PMEM_5114, + .reg_defaults = cs35l63_reg_defaults, + .num_reg_defaults = ARRAY_SIZE(cs35l63_reg_defaults), + .volatile_reg = cs35l63_volatile_reg, + .readable_reg = cs35l56_readable_reg, + .precious_reg = cs35l56_precious_reg, + .cache_type = REGCACHE_MAPLE, +}; +EXPORT_SYMBOL_NS_GPL(cs35l63_regmap_sdw, "SND_SOC_CS35L56_SHARED"); + const struct cs35l56_fw_reg cs35l56_fw_reg = { .fw_ver = CS35L56_DSP1_FW_VER, .halo_state = CS35L56_DSP1_HALO_STATE, @@ -1092,6 +1199,18 @@ const struct cs35l56_fw_reg cs35l56_fw_reg = { }; EXPORT_SYMBOL_NS_GPL(cs35l56_fw_reg, "SND_SOC_CS35L56_SHARED"); +const struct cs35l56_fw_reg cs35l63_fw_reg = { + .fw_ver = CS35L63_DSP1_FW_VER, + .halo_state = CS35L63_DSP1_HALO_STATE, + .pm_cur_stat = CS35L63_DSP1_PM_CUR_STATE, + .prot_sts = CS35L63_PROTECTION_STATUS, + .transducer_actual_ps = CS35L63_TRANSDUCER_ACTUAL_PS, + .user_mute = CS35L63_MAIN_RENDER_USER_MUTE, + .user_volume = CS35L63_MAIN_RENDER_USER_VOLUME, + .posture_number = 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[] = { cs35l56_dspwait_get_volsw, cs35l56_dspwait_put_volsw), }; +static const struct snd_kcontrol_new cs35l63_controls[] = { + 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_component *component) ret = snd_soc_add_component_controls(component, cs35l56_controls, ARRAY_SIZE(cs35l56_controls)); break; + case 0x63: + ret = snd_soc_add_component_controls(component, cs35l63_controls, + ARRAY_SIZE(cs35l63_controls)); + break; default: ret = -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; }; extern const struct dev_pm_ops cs35l56_pm_ops_i2c_spi; From patchwork Mon Apr 7 15:16:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Binding X-Patchwork-Id: 14041089 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 8A9DE1FDA62; Mon, 7 Apr 2025 15:19:09 +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=1744039151; cv=fail; b=JcTIsBAbZVIAAi6amOtbGE0nE3jgU32P/rDk50osZrMIQjcaxentrPGuE4lthR1X/9GkpF05VQsxoQhpwDxFbKlWQLw2f/xMi8X8BRM1ZDic9QFPc+J7zTPKFUZ3EzKQJ458gJqrct0Dhe4udpjS9ryInU+M8G31by2Lh6Uau88= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744039151; 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=IeFlKTvk+buPBQdav9Ze0ZFXLpQ7H6MCpkwrv8Yrrwm8yI0+IkO/f40iAcYTCfhAHNLZqtJjdGVR7r2M2IkjO2D8fBadRyzkVZMNnGzUvlXJtymsHojMiGcM7ueLIFdwbyk+h0j2zmyd7LXu2cCIuNCyPFh2W+idiNS6Lcigl8Y= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=XHQlJ/Ov; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=FLWuuSOC; 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=cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="XHQlJ/Ov"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="FLWuuSOC" 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 537CLsxr003809; Mon, 7 Apr 2025 10:19:05 -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= XHQlJ/Ovox7xThCxbOZT8GZ5qdnSC9zPVi3aGwc9SpaKDGcQGbVa3NzrY2BvKnj4 ZMaYSEB8qoq8t033IoKdrAb7WZUxowz2MBMow24lPXH2oPlXqNSN+9c1rfQ0sjiL zO9Ysj+4bo+6xascCSXJujvDIa5JYs1IaXTnoc28H26xZCYe/otYrvBFQtfTGRC4 toxKesPwhzUxjbqV0F8VOJPOvmfc6vog1ESQvM+xva6b+G4/vHsA09QvPhgF5P0c peM28GYvT5fvs5gif1rQbr7/YqOJWgClVjaU4K7at2Pz3aQKSAYIpZiZItFhGWkW 1ONYUa7AlUVXr0Gtl450uw== Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2177.outbound.protection.outlook.com [104.47.59.177]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 45vemwg9rg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 07 Apr 2025 10:19:05 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HNkrWKUa1dOvDzmCA2tw6+BzDetdCtTepNQ6SZwjfp9uKSI/tkV+9RueCOR0kp9J2IHp9TX+u6TMAVOtxLVoG+Ie6LmFnPYwcWXnwDTFWVTp7HOjcZ7KGO7PnG9Zu8PWZZ8qU+a9sukJJ7F8LHN1o7FW/5tR+0naZn7H4MJoQMrJbRYvrx2OvqW8gf8avBXvIvx6GwcO+7mKOE34p9w8Tc03ScDpXw3ICkw/myNuVmagsrd5ZFL/MBXvLOR4LrdE/+CY280GWNdCoNjg6i1Kwbj1iemx4tAOtk+FqxxL+89yYo1LR6y8R94yHD6OivEsdxuNn+627+lNWUazzU6GIw== 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=TxyX4M9vHE8lLnXkgp4S/r+3WWYdWLVSAALcPvMeAW/E2/T8ry8ycMt+pwmC1h87jAvfbxKrNAG4V0puqiQm3tKa84/l+LCiHzpOYOnOhjgaJ/lduv2injBXxGss3P6PepYe/FG9ZkWgo+3ojSPVBMlWlHSTbs0EktYf6CCI9p+kBda45ScRBdASFDE6QdSAG+a+UfZDeuk2wxnnvefmH+pMmWRISlvzLAxHs5TL0MbIAwxPOdrczOsrHp83Bk65BjSRn0fKL28FIUkeizNGoeP4qFRZz4DUanIp7if9zZQK3UYiK5P/coDBb3EUikzSfwN2HJiMi1OQPv88e9hBFw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=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=FLWuuSOC07jcQQ5dlJseQS4LU8gUBW1gmWiq/gj/Tp7ncJVQwJjF7uhvSUYHfipIQKKdbGY4uTw/XXKjHB1smNzSz+/zsxYrCd82IDAL+ldeNq/EodNdhBeve9j/BnJCp1jnd3SZXWddbcK2eFihTGumAyisju0OmXwc6mCdcZM= Received: from PH7P220CA0180.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:33b::30) by SA0PR19MB4192.namprd19.prod.outlook.com (2603:10b6:806:8c::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Mon, 7 Apr 2025 15:18:59 +0000 Received: from CY4PEPF0000EE36.namprd05.prod.outlook.com (2603:10b6:510:33b:cafe::d7) by PH7P220CA0180.outlook.office365.com (2603:10b6:510:33b::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.35 via Frontend Transport; Mon, 7 Apr 2025 15:18:59 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 84.19.233.75) smtp.mailfrom=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 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 CY4PEPF0000EE36.mail.protection.outlook.com (10.167.242.42) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.13 via Frontend Transport; Mon, 7 Apr 2025 15:18:57 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id 05C1140654F; Mon, 7 Apr 2025 15:18:55 +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 CF91E820244; Mon, 7 Apr 2025 15:18:54 +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 v1 5/5] ASoC: cs35l56: Read Silicon ID from DIE_STS registers for CS35L63 Date: Mon, 7 Apr 2025 16:16:44 +0100 Message-ID: <20250407151842.143393-6-sbinding@opensource.cirrus.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250407151842.143393-1-sbinding@opensource.cirrus.com> References: <20250407151842.143393-1-sbinding@opensource.cirrus.com> Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EE36:EE_|SA0PR19MB4192:EE_ X-MS-Office365-Filtering-Correlation-Id: dc4fd33e-5343-4f29-3c14-08dd75e784b2 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: 2EaIsMvxwSuQCk1GXVp/uGSftFEmCXchVvMehg22EPIsSOXgl0EAAlwvtLUwflH4hUfLCtk/kV4F4SQn6A6T7KWTvonMSIzTZYI4jmkk9Msbjx61211P8iBXGRvKx1HozF4MsW1Xg3XdnH7WYGtz3G7U2LfCGj0StsQEbYGvE/rUP9qHiXnIlfKbm41BsHf2Ts5Eqre+t09fy0mn1q+7NlUCsm0HhUbttcfgc8ab4CwDasOfOlVAO2kick1eb34NHYu2mSQTLlU5+GInL/cW4FNwG97tO2tKpH5mvrXt+dGJPCdkpnm7seV6MwS8s3RvdUGa9KilMzu6AsRvW5YOv3cZDuMo6s7Y1vFojxmjOkAnnuG00O2s3lEYyhpgu+sVfZyg8II0KbfA75ccr8TUP7A2wbTV4aWBJbZa+K9JvsY4TweVP5zxu3OQy/870yn/mhGqAPtSULmamWX8yUe/kUIRIZoy667XgNqrrNfZrlBoABGc6MuhRd2ZevzYYMewY3FR7fgrQma9jHhw+k0PmEriVb57p0x66Ktam9aJJKUAFDBc4kN14IKsvEGNf6hibOgpzoLPS+r9hHWcHbSg1ea2rScFc65pWiH76CPafuk/tqseevPec/J0O8Q8JVFier3NyOW+SEzDX3ZsMdeV80K5+vYQwt8hPW4JKjgXyXobNk7y10nGrXXWyfQZBHBQtnz2XMMiY78SkeGCyK53AIHsxpZRpV/hXp83A37Iyf5JZ1ajg8+ML+pBowXG3Sand5MFSIn51icTYSNfprenLoMZ8mV/jXGfvgmH9O7cVQxbe+yszjoUnEtZxZr5VP84hLy9R9fIG8M0tbcin9Z7lznoyihVTFRWWeb6uvNIwTH9Gv6i7CVFJTbTyqyfYEHHQdOkig/4bX55eNOc7i0onyyrXBToxue8T0yYbo0eyRIZwxvO20p0qQnlYnTqDp1wmdwhjhYRAzowmxSDRsePihbQK9Nnt330sqWxG8/Xc8ILPGQ85vCung+aLFyTW4QjUXPe/lbROqH0BenopMztWecGvnn0o8+JDnJQcDVnEebsmzUE+w4ixTtLCXWzJMN5DhTIpiVJxTAViX7VSwke39qKcgeoKAUZvZHDzviumkMgWIIicKg9p9/HWDDpfVjSB9Olv67zUOy2GPoyHORQ3ZTnubOrdrEj/F28PKYemvKQUdl/v7VCkLQh9b6pOqSDOr7QiuOhCYIwAq4Da89cjrEJfXHfuVCS+ArcY0dBqmy4gUUUG4DlmcOnLm++Ww2kZckULyJPsOsM0jkNIpBFg9qp5FcpndsNjz8X3Bdxw3gBQY11EOils6lNqgCDDY5r0glHuqojiEkGDK83bxM/hWEm6JhgdF+F4s2WRVtiPZr++tnZTLFtohcVcb6sVP4JeDD8AXIf7rBpY64jvgRPN7QIXfEMdMtXhod3e+NMGOgz4O79L0kL1vmUvKfZyz3q3Th8GjjvoPj1FUMQGPy7yp7Y2WbQafD1fZDbQPKB9dM= 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: 07 Apr 2025 15:18:57.7365 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: dc4fd33e-5343-4f29-3c14-08dd75e784b2 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: CY4PEPF0000EE36.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR19MB4192 X-Proofpoint-GUID: 8xBSOTTHNMV0B_FGfIexF0h9FwZS35DD X-Proofpoint-ORIG-GUID: 8xBSOTTHNMV0B_FGfIexF0h9FwZS35DD X-Authority-Analysis: v=2.4 cv=bYprUPPB c=1 sm=1 tr=0 ts=67f3ece9 cx=c_pps a=19NZlzvm9lyiwlsJLkNFGw==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=XR8D0OoHHMoA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=w1d2syhTAAAA:8 a=CWbckqrqqy4M3qBwpBwA:9 a=BGLuxUZjE2igh1l4FkT-:22 X-Proofpoint-Spam-Reason: safe 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-shared.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, unsigned 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_base *cs35l56_base, u64 *uid) unique_id |= (u32)pte.x | ((u32)pte.y << 8) | ((u32)pte.wafer_id << 16) | ((u32)pte.dvs << 24); - dev_dbg(cs35l56_base->dev, "UniqueID = %#llx\n", unique_id); - *uid = unique_id; return 0; } +static int cs35l63_read_silicon_uid(struct cs35l56_base *cs35l56_base, u64 *uid) +{ + u32 tmp[2]; + int ret; + + ret = regmap_bulk_read(cs35l56_base->regmap, CS35L56_DIE_STS1, tmp, ARRAY_SIZE(tmp)); + if (ret) { + dev_err(cs35l56_base->dev, "Cannot obtain CS35L56_DIE_STS: %d\n", ret); + return ret; + } + + *uid = tmp[1]; + *uid <<= 32; + *uid |= tmp[0]; + + return 0; +} + /* Firmware calibration controls */ const struct cirrus_amp_cal_controls cs35l56_calibration_controls = { .alg_id = 0x9f210, @@ -829,10 +847,25 @@ int cs35l56_get_calibration(struct cs35l56_base *cs35l56_base) if (cs35l56_base->secured) return 0; - ret = cs35l56_read_silicon_uid(cs35l56_base, &silicon_uid); + switch (cs35l56_base->type) { + case 0x54: + case 0x56: + case 0x57: + ret = cs35l56_read_silicon_uid(cs35l56_base, &silicon_uid); + break; + case 0x63: + ret = cs35l63_read_silicon_uid(cs35l56_base, &silicon_uid); + break; + default: + ret = -ENODEV; + break; + } + if (ret < 0) return ret; + dev_dbg(cs35l56_base->dev, "UniqueID = %#llx\n", silicon_uid); + ret = cs_amp_get_efi_calibration_data(cs35l56_base->dev, silicon_uid, cs35l56_base->cal_index, &cs35l56_base->cal_data);