From nobody Fri Dec 19 11:04:12 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013016.outbound.protection.outlook.com [40.107.159.16]) (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 B4C64271457; Tue, 4 Nov 2025 15:47:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762271249; cv=fail; b=L202Ny16K6rlfvdhHHSj+9YMQ6ppEpbMYRcT0gzA+l0BkckvgYKq9Ea6qplL6bzWSdnAFuwoNazp7JwCiPYH2WVsJ+QsnN4v7op1n0CyMcy11x2mK2bqW1HSsCUvjk/J8rVK0d68bh5yY9+9SdOlZeiRzCZcv61S7nLgnogMbkA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762271249; c=relaxed/simple; bh=Xu8bp9V4hfsx8ETYTi55tKRQ6COWT2egdx/YMlh7Rpg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=M5WGSENY44PE15+STtp36fnNcF6n2sH1WF8wFK3dCr8jxPrY1BeEpob5uvmfSnbmQKdT5Kqc7ak6bgieFP3Qgx/hNRB2BNo13T+BD0qDHyzs7LhXI3lNSsI6uMr9ByTjrIWR0H1Qa8XR2+Q7sjWiASSTAiyAUaVBvcfFYY9VqTc= 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=oEvJYzay; arc=fail smtp.client-ip=40.107.159.16 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="oEvJYzay" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Qn2bLlegsfAbSgfzmVkWQbVj/MZw0Y4cSZqj8wLrVNtwlf2vluGH1klnHv1V+y/5U5lYDfs4y8LcxkN5yHfHHkFHMRwiaHycdAJOs5JyaHVgwhLfpLWa4JaFygpXLWnl/iJmf5QgxWlE9DJ8XwvHJQnmYMBVydXUKQA8aBBBJqmAUW81m/usJDYMdeeFgvYVXzUAI144gGK1sUzKaf6QauCDbtNrGhOb26cvFgbB6whfkchcEtxuVLUr2fBER1YdmdEAScObAx4OSq/XvVEVGVxDRO81b5ox9Vm+hC6oHE8gMhvNn7m5MvJKz+trT4RyJ+iNfZUY1yoobv51+W4+jw== 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=XN6UZTWCZhgHfbZguQzntitEl47C4JUU5cKtG+zxTgSZapd+uhmGQv0X55H4dsD0zUq9vaIjMS62kxFFPytk2FTeVkxid9RNWM44UkVGsToGKYGmoY05v+xJY0K5YycN1dsoeqeK50U0ggu0TZQa4VDpbjFOwnmhBnB4xhKfXgp+nY4/diUDd+qhdpOTCJDjUEAqFsisWiTAc+Mm6gEnH9ulr9OniK5sfMhkc25sOX8WCGjNdWLMH/5SNNnyC6OUI3srH7fFLfcLLCN9kwmFWRUR0h0kCT/iG4cq682W1v8QJHVCjYAAmDPXCom12Z6cMZXQ5i5Cy6/7c20wQPMZ2w== 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=oEvJYzay1jmtP8RUE760U4SZovCsGVB7OFxsvDdC/VUOIXIdrG1xX83GGK6iXWo4vCc28b+MPJG2M8FE1zqvcZfqTVbluk2CprafWM5Di670oiwAcQQcIJd/QF5KucnX/RSqHTY8J03km4w2WW7mbilTdqYgFVw2vBUDPQm4pLD3B15HTkOfuLBsjsZ6xzVXbl7/ArTGISNVmCA7457Fcoq1EG5jFzNtJyQBlxEiPGLp+xvbbZB8KDznB+E7wyxtrc07EL7DWU+Q0tU/QL8gMSttBcF8j4+HlNlHiix6n6baX6dtZwdzJ7JxVW2m6tpKjxNi9+4uLwl8zfsN5o76xg== 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 GV2PR04MB11834.eurprd04.prod.outlook.com (2603:10a6:150:2d5::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Tue, 4 Nov 2025 15:47:21 +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; Tue, 4 Nov 2025 15:47:21 +0000 From: Frank Li Date: Tue, 04 Nov 2025 10:46:39 -0500 Subject: [PATCH v10 1/6] i3c: Add HDR API support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251104-i3c_ddr-v10-1-e3e4cbc17034@nxp.com> References: <20251104-i3c_ddr-v10-0-e3e4cbc17034@nxp.com> In-Reply-To: <20251104-i3c_ddr-v10-0-e3e4cbc17034@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=1762271232; l=10620; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=Xu8bp9V4hfsx8ETYTi55tKRQ6COWT2egdx/YMlh7Rpg=; b=FHnkQl4UYASMX2MHSUWJGJvyreN/AdJ0TbDLy9oiJlLJJVaAkRVtS3geN8NekoZiMBk88hN3+ IGRK3WjidruBPTFWJGavvGePycdGWnpt8Zdd08D1282kqpdNSREQqP+ X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR15CA0017.namprd15.prod.outlook.com (2603:10b6:510:2d2::7) 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_|GV2PR04MB11834:EE_ X-MS-Office365-Filtering-Correlation-Id: a297060c-bc42-44e8-7724-08de1bb970b0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|19092799006|376014|7416014|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?QVJ3ZU9qU1JOQXZOZlhhK3VSOFZLQTRiTmloQ2xmTWNieWR1elhqVlBTT2VD?= =?utf-8?B?WWw0bytieDRhWWp3UzZlaTdDOHVNN0hYMStveEpZUTlqb2VaNlFqbWtDQms2?= =?utf-8?B?SVQxdjdWMjZyc3NqdXJtR3BWaVJvN3kwNktGRWR1WWowYzhRd2VoSGNhbGg1?= =?utf-8?B?d0lXUWFzZTFHZTgyelZWZERKbmtlUEpqK09vV0o4VTY5U2cyMm5aYXJPUHhV?= =?utf-8?B?NjFjQmdiQjlsVFBPTXF3bDJpNms1eFZ6N3BtTkFXMUQ1WkxSc1c2S1FIUWNU?= =?utf-8?B?M3hhTmZFc0tRVGtzQno5SXpsSTBsMlFwSndVMjd2WW5vNEhLWmU2NEl4Q3Fo?= =?utf-8?B?WG5MUXJKYTlnUzFVS2J3YVVLeklPYnU1N0xhSUovYU9OTTdWUS9zcFFPTWIy?= =?utf-8?B?Sk42Zm5zSGx0S3YyVVZuV0wyRXY2NEJlZDUzekJYY3pHeHczenV3b3c0YXhP?= =?utf-8?B?VzlQRG81cnA4eU9ZS2Z6Uk9ZSGVEWFNzR2FXNWs3K1VmUFBhcE1mZXhqVHUv?= =?utf-8?B?b1pjSXNQMVl3dUxBSXpMSkxCQmZ5Kzd5bEhtZ0xBL0JVT2xINUJOampYTUNG?= =?utf-8?B?dGJxbXJ2TGN6MVRLOTBweU5hUDZZSTUrclJrRk8xYngxUHQ1YU1ndlFsblIy?= =?utf-8?B?NkhMRThnSHFHRnhhb3hGQ2xtRU9pcXVkdzJjQ0U5MS81enZIbzJjMGxFQWZy?= =?utf-8?B?aXdJT0FyNVFhUjdXdzNMT05OOHhLT0xHUDFqUU1VY0VONVVoRG1mTVVpaEZD?= =?utf-8?B?TitXWUc5SXQ2TEEwUWxFbk90R0lWLzY2SUdkSmczUUZ3SGR1Z1l4clgxVFdS?= =?utf-8?B?VVkzWDlSTS9SNDdSRWVPZ2FaT3h0YTBWYXlycGd6Rk51YmpzalNldHB2VFZP?= =?utf-8?B?dnI1bUprTmlWWVF3aFc2TnI2YXkzVkc3MWxIc054NElhakNKcTQrYnZDdUhh?= =?utf-8?B?MXd6OHdWU1JvaGxRNmNXZWVRbDdCeFowRE1KV2dVcnVRNmFydE9Qb3JQQTJl?= =?utf-8?B?a1hITXdqWG1WUWpDZ0Q1M3RZQUdWYVllOHJoSDF1elMwNmpNWTloMGtQQmVu?= =?utf-8?B?Y1hzRlhhRWdZcXZlaUlxUEV2N1FPWUpNUGMxNUhYMmw2Wml0Tkx2bjlsSDRt?= =?utf-8?B?MWdjd0hIcnN1QnlOenRRc283aVhWbTdtSVhMZTdYNG5ESkxhYW9Lald6NUh6?= =?utf-8?B?OUJ6QW1KV01sSlAvRm1rQXAxeWdZWHZIbnJxb0lRdXJ0c2FVQlVPK1B5Ulh3?= =?utf-8?B?Z2xrMFZLakZzdU04RXI4T1dhdXVrT3djRmpRSm9yb1VFWW1QR1JNWVVtVGxE?= =?utf-8?B?d0ozRW5YUjZ4b3FYZGVHWXBpZXpVUXFjZkVkUVNqUzRuZU5SeG9pYUNVdkxL?= =?utf-8?B?Zm5OZ2dyYUpkSFByRVo4aUZWcUpNbzRtbFEvY3EvUFFwdHJaNVlaYzFHUGVQ?= =?utf-8?B?bE5QaTZ1Y2JRTUIrWWhhTmU5YkgyS011VWJpdXZucWNyTWs2V243cFJOaDlh?= =?utf-8?B?eVhBcFJrQUV5K2k5OFl1Y04vaC9tYXM2UkZLZG1ZNHdPWUpDcFRuRVMxQmpZ?= =?utf-8?B?QlB1SVhqRURHK3Z1NUpiV0pQM01xZ2RSVTJ0OFYvTnFlekljcDdzdmh3TUZH?= =?utf-8?B?KzNOUVpBZEhDU2liQ0hycUZwQjFoKzRDeUpsNGFvRVkyNzhWYUk2eXd5aFZH?= =?utf-8?B?Z2F4YzIwQ1pSSTQ4aU5FYWJaRWNSNklBb29zLy9OeGtyRUFJaG5jejdzblJB?= =?utf-8?B?OWxzUkNGbWcremlQWmRxL2ZVekdhUmZuUFcrMkpKSWFZZ3o0TUExRUFxK3hJ?= =?utf-8?B?eG12QU5jZUlYSXpsb09XS294cEZ5MXZkbDdaZlgvS25wa3hxWUZPc1h4dXNB?= =?utf-8?B?L1o4SlNBcWRVZFBVeGhDNkM4WU50cVR0VEJkWmNPcWMwTDlJWktCYzlrZXRZ?= =?utf-8?B?ei9YVUkwdDJTcTZxdnU3SEtPSWxMYWJqVzlGQmM5cXN1WDlYVDBUc3o3Yk9z?= =?utf-8?B?TlZYMWJUZXFrUGtHWlJ6MVd3eXJyNDVGT2hVVXlraGJMZHRSSVZEUWJmQ2RV?= =?utf-8?Q?iijGrt?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(376014)(7416014)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?czRkTXZMckpFREp0N09Bd1oyWkw1Rkl0L2w4c1JNZFNVS3pJdmRuVFZ1UUdG?= =?utf-8?B?UkVabUY5czJUOWcxZUk1c1dyU0ZabWpPRVRWMHVHUHpFUlRJTDZoVisvWHd6?= =?utf-8?B?cForRzg4aHBkbGxNdGJIQWVYSmVwMGYxRVRCbjFHdkVKL1ZaZkdOU2JZNXB0?= =?utf-8?B?MUtXb0NSSGI0b1lhOC9jZnFYODByRTFoN0JVNkxDMFlROWdSSEVJd01RTTRT?= =?utf-8?B?UmxFcENqNUZYY0VpMUVLSGhvc3NJc1oyS2JJLzFCNzJETG1Pd2dqVDhoYUxq?= =?utf-8?B?bTZiYkQyd2paU2YxcmM1enVxNWZScEs1bXBLUTRVdk1kQjNSRlJ5RGtBOUVC?= =?utf-8?B?dzltSzNMUVNxWG1vVXhKM1dZQ1oweVZDUGJpSytzaWt0b25vZkJ2NGlLUkRY?= =?utf-8?B?ZHR5K2dRaWh1bEpOOWRRVVhOUWRWSDBSV3BQSzlxcWZ1SWYxalZocnBNTm9Q?= =?utf-8?B?d3VIOE5hZzNmS1F4MDVUSEFEZVlQVHJFbGh2Vkh2Zm1IZldSV0Z5QzB0MTJ5?= =?utf-8?B?bXprV2I5M3lvaFVZVmgvRzlvakdxSTY5Y05yU21UV1hEOHU1dmpmVWVQZGZs?= =?utf-8?B?cHdqcW0vWWZ0Z0ltYyswSHkzUXZ3NkhDOFpRVklkUm5PM2lXai9nYkMyczhY?= =?utf-8?B?dHM2RTN6dzUydHE4cUxlZ2NyOEIxTEwxSVdFYU1XQmZLZ1JkT0pFUWJEelZt?= =?utf-8?B?UzdZeE1mYXY1NjlkVWF6WkFDVWhiYlBITnBHbitCNmtQSTZBRGNqcmxiWUll?= =?utf-8?B?cnpqU1hudk9mRkJHYUtTSmlKcGhpTThxazhQOCtpZVdOT1p4ckk4V3dEUXRC?= =?utf-8?B?eU1scjZRUnN6Y0k0b054dUxBUW5xWlBhbzlMYVlWa3hxUnFLN0c1THlVWEkx?= =?utf-8?B?NEFlb0t5czJhamxRL1pvM3VRNkg1Yko4dU94d2hXYmNYZEpLMmJSc2ljczh5?= =?utf-8?B?NHVXdW4xVTJ6dDRBY1FwWVptcXp3VmlkZFZkMVl3S3hkd1hRWHFiT3l5S2tS?= =?utf-8?B?cERFbzNMVWlyUkhPUkxOL0IxRUhxUndhSFFXSC9paHl2MG9SQ3h4OEFFTnJj?= =?utf-8?B?TFNuZGFKMW1WU3J2MDBZNEZSSWpiYzlIMXhkRDR1L25NSnBEclVHVUxkQStO?= =?utf-8?B?UHRKb1o1aDVRVWJrcS92RjhtQ1RqNDFmaUtBMW4yTDQ3OVpTemRra2lMbE5F?= =?utf-8?B?dGlNRWxMVWh6VlJKcGRnNGVxNHpNV1RML2RrbEVGVjdUZEplWEF6K0hlcXE5?= =?utf-8?B?OU9mb0cwMkZZK3R3bFI5N2kvM2FHbVNGejZZMlFxa1F2bGdpenpVSkJjMS9M?= =?utf-8?B?SElmTGdZMEZkdGtNcUNISDBJTnhUNmQrdFpVNzlVTEVSaXlLaFNUU0JrekpH?= =?utf-8?B?VFBuSTFHMzNUWWg4NldFNXdnelgvdVh2UlpFNmZGUG9SbWMxSVZGYWJZQ0NI?= =?utf-8?B?SGJUa0M5RmVXOGlOQlNJa0NqQ01GNGl4UElQYWVZYS9LZ1ZyWmZIcXQ3bTV6?= =?utf-8?B?Qm0vMlZkbi9reEU4VFdDZDNCK3FHUUpJTThNQUFBN0ZTQUh2WituMklOWGhZ?= =?utf-8?B?OVJXT00wUis2bEdjU0pSa1hJOWlNM29vbjVabTI0emtBdis0WFdyWnZieWZY?= =?utf-8?B?S0NjaGRoRmdDZWxiNWtMZTR3T0krb2pGalRmUDlqbmkvNGNSYU5MeWsvMWlO?= =?utf-8?B?RzUzZDhlZUdqQ2VTdkRlMGtqUHA2aVdnZEhPc1BxUkY2WTJUb2dqM2tkbDU1?= =?utf-8?B?UWNITWxPcXQ2QS9XU3p4SUlPdTZ2L2dtWVlFQnRQTDZlQ0tYeng1U01pQ0t0?= =?utf-8?B?QUhVczZ2RFpWT0ZZZERmYUlaSmJwendsLzJRVVBlay9BZEd6eFIzYzNhcm51?= =?utf-8?B?cU5QeW9BL2t3NGdEc1Z4REI3MjFUOWk4cDB0S1dzMUNMYXJvT3YvZkFoT3BF?= =?utf-8?B?NW5IRFNsMWc4a05DUkowb0hWMFVESEdWYUJCQVdmdnRzaWxaTlFvcjZ3RzBE?= =?utf-8?B?V0dIQzFBQ0dmc1NtajZnMFhEdjJDcTgyL2NqbmVzTWNHczVTb0hEdUVrMy9Q?= =?utf-8?B?MGVKdm1ORWREcnhsYkNVNGUwR1FOV2R4Z05lQXBpRmZzRjYvQWJFZnNoR0pw?= =?utf-8?Q?yI5E=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a297060c-bc42-44e8-7724-08de1bb970b0 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2025 15:47:20.9721 (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: pBjNXkJ6eDwXONl09cxF4upXx8gvzChezDiiD4nnZO3xKooy6IJWpmQzRyZ6niap/m0qONvzw+WHLKncxNDhRw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11834 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 Fri Dec 19 11:04:12 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013016.outbound.protection.outlook.com [40.107.159.16]) (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 32E0A273D68; Tue, 4 Nov 2025 15:47:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762271252; cv=fail; b=Q36NuObbNBcAyLpHUCLJueDp9GiZqtBbBgIV9VmivvFyA+ofKcOGVC2G8USitJTRL7Ka8AaJQ9MMQXUp8D3NSplHla/wkhk2NnpzvAIKivy+eDfVeKZ5G5w8cAA+XKZ21DDNHgx4RuJP6cImt/ujCfsEA3k8+w8NMYUkrRr9S/0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762271252; c=relaxed/simple; bh=5vasvYWn6j296foC0KD1do8HEXNE6j61yOhJlnouXFY=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=eriChYpPBi/u8lh9sPx7zP75SleOwSg+a/rDxDGCnAKqNHewZjGakBQT2xf+A/0JCwOtQbRvqX/1y4iVlqAIQE3lEHKauwD1a0I6GQ9r2dOimgFwhelwLcBGf9hxRVJ9kzT6C4Qpg4g0H7azwrKq8+JIUPXtb/MDMhN9MTbTG/g= 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=lFW0JY4K; arc=fail smtp.client-ip=40.107.159.16 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="lFW0JY4K" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=v+xdBAbNyI2aCyP3HHJLmJQ55rJOXj/p+/YLQOl79apNkF2YVemF4wlHN2Y5F8tOT0IU2z45BVKCXmKWeoacC2vCzDFFQH0DMEQ7PAyJCSTrvvIh/zpPf/RNt5WOfbEK9rg08hfvEWHv77pY1heiC5Z3rtIKaqBJ61cMgAIMBUaAyHiOhSe0MeKTFV5U53l7ODingHh96KzPhHEDwoL1K8XTWrUzzG+8f1kT+yYxdtfo2Vc/Gxu9UCosVDuOaXZ939owiJ+hyOQjFsLZ5Fb07XPuFd8POFAo4jnx8nWo4PDskKXh3s5d50ebssbG2MMPAb5tbrbDUgciC7DNzvlyiA== 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=QHdEbXCSjgiaVgxn9ANO6dI2EipHbfKlcfukbW6DyQ10d/SJ6rQBua6idTgz8/zVL/mgLDLHwfU9Ab5+WVh9ovUosBHvr6awMJP19MydT+ieDgI+KO5mEySGXtXK/8iMe/ge4Lv62AAsyaxTT9WOh4FTbRuyvKBrwMNmk/xK33g2t6DJm33TgIcvYur7e1rUVCeAbEFxZ+q8yjNMNS+JBNONlYvfPBvWwihOgIATBIxX7Kv0K8ghTC3da2hAqNdGM65er++KJ9QE6hOmyKu6V6axsCfO5wsdK34jheizMP16jJmM7kISPW+mqBtY6gizXF81CrPXx5XoXQ/Af8yZtg== 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=lFW0JY4KxX5inNsLI7Bo+wuA0L/I9jw3As6ZmPJiDlb4pQ6TqXjgIEQGC9pIiHfbfl2RzVLFQfKreF4eziDB+7V3vWcMFBWu9xdvShrTbo0rTpVgwyVjrXWfXooYWxgAAxw7hLK3N4xukOptWvm1Fto3g/jRUh8wVmzrBog5l+AgGo0c5JdC/9Fa4hyRLXz2Qfe68s9UfMfc+sMf6UkKTS5R287x/zRuGS4qwgk9Lmt2smVFR4gW5S/lic9AdbOOgOcvz+6Ak9zLuY9to/Kan16J67uPLQDWVar07FvRS/CRx46McPEvs8gJCGHyydc2pjPlfeMJq1Yh0NLeLFcbfA== 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 GV2PR04MB11834.eurprd04.prod.outlook.com (2603:10a6:150:2d5::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Tue, 4 Nov 2025 15:47:25 +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; Tue, 4 Nov 2025 15:47:25 +0000 From: Frank Li Date: Tue, 04 Nov 2025 10:46:40 -0500 Subject: [PATCH v10 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: <20251104-i3c_ddr-v10-2-e3e4cbc17034@nxp.com> References: <20251104-i3c_ddr-v10-0-e3e4cbc17034@nxp.com> In-Reply-To: <20251104-i3c_ddr-v10-0-e3e4cbc17034@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=1762271232; l=1345; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=5vasvYWn6j296foC0KD1do8HEXNE6j61yOhJlnouXFY=; b=dsx5bFOmTYMLOiG895CnXKJ3mMo6fRwQuBvbzinZEaCbnqgj5LmNyD272BMiy9Hl6uQALQiQW izHixQlkHplDkauNtc42nAdualPA+JYjoflNJGmKELsD/RzwN95YqFB X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR15CA0017.namprd15.prod.outlook.com (2603:10b6:510:2d2::7) 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_|GV2PR04MB11834:EE_ X-MS-Office365-Filtering-Correlation-Id: 95903849-1135-4a2a-b414-08de1bb972fa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|19092799006|376014|7416014|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Sm9ueG9zOGYrQUw3STc1M2t6K2FiRFFiWFNNTFQ4NHZxR1NCRC9XU0M2UE41?= =?utf-8?B?TDZNWkJhSUU1dllNUldTaGJ0NEkxUHE4UjhVejZkYXI3TUFxTG1kT0JUZFNx?= =?utf-8?B?T1lFeEZxZFVDT1IvajU5aklwM1piMXZwMGJyak14Z2hmSFRyNjdUa3pxa3E0?= =?utf-8?B?S2hUTGszcXRpaUdsZXlyTTJ4N3I2TVdVd0pVS2xXS2k5Q29wTW9JNzdQWmc0?= =?utf-8?B?NTRDbTRjUVE2ai9mbnVza05SOGhVTlc0UjJkWDgrbmlPcHkxY1dRK21aWHZH?= =?utf-8?B?a0FjUldzU2V6WGJSNlFIcjJZaFJOL3dqblVtdVZFVlVwcFRGQ3NLSlZCVnI4?= =?utf-8?B?QzlTeEdBUmlOeGt0NkFiaFBTZXVvMnpMaC8wdklsckJST3dmblF3elpudFhD?= =?utf-8?B?UzFZeXUxdzFOL1pxMXpMa244cDFvWFJOajBBd05iQkJLNUYxVVA0Umo5NmpJ?= =?utf-8?B?dUpGWkdiWFFKbW42L2Q1QXluVmR5UzdVSlIvNG9qdWphZDFZNVlnaTdxczZE?= =?utf-8?B?QkZ3Mm1HVGhYZUIrY2tIaGtxL0VWaVQvVUpKdnlyOEgzTkxRYW8vZlJJZ3NN?= =?utf-8?B?UW9Samc3UXZrWlVLc0Eybk84VzNCUm9OZ2RiWS9iald6QlJPKzQ3bUxIMHl3?= =?utf-8?B?cjRmSnhsVVlrTFFLamR5VFRPem5LMlBZN3JhaHRjZWRsUDBxTy95R3NVUlpM?= =?utf-8?B?S2k5SzI0a1p0b0Y3anpWMXMrMm52MGZSa1VvdzZXb2UraEVHZTFrblFWdWoy?= =?utf-8?B?NG0rOWpaWXA5ZFR4SjN4TjB1VDNsYU5tTUhGZk90bGljeGg1bldIU2s4b0h5?= =?utf-8?B?MXhzS3ZmRjBXdkV3dUV0R1FEK3NiQmVrdzJqTzUwZDRTclJUK1JEd2FtdEJE?= =?utf-8?B?Vnk0OTh3dlc3V243L0x0bHRiSW02RWtDWXRjZWEyeG1HUTViQUVhMUFXa2tv?= =?utf-8?B?NFYyM2FFMW5zWlhNZk1jcTJrM08zUW1URTlaZXpxQ3lUM3dFYU5zSFUwMDh3?= =?utf-8?B?NEF2REVUVnVMZHE4M2JwZHo2MlNJWVhHUWtHMFdmUC9qMWhkeCtTR3N1NWFE?= =?utf-8?B?NS85aFJTNzI4SFcwMzRMS2E1V2pqMCtPSTF6bTdCYXBpTm9kWUVVSld2clU0?= =?utf-8?B?K1Eyc3oxdGMxMitDVUR3UEJaVDZ5TndWREs2dmtQY0RDRU05UU1yQ2dmZ1pJ?= =?utf-8?B?V21Kdms2clZWTU1yblBtdzRFWW9PZ2RzeTlEbUNtN3E1eVpZRnlHdmdvTG5z?= =?utf-8?B?VUpEd1NyUnZJMDFLWi9rK1ViZ05ua0czSGFOdS9ER3k5SHpqbEQrNE1mNWg4?= =?utf-8?B?MnJrMzE5eGdxSHE0UWprODdCYUR6N21ndTBnNTBROE1uelFBc2Y1L1c2S2V1?= =?utf-8?B?eDljMVJTZmoydncyTlNRZlNmZnpkZFpzeGZVY3h5Sm9xMzBsaGQxTXMrMGpM?= =?utf-8?B?Zm9Ld2xXcUllWGhKRXc2bCtxNmpWWHFMdWJRS25aVXBkU3prbmVBVEZFQnlj?= =?utf-8?B?RFBEUzZFakZ6SDU2a1lDZ0taekYwSnlzdlc4NnRtNjluUVRKSWxlS0FkY0xJ?= =?utf-8?B?b3pESUU2Z3E2bUwyWEdjRWNtMTBQTTUzUE1uelEvVHBxUnBUajZ3eW9pamdi?= =?utf-8?B?eXpjUmlJVEpNTHVuOEgwV3hCeGlRSFVTMG9kWjFzOUZrTzQvbWVhWHBlK1M5?= =?utf-8?B?bGtEdndMUi8xWGVYbDlvUHhsOHd2YWFBWGY4R0sycXVFTFdXcHBOOU5uR00w?= =?utf-8?B?aVBqUStkYVc2dGxROW1QaitadUdqSFUxTStTRzczeG95NG01NjlSTjhjZWpR?= =?utf-8?B?M3hLZmoxdVVrbEZCVmJlUlBIdzdHa0xseDM2OWYvcndtdHdFSXNWNTBQR29z?= =?utf-8?B?NVM1Zy9rdlJ0VEFrQVhPMDZDSDFqV3lVUVlvQVhDdXZVUzlNTjIvWkcwS0NR?= =?utf-8?B?ajhPK0VzOWcwQjFCOEdiTjVINlpiei84akxqcEhKd1Bkdi8vVi95Wjh2TExP?= =?utf-8?B?L1plMzdyWm1SYnA2N04xclZpUk5wODdKc1pJeXoxQVJ5elBXSWtxei9SWVBH?= =?utf-8?Q?kKJfGT?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(376014)(7416014)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UmE2MU1JSGtsNmNJQTJoRWgrbEpRT1l0TUV1YjdIT3g0bXgrdThodysvYVFa?= =?utf-8?B?VVYrcmpVUEcrMWJEaU5vcTA1Z2pBbTZhNnUzYkZTN2t0YnZqQXJodHdVVjEz?= =?utf-8?B?cFJVMHJ2WkN0eUVQQndKNFJaV0NLWUxMb2R2NUVNdyttNm9PRktremNYc3hE?= =?utf-8?B?NEtPVVdyUUtaVDgyU2lsMDVZN20venZyZ0dldFEwYTlNY1dMaENVUUczODBB?= =?utf-8?B?UzhmVnFMd0RMVW84NGpydERQa2ZwNWk0WnAraThsOWVJNUpkZkFVQmNrV2hs?= =?utf-8?B?VXRQUHBlUnI5M2gxOTduUys2WXNQV3pnMEdZazFsVTRYK2QvY3ExeGwwSmM1?= =?utf-8?B?elZ1STFNNjl4SkpucEJwU1NVQzVseVJpdGVSZXljcWI0TzhuNUU1Tm5IeW5w?= =?utf-8?B?VlpTVUFDUDBLcklNb1paYmpDV0pFNGNKbG9rK0pKeUtFZUlYZUVSd1ZLVERm?= =?utf-8?B?WE5vQ09ZdHMyMk9qUEVEL0wvMmpDSUorbUEycC9QOXpaNE9Ic2JKOGZLQVlz?= =?utf-8?B?Ry9YZ0NhMEZ5R2JVYTcvMGhKRGs5RUtncHNVOVhQQXpYQTlqeXBCMXFZZHp3?= =?utf-8?B?RC91cEwxS3FFU1NFRE1kYmt3WnpEN1QvRy9TWVhSM201T05rTy9rT1NIQjVE?= =?utf-8?B?MndMRHUvMEFMZFpMZnI1T1VWSk45aCsxNGUwTVhUNnRKbitYWFYydFJiWUgx?= =?utf-8?B?bTFNR2JvaTQ1UjFrTXRJVkFpL042ZEU3QUJPN1ZzVmtHUG5KVTZReUpSclBi?= =?utf-8?B?SlFMWGVkRHA5L3VrSUZYVFVXQUxDeWg1S2ZpUjBrVlVtSWh1ZWJEMWM0RjZn?= =?utf-8?B?OEljSThiRjJEUXlTWnNzbG5iZkhRemNpQlIweGZxQnF3Q0hoN3cvSDhqZWVQ?= =?utf-8?B?a3U5eVE3L21XSkZjOUdzVHN0QlVtTDRXb01qcTdsTmQvVjZ3dFBPc0NZcHlF?= =?utf-8?B?QWdhdlIzK0s2VXFTZkNnWlFUMG5JNUZZT0Z4MzZwUmJCVjlLUldZNVlibzV5?= =?utf-8?B?OVVSR0d0NUdRSTRxSlM4RmViQzE2VU03Y0Y0UTdod3FNUFFoQS9sSkZPRmI4?= =?utf-8?B?NWdxNVJaWU9xa1doRVZVWGEvbUlDV2d2Q3ZvaVpSd0ZqdFNIa0lMeTNxbFZD?= =?utf-8?B?aitUaXVtMldXUGIxdzd6Z1lqLzZybmV2MjE0OVJFMDgwNEo1K0tOQXNobWRD?= =?utf-8?B?emZZY0w0eWpYUU9rUzJLRWJDd0paQ2pSSk1NSGw1cmhxSXVkYWdoOU9ubkFB?= =?utf-8?B?anA1NWFOQzNDTk9LME01S0Q5Qno2QzRIOEtLMkh0Qi85YStMQ25DOFhPTEV0?= =?utf-8?B?SGdoYS9kRGZDcnVRUjJ1UXV0ZlkxR1gzdEQzMVhqTk5KajV2d2NRU0ZBQ2E2?= =?utf-8?B?Z09xekhjWTBNamY2cEVuTUZtSnpDSDQ4V1l1MkRYYTFnd05qNUFRVTd0ZUNj?= =?utf-8?B?aGhObnJSS3VJdHVzQ1N3NmFQMUIxeDI0K3NrU3l0TmNhYmM5SG1oM2ROamZM?= =?utf-8?B?bUxCQytsdGQvZzQzTXdwd2NXUVN3NlVxeXlTczcwMFB6cytFUjkyeHlDaWRa?= =?utf-8?B?M3RlTWJLMDF0OG5nMnAvemlXQWVlZEFJSi9ub3dyMjlvbDF2MlJsTFNScUMx?= =?utf-8?B?OEJ4cUJRaTRPMzdUZDZVZzlkQzZEcFZBbzdrV3MrV3M4NkRCS3EzSUVHQVY2?= =?utf-8?B?REt0WUM2NzdaVkYycFhsSDR5eE90dEpFWXU0MjVaRDR6b3BmZGlkYVM4RkJk?= =?utf-8?B?eGhFR3FTTEF1SnExSThiTUdzWnNDYkNYaXhqOHp2amFvcnhXWGtqQnB6UHFI?= =?utf-8?B?VWNvQjE1eHNzb2c3UFk1YU44MzZGdUNwL1ZHOGI5SmpTRVh6QmtsTXFwNmln?= =?utf-8?B?QjBNK0JxMXA1OUtHREN2WXdYejloNllwRVI1b1Fjemo3cGJrcVFWMkJMYjBJ?= =?utf-8?B?bThNdXdoV1hsT0tlS3V5Nm9GL3kxbzd1TUJxRjd0bmU3MjNwMjRib2JNbW82?= =?utf-8?B?ejNBRnNUa3dCTktIeisvYTZBTXFxNnozSmZCOEREYTltZUFBYkZvS3RZcEVx?= =?utf-8?B?bTB0LzBQcGsxSXNRTEdpZE5Xa3V1MTNFQW5qN3hCT0N2aEVveG9abWU5R2Vh?= =?utf-8?Q?WpO4=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 95903849-1135-4a2a-b414-08de1bb972fa X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2025 15:47:25.0644 (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: zef9tSVx7SRIGgUgqlFLlhOwqfXSnhfFO+OtNI+/chSrn+xg5dd2OE3rQ/NBXYuANNwyLXD5nZjtNQQ3XJsHlA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11834 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 Fri Dec 19 11:04:12 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013016.outbound.protection.outlook.com [40.107.159.16]) (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 71C9E278779; Tue, 4 Nov 2025 15:47:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762271254; cv=fail; b=sWqWea2eAbUfYs2GkiCxI9mYg0zxmBIAekDTKhUqLVJ5PWOG8LpIJNaCEtZLkiq6DQxYdxFe+R15JjrUAW6OK3alz6FrcMcha+1NgkHTFDa3c8hdK9g+Blxbd5+ixxKt0hx2CNHKZrpwcHS3Rv6k3U8xUG32NsIG+V9+59VuM6s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762271254; c=relaxed/simple; bh=HH693NU8kzd+Iv3hWINyPBycptPq4xE1Q1XbUVwF0WQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ECEfEmIWBBra2oDdCS+c7YrTvy7LrDjX+m/Txu+BMIWMCE7ZHceq8IKa+VlVVUo2kKiIoiMi4KwObxR/Ojl4dbK0VZJ3uKx9Ux2Mf+a/kMr0oP5xMaxL+Cvw6nyjAvi+w+/nvkGS91qBmH3yskrLbLWtSpQmLxu6UYBAWwLrKVo= 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=ITthcQjH; arc=fail smtp.client-ip=40.107.159.16 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="ITthcQjH" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yO2Evl4ZslMDoNGVYl4TVNj+nLEN0ruhFsGLXa0Tyjoa5VYUJcOA/Sah1uL/QW/swbbM7JZ+Zk9TQ6JQdpDxYbegrHT+JYcg0AtGMF+Cko7us6vz3Jee5lPTH0zfgRB1fCoSvwQIRowqrM984DxYnRWIPoDxxYpN6SNmRuo6N8/0vyzM7aGLrOeWskbJq1iB49q5WuYMyUZA2Pcr7CLbGS6kueI5UaV7wLTGeK6mj2i64fI1ZBVrk6iCwXC3ARaa06Zv3YB1FlW7ZO+l8fHmQWaQXTugL1+h9cjcPDivxs/y4eev6ZonaXqSd8JW16Usq+h88DH+ICKVcCTLpEK92w== 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=nK2352lfhU4RANSY+pz8OyZ/cpkEMmS+2jkjnE6V0/vGO87W6cC7VOIhHY1hVst8ttrHYcyi2Melf1Sb0TTaqKeP7Y2a4nDRMV8QMjvDj/1CCg+4fPCshXaAp+E8reUID4PCMNp38vlhvrFpPbGiOMwmAgVFizo2YuikFT8Cq5/qfF4fX/g2uvP/OAAkDUp0uMrJTbR9hPsAZWqF1fSHjTOCdb2hfhDCq/gCYQc/zzVukMWcdtzP/QPcIkqRzq8ybyDoc+TjwMcK8YQ1h2dMTejYYGPl3DAv9slt0CrffKO8Wr76f4LvJRRk6ZACQMu9M38PxqMIF/LnXcH39D6wcg== 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=ITthcQjHLl94HO/A7NBnCsLf1kdi+onbjf9XyadnyMN/+wOVVE35tLw6JGSgZhLWOkWCbUk/VE4ojNbre96tZASE8ApSol8NfEYpcAxciLXG1cqnVnB/bGATIou5VnSCydTXvtoKbjuMqXKJ4W1widSY1bsTFW9gSqNsGvfrvWWWpRDSS3XmKFfOldAXaWAohmAYfUxgcPUyqJcj7VXfY2XsokF3ioRCy5Nmeslywu7f8e0bTAYKOMwG8P/mO9j53YUq2H3idAE6F6EeyZebMDps5NPFFv5UFwYjB7tI+UP0NC43p0omjoqocH3KrndDBbEMvmGrLBBlDqMpgjTlbQ== 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 GV2PR04MB11834.eurprd04.prod.outlook.com (2603:10a6:150:2d5::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Tue, 4 Nov 2025 15:47:29 +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; Tue, 4 Nov 2025 15:47:29 +0000 From: Frank Li Date: Tue, 04 Nov 2025 10:46:41 -0500 Subject: [PATCH v10 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: <20251104-i3c_ddr-v10-3-e3e4cbc17034@nxp.com> References: <20251104-i3c_ddr-v10-0-e3e4cbc17034@nxp.com> In-Reply-To: <20251104-i3c_ddr-v10-0-e3e4cbc17034@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=1762271233; l=3017; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=HH693NU8kzd+Iv3hWINyPBycptPq4xE1Q1XbUVwF0WQ=; b=hv5vnj+AkQ9nycEsiDNerF+82x/cFImwMIBrdJ98eROKPsu7Bt+2VOonkYM49VxyY+sbRIusy qlVQcJgEAypAGOaiUBtzGjSiM0UjUJz9BRx/LXCy8JuZkEMx2SeMDyh X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR15CA0017.namprd15.prod.outlook.com (2603:10b6:510:2d2::7) 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_|GV2PR04MB11834:EE_ X-MS-Office365-Filtering-Correlation-Id: 1db61945-c933-486e-ac04-08de1bb975a1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|19092799006|376014|7416014|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dnZ5cTNzQU9vWjJqNFpIcWRDVUMxdFpDL2VRZXRBM0pvYkttMmRYNkh3YURi?= =?utf-8?B?WnhaYmlXZHdjNW5PNnQ1QU1UZ1lZV1M3dk9lNVhpdFNOcXZPZ1JZZGRRVSsy?= =?utf-8?B?aWVBck00UEk4WUU0aGIxb1JUaFpucHJ3a1BRem5jaWQzRk52T2FUOUVOdXBm?= =?utf-8?B?NkRzRHFxbU9qVEpyaU96b0E5c0dkbnVkdWsyZlY4bGZKeTdETG5TLzM4QU43?= =?utf-8?B?WnRQZ2pVZm00S2FwTkg3QURtUjZJZVB4SDdSU1ltVk81YUExSjV5dWY0dzB3?= =?utf-8?B?d0VIb1dUSUpuSzNOWVlUWXJOL0N1V3pwV1c2RzRIcEJibUEydUdhS2k0NWhT?= =?utf-8?B?OGhCSWlQMlpRNUNXOWtheHJML3RoQWJlRUk3Sm9lb21zSTdLdGQ1ZUxUd3Jw?= =?utf-8?B?VXNodUt1WDRreW1nb2hYcnErUWpzUllsbjEzdXVmNzc1czdQMWpUN1h2ZDZw?= =?utf-8?B?S2VYMzV0MDBCdXdmYTRac2tpQ3FwY1pic1N3elF3WDdBQkpoRlpnMGlQYTlm?= =?utf-8?B?VE92T3hKTk9jQlVtWnN1WnFTTVVuZTI2ZFg1empXMmwzQzJYdzZCMjAwelI0?= =?utf-8?B?UTVsU01BSTdQQ21HQURWN0U5dit2bXNvWm0xaXNlQjNVWmh4aHh4Q3hGbVVK?= =?utf-8?B?bEZocnNZeWptNnRyZkk0THJ5NDFGRGUvYmF5RjJWSVkrVVBXMzIxNmtlQlIw?= =?utf-8?B?cHhhY3NCVi9wU2tKYi9wS1BMOXlBRXZyLzA5bk81VXlTUmtTRkdUMzU4RS93?= =?utf-8?B?UnpFSWVFc3pZMXRhNUdyVHZ1S0JsSnZZdVZEL29UNnlaVlh6em8vZmdOd1Rs?= =?utf-8?B?ZmcvMjF2ajQ3THFDNGRLMmxEMk9qZmVMenBQWnZkYStJTS9XUmlHZWc2NS9a?= =?utf-8?B?Um1aK1crWmZyT3hKYVp3OUFTbVFYRDdBVkFYT1Y1R1JIdVM0TnVnbUdiZEZV?= =?utf-8?B?MGoyL1dpN3luSkJiR0lBaCtTWi9xMnVuSlRFU1JWRzZKd09YMU5TZFdlRm5I?= =?utf-8?B?VFRHL2JSYTJQVUNyTWJRZHJtaTNLRGF3L0ZZQlFXSnBaT1ZRVHM3bWFJR0Qr?= =?utf-8?B?UlhuV3NzSUhnUStRRTdqemdmM1N1Z0tYNkdOYXRlTFo4VklhYWlpYTJZQW5s?= =?utf-8?B?QXRQUHpsd1p1VVkvam16QjBWMlcrZTRTSHlFZFhsL3d0cWlPU3VuRkV3SnFt?= =?utf-8?B?SFk4KzNnK2hWMHlNSk5DSUhHOFB4cVh0YzhudzR0NWp6NEh1Vit3dkVqUmdh?= =?utf-8?B?SmNXTFYxN1RFRnJpanFUeUJTNjZBdUY4RWxveDlIZ25EQVRsNXU1N3dZT0pZ?= =?utf-8?B?VWQyZUFZNm5ZRzdiQ2dQek5wZzFMRVN0blBPU3c2YlBicHRUZEVyZXA3NGw5?= =?utf-8?B?cFpSVVkrLy9vSVFGczRRVFFmaVk4NlBQNEQ1TkZIQ0FSMHFhcUVtbkVBZGZH?= =?utf-8?B?Z1VNOU56aWVjWVJlamtXbmhXWklxLzg4R3ozUmZvWTdzdkRjQkZ1THo5NktN?= =?utf-8?B?eEo1TlBMS3hmNU1jVjd0VGNSNGZKNnhGZllROXpDU3A5b1YxZG42eWlGbzNY?= =?utf-8?B?N21kMTVBQzEwV0pGelJDN3ErN210dEpqYUdwTXBpRUZPbzYyYlJFaStDWm1J?= =?utf-8?B?cm4yQUpMNWxjRUY4QlN0ZnVoQlFjdUNtdU9iSTI4dHNZZ0VxRGxNSHpFcXBM?= =?utf-8?B?RVhBQkRYYnluWCtxQ2NPVlR2bms4VjAzZ2VISFJJUlEzbFJiUFN2UlRNOG4r?= =?utf-8?B?YUMxc2tHUnU0Z3ZWNzhqNndtaGJtRkVRVEVVeFJQc1Z5T0VUVlJEcGNMY3U0?= =?utf-8?B?eEpQVFE5SFprbXB6U3F4bXZ6NnR6dTlPQ2ZqeXYweWdQbXpHZ1FiLytrRE9q?= =?utf-8?B?ekxQL2tlRmxldW9oQnlySUszd21KS3QzSDYzaHZSdVcwMkhvRnRpbmIyM1Er?= =?utf-8?B?TEdzNXNOSUtGU3FtZVZCZW1rbjdlcGRvTEQrVGVTdVQ4emp5WkY4c1VTK1F1?= =?utf-8?B?MmJsbGFlNzMwQnlTWnlHR1BYQnVHMGJyTkNoVTBKQ2hlRjROMTJ6eElDeWNC?= =?utf-8?Q?44uMUr?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(376014)(7416014)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S09kSmw2d2xVK21VdnBwVzZlMXVKcVFuM2ovQ2VHVTBrR28yMy92Vm1tNFZv?= =?utf-8?B?SCtIYkthZnJtc2xCNllxM1RkTmphdzdrSSt2VFQ1ejZXUnAxSnV5bjBzSFV0?= =?utf-8?B?WlZXT2l3bFUyYlFoMC9IVzY4Y1dqTWUwbW1lRmx2OGNFdXdzVEJJalI5aU1v?= =?utf-8?B?VjNWbFdqc3U0STNvSEliY3Ywbnh1WGMwdWtHekpuNnpPMkJIazg2OC8rNXR0?= =?utf-8?B?NDYyZ1RMVnhPVVlsNzhPU1Zyc2w3dWJrZldCWklraE5WRjhpZWF5SysxOGF4?= =?utf-8?B?RWtDbkttc0doNFVZWWR5a2RkWjRKaitmTXVkbENjS0RRMjhnUGRBdndEcm5U?= =?utf-8?B?ZDhxeFpJWTdHWTU2T3BxNVNPTnh2Y1FmM0JOMTY1c2liSHBVNEtPcVNOU2Rw?= =?utf-8?B?Wkd3Ky9wUmU2UThhUUdCcWErUjB0Ymp6R29VbU1GVEp0Ly9FcDRtRVNWaklC?= =?utf-8?B?NnpQVXJZY2FEY1N1Z2MvUlF6Z1NlOGJaN29jb3dqSGZwaDBVSDhhVXdOSTlV?= =?utf-8?B?ZGZpVFc5bUJSdFljMEU0eUQ5bUxSZXVTdnVhS3ZvMEl5bnE5YzVmU1RqVWUz?= =?utf-8?B?dzkrbkswWWlyK0tQaHZWTUxieG1lSnFpS05QZUN1aUpxNWZPZzNlTTMrRm1k?= =?utf-8?B?M3VYb2FRYWVRS3VmOU4rUDVpdzJKT1RIKzI0cHlwWE9EWi9NWGRVQld0Sm5l?= =?utf-8?B?MWFEVEJ5QWExOTNPT3I2cUcvZkdPd2JJdVR0TStpeG9pWGxiUVIrblphMk52?= =?utf-8?B?ajFFWWRLZXEvQzYra1A4R2ZIaml6dVU3NW1BcW5PT1REYTBONFowdGo5dlor?= =?utf-8?B?Yy9hemJRZWxJQVA2eE9aOTJNS3NmL25salR2ZTZwTE9qMHpvS2dJbzBQT0tt?= =?utf-8?B?YTExS2tMZUlUNE9qWTFzU0J1R09xNnE2a3lyOW9uTGRjVHA4aHhyR1NuLzZz?= =?utf-8?B?OTI4MExtOGthSE9CQVV6R3BqVk1Xd3VkYUNpTHNIZkdGMzNjZ0tVT0ExaFFE?= =?utf-8?B?VitrS2UyOWNlMHhGRVMzd29oNUtONWw3czFOU1NnazJ6S0p4Sm9CTUQ0UWh4?= =?utf-8?B?UXc0QVZSa3J1UXM5Q2Z5K3BaVC9XRlI0b1E1ZU40YmhqaWtRWVlhbzBBQ283?= =?utf-8?B?TnBLekpJa1NITVh1NUplZHpzOUZKYUFuc2szbHVvcU56YS9HQlhGN2FSNU1J?= =?utf-8?B?Tk9QWHlaL05OUFBiSE1PVkZiZ3BOMStZRlExb1psM1BHZDhBWldPNmRYYXNY?= =?utf-8?B?aGdZSFZQVzVQZXhuaWxRMytuZ3p1RFNyekE0ZHZpVlVRVDBJR2cxaHhpaUly?= =?utf-8?B?N3lxQUdhZmdTSE9qcmwxSHZ2YkNzRXZrV21kb1Zmb3cwT3NweDNmVmszTFpZ?= =?utf-8?B?WFBrL3UrWDc5cFYxYitFdHB2UXpjWnduOHNQWWlrSDQ4RFFpeU9SeWs3QTRT?= =?utf-8?B?THBRZGwxUGNTZDNSWXlhbFNLYmF6Q00veEdzaUFwUnNGdW5RQi9aVEt6RjJo?= =?utf-8?B?aXFUVU5NcHpyTkF3bmV0eWZXMXVyKzVVMldlbUJsNFJWbDJXaUN5UkxlSGxw?= =?utf-8?B?QUMrOGRnNzVpanNmRkdkKzVyaDNqSXJHbTFtZzhXdVlhTEVoVHV1QUI5ek1p?= =?utf-8?B?WUtaN1kzSFJWVWJyVVhpWnNzbmpFTVJnZ08xRitzTWZoaUM0VitRd0FsZHkz?= =?utf-8?B?QXJteDduQXBybjg3eEJac0JZQmd5U0Ryd3Z0MCtFNVRZQVZqdzhxTEZteDdN?= =?utf-8?B?NmF1cURHQ251QXlQZzZJbTFobmUyVGx5NEIwUDIrREdrd013eVQvd1JzM3Y5?= =?utf-8?B?emtuSStzSEh0b2pLVUdiVSt5RTV3VlBJb0FGTTdTdDRMNUd1TlA0NUpKdFE2?= =?utf-8?B?LytpS3c5WjBGTWMvRlltUnovb2V1b3FzMnR1M200UzhaaDZnZDdUODZ5RVVZ?= =?utf-8?B?Mi95ekxlaUY1eTFsVWRKVGtMZ1p5RTYwZVN3VVNvZ0pxWFpBTVQ0LzZibnp6?= =?utf-8?B?Z2xpZGtNemc5aEt1R28wNnE1YW16RUIrdFI2amNSeDdWVmFkKzRXZkl5SEVx?= =?utf-8?B?TUJvVENSRVYzcEMzaHVXUk9MR001bTQ3Y20yOVE3QktreFh2WXgyMkd3NUkr?= =?utf-8?Q?LZTo=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1db61945-c933-486e-ac04-08de1bb975a1 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2025 15:47:29.0986 (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: NKHkboaBjeKx1qcylUez3JcvlMK1CCrf5RTQT5oaITz/8v/cB4SF09COClCHxZ/Gv5JYBTMkw4g85J77ID9w9A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11834 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 Fri Dec 19 11:04:12 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013016.outbound.protection.outlook.com [40.107.159.16]) (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 D101527FD59; Tue, 4 Nov 2025 15:47:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762271257; cv=fail; b=cb+KxU7t91Q9goZBh7fH9xdA5TAxqHsh1byXpY+CB+PWC2ilvJ5x3pwWH+1CIBAIZ4qFz3C8jjBsrlOvqbVoaEYsRN/eCJmXdoumdQsEp8SnUTMKyHrger1eToJH/UiyxlMTzVHyF6dBK1mn0d/mhqf2wrt2HUURozgLIHlTPaw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762271257; c=relaxed/simple; bh=nlkWoD8YyAVNTCcivRKKKH3PHPyEh2kTQNun2husr1M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=CT8RgHcdCI4q87O/7wMXW9AJljDnqA5UKzO86ia5IvAxNt6JOZ6DRoMenuiAli6F6pM3BFi1/JADQJJQfYWgzq1kJclPKzm5H62UlbRhf0519X8hsAwa0B2OF2Nem6TOY+F1J8xckb4IlxEnlb6O/jkuKPLk6boEn6KVd2ze3zU= 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=J7SiJWPQ; arc=fail smtp.client-ip=40.107.159.16 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="J7SiJWPQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZQ2I4GVV7NPc92Gf0JjBDDYQSN05DXI30EerIji980h+9eHSZDSdxDuoNBXL1Z5a0tJ6Q4yJ9VJsG597TE8KqB1c3mA11nS3UkYYWw3KUIk87+LP9Wdp2/Xdg9pcdahwNGpn/vjwHun1P9Gzqb41CSKL/oH9hdEfsXkbflpVAESfF4fEBI2XtQpNY08JXxqdGr/bt7PCQtVGK0Jll6yKpV9STkSpRMHQyQp7HM5z5AuBmBmr+9/CZrwMeediGlMiPwDPF88UpcbU5aZh43BXarpXBv2SAd/CvGB4LwMhC+Ct11fx5Uut3bqKZ+fqSLtVc0Uc87/PcWJaMj3aLCo4eQ== 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=zFYBV2JR91M2nVZRiW95f431ti2ohpD+2779/QpSDjSUnSXsywG7mIlmT4R+ci9NF/1WDngPZwPo+YZJT/jb0k431XH3Lc4p5MvjPMO9ohVUHxhcfGWGSuNIiA0edi7IzlrsDNJKG6/St5zv59CtA0UQZedo9Ey6uX0IZdKIjaZgTXy65mVTvMmtUslrFo4p+RZvaHebOgRQvYhhF7RUTRL0lBcu5CEU/5ens7PNhjj1N++n6J6dMXs+8AeiWq0yFmTisrqQotXlZ8BJypKk6D4hs4YvcOer3ZoxU0SIACp/hCWLsmb0iCZADCPyHn/3KsHk4FYKA1SX/aGXL5oc3g== 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=J7SiJWPQg4jc96e+D0dUQzE2UN45RU/ywgq2De06KiVaK/l39I0yUJHnIQdU07MRUT6Aamsg0bjyv8Ovp5TPxjVOUzKZCfPaCF5GdAZ8HK8hWvltzLAM8Gv8jFMPN8qtxaIcwKW3Kxi8ynhEPPEKRA41swrrDgNP93sMnytxlfzBpOhDdsVd1OFj0E8OC9K+7mvdqp+ZmFipS1M9fK2P21PxRXILBkICuOCBAn6Nq58l+ODfTvAgVjA66BbgHJVqOnGYPyWIgNhWU0k2qs16dyiLEopq2r0gn4PuNpAxX3xxXqlvVzhfSQ+M+sylT7EqXnrf+27vhOyWRQ8JPpwHlA== 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 GV2PR04MB11834.eurprd04.prod.outlook.com (2603:10a6:150:2d5::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Tue, 4 Nov 2025 15:47:33 +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; Tue, 4 Nov 2025 15:47:33 +0000 From: Frank Li Date: Tue, 04 Nov 2025 10:46:42 -0500 Subject: [PATCH v10 4/6] i3c: master: svc: Add basic HDR mode support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251104-i3c_ddr-v10-4-e3e4cbc17034@nxp.com> References: <20251104-i3c_ddr-v10-0-e3e4cbc17034@nxp.com> In-Reply-To: <20251104-i3c_ddr-v10-0-e3e4cbc17034@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=1762271233; l=9221; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=nlkWoD8YyAVNTCcivRKKKH3PHPyEh2kTQNun2husr1M=; b=PucNrkVR3X0DjYH1VMenwejHPlpeJe+N4XmZjk9Bk+TbZ0RA+ZdM+kp6/ZaWuIihYh72/oUJI JNUQgKSIjefCwWmTKkltlIfbzN+RzGQDlYpEymhYVutHo5XGk35hVno X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR15CA0017.namprd15.prod.outlook.com (2603:10b6:510:2d2::7) 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_|GV2PR04MB11834:EE_ X-MS-Office365-Filtering-Correlation-Id: 73e52a36-6f8e-45be-3dc3-08de1bb97813 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|19092799006|376014|7416014|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VmF6d2VCQ1V6K3QzNmlSZHp0cTM3SmxRdW1aMUJ4bEEwTHlTN0E4YjBrakhw?= =?utf-8?B?d3J6dGNpYXYxa05DWi9oUjNhMUIrTkx2V0dVTklMRm5DUFFWcXJnZEhMQzhk?= =?utf-8?B?eUEvSVZ4NE81WHNCdmdHWVEwSmxReW5CbENNajNyVElRTTVSclFid21JUTFj?= =?utf-8?B?SzVzTXdWVWNiUy80RytFVHhmRy9hK095cHNNUGdpbktFblMyNmp0KzV0a05o?= =?utf-8?B?dXhwYkpJM0l4dHNnZFZLT0pEcCtKc3NiL254OWhEcklsYWVBeElnTGVFczUr?= =?utf-8?B?cGk3NEk3VHRqbUg3TFVjdFh0YXBnQ2c1UUlvSkxqNjdHUHB3dTA4RWVkT004?= =?utf-8?B?T3E3aDRsdzN3NkNIN3ZFbGRsQjQ0YnFLRlVad1FzZVRhY2RXaW1ueFF6dGRR?= =?utf-8?B?b1RTanhCdjFyZWZjR0RtaUhQQjYwYXF2dnNJTkNtanpZRVRXZ1VsSGd0TGs0?= =?utf-8?B?b3pIdHBuUkV3b1JjUDRmVFFQdTdMV1Z4RzBIOURmeERjOXVZaExYRE9TeGlE?= =?utf-8?B?bDJPY1c4Q1I1cmw2UzFSNmZOVTN0QVJUMDlNcXErZzJ4OUtiZ3JJT0hVZW02?= =?utf-8?B?aEdhTldsZldaNjVGWVJacnRqanBjOGw5K25BV0NHZXVWK0FubjNmV2pianFw?= =?utf-8?B?RTJQY05DbjRhL01vYUtlcVFMSlc1TzJLMlU1Y0Nnb0JDZitrdDlCOEw4cTY3?= =?utf-8?B?M1Z5Tmp4UmJJdzZ3U0ZvT29PczhYNWtJc054RS9uUGRsbWJ5UjJmR3FvQng2?= =?utf-8?B?dm11UklqeXZ6QzFHeGh4U3krTUFMcTQwQ1FzelNRem1Fb2ZvNGVKWEVpZkJR?= =?utf-8?B?UzQ2MGtweUtpYmlCc29EWjJJakovQ3hJYkowNjhCakFxZkNUR0MwbWxnZGxv?= =?utf-8?B?dk56UUtKL1dOdHhuNjVkcEwxeGJZWE9Gc00rOExBZHFDU28zaE4xSjRnRWF2?= =?utf-8?B?N0JjVG1nZlFaWW5RWGIvUFpOOEF6d2dDS1d1OGxnejAxK1JYVTV2N3YvZzY5?= =?utf-8?B?TUJ0YVYwM3hsV0hocllBeHZLNHhJVE9zVjIvL3p2K0tkanU2b3lWSVkwSFBC?= =?utf-8?B?R1phbDI3ekp0RllvWlFpVjlJOTFXMlVUL25oamdsdGZOMGhsYTFIZnEzU1hr?= =?utf-8?B?NFk2Wm1MK2pHY3RZcU9YWlg2RGpKTDEvMGhZK2dLM0k0b1U2NXlRY01zaFNr?= =?utf-8?B?emhCaTlKazBXazBqTi9XN0JnYTV1QWpCVlBqWjVUR1YzcnZOd3ZaWjZqQ1Q4?= =?utf-8?B?UFovVFpmY2xCRHJLWU5DQVBzTGhLM1IvQmp0eG42dzNkZ0JaaEVNVnhMcHg1?= =?utf-8?B?N1d4aWRuaFgwV0MrVDEvd0lVQnh6MlY4bWJHTnNmMituOVFOQU1VZGZoMUVt?= =?utf-8?B?SVFWU1hKZDZtQ1owcWRyV1MyMHlScTZoL28zQjVpNE8vdHV4TDVxSU55Z3E5?= =?utf-8?B?VFJHc0JRNUl0MXVEc3lEbGQ3UmNoRVo1Nlg2Vm9VbHpYcHdVY3VBVzJHRUlS?= =?utf-8?B?d0p1TjIrWUEwakNpTU1FV0pCWnFZejdXdFMyZFlFRVd3Y2F1MGYwOTZJT1pv?= =?utf-8?B?QjYvL2Z1aEEvakg0K0lETURqTzNjZndESVA0bEtWR1N5M1d5VG1wUHR0SjBt?= =?utf-8?B?Vll5dFNjTGhWUDR5ZlY1RCtObGk1QXBQRVJHSWorV09MUiswZ3ZNOTFSWWdn?= =?utf-8?B?Skc1ZVY1Z09XZGZLaG5wZmFObmtaZkJXT3hMZmJuOU9ibE1oQXlLTk9TZUU4?= =?utf-8?B?Vzc4TmlLbEJPcGVOV0JQa3NQTytydVJJNVV1cEZNcTRrdHkrZWFMNWg5cHVh?= =?utf-8?B?ejRBL0VSTWpCbHVqRXcvU3BGbW9HeUlCUitmZXJWSlFrazZ5bEJ0RU9EYi94?= =?utf-8?B?QlJqT1RVYTVjcnFNMmg1WUNBd0ZwS0RvNjdjcldHWEhvMGxIYjV0ZHd4c1E4?= =?utf-8?B?NlZnQkVhVXJ4Y25pMThmNjdhUWo2cmQ2cVlZb2Vldlo1S3MrREwwVG11WHpt?= =?utf-8?B?VjZzUy9MMW9vUm8vT3Z5RXRNQUUwNTJHRlBqajgwZGVSYmZ6TzJxMFJ6Tmhq?= =?utf-8?Q?Y6PMPi?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(376014)(7416014)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?djRzekpMaGVmcmF5UmJkVHJUNVYxOTZkdnFheUFNam0ya2JSRWtiL3ZlWDhT?= =?utf-8?B?WkYyb3dsRFQ4VCtqSWUzelRIOHlyRlJkbGkrVjRlOXNHTmEvVDc1TXRPekZv?= =?utf-8?B?bC9hM1VoUkNIUzZkVE9FVCtqRzVRY3dPY0R1dzM1Uy9xU0RNOGlEWGx4OTl5?= =?utf-8?B?VzU1V2NnUkxPL3FtL3kvTmtwa3djenIyZTZBTUZ4d01FOVVGNVVMSW00Ynl2?= =?utf-8?B?WnpQRG1RNUFhTW8vQzlzc2FBSmhwZlk2d2NXRkhoZnFDYVhtVy9VOU95SlRH?= =?utf-8?B?clFDMk5MT2VVOE5UUUlmLzJubExueUJkaEVSKzZqZW1FWkg2akNVVDFJRlYr?= =?utf-8?B?Q01ZaTNQUytkaFUyejdITGs3UXhwWG9KYTVSYWdtVjJhdWkzcDVmaURqR21K?= =?utf-8?B?bWpXdkJyemRmaE9uSUJZUUVpMm16Znl4NUZjS2M0Z2x4VUVmdllCWHVzc2d4?= =?utf-8?B?cG5BL0hROGZQUElqT2YrK0FMZnRoVkVJYmY3MUROU2ZyOWtvQ0JYeGJwY1F2?= =?utf-8?B?dGRidmkxbVpWbjgweFJyQ1FkMXEzR1dzK1FqRlJ4OTNxUC9xbHlCNTllQVho?= =?utf-8?B?NzdENktiRnh6NFRROEVJWkQwNEZTbERRNkNpTWJYQzhnTURPa0hsYTRkZHdq?= =?utf-8?B?Z2xZSVBBb3h4NXBHZUNRVFJUMkRObHB0Z05OWnVNYjJtMjJtWk93VUJ0T0Fo?= =?utf-8?B?M0kxWUFEWVcxZ2JUeUIyZmxkb0RPRmYyazlKQVZJNVVQNDZXNHpJeDc2OFRB?= =?utf-8?B?Y2JPZTJaYzY1VGtqTC9rN0IxN1Q4L1BsRjN0bTU1SnJGWG5FU01JL3BPQ1U3?= =?utf-8?B?U3pwRm5laDRkdm9XMGdsWXl6MlBiTUVQanh3NWsrbndmRlRuejNjRHk1dFVH?= =?utf-8?B?Q3Q2dzI0KzdObHFCUENuN25uK3FYK3B1dVBJRjFybWwwL0k5ODk4ZDI1Yk91?= =?utf-8?B?bUdMcTRjQ1NtM2hzdDN3T2l6WWRsR3kyQUFSUHE1NTJ2b1BvVzF1cXNwWnhX?= =?utf-8?B?Q3JLa01RclJxWVV0NDROemtZK01PMjQ4V3Q4YWI4cHBwM3k1M3kzU3lMUCtJ?= =?utf-8?B?UnIxblpNazBOMzRoZTVBcEtsNU5LZzVvZW9pdjJSMlUwQ3Z1WXpYY1piK2JY?= =?utf-8?B?QlBudXhtZnJQYXpOR1ppbHhVdmdwR1MrSm5lTXlaNDhhN1E4MlRWd09YVllv?= =?utf-8?B?SXFkaEtDWEZtcHRzdWkzblZBelVpOXMxTXBlZTE3bFM4VmtVeC9kb3VLbVFm?= =?utf-8?B?a3h0eHd3ZXVrcmJsRnl4ZWhXbHRra3diRjR5Sm1wa2ZHTDQrNVJjcWJ6Rzgx?= =?utf-8?B?eXhRSFBBSG1TVDhGU0pKQjdoc1dGcTBIalNrejFkcDl4M01ZUkZHNGlzUkd2?= =?utf-8?B?a3dTenRsK0JHUHdaV2FRZ0diWkl2cEM5bGNaYUl6LzFNN1hJWjgvRm1qS3Qr?= =?utf-8?B?aVYzTHV1eC9icGxlaU0wSUNpWkdsdmFRcUNiS0IrQldySFRxc05vZCtZeGxp?= =?utf-8?B?K0JNNk5hT0lOM2lQT1ZHYU9MWWd4aWhORDNQRGNWQWhLSEEwbWxEZkdEZi81?= =?utf-8?B?R0dtVm1ORE1WUnJLZndnd3NKWFpYYVRReW0vblE4d0hvNlF5bElhcjM4bGU3?= =?utf-8?B?RndIZ3JYUlJmVEVvVmt4b1dPYWZwbUk2c0ZxVUxMV25VWEloQ1JTc0dkanhL?= =?utf-8?B?K1Z4dVJxQlF2djViL0FXWnhtRWF2aHYvUVpicFlZSE1EcFhiamZuWnl5V1hC?= =?utf-8?B?ZGR3b3ZqeXdYVEpxbTFjaGFRYWlaK0pqV2RKdlJkOHluekUzSXUwWmpvRTgy?= =?utf-8?B?RmQ1N2tkYzg0ekYzWElyZkU0VXZmKzJJWEd3RjQwYkJQeXgvZ3ZadDZPelY4?= =?utf-8?B?aGkrcnUxM2owNE5Lc3lSSlJ0Z3JmR0lmMDVTYnEzYUIzMGhnK3NLMFRZTlow?= =?utf-8?B?N2d0cW1ReHRMZVg2RFpkQTd2WVEvT1dUbktyeTZaMUxQRmxNanFOT1ppL2pG?= =?utf-8?B?Uk1mQ1BidGY2aGJPbE0xMVQ0MTNCZUpJU2FOaEZ0WTNPZU0zZXVvQ0dkc2c3?= =?utf-8?B?aFhEV20wdDZWYTQ5YzhsWWNGUUdaRTNZYnRDV3VFMVc2VkVUOHZ0NElQcDJu?= =?utf-8?Q?a8/s=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 73e52a36-6f8e-45be-3dc3-08de1bb97813 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2025 15:47:33.2945 (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: 2EvTgh/Ee0v+T7o2Ey0PcfmQGNOKsz++mbfrSIZ5dXcm5x91sPa/r+DaBatQQ6VqZsv0EQszbMQ33J5ZU5qwtw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11834 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 Fri Dec 19 11:04:12 2025 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013040.outbound.protection.outlook.com [52.101.83.40]) (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 6335428750C; Tue, 4 Nov 2025 15:47:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762271262; cv=fail; b=nRVRAfRbZca9aRHzDGTwaDaS/DiUdV6wF4VDMtbdlT3P49mJCFe5A7Hrx9wKKtrc9mc63GLzaHjcpWaU5spYIMXRkmXzjhYwR7igLjlNn8ONPmmAKd6bAFMF7auanbnW7AS81JywCmdG3R73oK7pW6HxfbEjeIie3px2nw7ey3c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762271262; c=relaxed/simple; bh=IyO4gvDiMVkIrAv3wfTcayqnmwaqUsnJdgwnigkUdYg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ZvIYbIWn3CtUp3DIwt5zVSKKXpP+F4FKs/LU1XP2mxFXzp5tsBoUYuh0ythRYfc33DSfCBKezyhZMv1vK/SCx4wdgC7BwybQ2sGHEuEyjEMxyC50WsUTLTg8Cp4KdEVy1XDjkETlxdkaJX5/yTACF9rsAHBBoF4qZEadJhPzwPY= 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=IMEVh4hg; arc=fail smtp.client-ip=52.101.83.40 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="IMEVh4hg" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=T+mbr9BvVAL5rELOnPc3k+aZtafQTKsfA3bjfEbYYYzh7y4PUuhQP0LXYSzyVruQFiAtT9S0QqeopfQcXz8r9aSJemFl6QLCxKzI6lPZkRshYWGi9Si9mhZ714hdJ8wNLDvRm8jpePc74J7NphGuimaRS0uutz91mw1QDQ/PPLPUFUbbSXnexMsYqV6eJPKaqPHjvOYnXdmqrGmP/GRVv9vY6Vo+QHx9YdrAyGnimELJFwajzqqphJvCoii9CZ/LEPxEQEQIXDuVQkkHTOaHAr+ggTo2eUy8cf5lN5bNrcubrYmZlUpuLqzA6aBuwYx155I7H7PcesJpaa+KjFeLFA== 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=vIswAz+E4NlE9cgzv972I6ok9E1K/D7aHGa6ADDeJkNbkg8X7M53COvtTiEbOeU7IK/W4XAyl/HegZw3FzZ4PTFrSgGt2grgVkPvL6m1GKZxN5TVDLTzNJH9iP+VevxVsGUSlYzBGmqG2TGGFXMiTIFnGgmuyMmNS3sGqQjmZo7JlWWi2+ZAny6VhCeVn60fJ9UR88lnW/6/ahGklepyp9JSwpI59A3BH99rZob0S7YC+H6xhq6Ox2GBP8XpslDD4UgGHwmMSYJmarUDxth80d+KMo65yJfdmIo5nSeKiujP58acFD72FiQhfnHNl3Nk+MOCN4IpUfuKWV8fO8O3LA== 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=IMEVh4hgCDbJxSbYN1fRt+2AXW44GLDdrA977cIq0TytNnW5TB/yMnj+fTdMMMptnoFdPjWVDNRaJsc2T8eD/gvu8MsHy38jamxPaXQFurBdkjflGJzqsMCrOITgJJ1dN0udIEKzMuw0n17cZkhCnfFIsDu2LFfY7Iw9iYdGYdljBIGeUDJKHwWFe2/BRBs4ztMDIxHhLGBz7Ewv4SIdslhnuvprhW7lHfShh1/IefdjWzUdumBmm2zZolzq4iOBOUs/ZS9HFh5qAZ+iQ/kDfqPCw4RzvFNmmhg6DeIIlLS3x8M6GaPGxOdFKwNzUIuSGfN/eE2oG5UyRaNCckjxBw== 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 GV2PR04MB11834.eurprd04.prod.outlook.com (2603:10a6:150:2d5::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Tue, 4 Nov 2025 15:47: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; Tue, 4 Nov 2025 15:47:37 +0000 From: Frank Li Date: Tue, 04 Nov 2025 10:46:43 -0500 Subject: [PATCH v10 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: <20251104-i3c_ddr-v10-5-e3e4cbc17034@nxp.com> References: <20251104-i3c_ddr-v10-0-e3e4cbc17034@nxp.com> In-Reply-To: <20251104-i3c_ddr-v10-0-e3e4cbc17034@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=1762271233; l=1253; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=IyO4gvDiMVkIrAv3wfTcayqnmwaqUsnJdgwnigkUdYg=; b=WZvkGtnUcaBJnclUriMb7OSVjyOJVLEXIFa319Kbsmm3v5IjfisgFcQKsmZg8rHC4QO8ryC/U dreK+smHUjNB2LLHdQ+VKZRXLUpK2pB2iAZddrU+6TT/u/t37EC+lqM X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR15CA0017.namprd15.prod.outlook.com (2603:10b6:510:2d2::7) 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_|GV2PR04MB11834:EE_ X-MS-Office365-Filtering-Correlation-Id: f8813a01-6207-41ba-d7a6-08de1bb97a8d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|19092799006|376014|7416014|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?S2R5WVI5b21wK3lLMjF4YmljWW01Yk01Wmd5N05HOGNZSlZ4bTYvazB1NTZt?= =?utf-8?B?K0VFb084TjNMdnN3Y2FHYVlwekNVc1dLYkQwTXpZZ2dKZ1VvcUc3RjhyL1g0?= =?utf-8?B?M1ExVGE0SlIwRjNHQmU1UmxLVG41aWpBaElmaXZiRVlhRDNyUXliSHprYnRF?= =?utf-8?B?TE5ENTBIZDJCWFQrTTNaM2xRaEJKcVZmRml0L2tJTys0eHZjZFYwd2FQaDVW?= =?utf-8?B?Szg0SnA5L0lDK2xLOVBDTVY5Yi9JbzRKNUpob1FkYzE3QVlzSmNIS3Q2aTZM?= =?utf-8?B?M0RXUi9QMUtEQmFMMnoza2Fxa1dzaGlFOXNKeDN2SnNqcEV0Ryt5VjdHMXFk?= =?utf-8?B?WW4vVUdvSWVzdVFySnJDT1htQkxyK0JTWW9OYVB1eldIazhuSWdDY1B2a0lB?= =?utf-8?B?RGZvOFE4RC9uTTNFRFk3ZS9Rdnhib0N4ekdqejhBM0VyeFNXamZiS2Y1N1JT?= =?utf-8?B?cHQyQWRhZ0FYamVuNmcyVFdHS21YbVZMTFFjL2FtM0hUb0h4WE14TWx3UEc1?= =?utf-8?B?ZXg4TVUyNTVpS2xMVnJQT3ZpRGtpNWVORlljcStzWm8wUDlkbWM0UmRnVnI2?= =?utf-8?B?aExyTEcvQThSdDROTFVBRGJoY3AyOEh3ODNCOVZnZ0RFZUwxTzgvTlJsTVd0?= =?utf-8?B?OVV2RGxlN1hiMUhKbUlEendaUWw3UUE3UUdtVGpMR1E2RlpQQ0VYS0pQdGZL?= =?utf-8?B?RVE4RkxmNlpNaXIyUEpsZ2ZnTFNGZzhpVlIxOWk0eC81RE9PQXVGcndLYmVh?= =?utf-8?B?QWlxdGUxVGhQOTFtV053RlY1bjJZWTFZdmVBZkJmalV5bWcwOGM2bGRkblVB?= =?utf-8?B?M2l5b29JMldRRm8yZkQyWjJzTEpDaElzQ0dzTFdlQUxyUHovYzZOL3FhUmNL?= =?utf-8?B?NHUxSnNEL1ZXaktxVHoxWkpQOUdYRjBqUjRjZkx6bEZVVTNoeXVtd3hVY3hl?= =?utf-8?B?RkNjMTBxdVdBRkd2Q2tiN1daRHdYQjdHbCtCT2NaWDVpKzBlbW9NSHJOc2FK?= =?utf-8?B?bXZ6Z3EvL29wazNnVU1jWE4wYVlGR0RPckFEWkdsL2dSRnZqWmtiY0hJeUk3?= =?utf-8?B?UXM0KzQvL3lVNXI4TGhNdm9YR3lBTDJ5K3BZREYwVjVNSjk1TFR1UzJ5anFj?= =?utf-8?B?Nlo2MlNUMEtoVDVVNGNQUno1Mk13MS84ckFvVmZCTHEyUjFzbjdOQXRiT0Za?= =?utf-8?B?SmtjMkxrYU8weFl6N3Z4cTQ1aERXdzNUZXRrOU1VUWlSTzJ1YVRXZlplU0RP?= =?utf-8?B?YnpFR2xMbUZ6WlUxaFFxR1lsYlJQbEhEVnEwM0o1RDRsMGpRSFVNZjhiSk5O?= =?utf-8?B?SnkydFpReENvZlRycEp3SVY1TUdvMlhiWG5oYmpPcU1QTDlaeXRpQU1nRjVn?= =?utf-8?B?aEhnQ3RCSEQ5WEh4Uk9yNUpsdUJvVm5ucmR5cnpuazNQaEpaNG1PenJyNjRm?= =?utf-8?B?VlBxb2ppL3NLRS9HUHNjeU9La1B5ZTVFTVNybm5GQmlXUldJL09zM2JZckFO?= =?utf-8?B?djh1MEZQaW02QU0rYWlVT1VlYUFPWkM0bzJScEZDWndSc050elJ0bXU4bHVT?= =?utf-8?B?Sk9IbG5OblUyWG5BQVovejlNazBGbWdiWkJtM3MwT2lIcU0vWWRTemtEdlF2?= =?utf-8?B?WDVuLzBQQ1ZsMmdObHgrTlFLandub2FUWk80N1dVU0NZem1rSG1MaHVzT21j?= =?utf-8?B?U0wyWno3Z0NtSEdVOWIvcXJPZEQrckppTk1xR3dScVkwN3lXTHpPRWJjVDNm?= =?utf-8?B?cEFuT1NsTFhTZmFUK0lMYzVwUjVKa09qcSt2d2M4MDFpY25SREt2Y1lsVWg1?= =?utf-8?B?N3pxeC9ILzVLQnY4emMrNkhyVm5KL0tJVDA2STliTXEwSW1RZXJVdVR1emJS?= =?utf-8?B?SDFzcHRKWERCVm5vNUg5ZWR3aTdNYkxFb3FDTCtmVk50R1BiMmJuMDNIMWha?= =?utf-8?B?YTg3OGxSdkRhdExmYWE4YmJWT3ZLN0Q3WGw2ME8vNktzUC90bVFyREZncng1?= =?utf-8?B?aFd6RDU1YTQxMmpvTm1FcGNlNWdsR2JBUEg0TUhIb2EzZ3VPa2hpQ3hQV1A4?= =?utf-8?Q?pRg//i?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(376014)(7416014)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?L09pVnBEWUpsU25NNG4rbWVHTGp5V2daQlc4NlRuM2pGUHdZbmNJN1ZiWjU2?= =?utf-8?B?YXNKU2dJWWhrdDBvZEhDblRnZXBlS0EvTVBzTkw3T1hEbUpsNXMzV0JEbzEr?= =?utf-8?B?aUZlRnQ3YmMxNjd0M2tHNnlKNm10VFBQdWVkQVV2U2ZoeE1qN0xVcnZjdzJ5?= =?utf-8?B?Q0lJdnJDNEJYUHZNZFpFeldwRllvU2RvUGIrVWY2alJGbVpYTmNVekxhL3Ex?= =?utf-8?B?OEdDMmNWSlJQSGkvOWtoQ0RBY1M5bW1pN042UnNqZUJPZXpIRG5MR2UxUHJG?= =?utf-8?B?VUJFNm05Y1g0cUZmQ1p1VGM2R29DaGVQRmNoamJ1dmNEY3FNR3hmUy9LVUww?= =?utf-8?B?eUlXN29raUFBVUN3ODVpVXJpRHE1elpMS2hMS1l1ZzBXc2ZiNm9XWURuYzRa?= =?utf-8?B?U05Fa3diODgvU1pyeWphc0UyYTBaYlR3SmNSSDRrTEd4d2JjY0lmTVl1Nm5G?= =?utf-8?B?M1VPZzV6UHNWb2FpUXBDOXN4KzJyZFBZS2JZMmFveDNWMFh6QVMrVG5aTDNx?= =?utf-8?B?ZFBIdXJoZGppVDZJWnREaTEvQUVvMnlNN3o0b3EreXFsc1hLQ1pHeWxNTjJ1?= =?utf-8?B?SVZMUG9pV1dxUHM5enpUMHdrREREb2NJRGczUjVYZTJnQkIrcEd0cktWdkk0?= =?utf-8?B?QUZVVmY4WHdrYms5S3AzNmQ4RGFDSGJ0aXVrWU9aU2ZvUGpVOXNoVGxKVjRn?= =?utf-8?B?ZnI3UE9JeDhjYWJNNk0vSzhncktXK1h3TTRJVThJc2wwSHJrUlJwMDNaK1pS?= =?utf-8?B?V0xwK0pDanZmbEFjZHo3YTZaeGtuVGFvbkYzL3huNXpidWVnS093QUhubjhm?= =?utf-8?B?VlJ6NTEyRTFzWkZ6Tjh1cUR2dWYzSmV4SWZhZFJ4b2VkRTY1eXZYM0JaMUdC?= =?utf-8?B?OHdnS0FFZTNNci9vN3U3QVFLY1BiRkdXTldzUU54cUl3Q1BuR0JrbXVUWjM0?= =?utf-8?B?c0JQTXI4YlhOVEFndlkwQmVoVDIwUFNBSU45S3dacDhDQVVXRmZ4U1VBTURL?= =?utf-8?B?Z2dJVkN0d1ZTVmlNMUp0RjFWaGRoY1NIQTdsek0rTUZoT0IvUENHZ21FcGh6?= =?utf-8?B?YXBBcno2YUxQNktCV3YyZDlzZEZJUGpNbGdpb2N5ZVNBSDUzTGVBSXgzajc2?= =?utf-8?B?YnVlTWtCeG5rRHJON2xsTDNnQUl4VGpkdmJFRExGL2pSZm91aEpyQW9EeDgy?= =?utf-8?B?TkFaeVllbUJxM0QvMW9VUGFuaTBQM3hsQmpQM2VCeEtKS0twajJLaHl5Vm1Z?= =?utf-8?B?Zlg2Q1p2VGdPUnNZTGxuaHU5VTRDdlh0Ukt2b3pmTlpJTk5veGJRTXVkTzc0?= =?utf-8?B?Z0VoQkMyaUFUbE40MmxYV3ZVbStlUVpJNTFLWC9PTVNUbHl0RjJMZm1NdXlp?= =?utf-8?B?OVlMN3BKMHFQNm9LTHFhUHVhRWFzZ0x3UDE1NFRUN1IrajdabmJMSGp5Wjkz?= =?utf-8?B?WnlPT1EwV0kycUg5VWRGZ0xuN0JSSERmU1BvWEt1QW84MUkrck85cWVpSTRv?= =?utf-8?B?ZVZEMXR5Q0dpN05kc0NJZGlWUVZiQzJGZjl2K0dlT3JtSE9EaHZ6Z3JIc1VT?= =?utf-8?B?S1BLek9lTVh4Mjh3WFJtb2NldVIwUVZHa2x5aU5WaWpEZFBZSFNnK3kyc09P?= =?utf-8?B?Yks5ZEdWSVE3L2x5a1ZBNk4yMHkrYU5CdTk4NnRtK29kMEtKRTdXRG4rY2E4?= =?utf-8?B?NzRpR1NzSU93Mk9rTUh5TCtXTmw4T1dqUUxFTkVLa2RyS2FvMXJhNkhKRytZ?= =?utf-8?B?cSt2QzQ5RitjSXIwYmRYb2VqOVU3SUxvdm1UL2JCOWxKLy9XZTJHdGkvS0Y5?= =?utf-8?B?Vzc3SDBlYXJXL1FoQlIrdXIvdk1YZW44VGFlVzBESVZJSHhnZ2pySmp0ZUdz?= =?utf-8?B?dkNDK2l4cXlhenYyc2ZpdG5obTUzVVkzdHVHY2p5TzdvOUlxVDJQMWxEMkE0?= =?utf-8?B?RnlXN09PS2I2SEV6RGo2QjdxdDBmeCt2Qmc3dzBaY0g5NlUzSVgyOXdQRUwz?= =?utf-8?B?MUtQMVBLU3AwZjhHYnVGVkg5bVRkVjdyNTd5TW13eGFreDkvOEF3dmxDemFU?= =?utf-8?B?Z2lyc0hody8vaCt0b3NFazlLRjJuUEpTUHhVYmtyTElZc0o4NHVGOUI0WEIr?= =?utf-8?Q?+TEg=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f8813a01-6207-41ba-d7a6-08de1bb97a8d X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2025 15:47:37.3345 (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: 7BhMT89uka2lFKUj7DEt1Jrr0eZ8NYtOgDvqS/irZlulZ/Klc362NY8IITti/DB+Z5K5T9DD8q3eUQYV1dQiiA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11834 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 Fri Dec 19 11:04:12 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013014.outbound.protection.outlook.com [40.107.159.14]) (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 E3FE727FD59; Tue, 4 Nov 2025 15:47:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.14 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762271267; cv=fail; b=VawBV2r18DMRaAyJudBxmAKIH78eWUrf/2+DBUh9mys6XR6GiSZ2qkcT0AkzWe7b+9Ij4cDrbV6fuPTSL41VNQm/p6JTe9wqfWhGGY8IlLkZgNYAbbRqH0nxOQZ8Ywe/1QA3z9E7Ot1Tf8B30+qGxR+AqdKyGaAgQlG2SCPnhTY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762271267; c=relaxed/simple; bh=ffXg0kwStfghFn7Jx0IwhaYuYuN9+ZAr+/1/R/oYPUM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=N04PJH+T03b/rIQjQvOyAcCPPW+xnD3RczbXh6jW63LQXC5uucgFswPR1WastAppayAeMG4xiu/b67HWD25NPuMxuM55GgbO3rKOCxFmITm/bz/2s2dcb173xuiXizZhiFq+9Gva705dpnBNbbM69sJFxMF4Y9wQVyrS1RJEgsM= 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=lwqT8yi+; arc=fail smtp.client-ip=40.107.159.14 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="lwqT8yi+" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rH5AYD3pah/7GA8rcO/13Fn1QDFMggtNUX4erB45S9jV41X79ZBBuj8/MBLZpBF578WO/gxv0oB//azOYeBzSVe3GCaWW3U3YWStNRkuOw3iolHh5b+CghHgceZm7hFlYXyGznEkrAr1BgTWCzKYgt5ITyl+8hVuPHghMWkTD8r77xtyk9Q5xGFNcyTx/4nAzqzrXaaysP4Nk0m/BFGC7b6CvzWGF2Jqf8zagZkzg1BgzS/4V3M3UYi2PdP64DZzJkpfUSi/bwlXiAyc5b52yoOlwyBtr/INmlhOWlqCOyzOd324urLGR2fWlfJbC3eAyxawgKtVGGSeeVvMPV8Bkg== 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=bqaAhxElLqpLLrKB8jdV3IwOmcE/reDMeRVDShYuFos=; b=gXmbtd8d7Cpy3jQWhqTwWtHPnb/Ksc2gdH7MkosUBlothQ+OcpzRHodFUsvE5y0AOl61ceIaqSqzUIc1xhtCorJ8K0aGhGfsoBRiD8mfI0dN3Wx33nk0rweLandgmHt9tiqrGVBSpaHunX53WyL0FF3oBujTa89LlVaJ/RF+kjjMLt8NJ1dELuklFbb1+DRwZHDC6H9M+SFDj843+0px7CedRTIIPP/V0qTziWDaKIDUM635pHxeob7A4IfnUr20rEIT1dP6Sy4T4wvf/aZ5qEVlBN3yMsqqFYh+oMFzgpIfmvIhI/HDzotBQ4Gl/s6ppWxtfj7y2ouTpbxEPS4Qqg== 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=bqaAhxElLqpLLrKB8jdV3IwOmcE/reDMeRVDShYuFos=; b=lwqT8yi+q0cg7aS6IDzaRqknQdOv1X8hFacasN/O4T+bJyCz7ScH5aoqX4k1QKld9qU6IeK0u7xloyTNs9hb80iPyUjTq4RU2QlIdIa4wsj22HCox9MOOEyJyZOqgSi6CYOw21+wpHpazycWNaaW9YV1w0VinsZnf3eyXMRQ3M16JxmzN00pTIiJAg/1WL9l78Nid0CIdnuo5ZbVpjsAbD7yEC6jhjtFd1+PX40b142/ZhkKEG41L/WYcV3VQ07k3v5DC2644krtvtntMpAO4uviXDeow9CjCT6osgm9SEfr6QEU8V48wahTWj/1AEg37miQWLirB9i+tW9NFjyDWg== 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 GV2PR04MB11834.eurprd04.prod.outlook.com (2603:10a6:150:2d5::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Tue, 4 Nov 2025 15:47: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; Tue, 4 Nov 2025 15:47:41 +0000 From: Frank Li Date: Tue, 04 Nov 2025 10:46:44 -0500 Subject: [PATCH v10 6/6] iio: magnetometer: Add mmc5633 sensor Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251104-i3c_ddr-v10-6-e3e4cbc17034@nxp.com> References: <20251104-i3c_ddr-v10-0-e3e4cbc17034@nxp.com> In-Reply-To: <20251104-i3c_ddr-v10-0-e3e4cbc17034@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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1762271233; l=19369; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=ffXg0kwStfghFn7Jx0IwhaYuYuN9+ZAr+/1/R/oYPUM=; b=DGiij4cLGTfaZfFHnCGfpOHbe4zO5hNArJDOqHiDg9W3BkDAps7T7ORG0BCBp1O0fRWj2506W aovoPOiMi23C0uXDCCsg3G6xtsRJMBrBW/bSTEcm7n2IE9MUiNI8H6Y X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR15CA0017.namprd15.prod.outlook.com (2603:10b6:510:2d2::7) 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_|GV2PR04MB11834:EE_ X-MS-Office365-Filtering-Correlation-Id: dc21f2c2-9423-4d8c-5a10-08de1bb97d15 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|19092799006|376014|7416014|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dkdwVHdYYTF6aFpHa3drMm1CWFJKRmoxd29MY05nVFhYRXZZRHlxWDJTM0Jk?= =?utf-8?B?a09ka2JSUHh4K3k5a1F5R2FscHZBS3llL2ZIR2tVbFNxaEtKQ0RRRDBmaHVS?= =?utf-8?B?Uk1HYTh4c3p1cCtlUHg0dENCZUpkMndqTDNlWU16azF0L3lxQzZEZUZscGRo?= =?utf-8?B?RTQydWlDQ0lGOW9pTm9RN29hRzhjL1NFOVJZSFpKdDkvYnl4b0dDcHdtUWxQ?= =?utf-8?B?WGNrZ0lwK0d2eThmb2hmR3FuZGRYVWcvTEN5c0Z5RzlYWUFBSmlLblpSbGl6?= =?utf-8?B?SVRwTGV1ZWZHYmFJbkhrYlpkTjhCQTIxdVhJUUJLdnI0Ni9UTzFaVks5WjZO?= =?utf-8?B?TEpBYlBDS1BKbjAwcTlhZndLcU1yL3MwNWxhS1B2M1dNZ2lQQjBiK2VzZXd3?= =?utf-8?B?MzVIc1l6T0hPUTJlN01iK0txelhsQnRxVXJiSGpPZXFQSDlZdFR1SUp4dVlw?= =?utf-8?B?NDlxVTBwMzdFbi83Lzl1Y2gyd1RRVmxRbE5uOEo3WklqSVpOQi95RVhRSUE2?= =?utf-8?B?UFB6MVpKVGhzSGxmMEZZTkpXNDQ0b2FRUDBHcXJKNnhEcXVGbC8wc09yUVBp?= =?utf-8?B?ZFQ5VHB6aWtnb3o1NG0vazV5VUwxcmJpU3VueUtBdm14emZzZjZmVHRjVmRI?= =?utf-8?B?azFLeVlDcjVpOHRzQmRiclBTd2NaVGlNbUQ0ckluRjlWcXBHSWdkd0xPeFV0?= =?utf-8?B?dW82MFYxVlZLc3Z1NGZkTW5xcEVlSk0rbzVJM01IZ1VQTGt6bkVkRDJ1NWJK?= =?utf-8?B?eTBpZHdnTkxkVjR6QytzVzd1ZmYwT25qa0VncU51RjRhWnM5d2VmSlRSaHVo?= =?utf-8?B?Rm5WVTNFcG1Jem9IQzBSSlpUenVCaXlEQm5oM2t1aHB5cHg4Z3J4ZzhkM1Ay?= =?utf-8?B?Z2c0UmtIcGhVNGlnaXAzM29QYitNUndwa1VVUDNTZzloRm8wcmZ2TW5JU05T?= =?utf-8?B?c2ZHQjg2NGFOTFVGN3RIOXBCcVBVYkk5cFJMRkRHMCtnemRKbjZ6YUhaRys3?= =?utf-8?B?d1BjeStIVFk5N0R2OTRCMTc2TmlPcHNmcWhJUzZKbHZkeitaYXR6dHpEMWxj?= =?utf-8?B?UGhtZWRUS0lnUmxrTmVxUTl5enlPeVc3WEFTNDlBTXV1YXZydW96R1F0RG85?= =?utf-8?B?VVpTeTBHNHFFeUV2RUwvSUZmYlllWWdEL2djcURXSjdwdyt5MWk5Mk42V0pp?= =?utf-8?B?MFRUOWNacjVIVU9BVDBGakdUUk1yeFI3ZjZZK0ViTjBtc1BJc0RnUXQrdmNO?= =?utf-8?B?V2ZjdFVPdm9sUHNPbDE3MmdwOCtmNGVNVzB2L21iUUZvMlM1a05oZXBYSFNI?= =?utf-8?B?SG1FNkI3bFZOeW1JMlRSTTVJcG1oVHQ3MlZtdE9CSWlEVmlQT3ExRXlEaHdY?= =?utf-8?B?U1VXY2ErYjUyUlFsWHBtdHd5eC9uRVpWa3lQczN5aVZWOVgxOVlka2EyZUF3?= =?utf-8?B?N21EN1dmN3dCTUdNVVhwdUlWekQwMVUrMnU0bHN1ZitMcEhLdFhoeVg2dW1o?= =?utf-8?B?RTBYOWpRblNCem9WQy8xZU5RRi84eEZRU2xsVDJvOVR0KzkycjVJM1BtbXor?= =?utf-8?B?RVV1bDQvaTJTaG41a0hBOFJCb0FJOWVmTDVFdWxxaTBmQjJhOU94YTYxZWR3?= =?utf-8?B?OHJuYVNlSWxxaVNURHhIa3d5eUxEdURseTJwcE50SHVML1VGaTBkWkQvV2xP?= =?utf-8?B?dzNQTGtkN3FHeXNJUDdLaDJjUjR6ZkllYVFUTVJIMWVLT1JQdVp2TjczTFpz?= =?utf-8?B?NG1vVCt3TWVmSTBQS0hxNSt2OUpaYjJ4VnpjMDNST1phMFBRQWRKUE9uekxr?= =?utf-8?B?bHgzM0J4cDI5NlZKOFZvT2kxcHRKOVNOeUF2T0lvbU84QUV0M1dPaUdiRGRG?= =?utf-8?B?V0gzQVpIa1NWWnp5TFRGNFhCR3BkS3ltOFBhY2tSazl1dFVML0ZHbWpsK0ZJ?= =?utf-8?B?aGx3dENuTTFPYXRRQ2wxWjBmYkQ2RXN2dGZNeHNXK0srMVhYaWlYR0FMVUhJ?= =?utf-8?B?ZC9MTy82VTNWWEpsMHVWWWhLMGd6SjNmbjBKemFRWDNtc3BjM2x2UzA5bExL?= =?utf-8?Q?NyaQLn?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(376014)(7416014)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OGNCcVZISmdIOCtkaDRBcWFETS9JRmxzMEVWbGo5R3B6QWprazRqMEtyNC9s?= =?utf-8?B?RDhWTjhUcm1BOStKTi80YTdkdmNrRHlvbGdQK2F3a0RhNVNsalhhWVBtekl0?= =?utf-8?B?ZTVwN1dCV1QvekV4SUJ4cThRZWF1amlXc3Z2Nk5YMERGT1RCVGdKR2hzbWlQ?= =?utf-8?B?RXUvTE5XZXVtQndUMzBxc3d3Q1JhUEdQeGVhN2pYM3RYM3lIMlprOXNEdysz?= =?utf-8?B?cmRTbmdqQkZzcjc1TmJ3T3U5QkxlR1pjMTU3SVpOMTBNN1kvWXlsanI1M0JZ?= =?utf-8?B?U1pndHc4N2RRZHAzNFJLR3p1d3JQcWZIZ1AzUHpXUEE1WkhWclFHRXFFaWVt?= =?utf-8?B?MG1mOVB1RW82SmEwYWd4S2JjUndoRkw3cThmYkphTlVxa1VLTlJFcm1jSGpW?= =?utf-8?B?ZGJJalNRTzIvZFNUQ1BHRUIrc0RDSHI5ZVpCWG90dmdMZkVhcVBYbHNMTzlx?= =?utf-8?B?WERYRUErVmtYa3ZOZXRxcjJJTjhyY250MjJiUjVzWXpwS3NrY2ZyS3N6T3lX?= =?utf-8?B?M3NhMG03THlSSEFBNXE0OWNkU2UrUkthb2FpOFVIOVd1WTVQTStHT0ZyVGY1?= =?utf-8?B?WURYaVVvOWozZDN6VVVLbVVqcTd0d3lqTG94QUJUNDdXMkoxZGgxU3JBWUoz?= =?utf-8?B?OFBiTkRNOFZHdHpJQ0dYeU5tcytJbDVScWtXWXRmVlQ3dEQwQ2tKUkY5RUFa?= =?utf-8?B?UWd3RVVMNitFdUp3dGMvREhnN3E1Y0V5b1ZORXhTR25GSUlCTUttU0JFd1pW?= =?utf-8?B?T2ZKMytwbFdtMEJOZzdad1RmQkJrYmYzQW5IZU5NTUJjSllidE9PbWlEc1BZ?= =?utf-8?B?ZHp1VXFyQUZyUDd6QjhKdDJCK01FaEk3RnZTK3JPNDJrc3h0dWJWOGlVVjJ5?= =?utf-8?B?T1ROSk5BMUoybFJXUThkV0dxS2VlWWw2WGtCbXZVSHhGWmQyZ2FjTU1Qd3lJ?= =?utf-8?B?WVZKNnIwdTgvSDkvWmo2TXo2YmZUUERDMzlVeTdBa2diU2lMdC84cm9yZjBX?= =?utf-8?B?UGN6eXJUSTJDWUFIYW1STjJaaUp5WXN1S1hYTk80bjhYMEVyQ1lOSXk3aVZu?= =?utf-8?B?RFBzcUVDL2tWUzgwWTVneGVsRkNrNHlYZzB4bmZqK2Q2N0k0NWhvaFhGeEZV?= =?utf-8?B?T1RTMmZEMzZENTFIQk9nMWdvWG1QdmFFZ240b0ZlN0dEZHpZL0RoM1ZaNWF3?= =?utf-8?B?NFFVVzNETTNkcS9vYXc3L3h2bDRpSGVqbkFDUHUrUFRORVdUajJhWU0raW9W?= =?utf-8?B?R0JTNnpWNldzVUFWTkNQWE01M2l1dGNWL3RxZ2JoOHhxZEM4NnBYejNHcUFm?= =?utf-8?B?TkJSNFpJR0pBbVFER09HVlFtWmhEaWZrcFhIdGc4K1dWVnd1SkdRRHdaQmdk?= =?utf-8?B?d1lwRjFWZTIvV0QvbVIxTXJlTW9tMm41RVBJR05DdzhTY2hLSVlqakxTMlpr?= =?utf-8?B?ZURiWld0NFBlUWpHTm1Cc1N6cG1HeU05T1ZLVkVTc21EbFo3NkhRZVd5WEJw?= =?utf-8?B?QTVPYnpJbXcybkpJby9wNUZmYzQ3SDR5dUZxeUREOEhhN3M4ZHdNeWFBd1Z2?= =?utf-8?B?aGpqcG43azhkOXUwbGhsVW8xa01EeFErRDJPVXM5dTZ0Y2JiNCtaVWgwSWhq?= =?utf-8?B?bk9sK1FVc2tXYnBQZTZ3Z1NQcndzb3NPMmhFU1FyM1FEQkpjaEVXcnhSNitT?= =?utf-8?B?OC9idUozZHo0R0tCVG5BektoNU5peTNoMHdWSEYrRXNmcE5xMjFRK01IY25o?= =?utf-8?B?cVRydXorU3M4SjNiTkFrZmVmNHpjS251TjlXSXBXV1FwOFQ4K2FYWjl1aSs4?= =?utf-8?B?eVRoSGlGVjFTLzdhcTdyY0pvTGRSdTZJc2FiL0VSZjV5eFRNQXNZaG1HVFEx?= =?utf-8?B?Y09YSjloSXZyb0FEcFVLNUZxa2I0K2s5ZlIrMTlZVS83R2w3Rk5zZ0hZaTFE?= =?utf-8?B?ZFJMaTdJM1AyZDZyRTFxMmthRnA1cEpubmE2WVRlUTRPNVlrZmpWOG5jU09p?= =?utf-8?B?RFFZQlFCNUp6V1pJc0Yzczc1cTUwYlNsTGtxT2NmcDIwaFlUZGVma1JMdExj?= =?utf-8?B?WmREYnlBS1dhUmpveVl0bDRuVm1seHhNcEdWQ2RnQlhwY2g1eTIySFlnVXBv?= =?utf-8?Q?i474=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dc21f2c2-9423-4d8c-5a10-08de1bb97d15 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2025 15:47:41.6951 (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: gmE7+mOx44vaoXc7OHyP5XGBWLM6+RZ9mwx1fjImlP9iPLY4UBxuXaEa4p9kPLMjqgru2sZiWxqb10lMy7Vt6g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11834 Add mmc5633 sensor basic support. - Support read 20 bits X/Y/Z magnetic. - Support I3C HDR mode to send start measurememt command. - Support I3C HDR mode to read all sensors data by one command. Co-developed-by: Carlos Song Signed-off-by: Carlos Song Co-developed-by: Adrian Fluturel Signed-off-by: Adrian Fluturel Signed-off-by: Frank Li Reviewed-by: Andy Shevchenko --- 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 | 588 +++++++++++++++++++++++++++++++++= ++++ 3 files changed, 601 insertions(+) diff --git a/drivers/iio/magnetometer/Kconfig b/drivers/iio/magnetometer/Kc= onfig index 81b812a29044e2b0b9ff84889c21aa3ebc20be35..cfb74a4a083630678a1db1132a1= 4264de451a31a 100644 --- a/drivers/iio/magnetometer/Kconfig +++ b/drivers/iio/magnetometer/Kconfig @@ -139,6 +139,18 @@ config MMC35240 To compile this driver as a module, choose M here: the module will be called mmc35240. =20 +config MMC5633 + tristate "MEMSIC MMC5633 3-axis magnetic sensor" + select REGMAP_I2C + select REGMAP_I3C + depends on I2C || I3C + help + Say yes here to build support for the MEMSIC MMC5633 3-axis + magnetic sensor. + + To compile this driver as a module, choose M here: the module + will be called mmc5633 + config IIO_ST_MAGN_3AXIS tristate "STMicroelectronics magnetometers 3-Axis Driver" depends on (I2C || SPI_MASTER) && SYSFS diff --git a/drivers/iio/magnetometer/Makefile b/drivers/iio/magnetometer/M= akefile index dfe970fcacb8664b293af84893f7d3e3e8d7bf7e..5bd227f8c1204bdd8b8a43da180= 833eedca1457b 100644 --- a/drivers/iio/magnetometer/Makefile +++ b/drivers/iio/magnetometer/Makefile @@ -15,6 +15,7 @@ obj-$(CONFIG_BMC150_MAGN_SPI) +=3D bmc150_magn_spi.o obj-$(CONFIG_MAG3110) +=3D mag3110.o obj-$(CONFIG_HID_SENSOR_MAGNETOMETER_3D) +=3D hid-sensor-magn-3d.o obj-$(CONFIG_MMC35240) +=3D mmc35240.o +obj-$(CONFIG_MMC5633) +=3D mmc5633.o =20 obj-$(CONFIG_IIO_ST_MAGN_3AXIS) +=3D st_magn.o st_magn-y :=3D st_magn_core.o diff --git a/drivers/iio/magnetometer/mmc5633.c b/drivers/iio/magnetometer/= mmc5633.c new file mode 100644 index 0000000000000000000000000000000000000000..1bae6ffe3f18315ce079cb08c22= 86653cf71c9a4 --- /dev/null +++ b/drivers/iio/magnetometer/mmc5633.c @@ -0,0 +1,588 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * MMC5633 - MEMSIC 3-axis Magnetic Sensor + * + * Copyright (c) 2015, Intel Corporation. + * Copyright (c) 2025, NXP + * + * IIO driver for MMC5633, base on mmc35240.c + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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; + int ret; + int val; + + val =3D (address =3D=3D MMC5633_TEMPERATURE) ? MMC5633_CTRL0_MEAS_T : MMC= 5633_CTRL0_MEAS_M; + ret =3D regmap_write(data->regmap, MMC5633_REG_CTRL0, val); + if (ret < 0) + return ret; + + val =3D (address =3D=3D MMC5633_TEMPERATURE) ? + MMC5633_STATUS1_MEAS_T_DONE_BIT : MMC5633_STATUS1_MEAS_M_DONE_BIT; + ret =3D regmap_read_poll_timeout(data->regmap, MMC5633_REG_STATUS1, reg_s= tatus, + reg_status & val, + 10 * USEC_PER_MSEC, + 100 * 10 * USEC_PER_MSEC); + if (ret) { + dev_err(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]; + int ret, val, ready; + + if (mmc5633_is_support_hdr(data)) { + struct i3c_xfer xfers_wr_cmd[] =3D { + { + .cmd =3D 0x3b, + .len =3D 2, + .data.out =3D data_cmd, + } + }; + struct i3c_xfer xfers_rd_sta_cmd[] =3D { + { + .cmd =3D 0x23 | BIT(7), /* RDSTA CMD */ + .len =3D 2, + .data.in =3D status, + }, + }; + struct i3c_xfer xfers_rd_data_cmd[] =3D { + { + .cmd =3D 0x22 | BIT(7), /* RDLONG CMD */ + .len =3D sz, + .data.in =3D buf, + }, + }; + + data_cmd[0] =3D 0; + data_cmd[1] =3D (address =3D=3D MMC5633_TEMPERATURE) ? + MMC5633_HDR_CTRL0_MEAS_T : MMC5633_HDR_CTRL0_MEAS_M; + + ret =3D i3c_device_do_xfers(data->i3cdev, xfers_wr_cmd, + 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