From nobody Wed Dec 17 12:14:52 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013009.outbound.protection.outlook.com [40.107.162.9]) (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 DA90C34C9AF; Thu, 6 Nov 2025 17:36:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762450595; cv=fail; b=IXpIMCbmycuT6ZS4LxqS7cCgiIp/mdglN8oPL9jplC6/EJlU9P6q3aF0FM7HxE4bgQJSO3XihGAgMPcR/HobA+4rAUSGlFB9jQ2eZh0R2HaMNQ/dnTcui1Z9eb1IIjARlV89+QBzD0etPQdxss8yY9zjetxZXx/0nbQEPS/bpKk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762450595; c=relaxed/simple; bh=Xu8bp9V4hfsx8ETYTi55tKRQ6COWT2egdx/YMlh7Rpg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=afSBjQmOL9hxcweIV899UD6pcKLYZcJabnC04Rwi+aHUyQlGo8W0q4C+EQZfuizzQQVD+UEN/yBXp/Yy0c+UyaaCMmccYhU2N4p0vHt+xcGLAW86COJSitYRMENxjHevOdWCDk+gCZ6YVuA3m1FQEaJMI8cVSexgsNQ1Lt3eih4= 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=GkwPMEup; arc=fail smtp.client-ip=40.107.162.9 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="GkwPMEup" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rGNR5Fyt5Sfnaq4Cd8rTFdiVUkK4wYZ06AbpNCE4hyNXCOwPcWAQU3C4ojsQT+r4T8CugaeiBnPe2UO9iTV/5u2WaMg0pLLuIoqfcUJuutEFxANDRny7M52eiFrvJIwx94QxniF1ypXP4UXb22jjb5/kIUhN3PDuitvqhqce4sD/bdVsBqoQm+X1MbaSuqRreq1ntl02DK7wleZwgAEX6Zuz8arX/ecmmRQpeQVIqFr6CfsfdjJR1Km6DiNr5RNVOkO/QWB0dahomhjM2t1ewYykUNxhMOmPaIR+XxrqHxjcDEJ7qOPpqc170WdtPUXUHeLVr3+oeq8Tb5SwD5zg1w== 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=+OEKCc7tVnIacFKaPEeylBUa7U0P1wVjPQ/ux24a1u0=; b=IfAyVoxswJlBwGu85wbSolUo68VOD1D6av1349cre55aw5irZq80O1WkiDWrrarnIC1ExANe6SnvZdVUMlXhJz4UQbr2ELZAMTOUHg1ehAmzs1PiRrvi1693CUK+kOVgcFFs6WG3rOuCRpLpiU4MfhcQXEKNQIkxtF4uckDEnEt7yfSJvN63YE+1MZcTUp2CC23YXxJjdTOuWR/f+lrByqN9ZIyiJU2SFYZVB/cjaWl+E4WtB4An1NgiHLa414nLnyyFMzzwHy0s5eqvesq4PZ8pVRGu+pxWMrUlp2btDwt/PS18WIDQwT57gE6nl7lW2Sgh5MjSYLVAUb6A07wYOg== 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=+OEKCc7tVnIacFKaPEeylBUa7U0P1wVjPQ/ux24a1u0=; b=GkwPMEup3nKoCyFlh+Z5HFfLI1HzXjkL8aI6QBZb4nZZuvjVgwQlJFUphWrwvVFAJjFwaqgOq91MnaemUYmNH3au5JcS1M86TBg1Uv2LgZX9E+hXqV41YO2dIeIWU34DQGxiON+bBim/arBjtA4Eeis9GlWaZPi9/sIQSrBQl9UDfWPri4PfAgB/yLvVkolChe2ZORjwXLfod6eOJvYNjAoAIpcnfWME6OMkEOQIZrDA0kRbm85aGaaZlXejKXYXXqDJvVnYg5g5NM99JXrYNNn6YcBHVzL5itdfMZH4MdEvwKGUQUg32GyiuO7hTwtS32kHTJSW0V1BQdyMPjjRmQ== 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 GV1PR04MB10989.eurprd04.prod.outlook.com (2603:10a6:150:200::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.10; Thu, 6 Nov 2025 17:36:28 +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.9298.006; Thu, 6 Nov 2025 17:36:28 +0000 From: Frank Li Date: Thu, 06 Nov 2025 12:36:00 -0500 Subject: [PATCH v11 1/6] i3c: Add HDR API support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251106-i3c_ddr-v11-1-33a6a66ed095@nxp.com> References: <20251106-i3c_ddr-v11-0-33a6a66ed095@nxp.com> In-Reply-To: <20251106-i3c_ddr-v11-0-33a6a66ed095@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, linux@roeck-us.net, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1762450581; l=10620; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=Xu8bp9V4hfsx8ETYTi55tKRQ6COWT2egdx/YMlh7Rpg=; b=iBRvaTdUTOWW84l2WENim6RKx8P2Wt9oegFU7hQRbgvy8E1TdA6id6KTo1Nr3OM9IaeG3BAda fWD7TUzD49sCw7Q6zwiONWJOtN9M5aYoR5IC7Dsvv4t+mCetKKWWeBA X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA0PR11CA0111.namprd11.prod.outlook.com (2603:10b6:806:d1::26) 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_|GV1PR04MB10989:EE_ X-MS-Office365-Filtering-Correlation-Id: bc2ec14d-9d7e-4397-06da-08de1d5b0432 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|366016|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dkFtSGxPMHRwc2xmTFZvb2M1Wm9qbkw4YTN1bXFEM0EwSS9Ca2tLU2ljT2o5?= =?utf-8?B?WUZkamx5Ym0rbklyMGNuZzQxRWFpMjY3S1NGMTBXRlFXV3VYblNqSEpqRXVt?= =?utf-8?B?RXpHbFkvU2FYa3hqK09IbXRUalg3bnNlYnhMNGlwVkdtVFVOK29KTU5sRGJT?= =?utf-8?B?Ry80RFZIUE9xWXVQL1VKYmorR1ZNWVZMcEZocmZhVm1EbU94R1YxMUVKSStL?= =?utf-8?B?bFNFOXRZT2Z0Ti9uT2lVcXg3RldqOE1USDlRS3AvcHdvamJRclNmS2dYLzZ2?= =?utf-8?B?VURJbGhXdWl6RUZSSDhlZzk5OHF2QlJoQTI0OHhjSzZoL05kUDUyWnBMQ0p2?= =?utf-8?B?Y2hCSDZMMDQ5TDZyeWlVeVRMQVRsM2ZqanJvUWhiTnM2V1czR24rNmljbFB5?= =?utf-8?B?U0Q2V2w2OEtmOHNTUDdiZ1Q4KzFRQmtLanp5WEVKTE9pODU3R05kcGIrbHVY?= =?utf-8?B?eC91N1ZoQndZckpRVTNvZ25DMXhCMm1WU1gyWVJJTnBGR3FwdmxBbjFLTTl0?= =?utf-8?B?OTJMbmM0VDBISWtEY3FrNW5PaHR6Vk5ZUitXSG81WTlqb0tEOVR0YkRNaUw4?= =?utf-8?B?Z2pwVVg4MFY4OFRYNC8zSnZMM2N0aEFXVGtHV3pSNXZ1SERVRTFjd3phL2RL?= =?utf-8?B?eXRXNkJ1TDk4YTRJaVh0ZXI1TFZndnRhZkYvcTc4QzZoYTRyVUorS0xncHN1?= =?utf-8?B?QWJac1NueE9VRWVrZXp1TVFXVFFmeFJZbEIzN3RiMmV6QThUZnh4a3A0MXZy?= =?utf-8?B?TEhkVDY2cllkZkduK3MxdWdNNG5VcWlXVlg4aENQN0xsVjFKKzhINmRlSWdK?= =?utf-8?B?RXZYWmUvVlZCamtrL1hzam1udXQ2YThudndhTHBJMkp6RGdQQncwYmZkWnlN?= =?utf-8?B?RWd6Vy9nbUwxMTdLYUZXWVd3OTJ6aStBKzVPM0FPcG5TMWtqVTd5U0hVVDUr?= =?utf-8?B?emJNOThNTFVOcUVKVUFyL0x6ZDVteWhOYXJxd1NqaGZjc2VaZEVoM2VIU1BE?= =?utf-8?B?MUl1QUZHcFNJMXBZMWlkUXFhRlB6TGdRcEJyOWdvMVN2YmtTTWNHeVhiTTNX?= =?utf-8?B?bmVNSXNuZUJ5NUZCdjRUbU1ETHYzZThveGdoWFRmQkc3TVJVUDlUVHNTWW5y?= =?utf-8?B?bzlEQ3puWloxRHg4RlV5aXF4MnlSbEFQcVhhMVVvd09pcnV0V3IyYVl2R1Jz?= =?utf-8?B?K1kvY3ptM1BCNEhEY01PRUlWaTVMVzhobjdXbDNWci9SUTRoTzE3M2hlaDFX?= =?utf-8?B?eEFhc1BGTUJta3ptd09nOHR0RXg0eGpUVHJjb29qMHUvY3FocXZ0TVAwUXVa?= =?utf-8?B?MjBqZUtSSURzMHZsdGZDT3J4clJlZzlzRitmK3IwSXVYMVU2NU5OSEIrOFlJ?= =?utf-8?B?bzQyMTNsZjFsZ3dTaU5yaXRkNVVRSURybUloaE5VSEtwRWVYT1VCWVJ4WVEy?= =?utf-8?B?ZGlqV2E4aUtsSDdEZERWZjRUZStUSHV5ZEo3ZkdnU0pkTVFoTU4zcFJSTm1v?= =?utf-8?B?WWFoREk2QVF6UGI1eTZ2S2g5Ymo1M2x0ck4yb0RHM2tybmhUVmpwOThDaG5Z?= =?utf-8?B?U2JjWE45aDREdDdVVlNoSVVQY0xadVpGR2RxR0dILzdKbW9JOGx3azdSSndW?= =?utf-8?B?SDV2VEFtUWZEendGZnZ4VE9MQ0oySGlzcGpEeFhtUU9Xb2FsWm00Wk03QTRz?= =?utf-8?B?RWJwaytxUVhHT2Y3S2J2MlhlSGhJWGg3UGpOOWV6clhMVHY3bk5BQ3h6MHdr?= =?utf-8?B?dHQyMFVIcVF6K2R5aSs0ZlYxV3I4VVpzZTJpMDVoVEwydnBjdkk0TE1YZ2tm?= =?utf-8?B?dStqTDF3cXJlV1JGQzJyZWRQdlhxaFMyS2FrMVZjZU1zNUY2b1lLV0x0aXl6?= =?utf-8?B?bFprQ2NBWmo5YUlFRGZSTlJLQTNWemozNk5WeEptZzZObStiQ3BqcksxVERm?= =?utf-8?B?cFJtQlhYRUpQRys2a243dEg5cEtuSG5NakIyNmFSS2crV25hT0F5RDY1ZW9v?= =?utf-8?B?L1NvS3hEclhTUWV2TXZHVzVpMllNeEcwYW1vMlJXa3g4TlM5MVgrZFF3L01Y?= =?utf-8?Q?/DFuPX?= 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)(376014)(366016)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TC9pYUtIN2Rzd0MrSnhZVDJjTkp5RXNneHhnWHQ0UGF3TkJ0OWx4dGtVNGxO?= =?utf-8?B?K0dDaFlYZnp6U2RoTklEY04ySndMMGR0Uzh3cGd5dHF0RWJSUC9TOUppc3hw?= =?utf-8?B?anF1ellRL1ZqbGNSSmd0Uk4zOUw5b0xxbGdDWW9pdXhCS2Y4aFZxTlRReUNj?= =?utf-8?B?M0pqYkN3TWxVWlk5dC9wZW9DSFhZc24wWU5kVENUOFN2dmxGN3hwWkpLeTFa?= =?utf-8?B?T2dKSnhzOWM2YWFBdHBIUFc0eGdIeXA4U3VtTGZlcXdtNEpTa0xhWkY1bFZB?= =?utf-8?B?QXlXVUo3ZkU4YlZUTkFXbG0zaHJldUp0VGUwWmlXMGtnbHVpKzBjYjZUQU5B?= =?utf-8?B?bTQ2d0tyVmR0a0RsdUgvanBvWXF3aVlyeGg2M3FOenJGdXVOYkpraCs5enJl?= =?utf-8?B?b2V1RnJPbzF2THVTWTlrRUFVenRtM2VoZ01pNFZIcnNkWld5UVBNT2RVRmlP?= =?utf-8?B?WnFaUTY3WjJWaEE1N3dWVUJ6OHF3RFlUZ2MxZXdwSE5mWGw4M2F1RSt3UVRn?= =?utf-8?B?WUNjMHA0Um05MWU3VzZpb2UrWEhOSzJnclR6ZlVYVmx3cmEySmxNNVdjdnd6?= =?utf-8?B?UEdDM1Bub2NZcnEvRXN4L2NyUjJhOGtWd1VPZWRVSVhDZzZ5NGtKZW9QR2NN?= =?utf-8?B?L1doc0tFOGUvNERMVVV1N0ttUFhEdkhINXQ5MDlWNWNrbWlxS00vYUJieTlH?= =?utf-8?B?N29JVFU3STBmRDg4N2tnZ1V5eVEwZUxrR0R3cmtsUkNqOFh0d09hanVxZ3o0?= =?utf-8?B?bXFCcGtPZW55QTNZenhXVFNybjFaeXo4RUIxWXVwVUlQWDcycUhKcjkwakVh?= =?utf-8?B?WUx5dG4zVGNWRGpDWTBpQjhJY3hDZTZ2OERaOVlpaTlBMmxWb2dyM2lGYkxC?= =?utf-8?B?bmZGQ2VUVm8yK1FjVkpMY1F1MjYzeWc0c0orSVI5Y1hNZGY4OW1sRWZQbi9Q?= =?utf-8?B?UkFXQ2dLRGtqcXF4M1F5WmpBZzVCYXNyODRnZ0V4M3lXb3JWY2JRRlBFajJy?= =?utf-8?B?Y0dzOXRydVpzVThjOWZXK2FUUEJUcERIL0R3WWVlSnI4WEhhd1ZGNWtDQTJF?= =?utf-8?B?VWVYd0RRMjdra3UyVzBZL0ZRUVFXanY1UFMyb0JsUHlhQkxnTS96aGllSHo1?= =?utf-8?B?TXlaYlRVbWVuYXdzRTJ3bU01Y2hRdEIxcFZObVdsdTZTcEVHV1FibXVFOWRr?= =?utf-8?B?RTlUbjcrVUpLNW44YWEwMWxqT2piZ2gzb00zNTV3VU5ET0RoWllpU05peVJ3?= =?utf-8?B?dk5KeDg1bmZsdXdPMVJDanYvK3Byc0FzQ1hkU3VnUEJzK25KdWMrMW8yZm0y?= =?utf-8?B?eUlRUkpMc0NEMkYvbmpMTExpSlRCbEFUWHlOR2FnUkRZZmswbDAvWFJkWFNr?= =?utf-8?B?SVV2Z0lIOEQ4czRjQldpZnNzTlE3N0drbVlPUTdPTk1TNEMweDFTZFR0OFov?= =?utf-8?B?bE4vWmpRQ21XR2VEY2lYK0d4Z1l6M29PdnZ3REVCbGZHbmIwZklhcm5DVDFi?= =?utf-8?B?YUZrU1AzZGF1VmdOc1JvQzBzT3FKbzJ6QU9hQUhsMU5hYkpRZlBuczMxbkdT?= =?utf-8?B?SHVBblBXOHBtbUNuTG1KTnNpZndBSTduRjZJdUQwWmhzVHg3dVcrbDByUTZQ?= =?utf-8?B?bGlSU21aUDMzY3pnZlNSSDhDdFlkRFNneVJQU2t2cEluSzIvMFFDWGhhQ2Ja?= =?utf-8?B?dmlPNEgyY25pbUtyK1ZHWlEyTm1qNm5ZOUFQNlhQcTdGOVQydkZNeUVGUjRy?= =?utf-8?B?VUhUOU84SlFrUHcxN2U0MnpJZkRVYzNPaEpWUWp5cFFldXdZVWhHUDdiUExu?= =?utf-8?B?U1g0UTUxZUhpdUJ2NzRidGRFYk1IeHJwVG9KbWNSN09temFtdG5ObExBSjAr?= =?utf-8?B?ZnhYMSt4UnMwUGRkVXZJTXhET0V2RzJuRlBTWnhPd0xhNk9JbmtaV3ZHVFJt?= =?utf-8?B?c1ZYYVp5WWdKMEdMRnVwaWpnbkUrbUZHNElLQnBYT2lMUHUza2xQR1NSWGRV?= =?utf-8?B?UVJDS255aEtxTHZZSWtkUHpjNzh2OTNjZVJWTHBQcmJVVFlFcEp3TDZhci9x?= =?utf-8?B?YVhOQUhoQ0IvRGFjZ1BaYUVpbmYvRkNTSUt6bGRheHUvSFZYOWw1QzlXa2RK?= =?utf-8?Q?oyQd3VfJf2WDJAEdqECBVYpkX?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: bc2ec14d-9d7e-4397-06da-08de1d5b0432 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 17:36:28.3972 (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: JDSe6WeNCKVg67YycxoIbtINgMpiQzqlpANv92U02u2saCNzOoSj+qtFfLeC0bJZ1AMwJP3aor66VYIcLb+mBg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB10989 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 v9 - fix typo Deprecated - remove reduntant master->ops->priv_xfers check. 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 Deprecated 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 | 19 ++++++++++++++----- include/linux/i3c/device.h | 40 +++++++++++++++++++++++++++++----------- include/linux/i3c/master.h | 4 ++++ 5 files changed, 70 insertions(+), 26 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..30c5e5de7963c78735e96605367= e9a762d286e86 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,15 @@ int i3c_dev_do_priv_xfers_locked(struct i3c_dev_desc= *dev, if (!master || !xfers) return -EINVAL; =20 - if (!master->ops->priv_xfers) + if (mode !=3D I3C_SDR && !(master->this->info.hdr_cap & BIT(mode))) return -EOPNOTSUPP; =20 + if (master->ops->i3c_xfers) + return master->ops->i3c_xfers(dev, xfers, nxfers, mode); + + 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..d0d5b3a9049f0b5ff65ae6c5a7d= 59444b373edec 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); + /* Deprecated, 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 Wed Dec 17 12:14:52 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013009.outbound.protection.outlook.com [40.107.162.9]) (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 639F434F490; Thu, 6 Nov 2025 17:36:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762450597; cv=fail; b=f18g33Idm6quykeMrtB9HrK1rbAkHUlfobYSMebHKmN9H4TmJjE9qSmMk0Ck6wOg1ZXbmd5m413jDcR7U0b0DNw5kA0iq8IaN9dBhdc643ZH2ANEIpOAqH0gKi7LFGL5QcLw7IPqIntyQtVg7G7UKmhr5qF5NKpIMKeUk08UTPA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762450597; c=relaxed/simple; bh=5vasvYWn6j296foC0KD1do8HEXNE6j61yOhJlnouXFY=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=oF1EqlrZamktEiMqzEKfPYd41/bk/keYWV2Tw0mljrMJlJZjlUihRXlOX+uDxtXUVm8tLoYr5q4AxHS5N7aiOSiOYM1Kv/FD7sprGY1Oxj5HNdtN5VioZ/dWlwsOlBq6hcTF3qx82bO585AfvCggMblLrFwLzw37PTNtFnaIe84= 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=DDE1gtm5; arc=fail smtp.client-ip=40.107.162.9 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="DDE1gtm5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TQ6zvHoR9IPKQwojSBSRzmSh2B+WckdFFjQZ4FqHc2gVb6ulDIHgHFq9MtDWyy5XTregm8Ne1t4uVxY/msM3LDJ6LkPDAJ2SBrdShTQ7o4dikNKDcmPWp+1iuOcr5mI6TEnaB2KruHQkzogiU+M1KbWllE7bPIbY2MLn3D6Qgdr6UNLG7A4NkSgF42ryTGC7ByolHOSQmVIDUgXUdr/iTltUAGYhFHmKTgtA6H0INDy2afNw36TN+lf9gmgUd0Mq0vPlMLTt5D4wjHGofcTNErm+g4cYUaVrlWHvfrEmIliSmY4pDHxv4RRDgoR8cj8nq5/ZywAEo4aVUBajWDH63w== 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=WTbwEVt0tUl2SV8rfjh2rP948I8YBQOOO71hSQ+/HJA0Yrl3cont43pEOMly66JOpp/M8tf5WSl3lJk5xLPFKcBUGSdhybzZhnI21debidQYuu60r82OetCTq+dTM1xTipGJ8+bFUKPt1wLqdC4clZiUWn2vei9lvDywm5qH+dKsFkTCh5RCFxp+QO8GoDi/lancPLzTB829LiFe9w33YxAzaTS0XcEmDhiKi0MtnfjEZR3a6bG2p6pZMmSq3Dqj1fOzFMI4ZUhdi4WON8YmD7bIiiFqSqnkY/e2XSnkanN+NHE1DHIuaL0mA6YdbgFgOsM80i5qIQXlIY5WlPqFvg== 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=DDE1gtm5SBUayO6bp5WJetqqFOIK6tyxItY6orO+8CXunfDRmph0gVvhM4SDixEEVwOokyejTEWa2bpyt15d3UJegzVwgrg0H6DWZ/K+Y9/oSHfv4ZiXRWKr0x7XXyz7gxz+W/n7U1KTFSU9U3AB1laaUWiK8eNXY3w7mo9S74t0rKdotLdvfis23DMW/ADIc8RM22CAGYbEqMWXBArV3nQMUpmochweykuLKe9z5kbNNDS/d9Wu3kAbDn10qXMZlewswzQfXSby3NjcClJvZ0KdQzQKg18rXIQ6df8YNd+5VVP0g3drxRbFu8faarz3oXC8WXRNJYwGkykNVDlLNA== 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 GV1PR04MB10989.eurprd04.prod.outlook.com (2603:10a6:150:200::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.10; Thu, 6 Nov 2025 17:36:31 +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.9298.006; Thu, 6 Nov 2025 17:36:31 +0000 From: Frank Li Date: Thu, 06 Nov 2025 12:36:01 -0500 Subject: [PATCH v11 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: <20251106-i3c_ddr-v11-2-33a6a66ed095@nxp.com> References: <20251106-i3c_ddr-v11-0-33a6a66ed095@nxp.com> In-Reply-To: <20251106-i3c_ddr-v11-0-33a6a66ed095@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, linux@roeck-us.net, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1762450581; l=1345; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=5vasvYWn6j296foC0KD1do8HEXNE6j61yOhJlnouXFY=; b=ZYUcAtAIhhxb5qjq5ynYsqaZHezmxx2Jx29zCAX0/J9QbSDs6qmVCv0x/wVdNPpEsfPA+uGOP lap+Sg5o0XzDos6VuFP6BAzT3hNcfSggJEIhatideN+QTJ/H3ekm3Sw X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA0PR11CA0111.namprd11.prod.outlook.com (2603:10b6:806:d1::26) 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_|GV1PR04MB10989:EE_ X-MS-Office365-Filtering-Correlation-Id: 6371af2d-023b-4d0e-bdb1-08de1d5b05f4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|366016|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dElHM3JFUzViRjYrTUJrVytSakpkV09UL1ZDeERXR0V4MzgxMFBzc3d1Tmlt?= =?utf-8?B?R2lOY2ozQW1JeFZYdG9SNXNvQTlsZkVxaWdqY0JSQmxvcnI1T2dGYzJrUWFj?= =?utf-8?B?a1VCWTFSSVNIMlhuVzVKWW8wQ2xpT1lOU3NmN2hxODN1Q0RxNmdYUVdSR3ZV?= =?utf-8?B?bmtHREc2TVB4SXV5cktFeWJIb3hoMGNhVnBoUERiVTRhWlRZUnI4TmlYcFZp?= =?utf-8?B?cWZxOTl4MmFmL21FbTRISE96L2U5elJmS002QkUxZFlNblNqU1ZyMHlPT2l3?= =?utf-8?B?Wlo5aFJoMVhqNnBFaEtrOWhla3EvTGNwUkNtV0cwQlRFa1Z1d1JaK244eEd0?= =?utf-8?B?WDBDKytENFY2cFY4bE8wcVBFd05JVEVZOVRVSnhEQ1pNVWEzdk1VRUp5ZGRC?= =?utf-8?B?TW5XVUdnMzZFZUlNdVp5RkttWXFYN0Z3RDhtVi9sQkFFYTRQOTlsYnFVQUp4?= =?utf-8?B?bThCWGpNL3BYTndqKzgxcUV4Z3hrTUlzZVhLTW0vcVQ3VlVyekR6ekIvVjNU?= =?utf-8?B?SUVCTDhTVXh3VzE2YjNxV3BNT3JnVFZMUDdYREovSEJQemI0dlZYYVl5a1JB?= =?utf-8?B?K2ViNWp6bmxYSEFsd0tsNEMrdUp6Ky9GZml2WGhsWWRLNVRWemdyeU1vNlhz?= =?utf-8?B?ODZzcTl3VWtIeXpjOCtmcWVHT283V0U2UXdMc0hGVlFhNGVmV21lTzNXaFlM?= =?utf-8?B?WGdoREQ5bkwyQW5Sc3FSTjdXMEJ5WUJsSlFGQWJ0Y3hZTGo0Ry9xREtSMXQz?= =?utf-8?B?T1ZJazlmVldXMmszb2s5UlMyd3BrLzZnRGk4ZGhVZlgvczVLVGpBMmpZRytS?= =?utf-8?B?dUNqbVdwZzlRVzljV09oM0ZvK3ZxZWJlMjJDUlhhRWlyT21UT1pUMENvTmJF?= =?utf-8?B?UVR2eVlEaDRCU3cvT3EwNnRGc2JQWDJ6NlVwSERabEFjZ3V4SVNqWXhXdGR3?= =?utf-8?B?NnE4ZmcyUmZwUzk2NW1ONUZiWGpWM1RrT1NpT2JtOUxsNmxUSmhkSGltbEw5?= =?utf-8?B?NFF4ZkRSa1ZoN0laYlB1WmNwQktBNjZ2VDQ0VGJySEMvZE5qVkNtdm5wZUp4?= =?utf-8?B?eXFubnBoRllSaldFUkdZZFVYTGZQZUc1YVQ1d0Jsako3WEdZV3U4RlloNldQ?= =?utf-8?B?TWp6N0pFajM5VzB2UEhWSXVRajNIMEY4cTZ1cU9NUUZMdU5iMzFuVXhtMDBT?= =?utf-8?B?SWdQMC80Ym1paFJuTjVHSCtsWTNvZ0k2Nm1teUduaXdyQzlabWo1YU1nYWVD?= =?utf-8?B?c0J2S0d4NmhBL1JYMTllRGYyc2VVcUM5dmpkNkRiSDFjK1Z5VzV0OCtJbEdj?= =?utf-8?B?c0RRMXBSd0JYZndBQm1jRUxGT1EwKzRFK01jT0V3RmN1NEJoREo4U3M4Q1Rz?= =?utf-8?B?WGFBWXNVeWJYOE1NZy9LSFV5Sk1La3BGR0FPSkE4V1QxV1I4NXp1RGFzRE5u?= =?utf-8?B?SmtFaE9zOHlaSkpYZDR3UHZzUkRkYmFKREZNMTdLM2FGZit6ejhHK1RTNzBM?= =?utf-8?B?djA1Y3dyaGpGbTlaOGFuY1lZYThkbjZ6U0E4WittQ1gyZDg0Zno5QU5QaXpM?= =?utf-8?B?a3c2OWNEdXpvTHNTeWZsd2VuK0NnU1ZhUmMvWGFkOExqVkRtWTkrRmxsYXp4?= =?utf-8?B?MHlSOGUxQnV6Q0pYMVRnc1VkcDFwbVFLVTQ3dCtjbHhBYkl4SEkydmhNaWlJ?= =?utf-8?B?dXMvZ2Z1UWxXMU5OQmpMMld0SzZzNm4rRzNPQStuS0g4bkhaVWhvaGVHLzYz?= =?utf-8?B?cVgzRXVwdm14b2pIa2xPeTE2VmVjcVNyZUNTa04zMUxZNHFzSmlZcUI0NzRX?= =?utf-8?B?U3haVWNDTks1eEF0N3MrTzcycVEzb2d1MWJFVy84VU56d09lRU0rNXZ1ekVk?= =?utf-8?B?MTJqMDVyaU82N00rS1FhSzJUcndVTm92SEVCOEpmdmZEYThnNnBjWmNMbTYy?= =?utf-8?B?Y1dic0xHV2pRNGlkL2lINmFRb3RGNXNnbEdDRVZjcStXZkFwemE5bUhEYmIv?= =?utf-8?B?aEErUlVicFZmREZ4UzhGV0RrRk5hNWdIN3lkaFFOZmVrdTA2YVl4aEZ6a2V1?= =?utf-8?Q?CL6GIV?= 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)(376014)(366016)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dlEwaWZCMDE2ckN0RzZHYTZSZXIxN2srSTFLSHhBaEUvbm9GQnEyYkt5N1JZ?= =?utf-8?B?QXJ3RU9qeHZKOFRoS2hpSCtPM1hBc21odzhLb3JSZ1hESlI1TFdHL2dCSTJO?= =?utf-8?B?dFh4MXUxWUJSU2NCeTdYZmdKL0lnRm00bkppQW5PRGQrbHYrbDNkNnZHZGVa?= =?utf-8?B?bVhDM0plV3J6NHVmVFdCK3FpNWUxNTFjbDFMd0JJK25MZHZES1lvSnhkc0Rv?= =?utf-8?B?alU0alZONms3SGEzeUFRUEduZm9hSXhNbkRNaEVoS0xyZVpZNEFOZ1J1b21Z?= =?utf-8?B?NVh2TUZrL1hObFRodlNvRzl6T0N6S1oyUWplRDZ6R05JaXpSS2d1N0dsWFF4?= =?utf-8?B?RSthOUdVTTJvZUJCUmV3WnpNV0p0dVliOG5qdU9Wa3cwMnF2ajRPMlBoTEN4?= =?utf-8?B?TzViSTR3RFE1MnFYRUpWblV6ZldPaDI4Q013QnZGQnVVOGw0UVp4SUpXZkI1?= =?utf-8?B?N1YrS2ZwUTI1eHhib0VjT2pjZ3NLa2Vra1FaQnhWaXk3eENSQS9ZeHlkdU5U?= =?utf-8?B?d3RNSEovVnh5Mklac1MxR2x3ZEphRjJZMWQybVEvdkhUTVBZQnN3MTBNaEpy?= =?utf-8?B?M0lVMFNLUmUvV1cxdGJVSGt1TTB2R2VrUVhkR3FPZVVjUmRNVWdwTHBxeEV2?= =?utf-8?B?b2dEU01RN3pxZ25VTW4zemgyZEs2L09YaEs2L3l0bCtGWW92eGlMemM0dXVO?= =?utf-8?B?Y0JjWWV4ZzMyQmxiV2lUR2ZBL3VKUlNtbVNJeUc3UFBEWlJqRGhCRk4yTlMz?= =?utf-8?B?c3hHZUhrRERnMGtBcU5WMWZqdDk1YmpMVzZMY0xFTWx0bnNYSktjbk9OekFk?= =?utf-8?B?eWZTR1ZFWmV1bmRnSHNJSjZHVnQ3ZXJrOHd1UkJZNkdkeWNQQzJvSVF1SHNU?= =?utf-8?B?d0hLZ3F0dTUxbTBnaThKeGp3b3Z6aTFlN09hTE5aQTlDelBEVG1TZ2Q1NjZz?= =?utf-8?B?eWNUcG5rVU1xZE91ZWlQUEppNVoxYUtOdThnOHh1SUVycW5CczNiU2UzMUZN?= =?utf-8?B?R1h2MzJYaTZoUUw2bWRablh1aFhUWUtwTjBPNlFZUU40Q25NNHJ3ejMvMUQ2?= =?utf-8?B?aVZqRFg2dWJHNXh0NWhMMld6QjdWNVo0QXNoOW5Kdnp2WHJwdGgwekZQeGUx?= =?utf-8?B?ZTlOZGpsTEp0Y0t5K01GcXVKQ1Bvc0xwSDZkZU9GUEtibHpuVVBPRGFwdnNi?= =?utf-8?B?VHlyU0NQUGozWFBwTmc0ZGN3MzdRZit3SFB5cmtJWGdINGpNREpZTldrS0s4?= =?utf-8?B?Z0d0R1VackozZVlERkU0NEVCbzVhL1RmdC9nY05aV2hOamhUdGJlZ1lsdEI4?= =?utf-8?B?bGUvc3FVWGo0bDAvVWtqZ2hPUjZCL1VwQWZtMktOT1ZGcEZySEx2UXhXOEJt?= =?utf-8?B?bGdUT09vQ0FVZ0FCU0w4L20xWEhrdC9PYnFtZE1NOUVha2RrcFQ2dnJIRFJu?= =?utf-8?B?VlJGUnYxeWxOS1JhY2E5SU03MTBFQXVuUXNqblloVnFjTjJiREh1ZjdVcEVp?= =?utf-8?B?SklVK3pJUElhWUxobEFoaTVZNG1USk5VUjFwdFQ3Y2o0OGIzS1hCZk85SzJZ?= =?utf-8?B?NGpoMDd4Z1VHOStseUwwMFNhdWZCQm5XOS9xYi9LaUcrbURleHVCUWJFYkJm?= =?utf-8?B?cnZzZnFoNWFoTG4vQ25INGxhcThNYmxQRlIxeTg5Y0I2Uy9razJVRFU0dWJX?= =?utf-8?B?T1ZweldTc0ZFaGdQTjA5QjMzQkRnZlVGRWQyQkowSkpRNXlSU093Y0lQU2RD?= =?utf-8?B?RnpsRld2dDZxN1dNTFYxNjlCcDhsMnNMdUlMY1k3N2phVjc0WmZwYnNnbzdl?= =?utf-8?B?cTJUTjdxZTFwNWNFSlo5TkZlREJtMDV4MHNGeGU4ZkxPTXNPcTZlNFcwWWMw?= =?utf-8?B?a1p1eVQzNERyTGwrZlEwSTBnbGlWSGlpM1FKcXVJeE95YkRIeTVsdlpZbTVB?= =?utf-8?B?S0xWdEJpbzYwc2ttQ3RRcTMrNlZMS3JOaUh5UmNLalFlbEhpL0diWXl3aWtW?= =?utf-8?B?V0tlc05EdThjSXpFTUdxVUZFWkRnZXdubUV4VzJxV3BMbFJaekZ4NERKcFdI?= =?utf-8?B?VXBPSTRBbDFkZ0VKdkN6TXdxMXdkUkIySXJPdjBKaU9UNCtxMFZ3UmlNbHNN?= =?utf-8?Q?BGJd2ADgK7zpT8CVuz7pzLV/E?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6371af2d-023b-4d0e-bdb1-08de1d5b05f4 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 17:36:31.3622 (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: MNPY86y4xsZ+4tJ4BQe8+pcbyF+/XsIcbbIiJiGhNBpAoGbfaOQBy+GzVy9in935ErF1bpgAjOl555bhFz3RHg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB10989 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 Wed Dec 17 12:14:52 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013009.outbound.protection.outlook.com [40.107.162.9]) (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 9B54534F46A; Thu, 6 Nov 2025 17:36:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762450600; cv=fail; b=POeCNoNIqpgrOaaQbf2kKBskzxg46XQ151pLbA4YQrvkX9iSPGDHmib1QcrBV+qo7y3r9djqCMWtSvYNlRnMoLASIJ+yIiQl6iNgLqCixZYs4WErJqPzYG4Or+povoGeOnsuPonADgeSlgqxynUv1YmHarN/cq5wEZ5u50Wxt6s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762450600; c=relaxed/simple; bh=HH693NU8kzd+Iv3hWINyPBycptPq4xE1Q1XbUVwF0WQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=iTnxQ2zxd2/awFGIG/h5To1y5Gs2l3z2NFHJmq6P2cxo93mkrl7ch7SlNDo7NZha9psmcsYvBaO3OgmHbXoLunqlur3BKi3Ss+N522pwn4uD/YfezMbHkO0uHnts2NpxTZO4fXmkzEHJw5khhr/SsR0wr7T7tqfIXZm9j0Nvv/8= 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=eNt/kw44; arc=fail smtp.client-ip=40.107.162.9 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="eNt/kw44" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uYyovGNxUsEJ/a55n5EsmqUWvU8Dgr3w7tg91Ey96XrWhKIyX013UyZL04IJzp21UsaJFSEEbQlRNmUc17zLVAuNEl1xOFhsKQdCJNIZxs/V8D2Wn5fiEBntwr7cPXjGuxc+2LCRDVy5wHTENs0uKkI02+5VxxpX3oov9aq4/88/xX+Nfs7Wv+0jDbae1W/0fet+qozBuvtkf6K6Be7BdCnwI28yJYio2gMIqgnPyvoaCE8SCb8A2U/pggjFcUgszoHMocNXkVaznNYfWANWZYeUMCevrfDyjpJr/OVPn0zBhhQs63ktCmKvgz3bJD8LXaa33WKs9KJSWtE4K1cYNA== 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=IRS421sAVdh5SBURJ7gQZY4fq751pT2NubBhengc7gKHSc/QUdTjF857MAFSleA9BGvneEhjqpGVTlidaVwe3/qbZy85SjUEcH1Z6oA3PZ/tk8wDMF2vG5RvDpPQurnq9KLAL7/UdrQt1kAbjoYSB4TZYcZtlEJv/v8KtaPcJxb6mzHvrXpTou4PKfMoMhMUQymxNmp+Bxhil44eV/5rJAzafpW3Vy0N4TpT5h6zioU9j/xH7kYvRwoqKtOkQ0JXXdfbx8kSBcbnL8teV797Ry8xPoIvRisqB6GZTNyC2AZEYnu9JgPp1sQlzbu/NUMs5MrTGGbIH0r7kig8EeIseQ== 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=eNt/kw44nPqtFXlHFM4q129ydm4Dq/rFrzAcw777TR4jBERU6mkNrMNhLndGvbNg4Xh28NDcm6p3dGcBwDrVq7xY+9Ju6bisGWfGtUseSM3IGELOVByOYvIbNtQOLpqCWunbCH/L0VRWcm2fSdWpS3ioXjwVZrnJGeplR/M0rVgLIlU9gAigqxyduVixUD8gAdm5cY1R41uKA+jsfgq6wCyQdWnQM835hMZRLGZHd6DqiIhJTJRMtSXPRJSpaIwRpJzbZHfxLOU59ARZPWVa8cvG+BRZnKT8IkjYP8TSe6OHm8UTNyaL6r30jdZKfqBBAEbZ0BPUcGXgNgRq3uqEUA== 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 GV1PR04MB10989.eurprd04.prod.outlook.com (2603:10a6:150:200::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.10; Thu, 6 Nov 2025 17:36:34 +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.9298.006; Thu, 6 Nov 2025 17:36:34 +0000 From: Frank Li Date: Thu, 06 Nov 2025 12:36:02 -0500 Subject: [PATCH v11 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: <20251106-i3c_ddr-v11-3-33a6a66ed095@nxp.com> References: <20251106-i3c_ddr-v11-0-33a6a66ed095@nxp.com> In-Reply-To: <20251106-i3c_ddr-v11-0-33a6a66ed095@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, linux@roeck-us.net, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1762450581; l=3017; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=HH693NU8kzd+Iv3hWINyPBycptPq4xE1Q1XbUVwF0WQ=; b=h/GIAgpXBVBMSmNhJmqocLypsA7JAfCxAjZUbbKeQ8q/jzznNz8az4KeCkQsJtkGTnPM7hAWT 8QVVyNQ2gEwBb8P3cWx3A7AJG1rWp6rDFiA12+ANZVEG/FHxojSxBKp X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA0PR11CA0111.namprd11.prod.outlook.com (2603:10b6:806:d1::26) 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_|GV1PR04MB10989:EE_ X-MS-Office365-Filtering-Correlation-Id: 5ddda24b-a866-49f6-6965-08de1d5b07bd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|366016|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VXFyOHZSTkNzWUVqU1ZLaGhPWHJZb2E5UWNyQ1hCOHFsaDF2aFg2cXVRcG42?= =?utf-8?B?c0NabER5bU1tRCtiTmNrcnJqd2Y4bnUzWWVZdUNxc2treE9ESE53dnVETlpQ?= =?utf-8?B?dXNMczZwelVSbEEwOFVrK0dXQndrV0d0MWRYSXdBTWtzbVFwVVZwbnZXdVF3?= =?utf-8?B?L253VkNxUldrQk5FNWJzQU12aWVVZ1ZGZnJlMEYzMmdEYzMwNjhlR3FTRVF2?= =?utf-8?B?TS9RNzBQN3hFQlRGY0x4WXoyUm9USlVPR29mZ0VXbGFzSmpNZ2dGU2hXZEJj?= =?utf-8?B?QjZ4RDN1c1AvRlU1Q0JldXhJMTEwUlYzYzNvOFV5bW1sem9hWktWSUpnRnM3?= =?utf-8?B?Uk01ZFVYMjdKSVR2NWw0UXRLVjIxSExMaGE5Qy9UVUNrYUFvb1dQM3ZndVJp?= =?utf-8?B?M0FROFlUT0NNU3NmSXM5T3NXWERXZWpsUGJlZUNFYUJ5MjdRUEF1aG5IM3Rl?= =?utf-8?B?bFc1aVdSeW9DblA0bURFODM0U21jN0hyQU80bXYxTTFNeDNDUk00OUlMS2F5?= =?utf-8?B?N2V5YWJieXZSTG82WENlUWQ2SGhlUnBPSXczaXpKMmNDK3NtbVZzNnE5UkFM?= =?utf-8?B?YnJ0aXJKeCtmOU9hK2FNV1RSWFE2N09QN2F1eDFjUWk5bGpXQjFnenVTYS90?= =?utf-8?B?b1VvTGUrU3dIbmZNbm5oVm9sTXVuZGphV1VxUXJna3o0bGIzTE84VE9lanNT?= =?utf-8?B?U24zWitoMWNZR1Azelgyc2dUOEl0dkh0UEQ3RWV0clE5REFPcU9RZCtGSFFB?= =?utf-8?B?UG1rekt2OTR0RjNQenhRclJlT0tkcS9ZY3ZNWGh3aHFiTEdhd2xtNE5WWFVl?= =?utf-8?B?bXdob2I0YnZwZGpuVWcyTG9aQk40bjhZTXFranhDSE9ubmJGcDlIVzBxWG13?= =?utf-8?B?R0dtT0RXeWJmelY0R3dxTTVUSnhyWTdpeEQ3dU90MzRPOGJ6K2xXeElrZmla?= =?utf-8?B?NlpsMkdHUmRSemEvWE92WEgvYzN1VzBoa0pncXAwSGpONklHbDdiMWEydWpR?= =?utf-8?B?ZFVHSlFtS21hQmw1Q201TXUyUFEyYjk0VER1TjM4Q3gzYko5UUhub3JyVzMv?= =?utf-8?B?aGtnMzhiZGF1eTFSVTFlcC9sV3o4WDF4NzZ0U0pDczJsTDhlRDFGSUlIa01Y?= =?utf-8?B?aUdPRzRVQnNmekE5bzRmMW5MTFJBNTRRNXZibTlzL04rUDlZaUEwRTBVSlpE?= =?utf-8?B?SjB6UVo5WjZmTWhUZDZzNU5HMjRhTmc5YTY4OU9EbDBaSlllS2ZzUGdnZ3g4?= =?utf-8?B?U0JhdmtUaGJydDgyS0xJOU11UDhYUXl5TTVxMDdsTkRqZm1VNE1ETko1RDho?= =?utf-8?B?Y25IaFl5YUFOL2NXd2IyMFNMTUxJVi9LZHVYZ3EwU1VtOUpycEVVcmdjMDhv?= =?utf-8?B?ZFM2Q3hDWEVNYlFFZ2pZR1ZiaGZwVFIzekVSMG9CWjlLV21KT05heU5pK3V2?= =?utf-8?B?c2Ivem1pSXlRb2pUY280ckkzUTVTbUw1U3ZDL29DcXF1L0ZSdTE4ajJwQWtH?= =?utf-8?B?NFZ0VjJ1NVF1RHhIWnNTVTJKdCs2d0NaNUpCemxnbVFsQzI0UXdqQy92Vlda?= =?utf-8?B?bHJtblYzZUlHVHhPUzArTmNHSDFrQThQR1JyQTM2Y3hWVzdRTTBqZnhVWGdY?= =?utf-8?B?UzM3bHhNNk5DNkZySE4rZFpKREh5bzhYMHdlRXdpc3N2Z2hvbmVJSmNydjNW?= =?utf-8?B?MG13VmwrbHlNb2tzbXlwTTlBRmsraVJJN1lXcVl5azduM25aNEc3NkhuNFJa?= =?utf-8?B?V1g3T25sNUREd1RqREovNnJaYXl1Q0hHTWJ5bTd5SUxLU0Z6LzFvVkxKT2t1?= =?utf-8?B?SlVlYjRBcDFXS2VUS2RxWndhYXQ3cjhqbUJlUFhMQm44VVg0ME5qbHVUWlY0?= =?utf-8?B?MjFEMmFKWUw1RUFoQ09FcVpLUHlkajlmdHF1RlBsWnpnL2lBNHI3VTg0ZDNQ?= =?utf-8?B?bjZyeUR5Z1d3V3dmR0s0NnFwaEZpekVVa1Y3dFFLSE1lYkp1TUI0MzJpeUJ6?= =?utf-8?B?YWJMbjVqVE9WekYvMEN3WE5uL2UzOVkxbFY0MCtib1hWanpiNUt2MDdEYVdt?= =?utf-8?Q?Y0XimW?= 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)(376014)(366016)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aDlnM1V2RGVVZTFQZVJFdFZ6Rm9lNjI1OGZHSThWQjE2NGtuSDNtRnVBeDlx?= =?utf-8?B?QkF1TEtZLzJpck5WTm5mNlB0cWJoV002WW55WmI5b2Y2Z1d2Ym5xb09hb1Iy?= =?utf-8?B?amFiNFJlVmFDdm9WeStmc1BNWVdlcmFGUnVobUxSUDVZTWIxRVplRzRKaCtN?= =?utf-8?B?ZTQ5dHhQOUVOdk9sV0M0R2tyUFV4dFl4cklwbTRhWElBVEZTVlBPUDFVVEFi?= =?utf-8?B?REpXeW1uNVJVSkVYNWJFMGFpNEpuaDlBQ0tGR0g2VnVUMCtqb2E0WUpVa3Nh?= =?utf-8?B?VE90RlhmNVRYTE5qWW82MTgxd0xCRnV0dHJkTlpHVi9HTURZOW5CSGg2QVFG?= =?utf-8?B?ekFsdnUvdnJDZE50bnRteEM5YWxsVjZnZEFjLy9uZHpGYWJtRk55amZTS0Ns?= =?utf-8?B?NkpZUVNUYmdlcnJZV0FZWHVTU1VERFY3aFVta3hiTERvQThBaHczRjNFeG1Q?= =?utf-8?B?amxBVWFOUEdZVGhIb1YwNkd6YXBrb0FmaUNVdGx1ajdCUFlsU2VFbmRvWFhC?= =?utf-8?B?VnVCTjl5MzVjSlpMTk1VU0xuRkRIYjdPMitoMkM2M1Y4aHRwZnlBalByRnA3?= =?utf-8?B?Uy9oY0hMaDV0UTI1YzhpZEpZY0lId2hiN1JhalJyMFBkM1VRemdmVHNuRE5s?= =?utf-8?B?WlNQZWs3KytIMm9sWm4xQlozSzdJUldFclkxODFMT1FrRnZaaDN2NWhtejZ3?= =?utf-8?B?bXZkeGs0dEJtM25Lalk2VWxBVVp2bkNXWXdxQi93SjVDVTd4ZTlsbnpQZjFO?= =?utf-8?B?ZlA1OFplMFQ2elpDZTlmYmhjVlgzMWlrTEVxRTFpZUJWcnMvZDB1RDJzRVBK?= =?utf-8?B?WlJjRGdjZVdrU3NIRURTcGhnN2xTL2wzM0txOVFZZmhmaUVPZ0JOOG1PcXRt?= =?utf-8?B?NkVwR1ZyRTUxeWlCTEoxcG5PVFlaMGt6Q3cvSzdqeXNvN25udGZTSjRnZmFp?= =?utf-8?B?K1NTV2RUczVPYkdvVFYrRjY1d3lPM0dCMkFCNFdodHFGeWNQcVpnUmNHQmJV?= =?utf-8?B?Nkc0V0tFZUZrVk8zVFRtalVGOTcwYVhIVUxEbkNETnRka1R2QjJpOWlNK2xt?= =?utf-8?B?V0hiNnFBWTlNOC9YaWpVY0NZOWNqb0dldE1JUTIyRG9IY09xdXcwU3UyUlRk?= =?utf-8?B?UDhVRnlLVFo3aWlLaEx1bTVES0RyYk4xdTR4RStrakVVNDRQalhHazZPcEpT?= =?utf-8?B?NWlJejgxWTZ0dnBiR2ZTM3EycjVMdTJwV2FiZ3JvWTVUeVdPMUIxdjZtRzVJ?= =?utf-8?B?NVN1OFBEY2VDQ2NINU9FdDR3ek16UUgvdEdOMldidWNxVlNlM3NmQjkzOTNw?= =?utf-8?B?UjNld1FTOWlybkVpbmk1dGU3ODVScG01ZkJRSFp1bjM3NTZvWjAzZnlwQW1V?= =?utf-8?B?RmdhSWlXSHYvUE5vemxSYXYwS2UvWE90Ny85UXlrQytRZkV0aThvbHVRdCtm?= =?utf-8?B?enV5a2tzR1lKbmxTN25kRUZkS0FwYVR6VitPaTNURkRZR2dTYXBHaVlIaVl5?= =?utf-8?B?cVo2dkF3VDJaUHhVNlhmQStIWUhYekZtdktEdWwzS1Erd0lZd3JudGRONnpx?= =?utf-8?B?eEhCcTVsNXhSd2pCbjlESERTRmFFSUtYajh4T3FvcUFqVTI4cnpFcVZ1emla?= =?utf-8?B?K3F0eWpoZEh1RTlYUzI3MGtiMFJrSy9aUjRUMG1NS25FL1l1ZUp4RDhUWThM?= =?utf-8?B?MTdKaGF2dWNrWFZxMU5qYkVzQ0xLcTQvUjdRRm5JV2R5RkQyYllybk8ybHdj?= =?utf-8?B?bktKWEtpSTRPcjZOcWI1dmY4bW5SU2NXTlZlMlgzSXZBd1VVY2VzeHJHemRD?= =?utf-8?B?ZWZRV212T0oxY2hicDk3eWVjUlpGdExsREtQZCszMEZpT3B5MTVsbW52NW5X?= =?utf-8?B?KzN2RkxqU0V4UzBpR21NVEpFblR6MHA3ZUFUczlTSWxMQjNaMjBNQjFSazBZ?= =?utf-8?B?bDJIWWRnTEVnN2FxWkg3ZXBOUVZOa1REdnh2d2hRZWhDYTJyb0lOM28ybUlG?= =?utf-8?B?MU45ZC8wMG0xNVBzTm85VmdieFNTcU9kcmh2WFNYRTZzUXAyRFM5OStkaUd1?= =?utf-8?B?SFBpLzIzc1dwaTRYYmpCc1IzRzAzNEFsVlpxZ0RlSkVwMjRkdUlDNUJzS0lr?= =?utf-8?Q?zbDbz1fdoQPwSv0WAqD69dUdv?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5ddda24b-a866-49f6-6965-08de1d5b07bd X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 17:36:34.4023 (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: SygSFzycoNMUkvoOfSLgTCKK/qR2QCgHsBLggJK7Ad1xAGkK9IRA4jsDZyZGzHTB7OZVZGPSkBPGgTP41ctM4Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB10989 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 Wed Dec 17 12:14:52 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013009.outbound.protection.outlook.com [40.107.162.9]) (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 2C8C93502AD; Thu, 6 Nov 2025 17:36:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762450603; cv=fail; b=EUgfiiBT4vQrt3EhrWkuIOQ9EgjtOGsktwAByWzOr9kJZqK0FHAkDx585SVIItV8c/6i/N8xyRfkZlhhNgyTvvRid4dVNz0Bp475hfpw8BoWC7UFidlIT/ICIW7tbCRQJBf67XP1Ob4avfXfubkGea3qCFi4hII96CJKiL8MwDU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762450603; c=relaxed/simple; bh=nlkWoD8YyAVNTCcivRKKKH3PHPyEh2kTQNun2husr1M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=DAM4HXqF/HCjrlUFAPZ90j18CD5kcqje2lYwCAFRHC1EFM4eMJlCiNXE4jg0q3Z1LFRP65qLoq3AUlzBI0akn0MEmRUUKQA5om/3iUVdc4AwgQzGAEH79mLdcCjh6wDKmUCE43XVSDhQf854czlb2gEnSTbrUZ5JxevNg+CFlBk= 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=YFK7pg7V; arc=fail smtp.client-ip=40.107.162.9 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="YFK7pg7V" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ER5OU0P4ob0MVRGBmWNl3w6W6b+w5uyMQNCONIxERaCyxz1djGx6aQKTMgYs/ypY8cs5XI1IlPqlIIrZ65d7Jo8y3UJYdiJCLkj17ZCGTydTKkKvdjl54pL8d+kp5B6OYCV/qzKbx/B8gJjXcvjjO6DL51305qnRKNNijlr24llzseaCywmEhh5HXOWFcbqTJRr+o3UNJDy+RmlJdtevOfWDw9smp21dpu+eFkWc/EFUbrvinLERKzdAzvlwMYH0gqSVjLfktHUy9fYUI3kTnk/5wmooB/P0Qfk5GM9wDTDGQUD/sfpU/1DYmUrmzno7m+hCNhmLRLJvBVP2miLdPQ== 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=7/Ow4rS8TiqNnKMV4r0PgyuBl8H+xEpH6vPp3UriCNk=; b=nxc0Dib5zawPGtTaNmrRIGqex8Nh5cq6RR4bY8czXGckFImK3qA6/cesFRTGRMSTYqAGYNqEVnkyuhmKIh3g439auD+NAQlnqk/PFXC4HapePTfVKk73WN6+PiYcPJZFq/oSu/WEm9UcTvqH8KpAbmCXPsaguZUOivXT0RttmP3is3NmGGnpitFF/clLMl2weva0LKlWiDGqyWnQXIwP6xBG18ukaIsfY7jiJ8IIRGn4+V4d00jL6miUIILdhwcYhYY7xNhe6jUO4/Mh8BGvY1JU+pszEJ+Xm8AD3OSKS5DJGJKnNGKajl+rfho1sp9vydNZo0FUoSpI83C/T5AwAw== 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=7/Ow4rS8TiqNnKMV4r0PgyuBl8H+xEpH6vPp3UriCNk=; b=YFK7pg7V3rUCh0KmLhO6gW/dxMunYl7vcePF9VVY7HJ/EV7XxkE8GG+CnC9gwxoB3wJHSH1cjiXxFxn9hXahCPwo46utzdMhnorf5F8g6n9ZA46TaIhN2Txz0HAsgwgzgesng03JJb/9ljGO1haw0JajIfCF/nbI85gCCANZBp2nOv9yHfH1Bgm+yumtZ4gR288s5StnHwlJYUXhCY84dqXd+WqwWTOyIIzYAi4KJZ8GAp//znJs/sOT5lwwjCTtVAI44nQgsda8tOnvFGDLviyd+Wp4IWy8BcCQGGOfwOMhQyVO3+VluVXDNHRgelVidwDZM1VRpuw8ZdcfM6PA8w== 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 GV1PR04MB10989.eurprd04.prod.outlook.com (2603:10a6:150:200::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.10; Thu, 6 Nov 2025 17:36:37 +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.9298.006; Thu, 6 Nov 2025 17:36:37 +0000 From: Frank Li Date: Thu, 06 Nov 2025 12:36:03 -0500 Subject: [PATCH v11 4/6] i3c: master: svc: Add basic HDR mode support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251106-i3c_ddr-v11-4-33a6a66ed095@nxp.com> References: <20251106-i3c_ddr-v11-0-33a6a66ed095@nxp.com> In-Reply-To: <20251106-i3c_ddr-v11-0-33a6a66ed095@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, linux@roeck-us.net, Frank Li , Carlos Song X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1762450581; l=9221; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=nlkWoD8YyAVNTCcivRKKKH3PHPyEh2kTQNun2husr1M=; b=ST7+ufBtM+hWndwl9AyejmduWXkqJXj0f8nkc0RS+/EtZgT6WWYzVCziVf+HWxRbMjN9eH3bQ h3+0TAasaUaCc2A04XV5i1q3+T08otwY0b465Gj+D+lGMPzg3kUcUqQ X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA0PR11CA0111.namprd11.prod.outlook.com (2603:10b6:806:d1::26) 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_|GV1PR04MB10989:EE_ X-MS-Office365-Filtering-Correlation-Id: f62f7510-a36e-486a-9838-08de1d5b09c6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|366016|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?REdOM0VVcFA0dVBIdTdqc0hlT295WmxIVFRQRjNvUmZBQis4TytuZHRmRmdr?= =?utf-8?B?VEY1MzhLQkpwR0dFK3MxSzlUb09md0w4L2J1Ny9PNFVqNlo0NkVNZmk4MTd6?= =?utf-8?B?dnEwSXFlTGFCKzlLdllteVp3ZzZzUmw1RTNackFEejVMY3hCNDA4WFdjalBV?= =?utf-8?B?OGJjU2MvVmhnR2ROOUZVcmJxejFFZ2VabU5EcXpBNHUzK3VBMHlDQjIyd2x4?= =?utf-8?B?dTZTSGtQUENaRWx6UWx6M3hnNW50U3RlUWFPWDJhYWVhV3g2ZSs1TlNTUVpT?= =?utf-8?B?MUZxM29WRDhvT0ZPRURkYXE4Q0QwbVdzbDRyYTJTSHVpa0FaWkwrYklKQ2dV?= =?utf-8?B?VEF1dmRUa1puWGI0WllGVWFMS0wvQnFoL2R5T2g5azhQU3lxZGlTN0l3ZC9X?= =?utf-8?B?STc0S0p1cnJWVE1pYi9aMEE5cHhMdDRBUnNCRTh5RHM0cmc3bEZxYjJOYTBs?= =?utf-8?B?NnRaeGRkbWJyUit3SmhwTklLTVpyYXVBbzIrTzdKbjUwamlTZC9MSHJjVUlu?= =?utf-8?B?Rkt0c1d1elFWN0x6YmdUdXNoRGtUeHNTREJoUUg1Uyt4SEo4bWI2SklveXNV?= =?utf-8?B?bncraFBjTHBXQkFuek9hRXdLOFYwQVgxeU94ZElSV25yY3NqTTlZRVBaRjBw?= =?utf-8?B?UVhoS1VrSWQ5Z2tsaVAwMkQrS2hKeWt2VjQzSzlwM2FDOTUyWDVXMjE3Vm9V?= =?utf-8?B?MktMeTJMZHdWL1VCUThBVmtFVk9YeDlmYjZ5VzhpbHhabm1aR0lkY0pyNHlz?= =?utf-8?B?NHJmVm85b25zT1V4WDJsZjB1MTBnRmY5SU0rMnFRaXdPWDVWdzlJaTYxRW5O?= =?utf-8?B?R2VSWG4rZDg2OU5hVk5qT0g0clhIcm5IWXN5SHZJZmIrN3czOFBLM2hFNHUy?= =?utf-8?B?VTJkSjc2eEdtNWZZcldaRWJJaTNpQTZLNlFyYVA0L1dKVFBqSnJHcEFZa0tS?= =?utf-8?B?Si9ZajhVd3lJMFdKRXFvam5LNzRZWVcvOXVKNkZIakxTY3V2WjJVUTJteWlh?= =?utf-8?B?QWYzMUJrbkZXS0Jld1FnVW5zeGJCay9LNStxazZhQnhUdWV2R0h3OEpEVHN1?= =?utf-8?B?bjROSEJYSWNiYUFYY00yVjM2dXVwSktnVnpiQkoyTVlUVjVVOE1zbUtybFlx?= =?utf-8?B?cU8rdmt4NnV6NWlBWnZKMzQvSXZOTDBiMWh5Znc0aTJ0aFJJaFNvbDh4WVBn?= =?utf-8?B?aUxDYWFiODZjbEdqcUFFN3gyMHpRcDBpZHpvcFhha2wwRDdYSDl6akl0cDEx?= =?utf-8?B?VlVWL0JDR2luaGpjQTBCZ2R5TG04STFoWDVhMGtxaGJnSnVpSVJqY2s4QmNq?= =?utf-8?B?NnV5SjVQZ1V0MDRPbS9FeUlCWkY4QisvVW5GWXNKQTd5QTBhQVBnWVk0RDN3?= =?utf-8?B?NW5neXRZd2VteWJQdStydU4vRHhvRktQUnZGZHB0UWxzSkRwbGRrQ1V5cHAv?= =?utf-8?B?dW9pZmpXT3JqS1NrVm1yek5aZmdZQk5mQldoZ3pLQ0orY2dsQzU2QURxekwr?= =?utf-8?B?WGxXY1poaVAvcmRTTDk0enpBMXRxKzlWV29ab21iU2VVeWpKMnBTQnFyd0V3?= =?utf-8?B?bjJJRk1qbFdDOWUzMnNNOGY2WVdJcmxkSVpZOVBTRUlGaFNiTkE3ZzJ4ZzNQ?= =?utf-8?B?Z3FVSUR4cE1zZVhlYllaeXRsNWZwcEJMOTBsbHc4V2hnTHp2dk9VcDZIdUxL?= =?utf-8?B?R0lVb21MV3o4TjhRc25XMTZwMEdPSVZkRnJlYzNBQ01iMERaVDNQODRUVW9Y?= =?utf-8?B?ZXhJbERBVjBzN2cxeVNJd0lKL1cxT0FIa0dsQWVLSTJYTDJES210NFIzckdG?= =?utf-8?B?R0pWK0xleXNWVFQ5T0hiQzd6QVJxbG5SQW5PTmJhQ01GRGhOZFQ1dUtFcVky?= =?utf-8?B?K09kYW9jOGZEbHpZM3ZXZ1luL2NZd1FPb3NwYmczWEd5TGNzcWFxQUNSNnJw?= =?utf-8?B?RFB2Zk9CSkYrT2Y2bjlxRTBmS1NOVXZmM3Bnc2E2dlA5RUY1TE1RWG4vdFJ2?= =?utf-8?B?NEJrQi9SR2M4c3lPUEM0UysvMmEwek9meVY4Z2Nhc0VzL2ppSUVNUGdsR3Yx?= =?utf-8?Q?EwH24/?= 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)(376014)(366016)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZmRORnNRV1NkNHdURW9Obzh1bndvb1NZT3VHbXhNSExKR2tYbzViZ0k0dDQy?= =?utf-8?B?M01tWUNvNmh5VFo5OGxHSGVnM29vUWZWakwzTE1zVVdUdUI0UHpCNzBacUoz?= =?utf-8?B?QzBHNFh1dWIrSVNOb1c5MjNYUElZMmR2VGRRd08xdlkwVlNxK0dxenZBMGFj?= =?utf-8?B?ckZGZGhKWVN4OENsd1B2ZmdIdzZodlhCbXhXRkk1dzh0UlZpb2k1Vm5kOTVR?= =?utf-8?B?WlFvOXE0WjZoVWUyRzhVU2pQZjFYL256U3dkb1VYVlduUlc2ZkZJVG1xRHgy?= =?utf-8?B?MFhRS3FWZkNKTG9nV0Z3ZXQ1eFVHNG43WUVDaEd4dklZMlIxcCtVRzFCSGdk?= =?utf-8?B?SnBSdUpPU3ZMY2JNRnhSWU55YmphQlhzenhaeUxiYnBaaW9KeTRyUi9WQnB0?= =?utf-8?B?MWFxZEFDdHN2eXdMUkFOWDNsRVFUS0o0WTlyTFhwcVBNMCs1c1ZLOGp4LytT?= =?utf-8?B?b0dxWDZhbE9XUmhVSE1odkN1N0haN0NkUjhwdnNqQXNjRTFSU29IMSt5T3Fy?= =?utf-8?B?YzBjdUk0b0U2czd0aXpNUk5kdmt6dGtDbTNxMWxRaGZCKzVvS2g5Y3lzdEtv?= =?utf-8?B?UXk0MDBuQWdOMWpmMkdxYzBWZy9FSmtNbzdyNlJNenpwOEZmcDg0TnZmb0Vs?= =?utf-8?B?Y3hPYSt1a2Q1SWlqLzAzOTNVMnFRVmVMcWkrMmdLTmZKdERKR3IxMnE3YWRP?= =?utf-8?B?MExRREk0eW9rMU9wZjRlOExzejMzdUNWWG56TlF6TUVLdDlkK0MwTEZCQVhw?= =?utf-8?B?cHdIZmZLaFdtQ2RNTHY2N21RcWZVYXVJeWRmcEQrZzVFRzhIbnFZNTZjU0M4?= =?utf-8?B?alRoV1hIaGJSY09FTU43NEg2Z0hucnRsdkdQVWpreUQ3VVhub2xzV3gzK3d6?= =?utf-8?B?M2NYbW1JaFc1SXpsMDZoSTlLeWlRUkZjMVNEMmYvTzRheWNaaG9kM3VJUmty?= =?utf-8?B?aGVROUo3a05ydVJxZ3g2a1NwMkFMOVVHRXQrUDZEd01UQi9wS0YwMEVENWVF?= =?utf-8?B?dkRxOEdqUTZ5ZVBaOWVJVUZiZnRPY0hFSUpiRWdLRzVsa1k3STVIT3VlSDNS?= =?utf-8?B?SFU2ZE9BQkc2WHNja2J0Zm9XQ3dDSzVGTFdacWd2ZkFhUjdPUTJWeEdBY0Vv?= =?utf-8?B?dVkxQ3FINHR4MkxzMUQ1RmdUajVKdml4ODhHWmZqdGtkeU1vZExKejBpWWR3?= =?utf-8?B?TXlnNDlBenc2VTRGT3hTNExEVU15Ri9yS3BGdFVKOFpvbjVxVjg5QjVja2RP?= =?utf-8?B?T2JYQ2QvOFBIRzF6UEVkMG1wMHNIZytOVFZhQWN3NnZibG96VFQyYnU3WVFT?= =?utf-8?B?WitNY3RiM01BQ0FHQlVXcVY4NFVyams2OXV4VkdvSlh2RFpyRmxPYzdrRElk?= =?utf-8?B?ekdJSzIyZTdpM1Z0ZXFvcDVTM2dweEVBVkhQZGZuUTFLUlZUZWhSUFBlMDZj?= =?utf-8?B?dHNzaFFnVmtnUUV0L0MvYjJKWkptZzNES3JyTld3S0tJcGUxb1NFQzd6dFk4?= =?utf-8?B?WWNWUkJ2ZkVYR2wrQi9nLzRFSkQ4aVRBS0tNeGxFdWhpREx2ODAyUldpMytu?= =?utf-8?B?UXk3UnV5cklrcnA1RlZkb3M2UVdWUDhDVysrVmRiZmllZ25LeWZTZmJZQXNu?= =?utf-8?B?eUFrbHl4ZVpEMWE4eXRPUGdNRVBkVFpWd24yWjRtVWs4OE9TMUR4Q1pIdFhC?= =?utf-8?B?Q3ZaNlJ2OXRKY2FGUjNBaElZTkRtaVZmU1RDNE03cTVsazdwbk9YcmtNZkk2?= =?utf-8?B?TFRsS2VzZWRLa1g4RTY1cHM1a2U1NGhLRTJBTDR5V1FYZVV0ekJZYkk3Q2ZM?= =?utf-8?B?SzBrSUhYK2V4NTlHZm5CQkVsY2dEM1NhOEF6MkRTU3ZwcjZQSlBGclZJUGEy?= =?utf-8?B?NW1CVXhNaHZLYVlyZEJyaWhYTzFrUGZlZzdCeHFrcUJoM2hSbUMzU0xPNG40?= =?utf-8?B?c3QyU24wbHZ6MlZVYkV3ek1wZ1BpK3prTGVzUFRWb3VyQ0R2NGNPOU96dWV1?= =?utf-8?B?WHFaalNmOEo3M2N4cDVjZ05HTWNxajk0UnlHaXBQTEllV2V3VG5oTjVoeXlW?= =?utf-8?B?RDZoQlFjQVpuTlQ1MFZDdDVMMGcxSm9uRkJNWkVQa1hqMjlMNlVFTWQzOE1I?= =?utf-8?Q?97tsSmNcA3D8Wy+uUhUbvL/Kc?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f62f7510-a36e-486a-9838-08de1d5b09c6 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 17:36:37.8276 (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: 9Jvg6/yf0n+a70AiHjmE5LjV+EtHRGyzjn/qoUNqVsz/kJCYAgU6ZEu0nEIzrk5oQz8BUPFtiCdqlipluMbKMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB10989 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 v10 - remove !! at svc_cmd_is_read() - move comments "IP" to next line 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..42f678eac5b788abf7688845894= df7b56ac08bec 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_cmd; +} + +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 Wed Dec 17 12:14:52 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013009.outbound.protection.outlook.com [40.107.162.9]) (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 A176C350A11; Thu, 6 Nov 2025 17:36:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762450605; cv=fail; b=R0JUT+aKZ+0qix065FOQ1d2gEVmsnrFNscJ1UMX15c52OAqAdIG/Xd2FY+6OIIOxI8BO3RSL1n1yhSjv7eEbtPpIVwbt4iW1OKN2wzN+ZSArHeJ3k0rrSWjQzezP88YBzz7SM5u37iEsy/Wg7JHYLMaAp3h/r5wcL07AyA2n6RA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762450605; c=relaxed/simple; bh=IyO4gvDiMVkIrAv3wfTcayqnmwaqUsnJdgwnigkUdYg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=P8rZ40dsFzbYQ4DadJZHdIyNy4LT+VQ+t0SSichbTvorMSXjgj59cnIvjQl5D3L8juRceMLaEdUwjtTG3LcmOiM21NvSHle6tMPmBc7hXtc4aValT3/CXvyr2hzhaOATbQg8Cidmv/SdlrtafQ3yljNsrv5EWjtTa+xSfFqDV48= 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=Czu5ZhcM; arc=fail smtp.client-ip=40.107.162.9 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="Czu5ZhcM" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aXttLbAhnJAW3vuvcaVYApOYhO5oslQTdL5oMejo8E5ip82VV9tHAtiqP+V0lZvi9pQ0rBIZ6ZU6DEdfEhvOoNDEPNhLQOIoHoixkqfeQ9mNUgmZSNQ/jfANSsmd0hw/VRmYDJxhS++xn9WYVhs627NX9+70LYZX325tgapwNdacRZjblzTiAwBDwbEoFn1lLE+zEnMxeqYsm5ezn5ws2qoT1cUl2nbKe22sHyigOpn2hCSWD4dGV4T5jjtkhQOgASklAzMm27Sg3mwIR2GQ/fRofTLqarbmtR51ALi9IwmUlE4r171SvLyIYb4hbysKb6OxYJDnXrtyq7ywTXSLug== 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=koB1dQDh+BdzjDFtZMD9V4DnrJSi8PAJXjwDrg3X/XRQWJwCXJYXQspq/ZZ1xZBc32M0+w84nW8n+9cZfpxI4jEViYNug0DNAV0PWssebDowSqlkst97SnSBpXeO7eSLnGJ3t9kn4ppCOb/e0wIRDMKxC4pmkRsukTACt7glHgsNIWaJqkZdk4sy2NjYmAc1fW1v2TNwTqKfHjdXMJSwnMW+MzGuM26UC+Bfx9zYKBdO/OmEvX4MM9wCao/OA1ODxm3aPe9vNwyeFEg84miN/cZ9Ws/lYoERj7HEQ8lvJvc7Bz+jkCgjdX7oaHV7mArNmSfGp+QfQcHX4v3HQjneag== 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=Czu5ZhcMx08My5JGNmiqjc6zM5Fty9mKGlOg+7wDacroYyjRzFBI56/Dfo7l08W0v2XD6ge6I1Fp38cp4Nal10c2Stso3g/moScXV0ZUQm4KwvLCcRLwV9O0oZ/p3zUdjwNiFEyjHpzXM5oqs3HFDhBcDOTjtAH3v0LPdR40S5t8CP3rkDvi11hsnd2tE+2F97/5JDbCqUrl5Vd+WxqtVS/8mhGL5uBSGq/3LLiRqa4MUc8Zam4JUtiv2/poXzMPuy/yotKkRNYeG0UveVXyfvv8tu0hU9l4uXUGoEdd6nwHYnN/nneb9ok5U0EcRzr4CHcD9gGwLMdzuKbu7WOMJw== 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 GV1PR04MB10989.eurprd04.prod.outlook.com (2603:10a6:150:200::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.10; Thu, 6 Nov 2025 17:36: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.9298.006; Thu, 6 Nov 2025 17:36:41 +0000 From: Frank Li Date: Thu, 06 Nov 2025 12:36:04 -0500 Subject: [PATCH v11 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: <20251106-i3c_ddr-v11-5-33a6a66ed095@nxp.com> References: <20251106-i3c_ddr-v11-0-33a6a66ed095@nxp.com> In-Reply-To: <20251106-i3c_ddr-v11-0-33a6a66ed095@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, linux@roeck-us.net, Frank Li , Conor Dooley X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1762450581; l=1253; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=IyO4gvDiMVkIrAv3wfTcayqnmwaqUsnJdgwnigkUdYg=; b=NjVg+mQ4YrCOlObCqWzbMcIYaMOJSPMd/Cpa8UXWTqN39RSSTCAtorEpvYoPYeXJgEDYHtPAN C3EqJ86ZrsFDaFg1wdpiXdfulmtKxxZpf3C5wIZpifttWkZLPin6vPa X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA0PR11CA0111.namprd11.prod.outlook.com (2603:10b6:806:d1::26) 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_|GV1PR04MB10989:EE_ X-MS-Office365-Filtering-Correlation-Id: e30d4721-82ac-4cb0-f31d-08de1d5b0baa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|366016|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?K0JSSzZUZSt6WXFRMUhDNmI1QS9sZm53Zy84VTFBOU8xR2lhaVRXRVdHOTlO?= =?utf-8?B?cUZoRnhoS0lWUDBXU0N4K2FLWVVieXU3QjJKdlFLY29KRTVZSTB4ZFY5NFpG?= =?utf-8?B?ZU4wUEN4c24yZzlnYXR0UDNPZVZFR0dGQ2sybWNNTlJ1MHV6VVBwSEtVV3VC?= =?utf-8?B?SWJTaE9Ja0Y0anNqUWIyREpnRDhCQmJRWUhQenRZcm91TllYdXhNQVdxUzBE?= =?utf-8?B?STQyZXE3eXNJakdNQ2tMNTk4aVRWY0JBR3ZCSzJpVE84N1loSytDNWU2eXNX?= =?utf-8?B?ZXJoSUhnejQycHpHSWN0cGgveWRZam55MEVoNFpVVWd0OFdVcUNFQkwxd21J?= =?utf-8?B?SmxDRWZuTHdrUXRwa1ZSc1NMejVMcVNUazNuOVJlVzladVVaT2Erb3ZsbmdQ?= =?utf-8?B?eFhGcTRucHI0NjlyUzRKbGQwY3JNZy8yelFUR1c2dlBhUi9mVFlmSU9LekdV?= =?utf-8?B?U1p0MjlhQjRabzUyMkw2VHYxaHlNd2hPZ3ZoRWwyeTkyQlF1VEw3MFhTY01n?= =?utf-8?B?UU4zdjgzT28zeVQxWi9Jc095c1JlVUN6S3JlVXN1NGV4UGYvdnZ4eUltajlL?= =?utf-8?B?L04yaUwxckcvalQxWnZQS2ROY2Jwb08wd2ZjSTg0SnZ3bnllM2tRaCs4MzU1?= =?utf-8?B?elRzckMvTWlGYjVCVFFUYzh5bCt6dTJnZ1gvTjhSamkvVVdncTE3Uy9qTWZF?= =?utf-8?B?UWw1UVRzUE9oWUJKWnRuVjVlNko0a0R5TW1yYnZPQkMzZlVZblI3dmlvSGRn?= =?utf-8?B?MGl1aENRaTNmZ2lMMU1SdEhFaXo2eWNodnRoVzhMc2U3Qm9MVmlpT1ZlZFdn?= =?utf-8?B?WkxHQlJ6bjE1TllhWmVvbHpKbmJiSnVYNWtINHYzaVQ3QS9wcjVtdE85MkZ5?= =?utf-8?B?VXRVTWR0dTVtWUZYTEU4YThsaFNoS2FHeTFQVHNYWmg1YTJRZkZPTTBoMHZY?= =?utf-8?B?Q0gxcDVCSXE1RGdSd0xWbUJqK25aZ0h5bG0zRWV1NjhBRitNa2k4OTJTM2h3?= =?utf-8?B?ek04anBiT0NDTU5JTXJmMGZnbks5YUVlWnFmamM5SmN4YVE4ZldteHhUeHJa?= =?utf-8?B?Y29WNkRQNFc4cDhFQmcza012d2FiZHM4OWZEbVhiRHhLQWRwZmNFMncvREFJ?= =?utf-8?B?V21JQkIwYkVtNkk1WFUrSENYNTBCMitGbnFSYTdFNzdNTFp5cVF4S05MV2po?= =?utf-8?B?Q0RkcUJiK0pDLzExWmJkUkVqSzE1a3ZKZmxJNERaWmpJeERkWnVvdHptK0x0?= =?utf-8?B?ZWs0N2JEeStTYk0yTjJ2VkpKT1BEbmwzdTMwTHFUcU00M0FTak9IZG12VHBq?= =?utf-8?B?NFJtOWhUWEp2aHZ2ZDF6VGtwMkxDQ1MvalkyUm5oMEVHckNQT1FreEVsTnRB?= =?utf-8?B?c05vOXgrRDJ3enZEcFp1VzVpWTQzUTFTdnlieXFXckFuS3RCY3E2SVNaQzJt?= =?utf-8?B?dE40QkVVZUNhNWdZU0tXRGw2Wkt6VkRiZFBVK1h2UnpjdEw5MW1nUzFHTVla?= =?utf-8?B?ZEp2VVgxZHFDdjZkRTZqbVpiZVZEcGhkbVdnZlA3VlVMdXBXV09QQ0xQLzQ5?= =?utf-8?B?N1Jhcm9iZUZ2bFE3MDM1VFhLa0kvRWs5TThFNzVmZ0lKY2xpNUdBdjNjUEs2?= =?utf-8?B?NWZNUUo3K21Wd2daenRvUElQMFRXT1UwTmRDYS94Qi9SUVdNWGt0MytNaG5D?= =?utf-8?B?dVl4NDJ4Ullsbml6cG1iNndIWGtVcndkc0ZmcE1tUkZnVklYRWE0Y2RlczI2?= =?utf-8?B?aTl6N2UxdWl0RWtRWi9NcUJFKzVOVUxWVlpRQmMvQVpwMGtBQ0pwb3pnU052?= =?utf-8?B?L29KblhTY3Q3NWZ4ZTFXbjVjME5nbjhwWXFpbTdsbmxpT2xIV3FpbERKR2pu?= =?utf-8?B?UTliUlJ1cWlmTHIvTmZxa3hGZzc4RGdCLzUzWlVjaGJOaEplaGJkUmxITTgz?= =?utf-8?B?eUhVdWszM0psbEs2VE15MnhoWVhKcVR6MEZxV1RSQythQ3V4dzRrNk9uRU1K?= =?utf-8?B?Ny9XeWlGUjlXUkpZNFBoV0hJaGN4MlppWUpmQXg0OTgrbk1GbHl6Zno0WlUz?= =?utf-8?Q?ee4TRl?= 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)(376014)(366016)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OXA2eEp4ejBEVFRHb0EzSU1kczhlSWxocnN1cUdSTXV4QThnTVNLazlIZ1B3?= =?utf-8?B?Qno3dTdoZ3ZidmpMUzE2YURjaG1iak1TUTdva2o0dVZNY0NFWDhRWXdVK2NN?= =?utf-8?B?MkpGbk4xQ284ek8wVG5jL2M3VnQ0UjlaR3FFMWVPQVRBQStoelkrTzRmWmI0?= =?utf-8?B?TThFL2RXejFWL2ZCVmtVVHBQL0RJZmRuNnRsQ0dRMXBQRmRNdU9rZzJtcUF0?= =?utf-8?B?alBUWVJmcWkvMGNCVi9zaE9YTGYwcE1lR1podDUrRTRXUXBPNStkeE54NWsx?= =?utf-8?B?N2c2SmJ1cURkQlo0dHprOXRxUzgzSjFFNC9tOG5HTXA1VndSL3JUTzJKL0Ry?= =?utf-8?B?eTY5azJ4WENFWnVBWjFEcFh3YzdKcGVhdG9FRWhGV0lVM1h5Nk5HbmJESTBF?= =?utf-8?B?OGR1WHNiWnNYTTkzTjBlNENTcFZTYWZVZE1VdFpTdnN6aGhibys4WjBxWmpI?= =?utf-8?B?c2I3MStuWElRWjQrOHIxWEEvcWVUQzNzMlBENTk5SmlIVlRBdVRIMlhRR0Jn?= =?utf-8?B?eU1odkVDQ01QZ01wcFlpT2lUTm9VcGVDaHVZOVVRYkUyS2thL25KYzVVYjVC?= =?utf-8?B?Z2c0cFBOcXk2VEp1eGJuUEErRDBvRmtVbHp2cVY0SGJvc2RtNm5pMzhOd0Vt?= =?utf-8?B?ZlFVN2RCdGpXcDhSQU5KeS9EcG16TGJ2OFdwQWhLd083cmprWDdhSDFxbng0?= =?utf-8?B?Rm43WGJOUXQwV1d4eFFMd0cydFArSm9BeGVtREUvYjg5MEc1Wmw1RkdtR2NS?= =?utf-8?B?TVYxN05SV3YyWmlsUXdCdERzNHZNTi9JZ2JtcXByUlZGSFdDckd0RFdQU0Mv?= =?utf-8?B?dklkSFlYR3o4QVNKdU9vbWJCNkV1Z3FTd2ZLdnNxV3VXNE9KczFxTDN1WU9r?= =?utf-8?B?U0FQa1N3UzVvZ002aEdnS0VnWE41cXRYK2NNejFEcjNwWjVRNmxWK3dobGY4?= =?utf-8?B?YWI4YjloU3ZKcThIeW15djh0Yy92SmNnMWVMd1gxNy93cEZZL3JUWTNtTjFR?= =?utf-8?B?SUt5eWg3LzZMcE5hRmJpb3R0QTMvbEx4aWY1SFd6NkQzbk1UV1R1cGdwdnNF?= =?utf-8?B?WGsvK2V1V2UxRlBNVnRKeHBPdjV3L0tCcVExWGpWR1orV09rWk9RUVFLN3ZS?= =?utf-8?B?Tmt0ZGVDQTdyS2IxSWR2cmhsVVFBMDZETnFZZkxHZ3c4NVUxV0l0djR2SGlt?= =?utf-8?B?MWxzNkt4eUEyYWhhTmFWSDB4eDZlbzBTNGY4bm9MSEdXL3RiUU50d2Z5Szdo?= =?utf-8?B?bENZZzAxck5XMTNkenpDV1FnZEJpQUNjR3RnMERRbm9SdzJzTXplK1JaV3B4?= =?utf-8?B?MkE0c1ExbVZSR2dkaDVqMmRsSENVdG5la1FWRysxNnl6Q3JVenUwVUtWM3Bo?= =?utf-8?B?REJmaHNNcDlzbk9KWVpOL2V1akVKa0EwdkN2bWRyRU1lbHBHbjBPa3c2RG1Y?= =?utf-8?B?RmluaGVsUklsSGp0amlBLzZBVUF1SVdBREI0M29EUWFEeUxVTkZQVjU1UVR1?= =?utf-8?B?MkFGajFLeTloZkd6eWVZOHQ2djJZanNGUlBXQ2VpbXNwNVYxOHFmcjJXdUpX?= =?utf-8?B?OWlvOERYMUVWWDhKMXg1WGs4V1FLVmRFYVJGK1ZZSXYra3lWQVJiOWY5ektj?= =?utf-8?B?WkhmN1I3dGpyZjMwTkhxZTBXM0Fsazhzd0VXQTM4M1hRL2Nhall5aG8wLzdn?= =?utf-8?B?V2VuUUJXZHJ5MERZcHFCSjk2aENQUFpsR3V3aWNLK01LY1A5NUxDeWRHVG9R?= =?utf-8?B?Z3p2M3BiVkE1cHZFYUFwN1krU1plVkxxT3Y5bkpYQXBOWlhPeDBsT2dTQjBG?= =?utf-8?B?ZENYazNFWE9jSFRkbnFOVnhZY0JKREZvY3NaSFIweWlSSmRxSE5PNlZPMVZm?= =?utf-8?B?dGNhUytqZll6RTRINXZTQXVnYkdNalBEWlFxUUUwTXlXRkM3MnNaeTBST0ly?= =?utf-8?B?QTlFcXVUejZOb0g2NTYvbkQ4cnFkMlUvZUY3ZzNNWGJYeEtRTEx4bFJQREI0?= =?utf-8?B?c1ZGTVVpRzYrdXJtMDVzU1l6QlZEM0xPNlZ1bnJJbjI0cmwvelpRSmNMbjU0?= =?utf-8?B?NjRnT1dISDZnZHRabFRUbXpBN2FpeGpITlF1d2NmMFVrWHFidjJZODhQTkow?= =?utf-8?Q?e3nzivYEE7sMmMrTsO1x4g5zd?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e30d4721-82ac-4cb0-f31d-08de1d5b0baa X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 17:36:40.9462 (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: LzKAm/O8CEysCw2qFKMAqdQnMIoAE35vK9l/1cg9mSqxoL/bmoFHVaWg+SV6VP3bL+v19Tp08qcH6lc9UWRcpQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB10989 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 Wed Dec 17 12:14:52 2025 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011009.outbound.protection.outlook.com [52.101.70.9]) (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 37FB234F246; Thu, 6 Nov 2025 17:36:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762450612; cv=fail; b=OTxaP9rFGkonlhvzIVQOuPUUvRSoHVwOEDq3HfaV65Nxm9Jw11si+tn2a2BJSHVRcQVK1/DvGPkB7Nm9crelIe1diEn62qCkdxk3Tu0GwlibaJC/rWNe+3w0mbENtyOz96pr8e8iWYIzqI9jU/Frcsfogds3fBnEYdfqRh1K0xM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762450612; c=relaxed/simple; bh=anQimOeJzrXr5UYXGKdewIVHAKPren0hdLsICCRdcP4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=LvNygcXIDMdkRok/bjB/ruFnm0cyPBuePTivRFIWV0fGInZS+rKCJAimxO6daQcwezcBLrfu6EMSqlkPSxUurb7SWNMwuNyEKNpzHvUzgDwMnaghuZgMAgVryzeE2lDlLyqlQuFlynH78HKvYEa3v+IYwv5of8Vjz+iQqvcgUuA= 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=ZCoZjNZ2; arc=fail smtp.client-ip=52.101.70.9 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="ZCoZjNZ2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FlhPwnixXdVcttfg1MuEePleGyPnb9buIjHhYIiZGRrgt/VwoBrI5yurA9nSEL7PPz1J+wZsNEF2eaTqYHTpwOlZ0FwPpQLXbykOJKSWzDEDRqTqOPtVhlKMauzreHTvsXZsylN1/dlQVUkhON+74HJjyMSlECx36Og7cND8gUz2oTmxmTJ3leApvdJV2rSn9Vbk1emVBMtnOG2laMjYcHLzY0GebuOP+IUOjC2o7HAs/vKL7wP+CxNO41SeZulmiCc8ojYaFjUJt1LlzWLiIHIU3XlZo40BbT95RJV6MlOemPdXah0aomm9uGvStn0N/AzmmNzeQJ6VHXaXF2Rqdg== 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=4RsDXIj2lTjYkzcPoOY059aoGN8v3PdCa0e/mCxRvMk=; b=mbe7aUjySgZxeJ8qiMzzrj2Wa46gcbZzmIjycTtQ23A7GFicycqq6jXlCRovzKS6F/DfNvSEchXrp4lJlN0IuJ9UwexcWdQ//M+haWmvrUnXLeMR6qa5P7/tkFpjFqmmvCwhzsCYYWGn8zRdUrs2p3Z0dDLevyrYroViV3YkQMooLxKcd0sqMFBE1K4gBMPFzvj0FMHlMMrfGbm8mGN2sfEraXbCCEykJEWqu2H5gf8ynxSeg4tnAF83+R1hGuf9uAdcGd/luUG4acA594Yra+0ZNfUQ9OEkfu2MJlf68JE0sEOYwlfjD+29KqUtAk7en17J7A5uhK0fDAwA42CbRQ== 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=4RsDXIj2lTjYkzcPoOY059aoGN8v3PdCa0e/mCxRvMk=; b=ZCoZjNZ243h2BcGNOhd8mWpeD1EaAwsJw7BDkPpwz57Z/KITqL+uvnGA07KnA+9tUiW9wW2eq2rwYEdu8Elkjs7r9GlTa6Yu1SCz6jSV26kn3EzZYnk/Kl9NfBnTaic0Dttaq4gHqypaqhgN2Z8BizjmHjIG+lhX8eNEkgjjv8/6Ym0JJwEaWIUqXItUSgsE1IH0O97FOshKh/O+Q86QG40X1b5Gr/gbL9eFN2f3yKsIOp7bnPUo6CUfCujXjnMFwakn+5FRfuglsCQEvbOhtXSF98c67ihwN0DKkwewYZY+I5pLd1M8AR0Osn3L8RlSRvUIxWx6GYAvoyr6lQ6s2Q== 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 VI1PR04MB7200.eurprd04.prod.outlook.com (2603:10a6:800:12d::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.10; Thu, 6 Nov 2025 17:36:45 +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.9298.006; Thu, 6 Nov 2025 17:36:44 +0000 From: Frank Li Date: Thu, 06 Nov 2025 12:36:05 -0500 Subject: [PATCH v11 6/6] iio: magnetometer: Add mmc5633 sensor Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251106-i3c_ddr-v11-6-33a6a66ed095@nxp.com> References: <20251106-i3c_ddr-v11-0-33a6a66ed095@nxp.com> In-Reply-To: <20251106-i3c_ddr-v11-0-33a6a66ed095@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, linux@roeck-us.net, Frank Li , Carlos Song , Adrian Fluturel , Andy Shevchenko X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1762450581; l=19758; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=anQimOeJzrXr5UYXGKdewIVHAKPren0hdLsICCRdcP4=; b=CMHYBqKDniIFo5DZSdYJIT7xOyERQzzWAbyV/rg4Fns17G6iAZ3fngCxjdns86tL3aBt+oRBr hmAjAUCOCPdCqridC/9mKDc6Ik8Uh/PoWf0abfi4JWMe1K2mLsEIFv6 X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA0PR11CA0111.namprd11.prod.outlook.com (2603:10b6:806:d1::26) 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_|VI1PR04MB7200:EE_ X-MS-Office365-Filtering-Correlation-Id: ff0539b2-f5f1-45a7-c3da-08de1d5b0db3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|19092799006|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cnRENEZtemxPT3lrT0R6RUljMkNBOW5ETDlQOEg4UDB1d3R2WFFDWldXVk10?= =?utf-8?B?aWlIZm9KMGovWDV2Um11VVRIUUtKQTVUS3JkVFVqbk0zUlZ2elo1cEhMWlRl?= =?utf-8?B?aThINFhWZnZtaEJrbTZSbkJ4eDQ1dTY2OWJ5UTgzWnE5U0xoVjBMOGlsZU9u?= =?utf-8?B?aDhqTW1sQUJxd0VoRS9SMTFleUdDSnpqRkV0WmtuOVkzRFhtSWIrcVlaU054?= =?utf-8?B?VUwvTFJYZUk2NkpGVmhHclVvYm5QNDU2a1psQk5JOFBGMUxQeGlIdEtrOUxj?= =?utf-8?B?RzVIem1aU29yVmMxbkQyN1FlWjlabnlqOWpLTitYWGFNZC9Cc0xvYVRpSHBS?= =?utf-8?B?aElaR0lSYXVRUGhCeEh6eTJrYTc5Uklia1YzZHlWVkVTQXV0TVJETmk0eE1P?= =?utf-8?B?SFY3dXcrenpyc3g1RllUKzNTaGNDZS8yTWh0ak56VEdOYzgyNVNlUFRxdlNF?= =?utf-8?B?aUhsVGF5YkNBbmgxMFpDMDkxVTZHK2pqSzdydjVIc0Y2blVkeVBxMWljUWsw?= =?utf-8?B?ZDRKaEczU3hwOHU3MDFmUVRnc0Y3YjkrdUdRODZxcTMvZ2ZaWWVwM0plYU4r?= =?utf-8?B?RWFQN3NlNExyc0pBUEQzS0NNcVJ2N0Y5SUgzNHVrc1dWaUczWDlDakZ3YldR?= =?utf-8?B?aXhmbUJ2ME1TR2dPTzg0MTFubHBNY3NXTGdKb3V2YnV0SWZaaTd5ZU45TTht?= =?utf-8?B?dXZFNlUxdlliQkN3S1JWVFlLeE5PMXVwQi9qRFV3V0UwbE13TEhQTU5OZGNt?= =?utf-8?B?MXNEMXR0MTVTT1owa3RrZ3QwWW1XSVc4azQ1L3Z3NlB0b29PakxtZDVzRGhB?= =?utf-8?B?TUpTK1ZkVkNyVmVPVWdISDNkZkMvUjVrQzFRYXlOM0YzU01XRm5veXltQ3Yr?= =?utf-8?B?dlpVVUhhN2Y1SlVmMHJzUXZsRXUvYUlCQUNZU25NQ2dVTFB0WktGaDhGT3Vw?= =?utf-8?B?VTJsT2E3d2FyVHRrdWQwNGtzZTBKaTA1K1hZRnZhZEhtTS82N2VuOVV4OGlT?= =?utf-8?B?VTBHOVp3ZFBLalhTaFpwMU5aVWVsMVc0bWt0d250MGFoeHBQVDRKaTlPTjZw?= =?utf-8?B?YjJ5OGc4Y252Q3E4aUFKNGNCckFpdlBxSFZYZlAyNTl3VnlSTDBPVmFWbzRT?= =?utf-8?B?RDEwMWw1YlBYT2xPZkJUMzV1ejV0RmZUaVpra0VQT1NaSFJodnc4TVJmVkp2?= =?utf-8?B?MlR4WHVyNkhreloyRjlicXVHM01hcVcrS1B1amVUN1pWQUtSckJFL1pmU0lU?= =?utf-8?B?TnJncm5qUHlJQkhYLzFqLy9zR0JwUVRrOWhnRnJYY1Y5RndlLzI0emFURTZ1?= =?utf-8?B?Mjc3aXBEMktvSy9ab3ZEMkQwTWdySWdNN3d4MUtselJGaEswSlhqRC80YW5t?= =?utf-8?B?RXRJRlFhZCtqdkluRVdMRzhmTE9mQWNEWnBja1J3UTl3NmdyUHhZSlUwNmVC?= =?utf-8?B?VUVaVnhncjVxVUV4RkN4TG55NDNmcFlFQWsvZW90dWlXOVZsdWdDcHo2TWhq?= =?utf-8?B?RXVMWWpybnNiNUxYV2pOYnJJazNTbkFobllsZEZiTVI2YzM2QkRhbWozWkxZ?= =?utf-8?B?eU9GZjBiN0tOODRHQyt4N0dKTjZZTTh0ZlJDTFBTbXk4Z0I5NkZZckFqemtp?= =?utf-8?B?Qk16MEhlMjczLyt4c0ZRK1hCdFBYZk5uY0FvQzQrVkVOQVlJTG5hZEFvTUFP?= =?utf-8?B?NTZ5eFdWNHFjeVQzc2syQkpTY25GQWtxQjdvVzYvQnBOMFJLbHRtRTJMeHFq?= =?utf-8?B?VG8zTXh3K1F5a2NDcFoydjg5dVpTT1hEOG56UXFlQVVzQ2dCcVlMOUVJVllN?= =?utf-8?B?MU5MVHo3YjZ0K0pWeWRXUXdvVkwxRzlqZ25yWkR0em1kOGFrTzBmTjZ6R2pk?= =?utf-8?B?T2E0Z1EvRHlWZEpkc1BtVS9IUEZkWm00UUt6NU43K0YvOUU4bWRUbWlkUVY5?= =?utf-8?B?azQ5aUhMQ0tZdXR4TEwxTnlFcllBbm9uMm04NnBmb1ZIZzJUcjhsT3RVaWs2?= =?utf-8?B?UzAxL2QvN3BQWlFpUW4zTGF6WjRkazBqL1I5c2dGMnNVcmY4andaS3YrN2p3?= =?utf-8?Q?c7/CU+?= 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)(376014)(7416014)(52116014)(366016)(1800799024)(19092799006)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QjNMS1N1Vy84L0txeUJuWE1NRjVHbWtJSnIzT2J5Tkx6cG40K3hZSmxaWVN3?= =?utf-8?B?dUhjRnM0K0pTQ0xTZnhoWmV6T2swNlRodVdQcEp3bk8rUUx3N1RLbzJ2WHlI?= =?utf-8?B?VkhTdXdwN2JOSmNWaDZvTmw4Z05jUFdudHN0dG9NU1pVRHdQMHhKVjJWR1Jj?= =?utf-8?B?eHBtMHdVQUEzT2xrQzJ5UHRNM1l3TG9rT056Z0ROMEtjK0hjM1J5ZG44a1V0?= =?utf-8?B?ZnhCTDBhVDdOanUrL3A0dXdNS2E0TGFWR3krL0g2aGpUUkxBYWtveGlMNlJr?= =?utf-8?B?Nkcza0U4Rm1HVEtpbGF5WGk0Wk5oVmpmK0FDb0ljM2NXK1E0QXU2VWM0dDYv?= =?utf-8?B?MWhMdUYvUGplOVFCNHJuVUJ3akV0eXhoVVg2ZzRuVktLWkJWS3dZdld0NDZC?= =?utf-8?B?dWRzd1REZUNtTEVWUjkyNFNUT0dINzAwZzc1eWJSMG9uSTc2T1BTejdhMEZa?= =?utf-8?B?SE4xNG5Lb3I4QTNHRjROTVhNWnRIWmFxMTYrZGh6akRienFjZWh4OUp6UU5t?= =?utf-8?B?THFCOXBraVhhMHd1bkEwQStPdW9qUXNxbDkrY0xUc3JwUDNWSThiQWwrMWlx?= =?utf-8?B?VW9ORzZ0UGo1WldQT1dIb2lqYURTa3JheDZvS2FsaTZ3bFh2S2NPNGtOWlg5?= =?utf-8?B?Z2pNOHpnaHg0VWRjZ2lCck0vM3NmcjloOU14Z3BMVStGUWNncDJYUklvUkk3?= =?utf-8?B?T0YwTGJ0ZThBQnpYVTJZZHQ4VWNzR2tLQ05iQU00MldUTmpJOVlwaGpwYzZM?= =?utf-8?B?NkdyZkQwL0ZqcEdKOXU2dUIzOHVoWXJseFB1amJTazlPSHhweWE4ajhieHY3?= =?utf-8?B?N24wMzRZL3E0NzVTNDVwbWZ5N0VCVEgyVWkwQlZaaGZ0V3o4SEQ1Uyt4YlI2?= =?utf-8?B?RXBLRkJjRDh0NUpGMlRwdWZmOS9VOHZiVnZsUkhCblEveGxxTTR6clRoVFMy?= =?utf-8?B?b2FkdmhWYXJQOG5weDh4RGdFa1R3cVJVT2hEUDFiRnQ1dWZYdFE1emJhVXAv?= =?utf-8?B?ZGVwbGRmU1pxcFRyOXdhdGJIVm9sNVRFR1hyVkZFaSt6Y3Fsb3d3UGlnMjN3?= =?utf-8?B?dElyQTlLVWN2WlpkZTJNMEtUWXBZZzZESUkvd1ZPZVR5YzFrT244MEpGLzNK?= =?utf-8?B?UEFFdEFPb0RrVXc1SlM2cGxoR3Z5NDFmS0NXRkNyNFVDWUswUDR6dXc2ZC9l?= =?utf-8?B?Y2V2dXlxSjJPMFNLQzVMUzJIQXZmVjhWY0FidHJIUGFCNFlHU2JxQTBrRUxX?= =?utf-8?B?Y3VsalhQMWptWDlJZUlLdGhIUW5oNE5LTkZCbHFDQzZrSUJhS2JkankrbG9k?= =?utf-8?B?N2YwQUQ0UFBKK1p2SDF1OGFzL0hkWUZsL014MzZsZ0JZWXRGdkNHSm5UQnFU?= =?utf-8?B?S0MrVWlja3NBWXBRYzRLTm50MDVQdWJOdjJPeVErZmk1Y1pPUXFEQWVxQWd6?= =?utf-8?B?MWNvQzFRb1ZlMlhmTVZraWtBdEM0RGJMaEhna2NRTm1oQ2FjSFhCRlhOcU12?= =?utf-8?B?L2VnTS9FblNRVmRmd0J3K2FOZUdoVUpqalYwLzRXRHRTckFFTjRtRVpQMVRt?= =?utf-8?B?VVlHNG9KTE9melE1SFZqUmZBcCtCVDZOYjEzVlg2ajlqQXZJdmI1V1hsN0xv?= =?utf-8?B?VlhvNklBR24ySUNubml0QXMzZmZmS3dpZFFLbFgxKzg1UDJFTFhFTEhXOWl2?= =?utf-8?B?WE5lNzlKc05LNzZ4VWx3Z3ZDdGRnRG83a2FjN2tLb1I3SHdYSDBnTnNxN2N4?= =?utf-8?B?eElWVWxzbitBOWVVOVNhNGFpa1lZYnhnNWp2RzgzUFByaWNKdGY4bWRUN2Rt?= =?utf-8?B?ODRsNG9hZXFWenZTTmNDbWMzVzZZQlZGcXF6SzNtNlU1djNvQUE1bHdCejZs?= =?utf-8?B?TjdXVnEyeTBnV3owZ2RJcHoyd1BYSUFrbkxwNzdlTlIrMmcvTm8venRXc2pj?= =?utf-8?B?bE5vNDZ1WDVzRWZTcDVvOTEyVlFKeXZOMlBzQXgrdE1hSDUzNzlaVDBMSUVD?= =?utf-8?B?cTVrK054TmdWNjdxQkcvMmIyYlRCcnVhYXJETGQ5REJZNGFDZk1TT0JHQ0ZH?= =?utf-8?B?NDVoUXRmWDRSWC8zbWU1bnpFV2czNXJGWkxxWWVocU1iNm9rRnFOb251NUtk?= =?utf-8?Q?yOODmob9Euh4b/HJR/A+a+S6o?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ff0539b2-f5f1-45a7-c3da-08de1d5b0db3 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 17:36:44.4042 (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: 8JuC7nMEwvdr+bdI2zOiGM2NORzLoN2fYHfYBe5Lx0nGV+UFxbKiJSkvfUxKRkKKaltdAY8b9mQYyTw/MNrc1Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7200 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 Reviewed-by: Andy Shevchenko Signed-off-by: Frank Li --- change in v11 - add andy shevchenak's reviewed by tag - use unsigned int for regmap - compact mmc5633_read_avail arg list to few lines - move check condition to one line for read_poll_timeout() - leave i3c_xfer as size 1 array to align existed code style in kernel tree, git grep -r i3c_priv_xfer drivers/, leave to jonathan to do decide. change in v10 - align datasheet register name - remove reduntant regmap_attach_dev() - add missed \n at error message - move *regmap to first member. Changes in v9 - add time.h - remove dev from mmc5633_data - remove struct {val, val2} - regmap return value check use if (ret) ... - 1 -> ARRAY_SIZE() - use guard() replace scoped_guard() - use regmap stored dev - i3c device use bus assigned name. - use devm_kasprintf() to combine friend name with device ID from i3c bus and it will avoid build warning to discard const return from dev_name(). 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 | 585 +++++++++++++++++++++++++++++++++= ++++ 3 files changed, 598 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..7b20ff3b063b026ab2ae0170fd8= c021973428dea --- /dev/null +++ b/drivers/iio/magnetometer/mmc5633.c @@ -0,0 +1,585 @@ +// 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 +#include + +#define MMC5633_REG_XOUT0 0x00 +#define MMC5633_REG_XOUT1 0x01 +#define MMC5633_REG_YOUT0 0x02 +#define MMC5633_REG_YOUT1 0x03 +#define MMC5633_REG_ZOUT0 0x04 +#define MMC5633_REG_ZOUT1 0x05 +#define MMC5633_REG_XOUT2 0x06 +#define MMC5633_REG_YOUT2 0x07 +#define MMC5633_REG_ZOUT2 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 regmap *regmap; + struct i3c_device *i3cdev; + struct mutex mutex; /* protect to finish one whole measurement */ +}; + +int mmc5633_samp_freq[][2] =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) +{ + unsigned int i; + + for (i =3D 0; i < ARRAY_SIZE(mmc5633_samp_freq); i++) + if (mmc5633_samp_freq[i][0] =3D=3D val && + mmc5633_samp_freq[i][1] =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) + return dev_err_probe(regmap_get_device(data->regmap), 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) + 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) + 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, val; + int ret; + + 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(regmap_get_device(data->regmap), "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) +{ + struct device *dev =3D regmap_get_device(data->regmap); + u8 data_cmd[2], status[2]; + unsigned int val, ready; + int ret; + + 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, + ARRAY_SIZE(xfers_wr_cmd), 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, + ARRAY_SIZE(xfers_rd_sta_cmd), I3C_HDR_DDR); + if (ret) { + dev_err(dev, "data not ready\n"); + return ret; + } + if (val) { + dev_err(dev, "i3c transfer error\n"); + return val; + } + return i3c_device_do_xfers(data->i3cdev, xfers_rd_data_cmd, + ARRAY_SIZE(xfers_rd_data_cmd), I3C_HDR_DDR); + } + + /* 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_XOUT0, 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][0]; + *val2 =3D mmc5633_samp_freq[i][1]; + 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 ret; + + switch (mask) { + case IIO_CHAN_INFO_SAMP_FREQ: + ret =3D mmc5633_get_samp_freq_index(data, val, val2); + if (ret < 0) + return ret; + + guard(mutex)(&data->mutex); + + return regmap_update_bits(data->regmap, MMC5633_REG_CTRL1, + MMC5633_CTRL1_BW_MASK, + FIELD_PREP(MMC5633_CTRL1_BW_MASK, ret)); + 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_XOUT0: + case MMC5633_REG_XOUT1: + case MMC5633_REG_YOUT0: + case MMC5633_REG_YOUT1: + case MMC5633_REG_ZOUT0: + case MMC5633_REG_ZOUT1: + case MMC5633_REG_XOUT2: + case MMC5633_REG_YOUT2: + case MMC5633_REG_ZOUT2: + 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 regmap *regmap, char *name, + struct i3c_device *i3cdev) +{ + struct device *dev =3D regmap_get_device(regmap); + 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; + + data =3D iio_priv(indio_dev); + + data->regmap =3D regmap; + data->i3cdev =3D i3cdev; + + 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 regmap *regmap =3D dev_get_regmap(dev, NULL); + + regcache_cache_only(regmap, true); + + return 0; +} + +static int mmc5633_resume(struct device *dev) +{ + struct regmap *regmap =3D dev_get_regmap(dev, NULL); + int ret; + + regcache_mark_dirty(regmap); + ret =3D regcache_sync_region(regmap, MMC5633_REG_CTRL0, MMC5633_REG_CTRL1= ); + if (ret) + dev_err(dev, "Failed to restore control registers\n"); + + regcache_cache_only(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\n"); + + return mmc5633_common_probe(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; + char *name; + + name =3D devm_kasprintf(dev, GFP_KERNEL, "mmc5633_%s", dev_name(dev)); + if (!name) + return -ENOMEM; + + 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(regmap, name, 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