From nobody Sun Feb 8 21:32:47 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011008.outbound.protection.outlook.com [52.101.65.8]) (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 DE9662FF679; Tue, 28 Oct 2025 14:49:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.8 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761662964; cv=fail; b=og7GasTifMekHq3vsqgT+2umQFI1umKn/Kjre830/BrJbTMVqyC8+fXVg067dXeeU3oqp8mzmMpJEsqyxPHB+fJ1lrvgwEOb9+SDQTPpwAkUgZGHxP4KihOHP5SepXaR0m7dVwDxesXSjyfV3TQxUWE7rT25AwUp/6PBmv2idG8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761662964; c=relaxed/simple; bh=puWuZ7nueMsmt7t7Il/yMFRFqRrx46I19P4Iko9qxq4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=uFn3BsqnMZORCgF+a01drA0KGFlJh3dIPm6gdMfrPs3qh0u79cip1lyqhLTevX8ed1Bc/w+s6/ZIMdBlYZRFRfS9Tv0M86Bexx2KWNQb6rmUc1hmDf4+GiqjjR4j/G0/INtORPZcHSSsbkKbxTS71KhMnBvBjFTq0SAXJu0LDfI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=Ggy0r32A; arc=fail smtp.client-ip=52.101.65.8 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="Ggy0r32A" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KanSV1Tdbk1vrRElw0epNhSVRV0oYJdqbEyzjQZNWYvFpmdtnYXxl+SuM0yPLMEDhLnBnphGoLfpOl5hxfIrRRtbE8M6vZb9MPfUGqEG/kTWfOpE+pH1vEX1Wl6Mix7iWLASkWl/u496EGmsm6OpNxHoXotVwLZwWXIg2sCoUAHT7abqM+KLzYt4SR4uRovf/2FJWO3iqwXqg09KFpjVByf3+02h3BMIm7w2EJj7CGfQS0Mt++pZmBlliR7apLath/oTePorUX5HctwyJLJDKGUqQ3gJ9NvpcqKq/LkwRvuBCbWIhQjcdRPjxrT12CGAPL64m43rYeW7lD5hJntCLQ== 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=pvKbtTb/Q5BXynuGwoSh4a9r7ynLvFjAKjDRDZBmE3U=; b=UeaRZHF1mUxYWzdcKC95TEsopybTXdrGsE4tdLry41wDLVwaZoiUU5FhFRC+Zgy0VzeQWFNTaV0gNHsAfR2u5jMEpidV/p/VZ9wT/mhqPLSIZHhxD466Q9TP6ZQeDIynbDrPp1piAyGyO9+ypvfc4zjZKge7wFwamyI0o150E+CO9wxzKOIlg59zwdUWXhJLoojyKU08lRRCqB91jL40OOUlFy9cj8UkRPGCLp6rydhdQ7UKu8sWXvVE+ppMR6bOzG43H/TElF+79924ODsqbD3yamWzBN+eM0Lf/5Ycgz+7BePn69Z+ezcbIqywIC7mcrSpnPkqKzB0mzpCtiMN0w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pvKbtTb/Q5BXynuGwoSh4a9r7ynLvFjAKjDRDZBmE3U=; b=Ggy0r32Ah3VZb8R9dxDZTh17QGWvqHl2fosfV0+EVmFOsfQ6l9rd4sRUVVK1fjK9RhlUFNnrJ5ijwhKafYSaMxskZ2JvgX5FIcwhpNRggll8i4WuJP8WSDe0QEbw7kC5Dgu/Fs7NEVWj9n60iBQuG3bRBrUKt2ih11bDbNOU1y63aPBe9gMPLln1LHmdDDeSJbLDYaZySD4qFi/UA/7W8ChKIeTEHnZXCteEJHgS8i78K7LLH+8CAZbcuQRMJogG9mDn/x0w135Ypq2zujva0Gke9JaSrY55ZovNHoNwokyMMPvAZrFigF8OnkhKaDliVmuYyjis3+rEUxiInySlyQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) by VI0PR04MB10613.eurprd04.prod.outlook.com (2603:10a6:800:25f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Tue, 28 Oct 2025 14:49:19 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9275.011; Tue, 28 Oct 2025 14:49:19 +0000 From: Frank Li Date: Tue, 28 Oct 2025 10:48:57 -0400 Subject: [PATCH v8 1/6] i3c: Add HDR API support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251028-i3c_ddr-v8-1-795ded2db8c2@nxp.com> References: <20251028-i3c_ddr-v8-0-795ded2db8c2@nxp.com> In-Reply-To: <20251028-i3c_ddr-v8-0-795ded2db8c2@nxp.com> To: Alexandre Belloni , Miquel Raynal , Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-iio@vger.kernel.org, joshua.yeong@starfivetech.com, devicetree@vger.kernel.org, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1761662950; l=10560; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=puWuZ7nueMsmt7t7Il/yMFRFqRrx46I19P4Iko9qxq4=; b=aHkCf5yGyjfImoA0v3arZozviRmu9BAQKE7eDDIImE5dWrMUlKGMdJxUcXUm9tOAUq1FucyxW yS2lx6c8yggA1UBjzGSJncWpsxQ0+v1ORouz8O+h5O1+NuQmULTPnme X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BYAPR02CA0040.namprd02.prod.outlook.com (2603:10b6:a03:54::17) To PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXSPRMB0053:EE_|VI0PR04MB10613:EE_ X-MS-Office365-Filtering-Correlation-Id: 13f75b6d-da72-4391-c137-08de16312c7f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|19092799006|7416014|52116014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?OUllSjJzZ2o1cFY3UzRWYXp5M3hpam1LckoyREgwaUhwVHAvR3NZZVhtNExj?= =?utf-8?B?RjBKcERPRTdUOUxueTVSRysyaTk0czR5UEtJWnEvYks4TzF2U1R0M1pGTy9U?= =?utf-8?B?dk85YzViSEdVd1NpVDMwWDdFeFFnNE9CbWI1a2xGUkY2N09OSkxwWnNueDlj?= =?utf-8?B?RkUvUldHamxhL3U5cWdCN0FaMVNVMmVKSGF3N0pFOGxDWEdTeldJamwxOVRT?= =?utf-8?B?MGd4ZUdZYUV2QndnMC9nODBlWURGamxPZ2s2S2dSNGl0Yk1ZaTlSNnZjbmto?= =?utf-8?B?amIzVmlhRjVaSGRzaXMxZGQzaVhKdWVCTG9PWFBub0p1UkZEeVl5RkRhL2Fr?= =?utf-8?B?aVNMbmZzNm5aZmJwYWNGeUswTW41T2dzcGNkT3luT0dsL3gyc2trMVFsRjhh?= =?utf-8?B?alFWQ2ZLenlnL1hHV1FpenRqSXZhNHRmQVhCQUY3M0pwanpWWVg5TmtJd3RR?= =?utf-8?B?M2xEUERaMERUZTJZL29vYXpqSms0NE9qLzNRVGU5cVlJSk0ybjBxQjdmRWRn?= =?utf-8?B?MEVweitnQlNsZUZtOGZkN1lmbFh5S2xlcThnRm90ZEM2RndlN2dwSUNTMUtQ?= =?utf-8?B?eU5ZYTM3NWg3QzJxQ0l4cHlGa21vb1ppdGVTQmlGM0hnaUc4UXVOM05Fb0Y3?= =?utf-8?B?REhubG01U2N3bXF4WVBFeTZvbW10ejFWVEI4akFaZ2xjZ2tFYlc0ekM1UHdW?= =?utf-8?B?VzFrTU9aK0x3Y2hjbTVDVXROS1B6NFhDbkRuQW1OMXRmbmFMWXY5TkdvZVhs?= =?utf-8?B?QlA4cENldjduN1NRUkxmLzBOZXY2aGhLbE40MGJ5WkVqL1VpaWVXY0V6bitz?= =?utf-8?B?MStJWmFMQVhCekQ5cW5idmFuR2F6c3ZuY3dNT3dSUEtUaU5oRjV1VXhidDNL?= =?utf-8?B?ZnRmN2R4TlVCT1pweW1MZDM3dzF4SkJpc2kvU292a3pYbVhRYVVqSDJhZU1R?= =?utf-8?B?OFUwS1F5cUdpeHo0b00zeFEwUXhYeGRiekxja3cxVG14Z0dzb2xWMHZTQnlY?= =?utf-8?B?RmpSSjdrRjhOcGd2cHg2cXE4d2RhWW5ZZ3FpU0lzTHgvbktLckpFNTdEdTJL?= =?utf-8?B?WWhPY0psUC9jd0cyTzVGb2RWWnlhNXFQaDJwVUFCT0tFVjU0cWlsYk5Nc2dU?= =?utf-8?B?MWxQdXYydFgyYTJtWE1nd1JxMzFISUlkbklpaTZDcCtwTDliTUU1U09ma3Iz?= =?utf-8?B?aWJ2NmJlTUN3TTFJTm1hN1lmNzZJUUh3bXNBWmswbEVhMzkrQTZneVRSOUVz?= =?utf-8?B?SmQyUC9jZkYzUXVWUS9qTEpBbGFhcFdzWXAxS091U1MzRHI0dnhTKzVkZm8y?= =?utf-8?B?NGw1RUZRb0Z1T2czTDJuenh2OHlKT0JuTnhYSUR2NS8xZVdWRFJ0dDhCc1cr?= =?utf-8?B?bUlidGJ2UVVnM3huNVlQOEV2Q1MrSnJ2N0VmQnZCL2tOTk5sSTZxUFVDKzhz?= =?utf-8?B?a3k3L0FnVXVaMGpWQ0hMVnNsQ3JIOHEwZnBaVkxNZGJ0VDZwb2F4VlY5ckFD?= =?utf-8?B?ZEFTNDhoYkZobVBudThyUXFIajAyOU85VWY2c1pSakJmbVU0ZFpDZ0xMbDV4?= =?utf-8?B?V29mV0xIZmJHTmVab0FjQzlIRTVCTXdad1F0enV3MUlNcU9WWTZHV2h0NmZY?= =?utf-8?B?Q1ZCRjNSL3JMdDJXbFNncmJkUjgxRWlNOXNaQnBjUnBxVjcvVjQwZ2V4NWhj?= =?utf-8?B?ZXVsODk4S1VWREhLODB3T3BSZjc3cHNsMDdRM3p3UC9uc2FQVUdRS004OTVh?= =?utf-8?B?MzU2a2x2YjJTajV0eW5xdTZPb3hGUnBBOS84R2F4K3VrOHd1SFp0MVZoYVQr?= =?utf-8?B?R3lYSmh1M0lmc2N6TkV4amFuU3pLM1JuU1Q1MkZGZ0x0TEtCbHlwSzU3ZVcx?= =?utf-8?B?Nm1hRXM3Q2FYQmxxNmk0Rk05OVFGaGlDWEVuV1ROc2pqTHUrMXo1YXpwWVl1?= =?utf-8?B?MlJZbzZ2UUJpZjhqNXoydGNueGVCa3FSNmllV0VsdGxOaHNWMTNEeXplcEtp?= =?utf-8?B?WWJKdjFkZW1OcUJtSUUySXM3UUc3NnVrKytFLzRsVGxoUktaaWNGMndnRXRl?= =?utf-8?Q?DwinBU?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(19092799006)(7416014)(52116014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NzB5Q3FZcTdrT2FoSU9xNm0vV1JLcEx6aXNYWmNCNXREaXRZKy84VFFBWGF2?= =?utf-8?B?b0R6VzF3dVVkQThDQVI1SXA2Ly90bVArdU90YUhyRC8rSjF2bUVqbFZmUGJi?= =?utf-8?B?NTFIeDJha3F0dlZzZXk0azBuZWJmdUZ4NWp0anVYVmZVVnQzaWlwdHRMS2x4?= =?utf-8?B?Ykx0RUpaMXdkdHQ1bE1VYnZ5N3lncUZLamlzZTJJdnV5aW5PdHUvbzlZTC9x?= =?utf-8?B?c2Q5RWdTSXYvY2RJN3cxTGYzS2hLVUI4WGtZSEtzUWNKT0NTVWQwekFhVEk2?= =?utf-8?B?dHRMOG40Qnlsbk9WR2gwL2tCa2pWZkVJd0tsR2hMcTUyeHZtS0FxZk9hSUt6?= =?utf-8?B?OTdxa0JJUkx0UTdTUS8wbDhDLzBZancyaGlOVE1kMUdwVFFwbXVnN3FQWCtu?= =?utf-8?B?NXdRclJqbDBSK1pmNnJ1MHk5R2o1VzRBV2ptYlNmNmlRSkJUWjhsQnBUNWVW?= =?utf-8?B?WlZOYXNPbTNmdUlBUWR0RUwyK2pHTmxBRExOdVdhOHZHem12YkJ0VTNKelFO?= =?utf-8?B?c01oTGxnb1FVbzZuVWR5TkU5THRUVUtENDV5UW9tUVdzdHRhSzNXOEV6eXU0?= =?utf-8?B?bm1QcjNneWtKaVFsbHJIdnB0eU9VVFV5TGFSL052alpJeHhJMy84VHdCbUdD?= =?utf-8?B?VGNWUzNTSWU5Y1RGSmc2c3JZYlpJc25iVmxDeVV0alNhLzVrMCtJOTZ3UFl4?= =?utf-8?B?N0h3K3p1bEJjQ2RPL0J2UzRaSFlGVHllK2lETVFhNGtGMnlXbkZ1RGdpaHl0?= =?utf-8?B?RTN0M3djaXJkejlSald1b2pCS1N1LzBXc2c1R2V6azVIeGxFV2VCVVhVVmgx?= =?utf-8?B?aHQ3T3dzZmtNM3F4UUFwUTBRcldzSjNNdGlFZDBIYXYxRDB0VWVzVmIwK05W?= =?utf-8?B?NUw5aDVqVHd4d05rTXNCNjc1T3dwRWJ5TGpLNjMvOHhRNzFaeWdEVVNOcVV1?= =?utf-8?B?aDRGeDVEWTQ1bjB4OE5SeWpqVW9EdEZtQkJxaFc1K3AzQ2twcmNJQ01CRERp?= =?utf-8?B?dDhrRUpHdzY2aEM1SHd6K0JHMTdWeXpVei9rWFJqWTh1MURqa0xpMlZ0SHhH?= =?utf-8?B?SHpaYzFxNFBRK3h6eFBSSGdFb1BPTWRJMkNJajBzRmdic1hldWYrdWxtSlRV?= =?utf-8?B?VmpwYnZYcWg2R0ZpbnNLcklzTmQ0MkZOaHBiZ2wvM2dkUit6Y2Via3R2U1g4?= =?utf-8?B?SnlqWEF2OEdONldSNStrNHhxeWZjdnR6Y1hqU1ZnaDhDb3NRK3E2OHByV0xr?= =?utf-8?B?cDV2YnZEZG9LMkI5QkFlNW9hTUNuMjFNMjNJNTNYNGFWMlRzR2VKanVGZHV3?= =?utf-8?B?cjZXSkJGR0ZnRFVJaEhUN1lDK1pKUW1BOVg5czNhczBDZFU5eW5IejVxY0x4?= =?utf-8?B?eXJUTXdSQnlTWS94bkxXVkxlL29Jb0c2V2ZCcVFZK1IxVlROOGErUWg4cXQx?= =?utf-8?B?Yk5IckVxUU85Rzhzc0R1YmJCamk5d2VoZUY3amRpTG5HREdldjhEcW5qOERD?= =?utf-8?B?aGRaOVJnaHFvMkJQa0QxdzFGamFHSE1qQlV3dERhUnF4UGJENHZPYkV1Y2pk?= =?utf-8?B?VnBVSjU5ZlV0dDMxRWwvZi9EdVFZZEdMMnlrMi9la0dCdFMzdW5sYmRBQ240?= =?utf-8?B?aDlTQ1hUN2F3ZFA3VTVobFFvMUtwbDIvbEhpN0ZIVUlYRGlYN0h6RW1GaWlt?= =?utf-8?B?MGdRenVxR0hkekpxYllXUUtSNHF4ajRXbUFRbmJNUWw1RTlpdmJLaFlqREZq?= =?utf-8?B?T3RCRWIraDBZM29vSWk3SkJZaFM2M3h2TTI4SjVKRmxyYTVxVVNnRFhYb1Rj?= =?utf-8?B?dDBGa3VOQUw5QUJVOHd5Tjdkdm9sTDM5a1lkRE9nSi9OK3RSNWR5YWpZNTVh?= =?utf-8?B?cm5JeTNXcTIvd1VUQlhwSlA1b2tFcWx2UDNkSVl5b3RJenhoUkp3OUs1cGpm?= =?utf-8?B?d1l5Z05qV3ZaNERlVnRaYmFCNUpNT1BadGx0SHVoQmpBaUpXbEdQY1FCcTFq?= =?utf-8?B?eVNBQnVYSmN6RVFwVm9yTm5mbFlrWm9lM1hwa3lUeUtvYXRFalZlVjFEQkVF?= =?utf-8?B?TldFZ2hkZ0NtR3Y1YlZtUklTVHVzZmVCTy9WMmUvS1I0Q0NGVjZaOW4xOEhu?= =?utf-8?Q?Vu+P9+Xy5TQ/fWCbti/HH4FEg?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 13f75b6d-da72-4391-c137-08de16312c7f X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2025 14:49:19.0568 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: QGgt26Fkz0gl5ECp30Arf2TzcvzSEBMMtoLKEN50Wr100Gu79E4tr+/DDzgudVvj3rNCS7JQOxnJ6A4W+VJoSg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB10613 Rename struct i3c_priv_xfer to struct i3c_xfer, since private xfer in the I3C spec refers only to SDR transfers. Ref: i3c spec ver1.2, section 3, Technical Overview. i3c_xfer will be used for both SDR and HDR. Rename enum i3c_hdr_mode to i3c_xfer_mode. Previous definition need match CCC GET_CAP1 bit position. Use 31 as SDR transfer mode. Add i3c_device_do_xfers() with an xfer mode argument, while keeping i3c_device_do_priv_xfers() as a wrapper that calls i3c_device_do_xfers() with I3C_SDR for backward compatibility. Introduce a 'cmd' field in struct i3c_xfer as an anonymous union with 'rnw', since HDR mode uses read/write commands instead of the SDR address bit. Add .i3c_xfers() callback for master controllers. If not implemented, fall back to SDR with .priv_xfers(). The .priv_xfers() API can be removed once all controllers switch to .i3c_xfers(). Add 'mode_mask' bitmask to advertise controller capability. Signed-off-by: Frank Li --- Why not add hdr mode in struct i3c_priv_xfer because mode can't be mixed in one i3c transfer. for example, can't send a HDR follow one SDR between START and STOP. i3c_priv_xfer should be treat as whole i3c transactions. If user want send HDR follow SDR, should be call i3c_device_do_priv_xfers_mode() twice, instead put into a big i3c_priv_xfer[n]. change in v8 - new API use i3c_xfer instead of i3c_priv_xfer. change in v7 - explicit set enum I3C_HDR_* to value, which spec required. - add comments about check priv_xfers and i3c_xfers change in v5-v6 - none change in v4 - Rename enum i3c_hdr_mode to i3c_xfer_mode. change in v3 - Add Depreciated comment for priv_xfers. change in v2 - don't use 'priv_' since it is refer to sdr mode transfer in spec. - add 'mode_mask' indicate controller's capibility. - add helper function to check master's supported transfer mode. --- drivers/i3c/device.c | 27 ++++++++++++++++++++------- drivers/i3c/internals.h | 6 +++--- drivers/i3c/master.c | 20 ++++++++++++++++---- include/linux/i3c/device.h | 40 +++++++++++++++++++++++++++++----------- include/linux/i3c/master.h | 4 ++++ 5 files changed, 72 insertions(+), 25 deletions(-) diff --git a/drivers/i3c/device.c b/drivers/i3c/device.c index 2396545763ff853097d9f0173787e087f7a6e688..8a156f5ad6929402eb92b152d2e= 80754dd5a2387 100644 --- a/drivers/i3c/device.c +++ b/drivers/i3c/device.c @@ -15,12 +15,12 @@ #include "internals.h" =20 /** - * i3c_device_do_priv_xfers() - do I3C SDR private transfers directed to a - * specific device + * i3c_device_do_xfers() - do I3C transfers directed to a specific device * * @dev: device with which the transfers should be done * @xfers: array of transfers * @nxfers: number of transfers + * @mode: transfer mode * * Initiate one or several private SDR transfers with @dev. * @@ -33,9 +33,8 @@ * 'xfers' some time later. See I3C spec ver 1.1.1 09-Jun-2021. Section: * 5.1.2.2.3. */ -int i3c_device_do_priv_xfers(struct i3c_device *dev, - struct i3c_priv_xfer *xfers, - int nxfers) +int i3c_device_do_xfers(struct i3c_device *dev, struct i3c_xfer *xfers, + int nxfers, enum i3c_xfer_mode mode) { int ret, i; =20 @@ -48,12 +47,12 @@ int i3c_device_do_priv_xfers(struct i3c_device *dev, } =20 i3c_bus_normaluse_lock(dev->bus); - ret =3D i3c_dev_do_priv_xfers_locked(dev->desc, xfers, nxfers); + ret =3D i3c_dev_do_xfers_locked(dev->desc, xfers, nxfers, mode); i3c_bus_normaluse_unlock(dev->bus); =20 return ret; } -EXPORT_SYMBOL_GPL(i3c_device_do_priv_xfers); +EXPORT_SYMBOL_GPL(i3c_device_do_xfers); =20 /** * i3c_device_do_setdasa() - do I3C dynamic address assignement with @@ -260,6 +259,20 @@ i3c_device_match_id(struct i3c_device *i3cdev, } EXPORT_SYMBOL_GPL(i3c_device_match_id); =20 +/** + * i3c_device_get_supported_xfer_mode - Returns the supported transfer mod= e by + * connected master controller. + * @dev: I3C device + * + * Return: a bit mask, which supported transfer mode, bit position is defi= ned at + * enum i3c_hdr_mode + */ +u32 i3c_device_get_supported_xfer_mode(struct i3c_device *dev) +{ + return i3c_dev_get_master(dev->desc)->this->info.hdr_cap | BIT(I3C_SDR); +} +EXPORT_SYMBOL_GPL(i3c_device_get_supported_xfer_mode); + /** * i3c_driver_register_with_owner() - register an I3C device driver * diff --git a/drivers/i3c/internals.h b/drivers/i3c/internals.h index 79ceaa5f5afd6f8772db114472cfad99d4dd4341..f609e5098137c1b00db1830a176= bb44c2802eb6f 100644 --- a/drivers/i3c/internals.h +++ b/drivers/i3c/internals.h @@ -15,9 +15,9 @@ void i3c_bus_normaluse_lock(struct i3c_bus *bus); void i3c_bus_normaluse_unlock(struct i3c_bus *bus); =20 int i3c_dev_setdasa_locked(struct i3c_dev_desc *dev); -int i3c_dev_do_priv_xfers_locked(struct i3c_dev_desc *dev, - struct i3c_priv_xfer *xfers, - int nxfers); +int i3c_dev_do_xfers_locked(struct i3c_dev_desc *dev, + struct i3c_xfer *xfers, + int nxfers, enum i3c_xfer_mode mode); int i3c_dev_disable_ibi_locked(struct i3c_dev_desc *dev); int i3c_dev_enable_ibi_locked(struct i3c_dev_desc *dev); int i3c_dev_request_ibi_locked(struct i3c_dev_desc *dev, diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c index 66513a27e6e776d251203b286bcaecb9d8fc67b9..16a480865ff4a28857f1ea6df33= dbe4a66d1468c 100644 --- a/drivers/i3c/master.c +++ b/drivers/i3c/master.c @@ -2821,10 +2821,14 @@ EXPORT_SYMBOL_GPL(i3c_generic_ibi_recycle_slot); =20 static int i3c_master_check_ops(const struct i3c_master_controller_ops *op= s) { - if (!ops || !ops->bus_init || !ops->priv_xfers || + if (!ops || !ops->bus_init || !ops->send_ccc_cmd || !ops->do_daa || !ops->i2c_xfers) return -EINVAL; =20 + /* Must provide one of priv_xfers (SDR only) or i3c_xfers (all modes) */ + if (!ops->priv_xfers && !ops->i3c_xfers) + return -EINVAL; + if (ops->request_ibi && (!ops->enable_ibi || !ops->disable_ibi || !ops->free_ibi || !ops->recycle_ibi_slot)) @@ -3014,9 +3018,8 @@ int i3c_dev_setdasa_locked(struct i3c_dev_desc *dev) dev->boardinfo->init_dyn_addr); } =20 -int i3c_dev_do_priv_xfers_locked(struct i3c_dev_desc *dev, - struct i3c_priv_xfer *xfers, - int nxfers) +int i3c_dev_do_xfers_locked(struct i3c_dev_desc *dev, struct i3c_xfer *xfe= rs, + int nxfers, enum i3c_xfer_mode mode) { struct i3c_master_controller *master; =20 @@ -3027,9 +3030,18 @@ int i3c_dev_do_priv_xfers_locked(struct i3c_dev_desc= *dev, if (!master || !xfers) return -EINVAL; =20 + if (mode !=3D I3C_SDR && !(master->this->info.hdr_cap & BIT(mode))) + return -EOPNOTSUPP; + + if (master->ops->i3c_xfers) + return master->ops->i3c_xfers(dev, xfers, nxfers, mode); + if (!master->ops->priv_xfers) return -EOPNOTSUPP; =20 + if (mode !=3D I3C_SDR) + return -EINVAL; + return master->ops->priv_xfers(dev, xfers, nxfers); } =20 diff --git a/include/linux/i3c/device.h b/include/linux/i3c/device.h index 7f136de4b73ef839fb4a1837a87b1aebbddbfe93..7f7738041f3809e538816e94f90= b99e58eb806f9 100644 --- a/include/linux/i3c/device.h +++ b/include/linux/i3c/device.h @@ -39,20 +39,25 @@ enum i3c_error_code { }; =20 /** - * enum i3c_hdr_mode - HDR mode ids + * enum i3c_xfer_mode - I3C xfer mode ids * @I3C_HDR_DDR: DDR mode * @I3C_HDR_TSP: TSP mode * @I3C_HDR_TSL: TSL mode + * @I3C_SDR: SDR mode (NOT HDR mode) */ -enum i3c_hdr_mode { - I3C_HDR_DDR, - I3C_HDR_TSP, - I3C_HDR_TSL, +enum i3c_xfer_mode { + /* The below 3 value (I3C_HDR*) must match GETCAP1 Byte bit position */ + I3C_HDR_DDR =3D 0, + I3C_HDR_TSP =3D 1, + I3C_HDR_TSL =3D 2, + /* Use for default SDR transfer mode */ + I3C_SDR =3D 0x31, }; =20 /** - * struct i3c_priv_xfer - I3C SDR private transfer + * struct i3c_xfer - I3C data transfer * @rnw: encodes the transfer direction. true for a read, false for a write + * @cmd: Read/Write command in HDR mode, read: 0x80 - 0xff, write: 0x00 - = 0x7f * @len: transfer length in bytes of the transfer * @actual_len: actual length in bytes are transferred by the controller * @data: input/output buffer @@ -60,8 +65,11 @@ enum i3c_hdr_mode { * @data.out: output buffer. Must point to a DMA-able buffer * @err: I3C error code */ -struct i3c_priv_xfer { - u8 rnw; +struct i3c_xfer { + union { + u8 rnw; + u8 cmd; + }; u16 len; u16 actual_len; union { @@ -71,6 +79,9 @@ struct i3c_priv_xfer { enum i3c_error_code err; }; =20 +/* keep back compatible */ +#define i3c_priv_xfer i3c_xfer + /** * enum i3c_dcr - I3C DCR values * @I3C_DCR_GENERIC_DEVICE: generic I3C device @@ -297,9 +308,15 @@ static __always_inline void i3c_i2c_driver_unregister(= struct i3c_driver *i3cdrv, i3c_i2c_driver_unregister, \ __i2cdrv) =20 -int i3c_device_do_priv_xfers(struct i3c_device *dev, - struct i3c_priv_xfer *xfers, - int nxfers); +int i3c_device_do_xfers(struct i3c_device *dev, struct i3c_xfer *xfers, + int nxfers, enum i3c_xfer_mode mode); + +static inline int i3c_device_do_priv_xfers(struct i3c_device *dev, + struct i3c_priv_xfer *xfers, + int nxfers) +{ + return i3c_device_do_xfers(dev, xfers, nxfers, I3C_SDR); +} =20 int i3c_device_do_setdasa(struct i3c_device *dev); =20 @@ -341,5 +358,6 @@ int i3c_device_request_ibi(struct i3c_device *dev, void i3c_device_free_ibi(struct i3c_device *dev); int i3c_device_enable_ibi(struct i3c_device *dev); int i3c_device_disable_ibi(struct i3c_device *dev); +u32 i3c_device_get_supported_xfer_mode(struct i3c_device *dev); =20 #endif /* I3C_DEV_H */ diff --git a/include/linux/i3c/master.h b/include/linux/i3c/master.h index c52a82dd79a63436c1de6a01c11df9e295c1660e..51c6654ac0f8209fd9b0e386f34= a0add9fa87d15 100644 --- a/include/linux/i3c/master.h +++ b/include/linux/i3c/master.h @@ -474,9 +474,13 @@ struct i3c_master_controller_ops { const struct i3c_ccc_cmd *cmd); int (*send_ccc_cmd)(struct i3c_master_controller *master, struct i3c_ccc_cmd *cmd); + /* Depreciated, please use i3c_xfers() */ int (*priv_xfers)(struct i3c_dev_desc *dev, struct i3c_priv_xfer *xfers, int nxfers); + int (*i3c_xfers)(struct i3c_dev_desc *dev, + struct i3c_xfer *xfers, + int nxfers, enum i3c_xfer_mode mode); int (*attach_i2c_dev)(struct i2c_dev_desc *dev); void (*detach_i2c_dev)(struct i2c_dev_desc *dev); int (*i2c_xfers)(struct i2c_dev_desc *dev, --=20 2.34.1 From nobody Sun Feb 8 21:32:47 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011008.outbound.protection.outlook.com [52.101.65.8]) (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 843CF3328E5; Tue, 28 Oct 2025 14:49:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.8 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761662966; cv=fail; b=ICWc7WEbKl6osXW1sg7QLkNgQRP4SgE0033meEG7WB4sd8kfD7jQWo0un4AQiRZZ/M80r5itP6e7/StbZ3RStpviMTuXqCaDAfLKmlBp3w5glVmWAdLOrWs6pVzGwAECmKnyQWTH48L6IAczQJ1zRN8hEr/uEGDDC6t31Mqh7MM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761662966; c=relaxed/simple; bh=5vasvYWn6j296foC0KD1do8HEXNE6j61yOhJlnouXFY=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=er3J2IBa//huCyoEDlzhgfdhiD8kMM3Q0sRiehPG1mGuc2hw3bzU2+rAEMwxjSG2M94CJHDdxopdl0QCCAYa4oJ7uEnyOVPievTq/cpKAz45UVQk36WqfZkiiOalgznsfT5hW+JIPhkreenAaFrR3c16KC5mGvjIUiLigtW35DY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=GkFFf4Of; arc=fail smtp.client-ip=52.101.65.8 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="GkFFf4Of" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EUXx4/K8jaisqa+56eiPtNKzB/sCY2V/0ZCFSw8KxiCdxBR53t4JwCP9OueYmRPSyR0L0c4RDWQSTeZUXIvmkcY8Eds4/+r/+9rIPLAj8XhogMKeva4FF78qpTLapcB7n4NAIoAz2gJ3r2w+By02FoWtEG+rPcHOVOzlqU80XONZkxShadk5QI9q4F3wCwJJqiKLpbl32Ko4lim8d48oBe/OMWdeAvYdCV5SgwCW+4MLvhsLNMpUZNj/TSirIHmm5YM3dWVZtWwzfylaaDU2to3X1B7A19XHkOysqzbCwwlQnqjylIdOz+OQwOn2v80ipYHKetywy0MSITRZ8DcyEQ== 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=8XbezMuE/5oIEAd1wLivMnBG/K28HshgVytpSww3aDU=; b=XVOfLNcpT539xoPc3wDVmEHYtbj2YLU7j7VimtLNJWci2oLnrnOD9rc0ib5NFk+lgb3DAlU8FGLnI/mFBxe6FOGfYHNPCEEMP67wGFNvPrQE5t2alhPLtMKBOQKwmYjKUF+jrU7OGjs+sI3Uq/g3pHu8/LOdC6KFpyqF1VVFlNnmgeLrRwPLRr7xjACmaEILuz5PVAq3MRvtKql2w3+0jlPqxKXpI+o2/4mEZasNc3I/yechNsl5OcllEyprW6MMjMEOY8KvWxRuMmkyJgkHfeLifql2cIgtK6P8hxRZuBx+xPOaU3XhdG3HbWfY7/ylt78WDp9pqXHijxYnJ03HJg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8XbezMuE/5oIEAd1wLivMnBG/K28HshgVytpSww3aDU=; b=GkFFf4Of26y9SCEQk6AR72+iEahjrVmxJ9TE6zUlJwZmrjOnbR3wrLJIexRwABS6VHWaMR0WZO59oGRzFn2lH1c4alXuLmfnB1rJK+/dynBqMV/a2+5Fn75+F6bybemdbTXqUVlmBssAY7wqF5Asv5hLasAhFPOW/HcKxuffZRgGAT8s5rCaZQaO8YtFfbLxLf6se6pZGwWKsUB5TZCptEb9U0a+QgNxlF8TAIloMoxCPEIU38V4lAftaqFPPQWH3hD4gBZZB4VSyFSY+eQKS/wpaRcvqIJC9uDBVoOSqaVvz5ej1+Ka8F4xe9sXgmxN8yzMWp0PQwwNKl/2Jz0VRw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) by VI0PR04MB10613.eurprd04.prod.outlook.com (2603:10a6:800:25f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Tue, 28 Oct 2025 14:49:23 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9275.011; Tue, 28 Oct 2025 14:49:23 +0000 From: Frank Li Date: Tue, 28 Oct 2025 10:48:58 -0400 Subject: [PATCH v8 2/6] i3c: Switch to use new i3c_xfer from i3c_priv_xfer Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251028-i3c_ddr-v8-2-795ded2db8c2@nxp.com> References: <20251028-i3c_ddr-v8-0-795ded2db8c2@nxp.com> In-Reply-To: <20251028-i3c_ddr-v8-0-795ded2db8c2@nxp.com> To: Alexandre Belloni , Miquel Raynal , Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-iio@vger.kernel.org, joshua.yeong@starfivetech.com, devicetree@vger.kernel.org, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1761662950; l=1345; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=5vasvYWn6j296foC0KD1do8HEXNE6j61yOhJlnouXFY=; b=6sJzsRIU3EE7+5jCtDy80neafNsIHquWsn5bLI3GCsvaRkuxcFQnNVo6kk8oDIRsLxasS6Sem 60tq3yujRkHAILmXBgSJjkQNE6FGG8UfHgwHGCdzzaqe58BhGKMQIK3 X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BYAPR02CA0040.namprd02.prod.outlook.com (2603:10b6:a03:54::17) To PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXSPRMB0053:EE_|VI0PR04MB10613:EE_ X-MS-Office365-Filtering-Correlation-Id: 22b54418-0816-4b1e-3f99-08de16312f06 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|52116014|376014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?N0d5bkxGb1pQSTdWYk9pWVpHTEs0dEp3Sk55SGNGMy9WWjB3QysvdWk1ZlRu?= =?utf-8?B?UUExek4xdGxlZmUzbjdjMkUvQnFZd3dUVXNQdWhDSW81N2lpV093ZDhFQ283?= =?utf-8?B?NXl2dm02b1lnazVrNzlieXdqcks3Z3pSaHRTMm1jaW1wTXlmcWQvL3JCT0lR?= =?utf-8?B?TDNndlpTcEhwdEVlYUlaV1AwT0ZZMTVmeVRQSC93aFdQQVZKbmtxNHM5NGVZ?= =?utf-8?B?RlY4dHlUN3NLWWN0ZUlYVnRHTGc4WjFvd0N4NGloT2w4bUtJTDQydEY1NFcx?= =?utf-8?B?NDFkQmtRV0pGVnB6MmpFQTJlOHl5NS82RFRKaVNNc3UxQW1HS2FxM2J5UWly?= =?utf-8?B?MjRMSjBDd2xtc2NHbEovN3pvOUYxWFZrNGhNM3B0TDB2U3ZZcWMzdUNCcDh5?= =?utf-8?B?dkxKcThTMFp0Z2lkdW8xOVNtTGVmUjlkTFBXTk0zTDFXNEM2OW8yQWZPcFpj?= =?utf-8?B?WENDd2Jrcm9zbHgxRmROQm43UmNnRzRndjV1L0V0NmwxbUNmZ08xSXFPVDdv?= =?utf-8?B?aDRLRHVpRGFSVGJLemJ3Tm5xZDAyUzBYM0QyUUhXbzEyeG5RSHB2SHg4a1g3?= =?utf-8?B?YkQ3bUlxL0tuQW1hNzJiZ2x1V29nSldPRzFEaE5kK0E1Vy92am5tc1YwVDZG?= =?utf-8?B?Q3l3ejBUcExBelY1WnRUYklBTXFMNXg4ZW5PbjFQcW8xdDYyZnpZTU1vcUtj?= =?utf-8?B?d0dFYlBxRlRjUEoyN3NoSFFSRTFvbUNCM2NBVURLTHBUQTFkOXh5WGdweXIx?= =?utf-8?B?L1ZHdDd2cTF2bUh6T0l5V2tVWVNDbUFabmtZQ3ltZ1RqTGVsQTU4djV3blRi?= =?utf-8?B?UkFXQXF4dE9JZERGbStCdjFPNlJLenErTjFOM1NKSFFTYk41NkxFS29EVEFq?= =?utf-8?B?ZDFPdWlWOWcxZ0tIRldkdlVQNDVvUWV4SmJJMUExa0pSWngxSmhhL3JBNmxx?= =?utf-8?B?bklDYjBTcHRRaUxCcWZ4b3dQQXhHVXQveEpEU3dKVWdOeEFvNGVDWFFaM2J0?= =?utf-8?B?MXMwK2djT3g2Tm5ZYXVjS1EvQ0JJRC81TXhoRGNxUzViU2xDRmtnQ0VyZjkz?= =?utf-8?B?S2dOYmZPSFZsZHh5amdmYStEMnRVYXBUOUxvbkFXUVpVbXU3L1pGSDA4K3Zh?= =?utf-8?B?b1BKWjlzSmNRV2NYSmxJc1p3aTMzQnZKUFVXUHBFdXA1WDB5b2YxemhGVWpt?= =?utf-8?B?bjZrS0F0M2xsUjNGYjdBN3lZbTM1WjQ5c2hhbjBWSytPQUE3cU1KdlhySGxT?= =?utf-8?B?WjUzQzNGb3Jyak9zUk8zVG80WkxZL0xoNHlEMXVZcWNuc04valBnVkpndTdZ?= =?utf-8?B?OTNGRE9XMkxicGtuOWNMMjdRZWJIL1ZrYkNhWkhUMEYvdERFNEdrNzN6OVVr?= =?utf-8?B?bTBkYStBQndxVkcvTUhlQnJOeG5Mb1hlZFNEeEhjUXdoaDNGT3hHSUFPTEYw?= =?utf-8?B?cERoem9wMUdMQjZ0bEVORi9mL0JMZVhxbnpvdmRhei9vNUlRY0lDNzVKbncr?= =?utf-8?B?TW15UWZzRmQ4a2Vzc1FySWRLKzlpQndzUi9HMUZydE9ITUZjenpxUEk4WXI1?= =?utf-8?B?NHhYdXloYzZrOTNKQWthbTVrZlpEUjF0ZmNzR2hoMGhjYTc1UEg0SklyU2kz?= =?utf-8?B?bXJCUFlReGFYN2hvWENhUkZ5emVyYVROYU40Sm15aTR3MHhTQW1PMkhxTi8z?= =?utf-8?B?ZXEvYmhnWlY0N1ZjL2VPQWhzbmFjQno3R3A4M0gyN1FZdDFtYjFTeUpnV0ZJ?= =?utf-8?B?TFJ4bXF4R0Rod0JFQ3gwNk8vdXVIWlBZaWVoY1lrNDRhejVpSWtHYVVhd044?= =?utf-8?B?dzNtZmVQbnpaQUx2ZFFXUTQrRnFqcmQ2d1dtMkllS3hLNEE4K0ZYMjVuTU1S?= =?utf-8?B?QnE5bzJ2aFdUMENMKzRyT29xUU9nRm92ZHRVMzlNNk1LZ3d0QkllQ0tzSXFT?= =?utf-8?B?MXhzR0I4TDdBTkJROUtaWFRhMGJYdEsrTkNpYW9WVkc5YlpwQ1NDajZBZWhJ?= =?utf-8?B?ZENyV1VDL1BkU0R4T3FTYUNpTkc4NVAvQW91NWFxWlhLNTlaZVZLc0hBamtJ?= =?utf-8?Q?+uQHYc?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(52116014)(376014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aHNFN3BPZHdKdGxGMlVIaS9nM1NLRzNIMVU5NmlBZlhqQnVSWWNYWk1nQ0ZH?= =?utf-8?B?UWx1RGYxY3cwNVpwcEVpamJNL2FGbDZOM1pjeHdUWjBwWXBVN1p1N3VmNXV4?= =?utf-8?B?dVpzdnZZdTE5Vk9QSHU0YmxYRnZ6NHBkM0p2aUxqUklNYXpoeHBuVjM5dWVG?= =?utf-8?B?azQvd0poY1AwaS9Ba0Y4S0h1a0tTRTB0UlpmdlE4U0F5U2lUWWVXVEtpUitu?= =?utf-8?B?SWJaTC92WjhzL3RkRnFzWmlMQVNpem40QWJUOFVIaU4wcmtib2E5dlMwWHh0?= =?utf-8?B?Zzd2SjcrOWJvaWhtSmJuN241dytCUU9WcEhGWnRoUVRnVEVFOXdTM1pSYXZw?= =?utf-8?B?aS9ldDZQQUdZdmR5WVQzSEk2NTNCUHJiSzM4WllLT2l4bXJoTXFMY2tpc25Q?= =?utf-8?B?M3kveUFrQkZ3ZUxRM2syU0pObjV2ZVplY2VaY2NWbm9ZRnYxZGtlZkh4Rlpy?= =?utf-8?B?TDd5Nm10bjVNSlBITkxuRkNoeUFqd0JCZGsyVHlmSVFHenlRM2UrdU12MDdV?= =?utf-8?B?dWRGeVlXVFFCbCtVTzFqc1RoOXR4VStSdm9sdHRQY3BYTVRnVHFVZCtSMkxF?= =?utf-8?B?SzV1SEp6bTM3RHdsZ1AxMHRKZURCRG9CRzV6aUI4VmxZNkNLazZaVyt4OGZK?= =?utf-8?B?YzVNUzBrR0s0RERBNnBqa2pWajRkT2FwdHhiMkpzQ3FGbHVkc3d6NU51MkNt?= =?utf-8?B?Nzk1d0ZtMjVORWtmVWthcWNDU1NsVENsSFFISm13QWc0RFZ6VU8xUEN6OUFi?= =?utf-8?B?aGo1YnRBYU1SRzRCempaNTBId3FXV2lYWno4UmdqS0ErVnU1Ynh4Q2xvdWR6?= =?utf-8?B?aTFmSlRIZXJEOWJ4cDAwbVkvQlQ0blAzRjczVjVSSEtYK2RvY2NlaGQveGhh?= =?utf-8?B?OGtia0l2UVl2MWJEVU1TVjZXbWJpYXR2eTBlODZUa1AyWm5OMVo4QlJTTk13?= =?utf-8?B?UEVpK0lZeUEyYVFpQ1RRb2NMUHdhUXJWTGhtRVk4VVJqeUZWWGpPZmFHQmJU?= =?utf-8?B?Uy9IVXNieHZJY3Nua3pJak1ydGhFaThJMW4ra2JiWkNoTWg0VnBSZUdNMElh?= =?utf-8?B?d1JPYVJ5VDV2TlYrclFUSzRqUlYwT2RtaER4SkFNSnlhNWZkRkcxeUNVbU41?= =?utf-8?B?Q3Q0dE1taC9hZG1LbzI2Z1l0ZlJoczQvSlVuKzY2TUNFZWFjWVF6Y2ZPTE5a?= =?utf-8?B?c3IwaC9zLzAxRk5UYmhybkxlams3V3c2STZ6TVZ4cTZoSEx0MzFzUDhFMWt1?= =?utf-8?B?VVd4eXZoSnpHT1pkVDZSRVBlaWgwVXNMSWJHYVdrL3dzTmhFUURyRzNTdi9j?= =?utf-8?B?d1pBM1N1L1diWW1WSmVxNFladER1Q3hZaXQvK1ArRU5EYWNBcUtsS3ZlVzMy?= =?utf-8?B?ZUEwRjVHSXdpQnhpeWpqRUhxTUhja3F4TDJjWVdlVHpvelJGYi8rZWJ1UEVF?= =?utf-8?B?cjh2cktObTNFY0d4ckNZdGdCVmhHWXZIQ0dDMzVlenhENi9JbzI2SmN0T3Zn?= =?utf-8?B?UnFxbndHdGx2cHlGR1VjZGZqRjRlMUtKek5oQStwNGRTWURRNDVRMXduaHV5?= =?utf-8?B?cG1QcWtrM3lsWStPaHlBSkYxK1lveDhId0RraG1RQWZTNHc3Zmo0emV2QWxP?= =?utf-8?B?WnA1UGczWmNSYjhTSXhsYXpTWnhnVU11MmcxSGo5bjhPOWtySTNaYlVHeEMz?= =?utf-8?B?Q0lncWVQM2NIRlJKMS9ZRDNEWGVyU0U1UmkwWFU1VlZXYnh5a0EzUU0xNXFT?= =?utf-8?B?ZVFIcUx2c2VxdmdxRmhSVHdjZGxJNkJTRmlERlVJS3hwUDBwclVUYWtldWFy?= =?utf-8?B?UnJBMWZINXN1RmdvREJLeXhIR0dVUVBYOVNueitnRnd6U2FtTitkNjIwbXVu?= =?utf-8?B?YnVMbWlPWFJ6RnhvaVZJYlR3U2pONU90bFBOWlNYNGFmemVTVmVaTHRYc0Ur?= =?utf-8?B?RldWMzBPTmNkNlp0blR1dXBYYXliSDJJM0lqalRoMWw4ZitQRDJ3VjJ5ckw4?= =?utf-8?B?Y0dEMDFORFNpbWY4T2hBT2gvSDRhYWUyZEIzYjFic2dteWNwVEwyYUxhVjM2?= =?utf-8?B?Njg4T2hIQUVPQWJ0Qy82MzFKT29yQUMwVGhHaDIxRlhadnRvNFdQQ1U3V3ha?= =?utf-8?Q?YXugUzNXKMp/DcDva3FVWjrou?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 22b54418-0816-4b1e-3f99-08de16312f06 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2025 14:49:23.2808 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Kw+dArvzKbinFU6eK2Dfq2ZMCbH1vcJhe/xuUs1gm1mC0Zn4BT3BbR3WvOqCL7aPSjsQCMW0qZiv+h56Vus9Aw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB10613 Switch to use i3c_xfer instead of i3c_priv_xfer because framework update to support HDR mode. i3c_priv_xfer is now an alias of i3c_xfer. Signed-off-by: Frank Li --- change in v8 - new patch --- include/linux/i3c/device.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/linux/i3c/device.h b/include/linux/i3c/device.h index 7f7738041f3809e538816e94f90b99e58eb806f9..ae0662d9d77eb3fa0c976de1803= e9c2ff9547451 100644 --- a/include/linux/i3c/device.h +++ b/include/linux/i3c/device.h @@ -27,7 +27,7 @@ * These are the standard error codes as defined by the I3C specification. * When -EIO is returned by the i3c_device_do_priv_xfers() or * i3c_device_send_hdr_cmds() one can check the error code in - * &struct_i3c_priv_xfer.err or &struct i3c_hdr_cmd.err to get a better id= ea of + * &struct_i3c_xfer.err or &struct i3c_hdr_cmd.err to get a better idea of * what went wrong. * */ @@ -312,7 +312,7 @@ int i3c_device_do_xfers(struct i3c_device *dev, struct = i3c_xfer *xfers, int nxfers, enum i3c_xfer_mode mode); =20 static inline int i3c_device_do_priv_xfers(struct i3c_device *dev, - struct i3c_priv_xfer *xfers, + struct i3c_xfer *xfers, int nxfers) { return i3c_device_do_xfers(dev, xfers, nxfers, I3C_SDR); --=20 2.34.1 From nobody Sun Feb 8 21:32:47 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013007.outbound.protection.outlook.com [52.101.83.7]) (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 8C2002550CC; Tue, 28 Oct 2025 14:49:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.7 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761662974; cv=fail; b=I8upyH9dwIHxuMTeZ7261dGTvss8mtBEm6GBOc3ZvwV40kX1mzFm9dXDYokXzJ22+Fc39oWjJcCMeXdquAFCKHzgt0F9ojNNPAv676MpZfQ/9f5LSgGNwzicahBhbBr/SOanv0PZJMZFVSxi93xbpNwyhG2t7KvDNEFI0CIc0Rk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761662974; c=relaxed/simple; bh=HH693NU8kzd+Iv3hWINyPBycptPq4xE1Q1XbUVwF0WQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=IPGlNIqIOlHdz/VE04Y1LbVBHS0QijxErpnCSTTW5r9jDr2L4aDzQANaHnPqQSy5TdkauTpuzYd7QtKtifcB169svQdyeHFhcaIpMAVYxIZwRSEK8lGrmOiIu34ReAjP0ESEqHC8kN04JFiEG89iNOSMhSm3Cysm23/AYXSvkOM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=leTCwtAk; arc=fail smtp.client-ip=52.101.83.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="leTCwtAk" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=S1s4WdaM92AcOpdX0o5O7OCvUSPeLKOqv8Sq8r8JV4DmTi5X74OLKYMpdK7zcO46HPNv7f6KSBeXK8uoa54V9bVF9bPUISZ1ijgH6J1iP9qzlW2odr//pH53bmyQyrmkg29ZYHQ+ICM3tz3gdQkqF83iQjYfNTRqZt0lLOKz83fN8N0SKmtToBDYolajPduyX+3MXd9PU809oih//upc2vXYbKndOKNsNuCE7BGmzQH7P3HL4fH0dtLqufz4gcqOglhExTeHGEqL/CXHOouOv81qvIgNwSGkFOt6nH/VpImIOM6lIbbHG2tAZpa6Tr/3F2La5OBNl1LwjG6DgrSK8w== 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=AUJtg6/074SxlRYEqw9eCoiPjPvZ4vpTSDaRi9s0Zxc=; b=tm2Hkf+54i2ytcfkxmwwJwxnM3Zf0h4zENBdAikBrOoSTVnpBTE57gJf/Lc/D2WqiJr5YNWR8WIIdoVQ6GN9Dzyhkcvx1UkpoEbtjfh76MTkWPmKDyWOUQxLWPTgd5lxOu+iEZt0RGTfrA5UfkzBEX5ZFLpob7Jg9RuqoQ2Z9BL20sN7JjE8T6MwjAMbuBQJlTHOClbeWjN84775ZmFcEoie/KfutSN7LH8AxaDLSjcVbvNPnG5zMiPELi4ur+L2MA9Ki7cHMewLNWsxEXpkEtMZWVytazsMuEvniqsRtwKQKrNO57x8k0GZPbonAlTgvcN3hqKkNWmqJI9/9v+h1g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AUJtg6/074SxlRYEqw9eCoiPjPvZ4vpTSDaRi9s0Zxc=; b=leTCwtAk+H4oqIJcK6wO5eqjnvQk0+ShnprxLL/tWeQbRLH1jxpgRbAiDM4xnVA0d+mqO8wszu9aYSvFt2wYCAHZ0bJ+Wib6ifUd8y65dOAADyEcb9EScdeaA3vEGwZmu0ao0Nr/bgo1UHfE/i/m6jfG+2wdha0zVVgItUKC0FRnVDWIZXxdSxPG9KZ/7A3huKkqTaF7ab8I0T6PKj3gKd6XcdSRzIRl1FH5uxQ6uSNIUMxpPlxODkM6Q+7rCDFzOqUu/Qd93bMYuMrczTJyvsNYNe0iG8McYVLedPflVssNP/nNJ6jxRFfkGP20YGlzoxo7+WnjHf/+BD7F7R1wrg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) by VI0PR04MB10613.eurprd04.prod.outlook.com (2603:10a6:800:25f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Tue, 28 Oct 2025 14:49:27 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9275.011; Tue, 28 Oct 2025 14:49:27 +0000 From: Frank Li Date: Tue, 28 Oct 2025 10:48:59 -0400 Subject: [PATCH v8 3/6] i3c: master: svc: Replace bool rnw with union for HDR support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251028-i3c_ddr-v8-3-795ded2db8c2@nxp.com> References: <20251028-i3c_ddr-v8-0-795ded2db8c2@nxp.com> In-Reply-To: <20251028-i3c_ddr-v8-0-795ded2db8c2@nxp.com> To: Alexandre Belloni , Miquel Raynal , Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-iio@vger.kernel.org, joshua.yeong@starfivetech.com, devicetree@vger.kernel.org, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1761662950; l=3017; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=HH693NU8kzd+Iv3hWINyPBycptPq4xE1Q1XbUVwF0WQ=; b=LJw9RKwMIVKodj92/bBhNlLwsst/bhdZ+2oBpl0ICfUDGLaXJxCqTPxKTN+tmIZMyN6x79is6 BXZcdnZ98teAszvN6YcF1m28DlaYNdcwcRG7qZq6RtwARQ1jE4oVcP9 X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BYAPR02CA0040.namprd02.prod.outlook.com (2603:10b6:a03:54::17) To PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXSPRMB0053:EE_|VI0PR04MB10613:EE_ X-MS-Office365-Filtering-Correlation-Id: b1eaa38e-8ca9-4ed2-0209-08de1631318a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|52116014|376014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?SjRmNEEvc0U2VjkxWEVDTEgxelV1RDIyYy9zUU94K0ZFd3UyYnpINFNPWTlN?= =?utf-8?B?eXNzdkV4RXN2WkNZZVBlbE5kTWVLYXhCaTZBSkJZL2tBTUUwVFpvRUNQK3pV?= =?utf-8?B?WVc4RUZnSzdmY2Vsd1FYaTVVV0g4cUl6aVFtTWNaY3FPUzExSmczUW9Ya1Z3?= =?utf-8?B?eHZxMjNGRStHNWRDM2RRTFJzVTlDYVJFa3dzQk8yWHN0WFF3eTRYSGlPVlNt?= =?utf-8?B?QnVtRzhtL0Q5WTZ2bGlMQ1JKNVNIT25GellHT2hlZTRvZFlid1BGSldEU1Nx?= =?utf-8?B?dXZRNjRublBzeVdoMmhPL05OU2VDeUxJT21JbG9XcUZ1T0pTbmlFdG9yWktU?= =?utf-8?B?dE1hdWVJYWtRQWlqcG1uQ1FFNlNYS1RmVWRWdlNTYmNQTzhYeWYwc0FjWEhD?= =?utf-8?B?bnJnRC9TSUFTOVNHc3EwVnI4TEprc2ZGS1oyRGtyeDJLcHlaUEdNcVN6UlJM?= =?utf-8?B?anQ4MFJDMGhiTXAwSXNaYkZzanRyY0pqcEo0VVowYUprME9wQjAyR0k5aElq?= =?utf-8?B?VHFoaEt0aXhTc0RMcFFtM0ZRUmFIUE1aSDhQcjlqd0Z5Vk1iODlwNktBU3Mv?= =?utf-8?B?cWtDSU5qRm5QQmhPS0c1OFBIMVg0ZHFxVktZbXJLQkFhT0FGOHpoaFBRbDNu?= =?utf-8?B?VllHRGRMNFlsTklJdWZwbjNJb2lMMXkvenFDK0FjcWtFTzBIOVJMNVF0WEt3?= =?utf-8?B?TXVFNnVTV0t5Uzk5YitwYVZRK2lFcXFORjVZNko5ZnA3TWpUaDhOZUdLZ1N2?= =?utf-8?B?RnNXTjhKNTlyY1d1Nkc2cDlLS2E3a1cxRHRVUDBTYmorUkdiZG9SYWZkU0R1?= =?utf-8?B?NjNYZlYwWHVWNmQzV0JjYWdvMU5pM0F1ZjVXSm81aTBFZkxhd1NsRXpRODlC?= =?utf-8?B?QitMbHAyZjhUSTJiQjArclkwcGx6K1lJQ1BVaDhkcEFUWlJiNDU1S2htdFlq?= =?utf-8?B?WEFVNUlXTW9qU3lITnFtNE1mVDBkNXgvVUFHM1VkTVdORHdDWmdkRHhFMXAx?= =?utf-8?B?L1NDWWI5TXFGaWRkQzE4WWsrYmF5aU0vMW1KMWZLN3R6N1dESmdYRWZ3ZE42?= =?utf-8?B?UnFiLzdOcUhibU5SRDJyVGc0SVZha2lMTFZXUy9QbUxxTmVCS1V0bjJQUEgv?= =?utf-8?B?U1RMQlVRNjZqZS8zbEhPRENsb0dBa0x6eTE1REZabzJGVUpVYThMTVpKVFJz?= =?utf-8?B?TllQcUZPbDNYd05SY296MVFlcmpaL01zeWt4ODdnckZ4dUQ1bjdjSUFoV0Rs?= =?utf-8?B?cVdjcTNDTFJYQW9iSkdiY3k2eGdVL1JScHZGQ3hHWldHblZEL25rVlVxMTZY?= =?utf-8?B?bjdKbnRGclFxWVNRSnhKZnNqcXVYTGZwTVgxRlVNaU1XRWd5NGRPZzNHaHhh?= =?utf-8?B?T1BmbEQzWTR2LzN4MGhPcjh0cmtNazNpNW4wQzVYMGxHSCtFRThQS1ZXU0sw?= =?utf-8?B?cjhwemxQdHhPdEFNRi9qaWVzVFY1WkVPWDdZTTVNLzZGM2Z2RWdBaEdPWjY2?= =?utf-8?B?ZHVKZ0hFVHdBblB1SGtjVDN5SVhBK0FEZkFyVjU0ZGwxOVlYdlNEbEtQWHFZ?= =?utf-8?B?d084V1E2bGl4VVN3eHZCdVJ0Q0t2TGpFTWlGNWFMeXhWMUIrWVdlVVNXR2hC?= =?utf-8?B?MUlWQXhEMzJMY0VqNjh6elFRQ3VkV09DbmQwUWNDaU5DNnFoWnBmanZJZ3pn?= =?utf-8?B?ZkJ2Q04vdzVaRjZaWk9Qd095K3ViWkVWZjZtelpBOEc4RFp4NEhCb2JyVlB4?= =?utf-8?B?QUZhTFM3SU5VcU0yM2VuWHI1STZhVlUxZWdQeWZ5T09kRURCVTduVnpPYmZi?= =?utf-8?B?ZEk4NDJyQnpnTVh0UmliWVpwRFM3YlR2aGs2eDEwdmhZVFAzdFdCU0RXNUxD?= =?utf-8?B?S2R2YnBSc1YvWG5pdDMrUVNVbjBvYVlReG52OHNFMHZ3OHUxVnBsZEZQSm1S?= =?utf-8?B?WmxEM0JTWnp3aW42UHY3ZUM4Z2RNVFliZGh4c2VUMjBhTklLemRURmFLbzFZ?= =?utf-8?B?bXJzS2Rlc2liUXpVUnQvTXJNOWNKeDBuSjRjT2FXWC90MW5TQ0lYSWlnRTg2?= =?utf-8?Q?qs2jXz?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(52116014)(376014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZWNrK29Xa29qZUdWVDRzZEdWT3ZSc1FqeGlpcDJHbGw5NmpENGl0VFl6R3BK?= =?utf-8?B?RDBPakhJYlR4azJlQXkzUE5Gd3FYZWNDalBhOTMxbG5QL0hienpTSjRsR3lX?= =?utf-8?B?SE93QWJnangwQlpIcWFoWHBDVTJ2RG5SRG9qWG05UG5oZCtaUDNtWHBiNkZ3?= =?utf-8?B?bGQ5cEJKV3cyK2xadHYrL2o0Mm91czhYN3dZcWFnSENOWVIxUmRaenltNFhU?= =?utf-8?B?Z1lvY3R5NXg5WXRZMXllZ05CM3U2dVRJbnpXOUZGeW45RnZDbVdLam9PYU1l?= =?utf-8?B?ZWI4NHVnM3EyNEFWT2dKdjFGSlhpUlV5aHNFdFk3ejNoM3VKQURzQncxbllO?= =?utf-8?B?WkQzS0NwREkrVlQ1U0RkM3lqaWxKNTVOM3VWRVgxRGx2WWZURmV2S0FVRGdU?= =?utf-8?B?UDZleXBVVkRMUHQwdG9CaEhVQ29XWjY3N2xNdFlPdXRqb1VyYzlxelY2d3ZS?= =?utf-8?B?MWlYbFp4RUFwK1VKaUVqTEZmdTZGYm56RWVvbXRWSVh0eGZpRS9GY2lmUW1M?= =?utf-8?B?N2tiSjRSVTMrUUdIck93WENTTmI4citxQ2tZNTV4aktZazgvdnNLaEhmQU0v?= =?utf-8?B?aHROQmVLUldIRkdrSS9WbTJjMFREbEJJT2oyNjZoTnRwQWhycm1JZW82VTd6?= =?utf-8?B?VXU1amhiam1NYWIySTVnMGYzdG83UzNkZzlEcGxGUWRaUy8rUkhuNVFqL29m?= =?utf-8?B?cjRIQmF6S3dvVnlTWnRYcmU3MVY2RFllZC8yVmhPVXNnT0g1NHQxZHBvZzNz?= =?utf-8?B?VGt1djBuRlNoa0txeGx6aXRyaTNHdko3dVhKTkdTSFk5STgxVllrWnJVcUMy?= =?utf-8?B?QUJjcXh6VW5ha3JlR3M1a2hMbTMvMTZHVXRIL0FRdnFiNkJVZHpKRXR1am9L?= =?utf-8?B?MzRUN0lvdjFmQi9ROUEvQmZMRUNHdG04RzJNV1BZcHhwa3hISFMwaERpRlhH?= =?utf-8?B?U0NnRTNhQW1wQm1TbDVOL3FBUkpnOVZpUVI3WHlLc3FpWUZJVUdaSWw3dTcw?= =?utf-8?B?Tk9TdnlaZUdqMGlpK3ZEcVA3SkNKMTlIZWZmVDJzelJpQjF1U0RZd2U2UHV0?= =?utf-8?B?QXBHb2crdlFpaG5QSnYwMGQvQTdrWCtvR0tIV0xHaldOY0JBOHdYNDZnc1hY?= =?utf-8?B?ZDhnTE1FWC90TGxKdUVHc0gzUzNMUCtFeHpMWC85VEhuczFNK2FGR2ZPQ0Jm?= =?utf-8?B?LzBxbzdmMGFYZ1MyMk5mdW9GZ3o4N3l0Rkl3TTlJZ0NlMHRpUlFxZmlwZ2I3?= =?utf-8?B?N0xFaTByZWNQYjY0NWV5RWIyQjdwUlFCdW13N0dheFo3QWdhbS80MHpMOXAr?= =?utf-8?B?THJrZS9QZEFkS1V1UWkrajlUL3NnUjdicVlVR09BNGUxcTR1eHArVGpvNWVG?= =?utf-8?B?TzVTWlRzZDZpT0g1TE1tSUo4NmhEUnBvWEhSbjZpRXgrcm43UTFVY1BuRjdL?= =?utf-8?B?ano4cEhEQ3puU3VSN1NuaTAvWUk4R0pVWm84MlVyclpFdjdPRUY2Y1pMUlp4?= =?utf-8?B?a1J0R3lMZjV3Q1Q0UkhrUlJuYjJ0NnJxUlNkOExYVmg0cVB5LzVyNllBQXA4?= =?utf-8?B?WXZiT1g2bytCQXRXcWg1SG5UYmxTd1kveWd3UWsyTUFvZnFiVEVIS1lYMGIz?= =?utf-8?B?LzFMT3BkeVVqemRzVXZTNlNXSWg4S1RTSkV4S3pvckxJVXErdXAzSmU5KzQ4?= =?utf-8?B?TzFTVFJLUXpvNUhBWXVuZC9sY1A5L0xlWWROZEcySG51dVcyUWthUzV6dDlv?= =?utf-8?B?Uk1LWWNNZ2I5Qyt3OE82b1AxektLZVNMeC9LVlRHQWs5aEowZ1IzeXFXcXBO?= =?utf-8?B?eGtOQVYxM3pMUmwrcklKL1EzRmIvcFExSmZDaDFIWkR5VTdsNkYvSCtMT1pl?= =?utf-8?B?TjBBdTIzK1IyUVhrSkYybUF3emlZTXlDZU14OE9PZTc3ZXpPU2JhVHo5SUJH?= =?utf-8?B?dXBTMzIveUVER2xyVFpqbjY3M1VXZy9PTFNEa1djRWhHWnJlbXp3ajNnOWt1?= =?utf-8?B?WTh0R2hFSjdUN1I3WmUxRUcvZEphaW10QWtvM3ZmWUlvMnlVSzJodVhsWWUy?= =?utf-8?B?cVhLU1lZbjRUM1hzVDEwZE9LRmY0d1NtanZORDY3QUptVDliZFNTaFFlZ3hh?= =?utf-8?Q?uUbH7PX9mPmUbB+ynMsAeTCNt?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b1eaa38e-8ca9-4ed2-0209-08de1631318a X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2025 14:49:27.4736 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Fd9nUkfEfPsrrdcehmqpMQnlKhF1UFzzoN6kLKdcrtukXB1mCDmmwvteNDyAG3z1dKvg+zcR+kHuL933fD5oVA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB10613 Replace the bool rnw field with a union in preparation for adding HDR support. HDR uses a cmd field instead of the rnw bit to indicate read or write direction. Add helper function svc_cmd_is_read() to check transfer direction. Add a local variable 'rnw' in svc_i3c_master_priv_xfers() to avoid repeatedly accessing xfers[i].rnw. No functional change. Signed-off-by: Frank Li --- change in v7 none --- drivers/i3c/master/svc-i3c-master.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i= 3c-master.c index 9641e66a4e5f2da3bd84b30fa741e5e19d87465d..7c516e05d0a1a118479ee3d8ea8= ae37ae19fea57 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -165,7 +165,11 @@ =20 struct svc_i3c_cmd { u8 addr; - bool rnw; + union { + bool rnw; + u8 cmd; + u32 rnw_cmd; + }; u8 *in; const void *out; unsigned int len; @@ -383,6 +387,11 @@ svc_i3c_master_dev_from_addr(struct svc_i3c_master *ma= ster, return master->descs[i]; } =20 +static bool svc_cmd_is_read(u32 rnw_cmd, u32 type) +{ + return rnw_cmd; +} + static void svc_i3c_master_emit_stop(struct svc_i3c_master *master) { writel(SVC_I3C_MCTRL_REQUEST_STOP, master->regs + SVC_I3C_MCTRL); @@ -1293,10 +1302,11 @@ static int svc_i3c_master_write(struct svc_i3c_mast= er *master, } =20 static int svc_i3c_master_xfer(struct svc_i3c_master *master, - bool rnw, unsigned int xfer_type, u8 addr, + u32 rnw_cmd, unsigned int xfer_type, u8 addr, u8 *in, const u8 *out, unsigned int xfer_len, unsigned int *actual_len, bool continued, bool repeat_start) { + bool rnw =3D svc_cmd_is_read(rnw_cmd, xfer_type); int retry =3D repeat_start ? 1 : 2; u32 reg; int ret; @@ -1484,7 +1494,7 @@ static void svc_i3c_master_start_xfer_locked(struct s= vc_i3c_master *master) for (i =3D 0; i < xfer->ncmds; i++) { struct svc_i3c_cmd *cmd =3D &xfer->cmds[i]; =20 - ret =3D svc_i3c_master_xfer(master, cmd->rnw, xfer->type, + ret =3D svc_i3c_master_xfer(master, cmd->rnw_cmd, xfer->type, cmd->addr, cmd->in, cmd->out, cmd->len, &cmd->actual_len, cmd->continued, i > 0); @@ -1677,14 +1687,15 @@ static int svc_i3c_master_priv_xfers(struct i3c_dev= _desc *dev, =20 for (i =3D 0; i < nxfers; i++) { struct svc_i3c_cmd *cmd =3D &xfer->cmds[i]; + bool rnw =3D xfers[i].rnw; =20 cmd->xfer =3D &xfers[i]; cmd->addr =3D master->addrs[data->index]; - cmd->rnw =3D xfers[i].rnw; - cmd->in =3D xfers[i].rnw ? xfers[i].data.in : NULL; - cmd->out =3D xfers[i].rnw ? NULL : xfers[i].data.out; + cmd->rnw =3D rnw; + cmd->in =3D rnw ? xfers[i].data.in : NULL; + cmd->out =3D rnw ? NULL : xfers[i].data.out; cmd->len =3D xfers[i].len; - cmd->actual_len =3D xfers[i].rnw ? xfers[i].len : 0; + cmd->actual_len =3D rnw ? xfers[i].len : 0; cmd->continued =3D (i + 1) < nxfers; } =20 --=20 2.34.1 From nobody Sun Feb 8 21:32:47 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013033.outbound.protection.outlook.com [40.107.162.33]) (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 5C97E305978; Tue, 28 Oct 2025 14:49:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761662979; cv=fail; b=rHE//l+syBzwMQc1nbOkgZ1SBg/+WV9P5EvfqC1lroZnC8/HuqF/pbT/Xm1Cy66QB5UkID4eBcca2rG2h4f8Vqh84H9phUpOJX9sQfrDOFxL0GYuwHY/EPCiRczlynREnrYjNh4CantrBfK+TdrzEFcBQnA7v+REfCtqtQnKD6Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761662979; c=relaxed/simple; bh=qTffBCdu8Mi22zZGCzL0uFmkILG2U6LbqIh7+jK2h4k=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=PAiXEbNAe8qqGRJ2F1k9O/DvR1VRl1DAkqnYahH+VyQE/23xMYjJUt3X+lE1wu9KAhZKz521W9OBsO1C1CAM6bXphzwrFjhJqNrdFtpuTfhhWouu6ho1mocIf8iKcEYAzW/Yfn0m8bxr+ZfdO10zckXHN7LCA5rqpd5yXaGP3Bc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=gehMMqVp; arc=fail smtp.client-ip=40.107.162.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="gehMMqVp" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Q6yY1e/pSefw/e5/JJzij/ZXCd2ehocSnotAyQooiki8iLxY6inmwFiaPxfYlkvHfN9NH808gckdsvwk4q7lcgZnuu0Kwi4n6ggp3fCOdoqeaoimYDcVwQpFJmt7v+iYnVWa1jxcd2uZITcdRaITZUJtgBV6LJ3ADzfrFJS9xZD5WhRYjMo537HmvWD+UZ1fINNQ6oHtnmzsuwdXq8FQ8i08PjT4n8WkfBbIlTpfv/4GGAzkBMSVIBl4MSdKbIcQzN/QutKacCEWCdNC4Nz/lb1/jYWU3XeJn3Cxg//ABrJ09E3nAGorwpmTnrjQWBVzRY8QLv3wh0dPEYvAifgHug== 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=mizs44l9kM6gfuXuMhguTCgPiOcdxwSSLKRegAmEMuw=; b=RTl7VEDqNRYAVPD6vAIqpMTC8M5qusnS9xQj3rNQDuMONg6p29bIBE0+xemNTNgJU+DD/40YdThsqBolNAkD9i1nTKeNdD7JteCOe5erRbgSRByfv36n/mbypBvMwZOqUFW3TAztpW718wp/QWMW3t2C3fOuiX9KMCwxc2fofFDfZtZwr2bRwjxDhLvuk6XjisqEWZLYwzoR32bQaO6H5V8zNgSXPTHyGoUOG91xCHJLSJKE868He6zzbCyr3m7qevUx0StMhWIMFGo8CWqV62hpcCG1cFRyfvY7lMRG+vVl9TaOrJOYNlFwuvzHkpd04KybPu7+E6fTbj0I9nTTVQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mizs44l9kM6gfuXuMhguTCgPiOcdxwSSLKRegAmEMuw=; b=gehMMqVpdud2vOSzX7L2RQQ0C/qOrcct+1w4T3aV6KLCjjepJA8mZ6RsLyg2q/4T2wP16Ts0fV7JoH9ZmfjefX544xZOgmMO2548fcFAYttVkE6Adq5yEZo/Zua8YHNQbnff3Qb4dpYd0MVOwS5B7Ba/K0myIXgOYmyiQ1y06EM6S2OjRN/VFZc9Vp3zIIuopIaQpXeRduF5BrzM4/zuoitRMXVRbqYz4rZgVIsDJAHvpC6I0SlV/7OeZJJrg5NbZ+8n16tGUdZxG9/20OpYS5SVZ0lzcl+r6LgUdJx+gMf355X8V3bjqGEJdvAwvyMsf4YgC2njTlO4QqnCYYyo1w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) by VI0PR04MB10613.eurprd04.prod.outlook.com (2603:10a6:800:25f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Tue, 28 Oct 2025 14:49:32 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9275.011; Tue, 28 Oct 2025 14:49:32 +0000 From: Frank Li Date: Tue, 28 Oct 2025 10:49:00 -0400 Subject: [PATCH v8 4/6] i3c: master: svc: Add basic HDR mode support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251028-i3c_ddr-v8-4-795ded2db8c2@nxp.com> References: <20251028-i3c_ddr-v8-0-795ded2db8c2@nxp.com> In-Reply-To: <20251028-i3c_ddr-v8-0-795ded2db8c2@nxp.com> To: Alexandre Belloni , Miquel Raynal , Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-iio@vger.kernel.org, joshua.yeong@starfivetech.com, devicetree@vger.kernel.org, Frank Li , Carlos Song X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1761662950; l=9137; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=qTffBCdu8Mi22zZGCzL0uFmkILG2U6LbqIh7+jK2h4k=; b=KdGZp28fhgf/oe73CUOt1KSXxfM9ukipisBZFmrIZD0Ss00Qs5OqudWnrdxITTdhzsHiZRpTo k71os30AWfBCUBz5U+QrlayipsMQ4+wahwPdvYOJ8eks9AOIfsvXJNG X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BYAPR02CA0040.namprd02.prod.outlook.com (2603:10b6:a03:54::17) To PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXSPRMB0053:EE_|VI0PR04MB10613:EE_ X-MS-Office365-Filtering-Correlation-Id: f627e597-4d65-463e-2502-08de16313431 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|52116014|376014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?ZnRhZEh6b2pUR25EUVJ0UnhyaWIvc3FDY05JWkFlVVZieEpKQ2NSN0wzbHBP?= =?utf-8?B?YW44Unc3MERsSnZ0N0loMTl1aEx4U3VFN2QrTnNPRnFUaXRKbHNqcFFNYXNQ?= =?utf-8?B?SkNheE5UdjVKYlhjVTJZTDczQmNFS1hISDhZOGNKNFVOL1ptUG16bCtNbTNi?= =?utf-8?B?L1JVcFZ6VHUrRlJkQXFIRUJZVlA3eTQ1ZEF5aFo4WWpJN2NMTElhNW9qMDdQ?= =?utf-8?B?Z1pRQnZJaVQ3K3diWHVMVndmdkdzUGtPeXVHeEtaS0VOcEFJVmNlRVZ2cnJI?= =?utf-8?B?N3JFdFMvQnFFRmdGL3Rmdjhnb3FsQjYxeVNoaDJjZzVCYXM4RVVvZlFIS0FK?= =?utf-8?B?S203eDdnTjVWWVYremxzV1JIdkVVWU91Rkk2eU50R2dsTVJFK2ZuTFJpa3ZU?= =?utf-8?B?aWdiUmtuTmtsNktINlNrQXhWTG9qQmZPWXVwRHBwSmNKTUtNZ3hvRmtjOGx0?= =?utf-8?B?WXhyUWxiMjBPZzhNaGxuaEdRMWlUdnVLK3llUnVMSUxFcXlYbCtXdU5VVy84?= =?utf-8?B?SlFxQU9McHArVHg2RllqQ2Q5Wkp6NEVOSTdSTkZhV3NYZVlPdlZsWURyWTZU?= =?utf-8?B?OWJWcXNMMmNya0QvdzFJWmI5YVBmKzNmZHlEWG1Gd092QklhRFdtbUJUdlJa?= =?utf-8?B?Q1hlRWdOYkp0bVNickhnUG4rV0RoaE1nQW5aajR5a3ZGN3IvOE0vK3g2cG1w?= =?utf-8?B?blVnQmxReVlXTmpoY1ZVSWZLTjUzVHV2UWswYVUxZHdyWmxnMUZGdFkyWkRu?= =?utf-8?B?dmJieERFMGtDcUZHN2UwUWtvM2oveC9YNDhPeUExck9FY08yNFNrYUpWaXow?= =?utf-8?B?ZEZXVHY2TllqbHNuUXREZE10V0gzbWpOQ2VGRGhwbFUwa015T1dSSmpDVm5s?= =?utf-8?B?aG94VHU4blpOOUZHUi9kYTdTN1RZL0RkRXF5ODFCUFZFMzJzN3NtbktmS042?= =?utf-8?B?WG9GLy9ieXV4TG9YUXpOV2UxQWhORDdCRmhrQnl4RjJGYjF6OGc5Vk5pTUxr?= =?utf-8?B?Zjd3eHJReGNiOVAvUjIzdk9Lc29tWU5wWEk5OCtRWjcyTStwK3FvS1hQdmR6?= =?utf-8?B?bXdVNHNzT1laNWZSeW13WTNmRVBzTUp1VWFlenFTUVRoc09HNXVGZkJ3SHNE?= =?utf-8?B?S1paOTNhOEd6UXhoV2ZtSkdIYndYbGphWXNpQnJEWm1kN0FwOW9kQVlnV2tK?= =?utf-8?B?Ym4wMWt6bnorVXhTRThRMEtDRU9sWlNodWZGQlNmN243OElaQk9UeFJQeStP?= =?utf-8?B?UDFNM2pPUUNMVlFwNm9mWUxnaElocUs3dDY5bXVBYnBjV1Arc1lQbHo0dmky?= =?utf-8?B?S0pUKytDSFVXWUwwdTI1ZkRNTVJnTXRSV0lVWlhaSjRIZDYxaXNPS2I2VDlM?= =?utf-8?B?ZkpmQUtNZzhvZ3NEajVxM0o0UnJKTU9XbXRXamRoOGcrd3U4alpSRlp6eU1p?= =?utf-8?B?UnZFdk5VdDh3NUtSZDdpZVlGN0JoYUFTR3h3VGt4eTAvamNzdG9zYnVqWlRl?= =?utf-8?B?ZHBZbG5pdkl6MkhuRVBHc3ZHSVNSd0RaMGJkMHltUkFhMkNGb08rUzIyWkwz?= =?utf-8?B?L3Ria3o5allpOUhRcXh2VTcxZTVjZTNOWndFZkphWE5lem5mRjdWS2MxUDNP?= =?utf-8?B?RWh3WjM4LzZ2SEVZN0NkdEc1S3BGbGdaYkxTdVFWSDNDQ2U4LzZxTlE0d0ZD?= =?utf-8?B?MWxhM3hUQmRsWktjTjZxZHl1Nk16dmNlRkwremUwajFmczA4Wm9tbUEzY213?= =?utf-8?B?dFZFcmdoblZiS1FlM2tsMTZ0VDVIN1NXOEk5OVl4VFBaVjFVNExFZll0WkRh?= =?utf-8?B?YkJ1cWNVWDhOMDVUWU1ZNlFJTFB3M2FlSVlQM0RkcVIrR3hiMk5qRFdtZkJm?= =?utf-8?B?NzEwcUdwOUtYOFhFSVdZMEtsUlZUUzNqTllieWFXM0tHZXozM0ZITlJoTkJy?= =?utf-8?B?TklHYnprQVNMbjY4NlZjT0Z2WEdpM2NQNjBQcHViZ0NhZGhSSHFVR09qbGR6?= =?utf-8?B?UVFuZjk0eDZWbjhZRnd0SWlFOWhwL3QvZmN2dDh4TXhpQ1JRZWpJUG5uRm5m?= =?utf-8?Q?gZSpW1?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(52116014)(376014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?L2RpRkhaanFZeGVUTW0yOS9ocTMyRnR2TXZtRGRsQW5RT1hIcG9QL2RxN3lv?= =?utf-8?B?TXRFUGg0R0Y3RE9sd3VVeXRuSExrUkthY1o2M1B5TmxGTUZheUZqbis0Smlm?= =?utf-8?B?UFZzR25senFhMnJJRGs1ZnNuK2psd1hSZnhDd29JeGZGLzVUMittNTBGNG0z?= =?utf-8?B?enIyNkFNL2hjblVuR0lyVjgvajFlVSsyVExUWmpNNHRIODhRWDNYV0pZOWIy?= =?utf-8?B?YWZSVElEbHhveGFkL0ZES3M1MWN5NzQ0cGxsZUo3OHd2a1JOQmFaRVMwRHdx?= =?utf-8?B?eElMbkk1dStMbTlNbVNLSjZyTWFHVFN3RFcxZG1MUXg3V0YvZStacEo3YnRB?= =?utf-8?B?Z2ZWZ0Nsb0Q0cmEza1IwMmRpazg4K0VFcENPL2N4cE5MODVoOFVKWE1tRDY4?= =?utf-8?B?bjBsSTMwUXhFNU8yYjhtQlIrN0dFcEpnRWJmYWlvamZLbHNiUTVwdDNtQWNI?= =?utf-8?B?VVFHcExwY3Z3cXRmVFlGVVBKYWFkOFdOdElpMGk3M0EzVVlUaGlyTSt1YVpY?= =?utf-8?B?T1VCNUoyby9HSFlkOVhIWUJSTFhsYkY3NDFZakFrd1p5OHkxUk55a0srSXNI?= =?utf-8?B?YzhieXhFempkdFpZM2J4dWpPZTB2ZVJpN09UbDJoQWkvQkxHWHRrUitYeS9k?= =?utf-8?B?eDlZay9odGpmZXZKRlZETStMUEk3MDY0aW85R0ZmWVJOU3pEbWdieFFENXVB?= =?utf-8?B?MW1BT2lmaVlLYnJXenZxRk9hYS9CcGE0cWlEK2UzRE5kR0RsZ0lMUU81anVh?= =?utf-8?B?RVh4OXlvNzQvVjBVSDJqaWFiaFFzbkNNK3NXQlBtaHR3V1dwTVpCY1dScWpF?= =?utf-8?B?U05DRDFybDZQT2V5RythTldPdFovcCt5L3p5V3RmSnVqZENqT3FRREdQRGVr?= =?utf-8?B?dmdLaGs2WTJoWjU2R0JCR2ZsV29EZ1kydEtwSEIxS3NidHdkSzEvZmd5L2hk?= =?utf-8?B?M0RCUEt2aXRJMUxrL1NtalhXNWhnbkc4aWF3dnQ1QWJwN0Z4QVNYTFRrVzll?= =?utf-8?B?bXNCSjVNaHE2UTE1NmVvejZQLytjeitQN0N1d0x6di9sWnBLbXh6bTJCekVH?= =?utf-8?B?Y3hEZVBkQXlLa1R3VnJtSGNxMFR4Y25rcG5Ea2pRTDJvd3oxVWtLNnQrSVB2?= =?utf-8?B?TFU1ajJkQVI2d1lVMFRNMUNDS012dmd0QUJMeURObzlnd2hHeUlqeTV6QWdi?= =?utf-8?B?Mmo2eStOOEZDN2hxMTVzTUJ3NE8vbWpKUjlOWnFFRzljMXlTdCtMRHEzRU1o?= =?utf-8?B?UnUwNjZPM2JMUHZNK043d21WNkRUdXVPK2tFRk9aNUI0OUtxM0lPbktUQ2lU?= =?utf-8?B?RlVXRGp5RmZWeHVCdnhKM2VzcGZvWk8yMEtsY25uYThPcGNNVVJQeitpeWZu?= =?utf-8?B?Vk9LU28yQjVVV2NCTThoU05aTWIwTFJ0SUhZK2dLamV2cHJCZ3RDNUVFQ1VD?= =?utf-8?B?M25aUElzcEtXQnl4MlBQNkN5dVJDZEdONTdGc25yTkxQTEYrbUVMTVRVWDd0?= =?utf-8?B?MEg4TnlIVHAvUUtKeldGNUY2OU1jKzNzeUlRaU1xQkNrVWlvOE1xcnBlQVV0?= =?utf-8?B?Ykp3VmNuNWZlSmQ2eEx5a2RIcFJaTDlBR21GZm82K1ZqQ21tWlpxWGt2bjFP?= =?utf-8?B?eDBoWG5Kbm1zanJ3dlgwQTVFRmlLZHhhOXk1S3NPbVRnYnZqakZDaGFxbWs4?= =?utf-8?B?QnVJUkhtUVZrd0pnZU02TFNBYkFheU10dnVoRzJjYkkzZXhaUGo3eThTT3Ey?= =?utf-8?B?K3g1VCtWNzRLcVYwNGVsRGpLYnVGR0V6UkttSklabThxV3c5ZXFHUmJWL2lG?= =?utf-8?B?WUV5cWcxQXRHaURCa3dNZ3hZVldWOG1CRHg2TnhrUzNMdkRvbm1vR1U0VUJn?= =?utf-8?B?ZXZVaDBZWTNqVzdGYXV3Z1l1TS8ydjdPaFZyMytTY210TnkvbGdMSWJzRDhx?= =?utf-8?B?eEtjWmk2RFgrMFR1QUZqMGlNeWRoRVU2WGw5MXdZS3RYWll2QkZEQzJCb0tj?= =?utf-8?B?R0RKa29LOW04eDlLUjNVTStCS1hsa29JY2tDMC9CMFdtNDNENzFTRlg3ZVlQ?= =?utf-8?B?dXhrc2hPSjFkM0N6Uk5ZeFlVQU9Oa0xoR2FZczMveGtLeUJ6b3lIMWdsMVJU?= =?utf-8?Q?zTogcwJ4V3fhIy6kCN8cY8Ap9?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f627e597-4d65-463e-2502-08de16313431 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2025 14:49:31.9328 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VJO+Qok8qTrg/WYG0CVya3NN2PrvXCOihYZtqXNNC7lRPTHsXhIA0dwOqzYmxZOySTV+PwMFLGWNMEsmuDCFFA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB10613 Add basic HDR mode support for the svs I3C master driver. Only support for private transfers and does not support sending CCC commands in HDR mode. Key differences: - HDR uses commands (0x00-0x7F for write, 0x80-0xFF for read) to distinguish transfer direction. - HDR read/write commands must be written to FIFO before issuing the I3C address command. The hardware automatically sends the standard CCC command to enter HDR mode. - HDR exit pattern must be sent instead of send a stop after transfer completion. - Read/write data size must be an even number. Co-developed-by: Carlos Song Signed-off-by: Carlos Song Signed-off-by: Frank Li --- change in v7: - add comment about why need check return value readl_poll_timeout() in svc_i3c_master_emit_force_exit() - add comment about why need udelay(1) - remove reg =3D 0; - chagne to use readl_poll_timeout_atomic(); - replace all i3c_priv_xfer with new i3c_xfer. change in v4 - use hdr_cap. change in v3 - rename to svc_cmd_is_read() - rename to i3c_mode_to_svc_type() - use local varible bool rnw to reduce change change in v2 - support HDR DDR write - rdterm unit is byte, not words (RM is wrong). --- drivers/i3c/master/svc-i3c-master.c | 96 ++++++++++++++++++++++++++++++++-= ---- 1 file changed, 83 insertions(+), 13 deletions(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i= 3c-master.c index 7c516e05d0a1a118479ee3d8ea8ae37ae19fea57..a732443caaf15a2f6e54de46bba= fdeb3fc9a9296 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -40,11 +40,13 @@ #define SVC_I3C_MCTRL_REQUEST_NONE 0 #define SVC_I3C_MCTRL_REQUEST_START_ADDR 1 #define SVC_I3C_MCTRL_REQUEST_STOP 2 +#define SVC_I3C_MCTRL_REQUEST_FORCE_EXIT 6 #define SVC_I3C_MCTRL_REQUEST_IBI_ACKNACK 3 #define SVC_I3C_MCTRL_REQUEST_PROC_DAA 4 #define SVC_I3C_MCTRL_REQUEST_AUTO_IBI 7 #define SVC_I3C_MCTRL_TYPE_I3C 0 #define SVC_I3C_MCTRL_TYPE_I2C BIT(4) +#define SVC_I3C_MCTRL_TYPE_DDR BIT(5) #define SVC_I3C_MCTRL_IBIRESP_AUTO 0 #define SVC_I3C_MCTRL_IBIRESP_ACK_WITHOUT_BYTE 0 #define SVC_I3C_MCTRL_IBIRESP_ACK_WITH_BYTE BIT(7) @@ -95,6 +97,7 @@ #define SVC_I3C_MINTMASKED 0x098 #define SVC_I3C_MERRWARN 0x09C #define SVC_I3C_MERRWARN_NACK BIT(2) +#define SVC_I3C_MERRWARN_CRC BIT(10) #define SVC_I3C_MERRWARN_TIMEOUT BIT(20) #define SVC_I3C_MDMACTRL 0x0A0 #define SVC_I3C_MDATACTRL 0x0AC @@ -174,7 +177,7 @@ struct svc_i3c_cmd { const void *out; unsigned int len; unsigned int actual_len; - struct i3c_priv_xfer *xfer; + struct i3c_xfer *xfer; bool continued; }; =20 @@ -389,7 +392,32 @@ svc_i3c_master_dev_from_addr(struct svc_i3c_master *ma= ster, =20 static bool svc_cmd_is_read(u32 rnw_cmd, u32 type) { - return rnw_cmd; + return (type =3D=3D SVC_I3C_MCTRL_TYPE_DDR) ? !!(rnw_cmd & 0x80) : rnw_cm= d; +} + +static void svc_i3c_master_emit_force_exit(struct svc_i3c_master *master) +{ + u32 reg; + + writel(SVC_I3C_MCTRL_REQUEST_FORCE_EXIT, master->regs + SVC_I3C_MCTRL); + + /* + * Not need check error here because it is never happen at hardware. IP + * just wait for few fclk cycle to complete DDR exit pattern. Even + * though fclk stop, timeout happen here, the whole data actually + * already finish transfer. The next command will be timeout because + * wrong hardware state. + */ + readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS, reg, + SVC_I3C_MSTATUS_MCTRLDONE(reg), 0, 1000); + + /* + * This delay is necessary after the emission of a stop, otherwise eg. + * repeating IBIs do not get detected. There is a note in the manual + * about it, stating that the stop condition might not be settled + * correctly if a start condition follows too rapidly. + */ + udelay(1); } =20 static void svc_i3c_master_emit_stop(struct svc_i3c_master *master) @@ -521,7 +549,7 @@ static void svc_i3c_master_ibi_isr(struct svc_i3c_maste= r *master) * cycle, leading to missed client IBI handlers. * * A typical scenario is when IBIWON occurs and bus arbitration is lost - * at svc_i3c_master_priv_xfers(). + * at svc_i3c_master_i3c_xfers(). * * Clear SVC_I3C_MINT_IBIWON before sending SVC_I3C_MCTRL_REQUEST_AUTO_IB= I. */ @@ -801,6 +829,8 @@ static int svc_i3c_master_bus_init(struct i3c_master_co= ntroller *m) =20 info.dyn_addr =3D ret; =20 + info.hdr_cap =3D I3C_CCC_HDR_MODE(I3C_HDR_DDR); + writel(SVC_MDYNADDR_VALID | SVC_MDYNADDR_ADDR(info.dyn_addr), master->regs + SVC_I3C_MDYNADDR); =20 @@ -1314,6 +1344,16 @@ static int svc_i3c_master_xfer(struct svc_i3c_master= *master, /* clean SVC_I3C_MINT_IBIWON w1c bits */ writel(SVC_I3C_MINT_IBIWON, master->regs + SVC_I3C_MSTATUS); =20 + if (xfer_type =3D=3D SVC_I3C_MCTRL_TYPE_DDR) { + /* DDR command need prefill into FIFO */ + writel(rnw_cmd, master->regs + SVC_I3C_MWDATAB); + if (!rnw) { + /* write data also need prefill into FIFO */ + ret =3D svc_i3c_master_write(master, out, xfer_len); + if (ret) + goto emit_stop; + } + } =20 while (retry--) { writel(SVC_I3C_MCTRL_REQUEST_START_ADDR | @@ -1407,7 +1447,7 @@ static int svc_i3c_master_xfer(struct svc_i3c_master = *master, =20 if (rnw) ret =3D svc_i3c_master_read(master, in, xfer_len); - else + else if (xfer_type !=3D SVC_I3C_MCTRL_TYPE_DDR) ret =3D svc_i3c_master_write(master, out, xfer_len); if (ret < 0) goto emit_stop; @@ -1420,10 +1460,19 @@ static int svc_i3c_master_xfer(struct svc_i3c_maste= r *master, if (ret) goto emit_stop; =20 + if (xfer_type =3D=3D SVC_I3C_MCTRL_TYPE_DDR && + (readl(master->regs + SVC_I3C_MERRWARN) & SVC_I3C_MERRWARN_CRC)) { + ret =3D -ENXIO; + goto emit_stop; + } + writel(SVC_I3C_MINT_COMPLETE, master->regs + SVC_I3C_MSTATUS); =20 if (!continued) { - svc_i3c_master_emit_stop(master); + if (xfer_type !=3D SVC_I3C_MCTRL_TYPE_DDR) + svc_i3c_master_emit_stop(master); + else + svc_i3c_master_emit_force_exit(master); =20 /* Wait idle if stop is sent. */ readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg, @@ -1433,7 +1482,11 @@ static int svc_i3c_master_xfer(struct svc_i3c_master= *master, return 0; =20 emit_stop: - svc_i3c_master_emit_stop(master); + if (xfer_type !=3D SVC_I3C_MCTRL_TYPE_DDR) + svc_i3c_master_emit_stop(master); + else + svc_i3c_master_emit_force_exit(master); + svc_i3c_master_clear_merrwarn(master); svc_i3c_master_flush_fifo(master); =20 @@ -1480,6 +1533,11 @@ static void svc_i3c_master_dequeue_xfer(struct svc_i= 3c_master *master, spin_unlock_irqrestore(&master->xferqueue.lock, flags); } =20 +static int i3c_mode_to_svc_type(enum i3c_xfer_mode mode) +{ + return (mode =3D=3D I3C_SDR) ? SVC_I3C_MCTRL_TYPE_I3C : SVC_I3C_MCTRL_TYP= E_DDR; +} + static void svc_i3c_master_start_xfer_locked(struct svc_i3c_master *master) { struct svc_i3c_xfer *xfer =3D master->xferqueue.cur; @@ -1669,9 +1727,8 @@ static int svc_i3c_master_send_ccc_cmd(struct i3c_mas= ter_controller *m, return ret; } =20 -static int svc_i3c_master_priv_xfers(struct i3c_dev_desc *dev, - struct i3c_priv_xfer *xfers, - int nxfers) +static int svc_i3c_master_i3c_xfers(struct i3c_dev_desc *dev, struct i3c_x= fer *xfers, + int nxfers, enum i3c_xfer_mode mode) { struct i3c_master_controller *m =3D i3c_dev_get_master(dev); struct svc_i3c_master *master =3D to_svc_i3c_master(m); @@ -1679,19 +1736,32 @@ static int svc_i3c_master_priv_xfers(struct i3c_dev= _desc *dev, struct svc_i3c_xfer *xfer; int ret, i; =20 + if (mode !=3D I3C_SDR) { + /* + * Only support data size less than FIFO SIZE when using DDR + * mode. First entry is cmd in FIFO, so actual available FIFO + * for data is SVC_I3C_FIFO_SIZE - 2 since DDR only supports + * even length. + */ + for (i =3D 0; i < nxfers; i++) + if (xfers[i].len > SVC_I3C_FIFO_SIZE - 2) + return -EINVAL; + } + xfer =3D svc_i3c_master_alloc_xfer(master, nxfers); if (!xfer) return -ENOMEM; =20 - xfer->type =3D SVC_I3C_MCTRL_TYPE_I3C; + xfer->type =3D i3c_mode_to_svc_type(mode); =20 for (i =3D 0; i < nxfers; i++) { + u32 rnw_cmd =3D (mode =3D=3D I3C_SDR) ? xfers[i].rnw : xfers[i].cmd; + bool rnw =3D svc_cmd_is_read(rnw_cmd, xfer->type); struct svc_i3c_cmd *cmd =3D &xfer->cmds[i]; - bool rnw =3D xfers[i].rnw; =20 cmd->xfer =3D &xfers[i]; cmd->addr =3D master->addrs[data->index]; - cmd->rnw =3D rnw; + cmd->rnw_cmd =3D rnw_cmd; cmd->in =3D rnw ? xfers[i].data.in : NULL; cmd->out =3D rnw ? NULL : xfers[i].data.out; cmd->len =3D xfers[i].len; @@ -1890,7 +1960,7 @@ static const struct i3c_master_controller_ops svc_i3c= _master_ops =3D { .do_daa =3D svc_i3c_master_do_daa, .supports_ccc_cmd =3D svc_i3c_master_supports_ccc_cmd, .send_ccc_cmd =3D svc_i3c_master_send_ccc_cmd, - .priv_xfers =3D svc_i3c_master_priv_xfers, + .i3c_xfers =3D svc_i3c_master_i3c_xfers, .i2c_xfers =3D svc_i3c_master_i2c_xfers, .request_ibi =3D svc_i3c_master_request_ibi, .free_ibi =3D svc_i3c_master_free_ibi, --=20 2.34.1 From nobody Sun Feb 8 21:32:47 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013033.outbound.protection.outlook.com [40.107.162.33]) (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 F0C1233CE84; Tue, 28 Oct 2025 14:49:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761662985; cv=fail; b=ivhIl4ohDUlXV8FwnHnZtcz0ZYmRD/tti6hOfDgYKkHOVkrAvAbLn7zf1Dxr8iOquGeiXgQCogP5UTtrT73XXLphMBakKK5s1pQ7SiUpXOKl5vGQKT+y92bwMC/RCY6WUVVwPwX6m/oy28W7uBo+T5LOAtScynl9jYGqgniWx4k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761662985; c=relaxed/simple; bh=IyO4gvDiMVkIrAv3wfTcayqnmwaqUsnJdgwnigkUdYg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=MBOtdMGTh9Ttz7NjHfsNy8ecMlF8TeVOjoXVFntc5kdP4o9dYc2LiBWyhDzdNWCx+HMjqqsItAr/kRgL1BHHEi3hxYGf2oHXfl4dKDaNJp/Cu13FZ4MXulethtOWh6XXQlBQRAYb4M2TtT8ehSO0hiyoZRz5jBM5FNB7mIztBuQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=Wwa2nopT; arc=fail smtp.client-ip=40.107.162.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="Wwa2nopT" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=M6LGJjjb1OIQvlz+37KwuQxDGtODBzrEFXhbbA3JGim/sVJzyosIDRvCc0YBv6FA9ra48LAz7q0anpSxelk7Y99pinemZE980ug/XG8afg/Ubcxb/t2ZTUVPEUeXEUmvxgbgxQZ+s5cUPUxZY/D34PvS6pY3q3YbG7u2dpYQEV9ENZbwxt2EaqTBBflqX9z7ViOE4qEvTA3+P8C9+YNpEH/eyljAqS/6t8zDCyVlzbU7oaxzMemDT1nsc3l6pC0+r6H3At/UZwrDupl7q/MRCpVGrp9jepIcGe9G9cQ7XxFSRyx/Hves54bDJtGEydxmGEjutMXHQHzdmA0L8/7ALw== 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=C/2t9xOxRR0k6wvZLNSCm6blXDZasSeQSURQqJNw5AE=; b=mYO+/oQTIFl0kinEgfkHI1z3xMuPP2t8Z4kHZ1MumKFqE6OLAwURtSO0w+2vU7RaMjT4gBlm1qUqxiiTPFW30QdK3ifZRdggwMae6d3jSIs/6kuDSdz6+cb/Iuy421SqlVVTPwt1WmXMhzaxeDa1P3HYogY8E4S2eg3veyshjql/VUGuXp9wvoqoLIlrVLDTvoFuavp1zvffZGONGagsidFcnZJNIYdIs5Xm2VnjVGIjYW701yV9JhIfEwZq5Bfw5IxqZh+ViEEjiIRKmJLcw5lORA9oyBGqzUUHgv4ex14V0/jEHsJGNyoTDjIwSNkZCWXPrGFC9MaZX7R11pwm6A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=C/2t9xOxRR0k6wvZLNSCm6blXDZasSeQSURQqJNw5AE=; b=Wwa2nopTM7mZbwx81dIWc78ncCv2sC/cIcJclSEkXVQ4Y+gmICKiFaaElqKKtxIxyfWZyYQL1pN9uFGYaHbK2Nx+xWJvgHYLWNxN3ba9xT6mGQRBhIACctRm4Ur7sCPeoL4Fo4HaW/MW5ydJAQm1M47+MQcqDChiWmlMyAbLWXtw7gC3haftvgtypRqvjYDH89bPJ7yR1u0oFzUKR2AP1Gcx4Oz6k/wmL8CsNmHagUf7NJdEeRpJtghvmYGskiw6D9SINbpOQbijARGZnJFSqjb1WhJmH5BRJt37s5n4tgUpJpBKIC9/8kMdEoT8vL096SZRbEzKE8m/elmOOXvt9Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) by VI0PR04MB10613.eurprd04.prod.outlook.com (2603:10a6:800:25f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Tue, 28 Oct 2025 14:49:36 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9275.011; Tue, 28 Oct 2025 14:49:36 +0000 From: Frank Li Date: Tue, 28 Oct 2025 10:49:01 -0400 Subject: [PATCH v8 5/6] dt-bindings: trivial-devices: add MEMSIC 3-axis magnetometer Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251028-i3c_ddr-v8-5-795ded2db8c2@nxp.com> References: <20251028-i3c_ddr-v8-0-795ded2db8c2@nxp.com> In-Reply-To: <20251028-i3c_ddr-v8-0-795ded2db8c2@nxp.com> To: Alexandre Belloni , Miquel Raynal , Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-iio@vger.kernel.org, joshua.yeong@starfivetech.com, devicetree@vger.kernel.org, Frank Li , Conor Dooley X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1761662950; l=1253; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=IyO4gvDiMVkIrAv3wfTcayqnmwaqUsnJdgwnigkUdYg=; b=thpQucEtltU9hy4KRLEnUfVIuw9XlJEMNPvInOjc7Dkemx6gZCqx9B6neaiIuX743pHs9SqJ2 wLhV75728EhBtqgwks64dYBqobgwPbtSOb01Cd6O97NA3/5BSEmLtHa X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BYAPR02CA0040.namprd02.prod.outlook.com (2603:10b6:a03:54::17) To PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXSPRMB0053:EE_|VI0PR04MB10613:EE_ X-MS-Office365-Filtering-Correlation-Id: 9b43af9f-b3af-4fa2-ce00-08de163136d0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|52116014|376014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cnpRSE5PekxneWYvU0E1SXBQRC92OGJ4VkdXUWNlV2lXVDVDT05PUXdxNXRj?= =?utf-8?B?aTJjc2Q5SzV1dGNhV0I4MmJoQzdDaHptY0N0RTBOZWtkN1pHY1NROGYvOUdP?= =?utf-8?B?S2xpVk16Q2pYUUZuTGxJd21Md1dOQlFiYjB6TGRNTnJObW52MXhzMW13K2xX?= =?utf-8?B?bmd2ejFCSmU0Z04xZzlZaFNSRExJa2ZYRm5jWHNMeXFWMk1lVm04WFk2Z0Uw?= =?utf-8?B?TGw0Qm8zSlYxS3lqNm5CNFk5U01uQ3NEYU5FdFVLVXhRYkN6N1hDSlJzbExX?= =?utf-8?B?aW9Ja254S0RTRkk1MHRtUXVyQ0dNN1lBRFRvMzZZRjhGb2xhTGd3Z0x5OWJr?= =?utf-8?B?d0xlUkJSY3QveXRoNVc0Q05ZV1RRNTd0dkJZTWtRS2lyYTQ0dEQ5ejBPSlJ1?= =?utf-8?B?Wkw0WDdUWWlWSVNGMVFzZGw4Vk56ZEdXZkVwUzI3QWk0bldrV21rSkNoK3h6?= =?utf-8?B?TERVMjJFZUpIOU9LaW9PUFhKTnNYc096cS96UHRNbUVlM3B0VVJEWmxVSnht?= =?utf-8?B?VmZlV3kzNHNFQ2xDazZoVGZhY2NKdTg3ckEvc1ZESkRRQmlrb012M3NJcjJ5?= =?utf-8?B?VTRkRFNtN3JSMm5YM3NJY3hJNU1VSEpCYlhOMG01V2JrbHhPcnhJRFMrUC9N?= =?utf-8?B?QS9XVUVBdzhmYWk3Y3dXb1Y5T3lraGhvTjhqend4ci9iWE5KQzFSc0VlQ0ow?= =?utf-8?B?NG9PcEE3MUZhcmprUmx5anY1ekQxSFlaTFlGVGJVZmtFcDJqKzQxS3U1RlY5?= =?utf-8?B?Nmtwa2NGRjNXRklERnJQQXFQVDdaVnNFRlF2cG1JRjZwRUgwZVNIcVMvZWZ3?= =?utf-8?B?VnVlZ3JIMVQycCtsbFZhSHRmL1d4eTdpMDl6RXdVaU1sOFAyRlBRaXpNMUl3?= =?utf-8?B?R3psdVQzUXlVMUVvbnloZDd5cXJ6RUNGVEY5WmtJQ3cyb1FibUt1Tm5qU0gy?= =?utf-8?B?L1d3ZEk1VlR6TkxEOXhUWkZJb2s3MGR1MmlxZ3dvd3dueEh2ZDh0UnAxZDFs?= =?utf-8?B?SDY1aFVpNUZkQnpMZUc2cm00OENYSmJZU3pscnNQTWlPUEpzME5qeEx3T3JZ?= =?utf-8?B?NVUrckxHbGJMTUFscC9tMUNFKzdFYXVKMmNkZ3lkVFZZL1ZKa1JlNTJRZnZR?= =?utf-8?B?VDA0eStiTk4wOUhwdjFhQXhlVWQ0NjBRbDlSc0lHL2pseDNFdjZQTTFQVGxZ?= =?utf-8?B?QjE4WWtMaWxFenllVDZxekZvRWN1ZlRHcHQxejUvUkc3VG9lREdESGc2RlZp?= =?utf-8?B?eTA1eUxBa1VCbVRIaTRKREhaTVpLWmhuOTdXczJ4em1ULzY1VmJ1bEFWMWFy?= =?utf-8?B?L1A3S01vU1dVU2lGSTV5azlvckFYSlhoWUxXdFdGT3VhVlFNVkRaOTMwdS9y?= =?utf-8?B?dHBIWlY4czlFZytQTmRHeTIyUUtuaGlqaUxMd0FldlVsVUhvM0x1NjBGSGdj?= =?utf-8?B?RlNOancrTnlXWGtVdHlLR3NrU1lMNXFwMWwrSHdKZk13bkViT3dlV2I5aHRU?= =?utf-8?B?VzF1eDBsa0xsdVpLeVRDbmpjeVVFTkE2NXduUDUwc2ZCcFNvU3pRd09PM2wv?= =?utf-8?B?WEVqcS92RnFRanpDcko5YW5KYU03L1dOaEZxS2ZXbkx3L0VCSkhkYWVtVHp2?= =?utf-8?B?RnFaNDdQcFpUV3FReTl4dXZYaUhFaTczUEdWbVcxWm1PYnVSZnpYSERyUkda?= =?utf-8?B?UjR6aUZEYnFPZXJ2MUo5c2FTcVZzVW1hQTQ1YXdjTVNlb2gza1pmUTZNb29B?= =?utf-8?B?dmxWa0JvTXhwcXhLT2t2QUNSVW1uNlc2c1ByK0JOWElQeGxpbXNtVExUcEkx?= =?utf-8?B?eVh3bSs5WmRzbm5kbWRRSjZGcXlZVElYenZqYlhsWXNqTDFFTW96dWthMm1n?= =?utf-8?B?ejQ0UjNTbThOVHlTRktoQ1Q4Zlo3YXdMSGg4dzV5N1dXUzhuK3EyOWtncXZM?= =?utf-8?B?KytvU0xENktxamlNaEJGVjFyMjJNdGVySFFlOVlQaEJvRUlKYzRqZnplZWkr?= =?utf-8?B?UUdqSUwyZW9iMHh4Tkd0K3VuYzBzMHNpaXg0MmdRVktkcTJ3Ni85MCs4c3pj?= =?utf-8?Q?vJ8I15?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(52116014)(376014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cE9OWkpqRWllcGh6cTNvU2xHVlZqb3pJbW94dHQyZmFkOHI1ZTlEUHlzQ0Z1?= =?utf-8?B?eUNJc0U1REJ6akVsMDNJaHNPQjNQRUVmVmdwQmNzYmxYaXVSYWQ1UXZPTFFl?= =?utf-8?B?TE93c0xCV3AwVmdYQm12YmpTWlBaTUlKMGJRU2owclNySlhwemVDUlJLMHg5?= =?utf-8?B?WFZOQUsvQzlyNmh1elNsZ2lTR3hLYW1QemtaT1Noa2lUZXBwb3ZFNzd1azlY?= =?utf-8?B?QzVUN0lkbjRrOW5SRitoNVhVZk14eFhpMVVtTjIvVmlRZFQyRUp5ZlBKVzhN?= =?utf-8?B?NWtsSkExMGJESCtCUGdIM3NpLzFERzVONkJsOEFTbi8xMjAxdkJDcENzUE03?= =?utf-8?B?aDBVQVFiRzE2OWhGSENFQlUwVXExQ0EwTHdoQUFyc3ZQZFY4ZTJ0cmR0WjVp?= =?utf-8?B?cDJGTHVIU3VMMFdOR3NlcWpWcmZ3c1lXeHIxSmZMQzhNNnBVNkxhR0FDVHQy?= =?utf-8?B?TC9NSFVCOGZZbm9zMlFreEhhZjEveG5JaEFyZFdYMURRTkhFdmt5TG9Bay84?= =?utf-8?B?WUExbC9XQnFUNjFBZE8wSUhvMDJ1bGpVYkhTYnN4RlNYZEE0ZUNkMmY4TVFO?= =?utf-8?B?Qkc3czZmeXkvZ1FLUDNNYlpjODM4dlgvUFhJV1Y5Qmh6aFJhRXhMM1VVVDUz?= =?utf-8?B?K2hjM0NNa3E4SDU3TmtST3paR1RuSGJpWTI0ZTBFY3l2cDI0aUhnZHdIcWVH?= =?utf-8?B?dXM3dC80dGFwckNRZVV2MjI1cHFaaEFvRlFPNkRPMUZ0VCs0STBzUWpxY0NX?= =?utf-8?B?RXJqeWZpUXIwNVB5dUQzd1ZFZ1p5YklucUhHR3JNdW9oQmdTR3JmWFg4UWE5?= =?utf-8?B?dE5mM3J4clhmTlBDTitOMitnTXoyUlhpUndzVnF1WXNvbDF3TlkvMTNMYTYv?= =?utf-8?B?RUFQS1VVUTgrR0lrQ1NoZG9uemo4UEJZNUJab1JpNlJCZFlZekxVcE9MS3lL?= =?utf-8?B?TG5Jck45M1BNZXBGTHhrZ3dIMUdaWTM3RUN1aFRnb3pkOHB4Y3IyWWppVjZE?= =?utf-8?B?RnVaei9XZENFN1BwbFZGMmpsazhXRURrbmljdk44Wks4M3FwSFo4NUM5eFZR?= =?utf-8?B?OVMweUNoamhkMHpmQTFyWjBTbDhrOFhUdXlWQVphYVpFQUUxV2FVMllidmxK?= =?utf-8?B?WTZELy8xV0FDdjhOQ3NsQVlOQkdCTXhEVVlkOThpQ3VCa1YyOTEwTWNwSTN5?= =?utf-8?B?bUNhWmFtaFVFNDVZd3hnL1V0RmZJYXhpYUh6aVlZR2h4bndlL0FIWGlUTDEy?= =?utf-8?B?YmVpTU5vcXBVU1d2Nno0UmlXZjQwQXpEN1FSVVZxdEtYeG1OcGpwQ1ZrTHRH?= =?utf-8?B?RC9RR3hlSm1QY3BtM09QaEFnK3o2S1phbWMzd1ZsL05LS1ZwWnhudFNwWHV1?= =?utf-8?B?UzFKMUpNNXpVTCtkUjJOQnhTY21NVWo0Mm9Ca2Q1RGNocjlZWlpINGZDS09Y?= =?utf-8?B?NGZVeUtlOGlIeUpVNWVQRTNtMytBcWxOOTRmcVBJR09kTW9zNzRCanpwMmpN?= =?utf-8?B?cVptSjVRcWN2VXdkK0p5MWlkaFgvY09yZHVwMklXUzVsbWtZVzU5OEpuV3BH?= =?utf-8?B?VXkvNFk1dUdQSnJuM3hodi9qRmtFS0NyK0RaMmErY0dSUmMySUJUeENKZ1JG?= =?utf-8?B?aytoMjFFdktvcFNlcEd4WUZRVTVlSVVCM2FZK1lMcDlpdnZiOW1MKzZjRVd2?= =?utf-8?B?ZFI3SVprWkk2S2Jnem1zQ01kdWVIdzZxM01FdUJZdG52NVo4c29YT0RCRlJr?= =?utf-8?B?WlhWS3dhV2xtNW5UaW40c2V6VjBnQm9QbmIrRU1ZZEpaTWZSWFlMOUxvbitB?= =?utf-8?B?aXlKdFA2QUgxL3lxTTNHdXRJRWRPT1lpVW5OVnVuOEw2WUNUSzhSQ0Fkelo4?= =?utf-8?B?QWxxd1d4c3A4K1I1YXdrYUlOQ08vcmNaTFJjMDg4QzZuUUdaZnJQeXczTjhh?= =?utf-8?B?OUU5ZE9JUGw4ZmNXcXJPMDd4M1JidytoRHVDOUY1RnZGdzRuWURvZmh3d0NS?= =?utf-8?B?L1pMbU1MOTJjWDlxNkRvN0tmUEd0LzFlcVUvams2bTN4Rzg2aDZtR1Q4V0hS?= =?utf-8?B?WFJ4UEloZDZmblVNYzN5d0gxczZQc2lyeUJsbEM1TVBYbVF1R0VGRUkwNDVD?= =?utf-8?Q?GQVS3PtLjxjk4WmoB6/opBQBp?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9b43af9f-b3af-4fa2-ce00-08de163136d0 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2025 14:49:36.3039 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NsFU6qQlDHaGuN6T1PtKegi1ffIaPFC32zJfJO6vWUjjO8E10/C7+ry6h5hcJoHe+NT5FMywLLnqa9LmtO5l4g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB10613 Add compatible string 'memsic,mmc5603' and 'memsic,mmc5633' for MEMSIC 3-axis magnetometer. Acked-by: Conor Dooley Signed-off-by: Frank Li --- Changes in v7 - none Changes in v6: - add Conor Dooley ack tag. Changes in v5 - none Changes in v4 - add memsic,mmc5603 Changes from v1 .. v3 - None --- Documentation/devicetree/bindings/trivial-devices.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Docum= entation/devicetree/bindings/trivial-devices.yaml index 2eff6f274302add1ef8f6ae9ec9672697bc812ea..94fc8ff4504b5dc2c0fd7b384f6= acaae3d5f80a4 100644 --- a/Documentation/devicetree/bindings/trivial-devices.yaml +++ b/Documentation/devicetree/bindings/trivial-devices.yaml @@ -227,6 +227,10 @@ properties: - meas,tsys01 # MEMSIC magnetometer - memsic,mmc35240 + # MEMSIC 3-axis magnetometer + - memsic,mmc5603 + # MEMSIC 3-axis magnetometer (Support I3C HDR) + - memsic,mmc5633 # MEMSIC 3-axis accelerometer - memsic,mxc4005 # MEMSIC 2-axis 8-bit digital accelerometer --=20 2.34.1 From nobody Sun Feb 8 21:32:47 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013033.outbound.protection.outlook.com [40.107.162.33]) (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 D1D2333CE83; Tue, 28 Oct 2025 14:49:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761662988; cv=fail; b=oaPVfa+DVJmW4hb0OT2BL6bPGoJo5B4cHPKIizpJ73+igYzN0cwkArwwlIsh4HocEUhxyXbirmH/RweI+ZHltu/xeDFzOhw0ZgAtAMNKaSeb4hobDvH4RRonp4njgz6LJOD8aDwuy64hPpR2Se15OUEdFh7v/uSyhV92KvYLK3o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761662988; c=relaxed/simple; bh=MXdfcOlomcKxNyAr9MXZ8gD5rAqp/+jFkqESujXramw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=JfQKoNOm4GEw6kfoUcA0CKoQ4vc2q1hrzkf1d7bRFPFIJx7QJ/hYa2YSy/hDgkLfomJoFdDZgDFVm0DBYHvgkf7VM+5XfkO9cmdJMS+8G9NdWejEouuiH3HFR0Yui+eWg2KyLJKOstZMk3oNmYZ0cOO48F8aeTio0OdYXpel7hA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=GJ5cVRB1; arc=fail smtp.client-ip=40.107.162.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="GJ5cVRB1" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=krwaIrQ9ch3/B/Ad6cwAge60rrmftxyd3FsAlCVNkESkKjPqRiCV8YF+0XrM7+9q/8f4JGctCbLHVe99s94j56NFB8fYQgHMoN17FviNyte8Bxa7OffENqyiKzY9SVFEXPn2J7Y32JXFoHH1GD4uT2l7bWZFkf8YiQHEXiMa42IrUrC490PAT6t9ZR1k24z4ZOHt0H9tUB3plHe/gi2zPwryENgXCWqTRyIfmHkuONX+/wOn4UcPMErwjcDrdXXq011KwZtT3PhXcf4Ftg0zDj1NYfQDCh6GZeOcXAHqoZPmWSbpv0A7IhEUxFEr/lq8hJ5q0gIrcUl/QFDiL5ZghQ== 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=DcscuMED5rYImIkNErwswgsCNJqWvJZ4j6X0DuqFZw8=; b=P04IP/FWFAgBguWiESQYqjQrku1fiPgU86GFAUHtolcDFxe4vHXmFw/IEly61HPcxvyzT+Stw8QxH/oa0wXAidUfWUoLwaVdBaD0hf4Bdlm0KCw+VRew7hWsjt/9mrLrwWpvhZk+r4utzLMDcpI8reqrwPVIj9bqZrgpeXAmIpQUSILg7YrWAGp9k46cPNmaUP/D7QzeQt2OEf8CgtsA4khmd8rzJ6lrpsVHl4sCjQZd8tBcp6O27vJKrhNTATn/D3hU8r43hLelfZcHv+a7v/Rg27zbHy0XQ/zo+DkMYgz3VQO2/rAUacUv8NinlVJpilIkySqFryTjg6OLRD5Zqw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DcscuMED5rYImIkNErwswgsCNJqWvJZ4j6X0DuqFZw8=; b=GJ5cVRB1ZTmLn/otrFN0KeQPQ13N3CPkXnPvfCvgAxuF4RIN8zg9c+Hzr86v5AvvMO+hQYImEAGNTOJl7bcCegD0zbLf7xuLj9eQmGjY6gnH7MYzzf8NZn0ToI4Zh+/5PKKodq9BAE8HVOtznbjwV5Ct/C0OLuZRlMPggdndF+SPWVuks5RklgJ8uUjqYh6L8B7FVwTsJIg/Iaep3hmovUbgTeyUL8pLiPX7auO3Vcyty50FK+3HQUdUrTv1EsA4al4RlBfhezI7Fs2BE5g67RGngl9sAQ0GTOBzLS+rz5A18nOjGQBzTUGlb9eEOyqayhlC1RYoZpufyq6S14bQQQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) by VI0PR04MB10613.eurprd04.prod.outlook.com (2603:10a6:800:25f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Tue, 28 Oct 2025 14:49:41 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9275.011; Tue, 28 Oct 2025 14:49:41 +0000 From: Frank Li Date: Tue, 28 Oct 2025 10:49:02 -0400 Subject: [PATCH v8 6/6] iio: magnetometer: Add mmc5633 sensor Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251028-i3c_ddr-v8-6-795ded2db8c2@nxp.com> References: <20251028-i3c_ddr-v8-0-795ded2db8c2@nxp.com> In-Reply-To: <20251028-i3c_ddr-v8-0-795ded2db8c2@nxp.com> To: Alexandre Belloni , Miquel Raynal , Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-iio@vger.kernel.org, joshua.yeong@starfivetech.com, devicetree@vger.kernel.org, Frank Li , Carlos Song , Adrian Fluturel X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1761662950; l=18712; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=MXdfcOlomcKxNyAr9MXZ8gD5rAqp/+jFkqESujXramw=; b=J/1TiSayKGHTxFDb1nffDrrIqUGhwE1BSe0/QC0Vzl++cFPJwWJGhKAYpF1+h0hNdiUg1L01t OearN0SsVYmDgvbE47MkL7oYy8K61Q/UPnwchafzioo4nJuBM1f88TF X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: BYAPR02CA0040.namprd02.prod.outlook.com (2603:10b6:a03:54::17) To PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXSPRMB0053:EE_|VI0PR04MB10613:EE_ X-MS-Office365-Filtering-Correlation-Id: 0fe85620-f9fc-45c2-0723-08de16313999 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|52116014|376014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?YWxsK2ZZbCtyeTJ0bjRnVStBNlRidFc4bENnc2Q2RzkraGxlNVdkVG1OaVZM?= =?utf-8?B?UW0xVkw1a0QvZXB4bCt5NldhY3VqNW1PdkJOdTJXb0U5K3FaTDN3S3NBbjY0?= =?utf-8?B?d2ZpdkR2RThTd0dVaHNkakk3Tm9CdzhoMkozdmxPWnl6dFBuRDNEQ0ZVUlB4?= =?utf-8?B?NFY1bnBCK1NvQzBsb1ZWY1c5WjZOVlhTcmpSUm5VK3VpTWY2d1dDeXRRYjZ0?= =?utf-8?B?M0E5WGs1T1I3RmpQT3RraUlNVjc4dmhWbzVMYWRBOFArc2RGL2txR3d5Y0Ur?= =?utf-8?B?aCtZSExhdEV3bkg2bExtYTdNNjVZUjgxS2d1YVdpYmp0eDFVOEpaQlJoVnV2?= =?utf-8?B?bE5DcFdnR3FsMXNEZ0VXZFIybHcrRVhHQ0RiRTYyc043OU5wNWJIdldGUDlE?= =?utf-8?B?VmRDZjR2Mmhmb1JrZ3hFYmVQVVpmbXhDWjNhMUQ1cVJHdXhORXlxdEtQUml3?= =?utf-8?B?NEEvTEdPaVlMZ0dwOGVhWUR3a0VDN3M1eS9QTTRZRWp0REhDSVVSVmZ6enhy?= =?utf-8?B?Y3pRVzNnUW93OWR5VnM0bW5jTjJrMUhyQ0pCRXc5M3ZSbHIrNUNLTWlRd1Nx?= =?utf-8?B?MDVJaTNuQWt5RWJoRzNnQXhuNUNOa0gzRTYycTJsUjBnbzhta1N5dlNLYVFB?= =?utf-8?B?MTYwdFRoc2NudjVuL2ZIUTNFekxaMk80aEtUaGN3c3R3eFZJRVUvRWtJTE5L?= =?utf-8?B?MUZMWWJHeGF2QW5wRTFiNHZRNWVtbVFZcjBMSXBnZkwxandvWUZiZzNielFV?= =?utf-8?B?N1dFeEFBV2M3L0ovSnNnaWNTdXZyem9oWjJQYW01RDRvaU5TRUlwZkFEWDBU?= =?utf-8?B?NWkyMVRmaGdqa3g5ZlFQR3lCcHQrSm84MjJoUGdZREU5N3VweTlKWDdHOGll?= =?utf-8?B?ZEJUUTdkQW5LMm9qMnppd1VPU2pzWEU1Y2dEaWVyaWlqdzhySWhRMEF5Yndh?= =?utf-8?B?bWxMQTMveHg3WUs3MHd1bG9DaTI1VllJMUhyU2FpcWVSMVNkd01zeE55aWFW?= =?utf-8?B?MFlvT2lldE9nbDkremQ0ZE4wV0tJWndxaUx5cEpYY2o4VUR5VU9JSjJHSHZx?= =?utf-8?B?WU9WcnBXcmNENUNKcjU4b0kwQkR0OXl0cXJ3bG0yazliSkZhZlRrTllJZDNy?= =?utf-8?B?eHJzcEpUUkRRNXZiWHJRTURaL1M3bUNDT1ZwODJvOFdxWUM5eXcxSlBnZlQ0?= =?utf-8?B?WHZZYTVwR1MrMXo1ZWlMTVJNb29LQUJycTFqWEJuamt5SUU0WVJuMnFHekt1?= =?utf-8?B?V2VZRjZxTHVmcWROUklPbDk0UFdFWE5QMlI3c0FqZktrLys0eC9Mc2UxRFZ0?= =?utf-8?B?TjRDeE1Jd01CZGYwZ0l6QVJZVmp4QWgzOHpENTNyRjlDOExNYkRveDNJazJI?= =?utf-8?B?dkVUTnN3ellIRlQ4TDZCZWlEU1BaOVJXYTZqaFEzT3NZeFFCR2lzUlg1RTYy?= =?utf-8?B?V2JxcGxtaVpVenpRSSs3NW9KVXFUVnhZZGN4QXNDL1ZGTWd3cHgxcUVlWTN1?= =?utf-8?B?QXN2M1BVbEFHdXdOMndCSGVYaDZtVjQ5S1Q5MG9qMmtSWVk4Qk9CYllPb1Uw?= =?utf-8?B?R2xESWNxbEQ5R1MvTHhoVVA4emdNU1BudGtvWVBWVUMyM0t4NzNpQ1NWVFFk?= =?utf-8?B?djJzS0J4akt5VGxOd2JrbUFxbjd2Y1RHNjNyblN5ZGsyNFVicWE3NC9UR0kv?= =?utf-8?B?UXFvMjZtOU92RE5xWFZpQlZtaDJhRFBzM2JnRHVKajkvKzQ2L29NaXVQdm54?= =?utf-8?B?SW1uVG9mNWtPT3d6am5lM09QcVpqQnZHSnRrSzYwRFlQREd4V2tSejFHNVlX?= =?utf-8?B?OWJxN1N3ZFpvT1FHQjNpcTVRTHc2U2VuVlVXK2xqeWRMNVZRdDdZQzFsc1hl?= =?utf-8?B?NVlLYkVVcEE4NVppK0ZzRFVIcWZsWmJPU3dVQ0U1TjFhMC92UGFTREtDWTZ2?= =?utf-8?B?ZXlzVkxNeEU5YzlaMzBxenlFbno4WUdpVXR1U0tDY0tnYVdYYkovcTR5Qi9S?= =?utf-8?B?Y1lCd1M2QTc0Q3ZqcUhxckZrTC95ZVJIUVk0eVFqdmtJTUhaVjduRUVLaUN3?= =?utf-8?Q?Lta0H+?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(52116014)(376014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TTNQeGozcUJ0TElOMEU1NEhNMEg0Nmp1Ym1GeUxWcGdhQUc2U0NxOG04dSts?= =?utf-8?B?NEhyMVFtR2p4NGZpendWUHVkaDQ4Z0ZpbjFmZDdoc3pXT29ZRlp2TDBCOGpD?= =?utf-8?B?dzNySFFpdUNtSnFKMVgybVV3V1hzcnZhbjMwWFR4dlEvTEdyYWFIU3NGRHBY?= =?utf-8?B?SzZZcDJ2bjBTemdiSGl4Vk4zaTM5Z2NHTG9IOWpMWmhnMXdUdDdHQ2dnSXJV?= =?utf-8?B?ejVaa1p4emQxc1VkM1NZYmp5WWZOeFg1WHFCRURXVG9EQXk4M05GYUpDVWJq?= =?utf-8?B?c1JQV010RUVWMlR1cTBlRTRkZi96M2U3TExscldyTmlPR3psVitEaEthV2Zl?= =?utf-8?B?UGs0SFlKdEYwQzR1aVlqZmNXaFlnRU84b2Mxc2s0YVdNK1lCVXR1YjQzZE85?= =?utf-8?B?aGl1SDhJUTNtTFFXdC9CTzZHMC9ndjVuTnFkbTZJRFR1NFpMaDZwbmN1djRw?= =?utf-8?B?RnAzWUFTM05YYUgvdy9IK2lWTEw2SVNUV2ZXeitzU1JJR3BZQS92RFM1Z1Z0?= =?utf-8?B?SHcwaG5lNnRCZmV6bWNaVW9Kd0NKMVAxaVV6aGp0YmlwWnIyaHo2RitTU2V5?= =?utf-8?B?TTM5cW1OYmxmYmFEMU1OQ0xrNE1QUlZDSURPb3lXTUdURHJFamNPTXpZSGlP?= =?utf-8?B?MTdJTllCbWFOdy9XbXZvZ3pKVzF3UWJKb1dUWDNkbjFmMXIyWG9kenB6dWRw?= =?utf-8?B?TTBreGtLUklVSzRwd3Fyd0hkYS92SFJHK05qUEZEYU43SzRkdW5jSm1HUy9x?= =?utf-8?B?eUtkZzkwZDQrM2hZRndVYms2Z3NRK1hSVXZRM2VUVEZ4aGJsakhLb0hOMkFh?= =?utf-8?B?Nld6aXpYUDRGTkkwMUpaRHRrbElWMEUzZjZvN0xSOW9WdURXSnZNaEZZaVZv?= =?utf-8?B?Zk5DWnBUUytYZVVMM0hRV1VuVjNQVjQrS2lzT1JYQ2M2dnRmQmxKcDlqTkhk?= =?utf-8?B?OWxXV01ZZUdNSmtWVElIMzVTN3doZFZubm1jVEJ6K2kzYmxYd1VnYU5oMEh1?= =?utf-8?B?YXcwb21qSllFaGQwM1diY1FwcENBSjNjb3FhUGxZd1drT1dXR3F0WlUwd01k?= =?utf-8?B?eWVrYytNQzJUcWFhUkJHNmh6WnozWmQwQUplTC82c01CNXg4c3F4T05tTlhu?= =?utf-8?B?d2s3akJLNzdUcXIzMmd2Rjk0THQ5SFdGcTc2eDV6TldTb0FCYVFhang5eHpR?= =?utf-8?B?NnNUWkNzQ2NmWmE0dEp3UlQ0V2Ezd0pvRWNkclkzbTVUSmN4Nlg2VGtRQ3R4?= =?utf-8?B?UnRhWEYyRE5ZUzZqRCs5WGhpQzI2TXRQS0FOWnVycVdhMC9xMDJ1ek05MnhG?= =?utf-8?B?TVZTM29pQ0xDRVZHSzF3Wk16ZWt5bzMxckpGSG95UUlwYjdDeDVYbm1Ldzl5?= =?utf-8?B?cE9xV2FNVk9FTzlHaWRSUVZMYkpzTXVBWG1Lb0RmUjk5ZFRxVzhEMHIzNk5N?= =?utf-8?B?dUNTMEdiREppeHhTa1BmRENBdG90ZlJiUkZadTFMdGJiVUpSd0tXNHQwSU9s?= =?utf-8?B?ZmNDVldwVVlLL2VlUjBhUUlVTmk5anhhYlhhNWVxbzBZUjlHMnZ2K1JielVQ?= =?utf-8?B?K1NBK2hxQ2VRMVBFV0ZGTlF5amJlZGNQUE9vL3J5WFV0Q2E2TWtvd2xCdTFm?= =?utf-8?B?NFBneEt2b0FqaEdJQ1pCL2ROMGk2M3BNL25xUTcxQzhOTmFhaEl0Rnpjc3Mw?= =?utf-8?B?OUVFcUhFRGFER0Q0ZlRqSFZ1R2llVWtNK0Fqei9JeWhLWmg2d1d4TURHc3VJ?= =?utf-8?B?WklrTkdRRkhTZFpKRjFMWWl5RG5KcFZsWkpqOHNrL2c1dUFMQWxtbGpNRk1u?= =?utf-8?B?REsyalRsZ3FpUklaSXVGYWd2ZTFvTTREZ2gvQUYwU0xJVU0xZU9TNGkxallB?= =?utf-8?B?Ty9TS05HQzhJWEYxQlIrVXhHMm1mV1U4U3VkWFM4K2NEcTBuOFRlMkVQdXJh?= =?utf-8?B?blhLWTRwa3NpbndkMmtQRDhsRUhubE11V3RnNmw4ck9VUktEQUhaUHA2L01G?= =?utf-8?B?Z0dSN0pCS2JQREpONThtendMWngzQ294akJjZUMyMmhCSDQyVUl5ZDB2ZE5U?= =?utf-8?B?VUVRYlBCSU81SUVIRUUyaHhkNU4yNWt0U3pRVkljRndKaGNJRWJyeW9Hd2x3?= =?utf-8?Q?44Rgtg2P6NL2wlUKmN2jakXK8?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0fe85620-f9fc-45c2-0723-08de16313999 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2025 14:49:40.9932 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: LjuhVgbIusAKih/3zL66X0kL/v/yW2IW31vDKJxObukWhGVn9KMiorFDb3S+Kj3rh7y+Wb8c6RK17UTg9K38Nw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB10613 Add mmc5633 sensor basic support. - Support read 20 bits X/Y/Z magnetic. - Support I3C HDR mode to send start measurememt command. - Support I3C HDR mode to read all sensors data by one command. Co-developed-by: Carlos Song Signed-off-by: Carlos Song Co-developed-by: Adrian Fluturel Signed-off-by: Adrian Fluturel Signed-off-by: Frank Li --- Change in v7 - add missed *.h file - remove reduntant empty line - add comments about delay 1us after SET - use USEC_PER_MSEC for timeout value Change in v6: - remove acpi part - return 0 for success path at mmc5633_write_raw Change in V4 - use { 1, 2000 } - Add _US for timeout - Use GEN_MASK for MMC5633_CTRL1_BW_MASK - Use { } for terminator. - remove !! - fix mix tab and space - add mmc5603 (merge https://lore.kernel.org/all/20251003000731.22927-1-flu= turel.adrian@gmail.com/) - add tempature measure support Change in v3 - remove mmc5633_hw_set - make -> Make - change indention for mmc5633_samp_freq - use u8 arrary to handle dword data - get_unaligned_be16() to get raw data - add helper function to check if i3c support hdr - use read_avail() callback change in v2 - new patch --- drivers/iio/magnetometer/Kconfig | 12 + drivers/iio/magnetometer/Makefile | 1 + drivers/iio/magnetometer/mmc5633.c | 588 +++++++++++++++++++++++++++++++++= ++++ 3 files changed, 601 insertions(+) diff --git a/drivers/iio/magnetometer/Kconfig b/drivers/iio/magnetometer/Kc= onfig index 81b812a29044e2b0b9ff84889c21aa3ebc20be35..cfb74a4a083630678a1db1132a1= 4264de451a31a 100644 --- a/drivers/iio/magnetometer/Kconfig +++ b/drivers/iio/magnetometer/Kconfig @@ -139,6 +139,18 @@ config MMC35240 To compile this driver as a module, choose M here: the module will be called mmc35240. =20 +config MMC5633 + tristate "MEMSIC MMC5633 3-axis magnetic sensor" + select REGMAP_I2C + select REGMAP_I3C + depends on I2C || I3C + help + Say yes here to build support for the MEMSIC MMC5633 3-axis + magnetic sensor. + + To compile this driver as a module, choose M here: the module + will be called mmc5633 + config IIO_ST_MAGN_3AXIS tristate "STMicroelectronics magnetometers 3-Axis Driver" depends on (I2C || SPI_MASTER) && SYSFS diff --git a/drivers/iio/magnetometer/Makefile b/drivers/iio/magnetometer/M= akefile index dfe970fcacb8664b293af84893f7d3e3e8d7bf7e..5bd227f8c1204bdd8b8a43da180= 833eedca1457b 100644 --- a/drivers/iio/magnetometer/Makefile +++ b/drivers/iio/magnetometer/Makefile @@ -15,6 +15,7 @@ obj-$(CONFIG_BMC150_MAGN_SPI) +=3D bmc150_magn_spi.o obj-$(CONFIG_MAG3110) +=3D mag3110.o obj-$(CONFIG_HID_SENSOR_MAGNETOMETER_3D) +=3D hid-sensor-magn-3d.o obj-$(CONFIG_MMC35240) +=3D mmc35240.o +obj-$(CONFIG_MMC5633) +=3D mmc5633.o =20 obj-$(CONFIG_IIO_ST_MAGN_3AXIS) +=3D st_magn.o st_magn-y :=3D st_magn_core.o diff --git a/drivers/iio/magnetometer/mmc5633.c b/drivers/iio/magnetometer/= mmc5633.c new file mode 100644 index 0000000000000000000000000000000000000000..3e29324f0720a2b8268ccd63409= 483a60e48802b --- /dev/null +++ b/drivers/iio/magnetometer/mmc5633.c @@ -0,0 +1,588 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * MMC5633 - MEMSIC 3-axis Magnetic Sensor + * + * Copyright (c) 2015, Intel Corporation. + * Copyright (c) 2025, NXP + * + * IIO driver for MMC5633, base on mmc35240.c + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MMC5633_REG_XOUT_L 0x00 +#define MMC5633_REG_XOUT_H 0x01 +#define MMC5633_REG_YOUT_L 0x02 +#define MMC5633_REG_YOUT_H 0x03 +#define MMC5633_REG_ZOUT_L 0x04 +#define MMC5633_REG_ZOUT_H 0x05 +#define MMC5633_REG_XOUT_2 0x06 +#define MMC5633_REG_YOUT_2 0x07 +#define MMC5633_REG_ZOUT_2 0x08 +#define MMC5633_REG_TOUT 0x09 + +#define MMC5633_REG_STATUS1 0x18 +#define MMC5633_REG_STATUS0 0x19 +#define MMC5633_REG_CTRL0 0x1b +#define MMC5633_REG_CTRL1 0x1c +#define MMC5633_REG_CTRL2 0x1d + +#define MMC5633_REG_ID 0x39 + +#define MMC5633_STATUS1_MEAS_T_DONE_BIT BIT(7) +#define MMC5633_STATUS1_MEAS_M_DONE_BIT BIT(6) + +#define MMC5633_CTRL0_CMM_FREQ_EN BIT(7) +#define MMC5633_CTRL0_AUTO_ST_EN BIT(6) +#define MMC5633_CTRL0_AUTO_SR_EN BIT(5) +#define MMC5633_CTRL0_RESET BIT(4) +#define MMC5633_CTRL0_SET BIT(3) +#define MMC5633_CTRL0_MEAS_T BIT(1) +#define MMC5633_CTRL0_MEAS_M BIT(0) + +#define MMC5633_CTRL1_BW_MASK GENMASK(1, 0) + +#define MMC5633_WAIT_SET_RESET_US (1 * USEC_PER_MSEC) + +#define MMC5633_HDR_CTRL0_MEAS_M 0x01 +#define MMC5633_HDR_CTRL0_MEAS_T 0x03 +#define MMC5633_HDR_CTRL0_SET 0x05 +#define MMC5633_HDR_CTRL0_RESET 0x07 + +enum mmc5633_axis { + MMC5633_AXIS_X, + MMC5633_AXIS_Y, + MMC5633_AXIS_Z, + MMC5633_TEMPERATURE, +}; + +struct mmc5633_data { + struct device *dev; + struct i3c_device *i3cdev; + struct mutex mutex; /* protect to finish one whole measurement */ + struct regmap *regmap; +}; + +static const struct { + int val; + int val2; +} mmc5633_samp_freq[] =3D { + { 1, 200000 }, + { 2, 0 }, + { 3, 500000 }, + { 6, 600000 }, +}; + +#define MMC5633_CHANNEL(_axis) { \ + .type =3D IIO_MAGN, \ + .modified =3D 1, \ + .channel2 =3D IIO_MOD_ ## _axis, \ + .address =3D MMC5633_AXIS_ ## _axis, \ + .info_mask_separate =3D BIT(IIO_CHAN_INFO_RAW), \ + .info_mask_shared_by_type =3D BIT(IIO_CHAN_INFO_SAMP_FREQ) | \ + BIT(IIO_CHAN_INFO_SCALE), \ +} + +static const struct iio_chan_spec mmc5633_channels[] =3D { + MMC5633_CHANNEL(X), + MMC5633_CHANNEL(Y), + MMC5633_CHANNEL(Z), + { + .type =3D IIO_TEMP, + .info_mask_separate =3D BIT(IIO_CHAN_INFO_RAW) | + BIT(IIO_CHAN_INFO_SCALE) | + BIT(IIO_CHAN_INFO_OFFSET), + .address =3D MMC5633_TEMPERATURE, + }, +}; + +static int mmc5633_get_samp_freq_index(struct mmc5633_data *data, + int val, int val2) +{ + u32 i; + + for (i =3D 0; i < ARRAY_SIZE(mmc5633_samp_freq); i++) + if (mmc5633_samp_freq[i].val =3D=3D val && + mmc5633_samp_freq[i].val2 =3D=3D val2) + return i; + return -EINVAL; +} + +static int mmc5633_init(struct mmc5633_data *data) +{ + unsigned int reg_id; + int ret; + + ret =3D regmap_read(data->regmap, MMC5633_REG_ID, ®_id); + if (ret < 0) + return dev_err_probe(data->dev, ret, + "Error reading product id\n"); + + /* + * Make sure we restore sensor characteristics, by doing + * a SET/RESET sequence, the axis polarity being naturally + * aligned after RESET. + */ + ret =3D regmap_write(data->regmap, MMC5633_REG_CTRL0, MMC5633_CTRL0_SET); + if (ret < 0) + return ret; + + /* + * Minimum time interval between SET or RESET to other operations is + * 1ms according to Operating Timing Diagram in datasheet. + */ + fsleep(MMC5633_WAIT_SET_RESET_US); + + ret =3D regmap_write(data->regmap, MMC5633_REG_CTRL0, MMC5633_CTRL0_RESET= ); + if (ret < 0) + return ret; + + /* set default sampling frequency */ + return regmap_update_bits(data->regmap, MMC5633_REG_CTRL1, + MMC5633_CTRL1_BW_MASK, + FIELD_PREP(MMC5633_CTRL1_BW_MASK, 0)); +} + +static int mmc5633_take_measurement(struct mmc5633_data *data, int address) +{ + unsigned int reg_status; + int ret; + int val; + + val =3D (address =3D=3D MMC5633_TEMPERATURE) ? MMC5633_CTRL0_MEAS_T : MMC= 5633_CTRL0_MEAS_M; + ret =3D regmap_write(data->regmap, MMC5633_REG_CTRL0, val); + if (ret < 0) + return ret; + + val =3D (address =3D=3D MMC5633_TEMPERATURE) ? + MMC5633_STATUS1_MEAS_T_DONE_BIT : MMC5633_STATUS1_MEAS_M_DONE_BIT; + ret =3D regmap_read_poll_timeout(data->regmap, MMC5633_REG_STATUS1, reg_s= tatus, + reg_status & val, + 10 * USEC_PER_MSEC, + 100 * 10 * USEC_PER_MSEC); + if (ret) { + dev_err(data->dev, "data not ready\n"); + return ret; + } + + return 0; +} + +static bool mmc5633_is_support_hdr(struct mmc5633_data *data) +{ + if (!data->i3cdev) + return false; + + return i3c_device_get_supported_xfer_mode(data->i3cdev) & BIT(I3C_HDR_DDR= ); +} + +static int mmc5633_read_measurement(struct mmc5633_data *data, int address= , void *buf, size_t sz) +{ + u8 data_cmd[2], status[2]; + int ret, val, ready; + + if (mmc5633_is_support_hdr(data)) { + struct i3c_xfer xfers_wr_cmd[] =3D { + { + .cmd =3D 0x3b, + .len =3D 2, + .data.out =3D data_cmd, + } + }; + struct i3c_xfer xfers_rd_sta_cmd[] =3D { + { + .cmd =3D 0x23 | BIT(7), /* RDSTA CMD */ + .len =3D 2, + .data.in =3D status, + }, + }; + struct i3c_xfer xfers_rd_data_cmd[] =3D { + { + .cmd =3D 0x22 | BIT(7), /* RDLONG CMD */ + .len =3D sz, + .data.in =3D buf, + }, + }; + + data_cmd[0] =3D 0; + data_cmd[1] =3D (address =3D=3D MMC5633_TEMPERATURE) ? + MMC5633_HDR_CTRL0_MEAS_T : MMC5633_HDR_CTRL0_MEAS_M; + + ret =3D i3c_device_do_xfers(data->i3cdev, xfers_wr_cmd, 1, I3C_HDR_DDR); + if (ret < 0) + return ret; + + ready =3D (address =3D=3D MMC5633_TEMPERATURE) ? + MMC5633_STATUS1_MEAS_T_DONE_BIT : MMC5633_STATUS1_MEAS_M_DONE_BIT; + ret =3D read_poll_timeout(i3c_device_do_xfers, val, + val || + status[0] & ready, + 10 * USEC_PER_MSEC, + 100 * 10 * USEC_PER_MSEC, 0, + data->i3cdev, xfers_rd_sta_cmd, 1, I3C_HDR_DDR); + if (ret) { + dev_err(data->dev, "data not ready\n"); + return ret; + } + if (val) { + dev_err(data->dev, "i3c transfer error\n"); + return val; + } + return i3c_device_do_xfers(data->i3cdev, xfers_rd_data_cmd, 1, I3C_HDR_D= DR); + } + + /* Fallback to use SDR/I2C mode */ + ret =3D mmc5633_take_measurement(data, address); + if (ret < 0) + return ret; + + if (address =3D=3D MMC5633_TEMPERATURE) + /* + * Put tempeature to last byte of buff to align HDR case. + * I3C will early terminate data read if previous data is not + * available. + */ + return regmap_bulk_read(data->regmap, MMC5633_REG_TOUT, buf + sz - 1, 1); + + return regmap_bulk_read(data->regmap, MMC5633_REG_XOUT_L, buf, sz); +} + +/* X,Y,Z 3 channels, each channel has 3 byte and TEMP */ +#define MMC5633_ALL_SIZE (3 * 3 + 1) + +static int mmc5633_get_raw(struct mmc5633_data *data, int index, unsigned = char *buf, int *val) +{ + if (index =3D=3D MMC5633_TEMPERATURE) { + *val =3D buf[MMC5633_ALL_SIZE - 1]; + return 0; + } + /* + * X[19..12] X[11..4] Y[19..12] Y[11..4] Z[19..12] Z[11..4] X[3..0] Y[3..= 0] Z[3..0] + */ + *val =3D get_unaligned_be16(buf + 2 * index) << 4; + *val |=3D buf[index + 6] >> 4; + + return 0; +} + +static int mmc5633_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, int *val, + int *val2, long mask) +{ + struct mmc5633_data *data =3D iio_priv(indio_dev); + char buf[MMC5633_ALL_SIZE]; + unsigned int reg, i; + int ret; + + switch (mask) { + case IIO_CHAN_INFO_RAW: + scoped_guard(mutex, &data->mutex) { + ret =3D mmc5633_read_measurement(data, chan->address, buf, MMC5633_ALL_= SIZE); + if (ret < 0) + return ret; + } + + ret =3D mmc5633_get_raw(data, chan->address, buf, val); + if (ret < 0) + return ret; + return IIO_VAL_INT; + case IIO_CHAN_INFO_SCALE: + if (chan->type =3D=3D IIO_MAGN) { + *val =3D 0; + *val2 =3D 62500; + } else { + *val =3D 0; + *val2 =3D 800000000; /* 0.8C */ + } + return IIO_VAL_INT_PLUS_NANO; + case IIO_CHAN_INFO_OFFSET: + if (chan->type =3D=3D IIO_TEMP) { + *val =3D -75; + return IIO_VAL_INT; + } + return -EINVAL; + case IIO_CHAN_INFO_SAMP_FREQ: + scoped_guard(mutex, &data->mutex) { + ret =3D regmap_read(data->regmap, MMC5633_REG_CTRL1, ®); + if (ret < 0) + return ret; + } + + i =3D FIELD_GET(MMC5633_CTRL1_BW_MASK, reg); + if (i >=3D ARRAY_SIZE(mmc5633_samp_freq)) + return -EINVAL; + + *val =3D mmc5633_samp_freq[i].val; + *val2 =3D mmc5633_samp_freq[i].val2; + return IIO_VAL_INT_PLUS_MICRO; + default: + return -EINVAL; + } +} + +static int mmc5633_write_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, int val, + int val2, long mask) +{ + struct mmc5633_data *data =3D iio_priv(indio_dev); + int i, ret; + + switch (mask) { + case IIO_CHAN_INFO_SAMP_FREQ: + i =3D mmc5633_get_samp_freq_index(data, val, val2); + if (i < 0) + return -EINVAL; + + scoped_guard(mutex, &data->mutex) { + ret =3D regmap_update_bits(data->regmap, MMC5633_REG_CTRL1, + MMC5633_CTRL1_BW_MASK, + FIELD_PREP(MMC5633_CTRL1_BW_MASK, i)); + if (ret) + return ret; + }; + return 0; + default: + return -EINVAL; + } +} + +static int mmc5633_read_avail(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + const int **vals, + int *type, + int *length, + long mask) +{ + switch (mask) { + case IIO_CHAN_INFO_SAMP_FREQ: + *vals =3D (const int *)mmc5633_samp_freq; + *length =3D ARRAY_SIZE(mmc5633_samp_freq) * 2; + *type =3D IIO_VAL_INT_PLUS_MICRO; + return IIO_AVAIL_LIST; + default: + return -EINVAL; + } +} + +static const struct iio_info mmc5633_info =3D { + .read_raw =3D mmc5633_read_raw, + .write_raw =3D mmc5633_write_raw, + .read_avail =3D mmc5633_read_avail, +}; + +static bool mmc5633_is_writeable_reg(struct device *dev, unsigned int reg) +{ + switch (reg) { + case MMC5633_REG_CTRL0: + case MMC5633_REG_CTRL1: + return true; + default: + return false; + } +} + +static bool mmc5633_is_readable_reg(struct device *dev, unsigned int reg) +{ + switch (reg) { + case MMC5633_REG_XOUT_L: + case MMC5633_REG_XOUT_H: + case MMC5633_REG_YOUT_L: + case MMC5633_REG_YOUT_H: + case MMC5633_REG_ZOUT_L: + case MMC5633_REG_ZOUT_H: + case MMC5633_REG_XOUT_2: + case MMC5633_REG_YOUT_2: + case MMC5633_REG_ZOUT_2: + case MMC5633_REG_TOUT: + case MMC5633_REG_STATUS1: + case MMC5633_REG_ID: + return true; + default: + return false; + } +} + +static bool mmc5633_is_volatile_reg(struct device *dev, unsigned int reg) +{ + switch (reg) { + case MMC5633_REG_CTRL0: + case MMC5633_REG_CTRL1: + return false; + default: + return true; + } +} + +static const struct reg_default mmc5633_reg_defaults[] =3D { + { MMC5633_REG_CTRL0, 0x00 }, + { MMC5633_REG_CTRL1, 0x00 }, +}; + +static const struct regmap_config mmc5633_regmap_config =3D { + .name =3D "mmc5633_regmap", + + .reg_bits =3D 8, + .val_bits =3D 8, + + .max_register =3D MMC5633_REG_ID, + .cache_type =3D REGCACHE_MAPLE, + + .writeable_reg =3D mmc5633_is_writeable_reg, + .readable_reg =3D mmc5633_is_readable_reg, + .volatile_reg =3D mmc5633_is_volatile_reg, + + .reg_defaults =3D mmc5633_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(mmc5633_reg_defaults), +}; + +static int mmc5633_common_probe(struct device *dev, struct regmap *regmap, + char *name, struct i3c_device *i3cdev) +{ + struct mmc5633_data *data; + struct iio_dev *indio_dev; + int ret; + + indio_dev =3D devm_iio_device_alloc(dev, sizeof(*data)); + if (!indio_dev) + return -ENOMEM; + + dev_set_drvdata(dev, indio_dev); + + data =3D iio_priv(indio_dev); + + data->regmap =3D regmap; + data->i3cdev =3D i3cdev; + data->dev =3D dev; + + ret =3D devm_mutex_init(dev, &data->mutex); + if (ret) + return ret; + + indio_dev->info =3D &mmc5633_info; + indio_dev->name =3D name; + indio_dev->channels =3D mmc5633_channels; + indio_dev->num_channels =3D ARRAY_SIZE(mmc5633_channels); + indio_dev->modes =3D INDIO_DIRECT_MODE; + + ret =3D mmc5633_init(data); + if (ret < 0) + return dev_err_probe(dev, ret, "mmc5633 chip init failed\n"); + + return devm_iio_device_register(dev, indio_dev); +} + +static int mmc5633_suspend(struct device *dev) +{ + struct mmc5633_data *data =3D iio_priv(dev_get_drvdata(dev)); + + regcache_cache_only(data->regmap, true); + + return 0; +} + +static int mmc5633_resume(struct device *dev) +{ + struct mmc5633_data *data =3D iio_priv(dev_get_drvdata(dev)); + int ret; + + regcache_mark_dirty(data->regmap); + ret =3D regcache_sync_region(data->regmap, MMC5633_REG_CTRL0, + MMC5633_REG_CTRL1); + if (ret < 0) + dev_err(dev, "Failed to restore control registers\n"); + + regcache_cache_only(data->regmap, false); + + return 0; +} + +static int mmc5633_i2c_probe(struct i2c_client *client) +{ + struct device *dev =3D &client->dev; + struct regmap *regmap; + + regmap =3D devm_regmap_init_i2c(client, &mmc5633_regmap_config); + if (IS_ERR(regmap)) + return dev_err_probe(dev, PTR_ERR(regmap), "regmap init failed"); + + return mmc5633_common_probe(dev, regmap, client->name, NULL); +} + +static DEFINE_SIMPLE_DEV_PM_OPS(mmc5633_pm_ops, mmc5633_suspend, mmc5633_r= esume); + +static const struct of_device_id mmc5633_of_match[] =3D { + { .compatible =3D "memsic,mmc5603" }, + { .compatible =3D "memsic,mmc5633" }, + { } +}; +MODULE_DEVICE_TABLE(of, mmc5633_of_match); + +static const struct i2c_device_id mmc5633_i2c_id[] =3D { + { "mmc5603" }, + { "mmc5633" }, + { } +}; +MODULE_DEVICE_TABLE(i2c, mmc5633_i2c_id); + +static struct i2c_driver mmc5633_i2c_driver =3D { + .driver =3D { + .name =3D "mmc5633_i2c", + .of_match_table =3D mmc5633_of_match, + .pm =3D pm_sleep_ptr(&mmc5633_pm_ops), + }, + .probe =3D mmc5633_i2c_probe, + .id_table =3D mmc5633_i2c_id, +}; + +static const struct i3c_device_id mmc5633_i3c_ids[] =3D { + I3C_DEVICE(0x0251, 0x0000, NULL), + { } +}; +MODULE_DEVICE_TABLE(i3c, mmc5633_i3c_ids); + +static int mmc5633_i3c_probe(struct i3c_device *i3cdev) +{ + struct device *dev =3D i3cdev_to_dev(i3cdev); + struct regmap *regmap; + + regmap =3D devm_regmap_init_i3c(i3cdev, &mmc5633_regmap_config); + if (IS_ERR(regmap)) + return dev_err_probe(dev, PTR_ERR(regmap), + "Failed to register i3c regmap\n"); + + return mmc5633_common_probe(dev, regmap, "mmc5633_i3c", i3cdev); +} + +static struct i3c_driver mmc5633_i3c_driver =3D { + .driver =3D { + .name =3D "mmc5633_i3c", + }, + .probe =3D mmc5633_i3c_probe, + .id_table =3D mmc5633_i3c_ids, +}; +module_i3c_i2c_driver(mmc5633_i3c_driver, &mmc5633_i2c_driver) + +MODULE_AUTHOR("Frank Li "); +MODULE_DESCRIPTION("MEMSIC MMC5633 magnetic sensor driver"); +MODULE_LICENSE("GPL"); --=20 2.34.1