From nobody Tue Feb 10 00:24:15 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013069.outbound.protection.outlook.com [52.101.83.69]) (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 4576E2F5330; Fri, 31 Oct 2025 16:39:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.69 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761928807; cv=fail; b=BdpIkxd0OYL47Jx/YptZU8wbUzrEOkd7s8VEFlBNimYruprxXXXHUTG0++Cq8A4ztJOl/aFT7xPJl7qHUeM0fjfpn5JDyChDXEENgBnhgWZW8jdcm1uw+T2BdVDk3PNjM7MLn97KNPuwYfC+lG+pJTYVVjC692d3+0s0HngfhBI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761928807; c=relaxed/simple; bh=Xu8bp9V4hfsx8ETYTi55tKRQ6COWT2egdx/YMlh7Rpg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=eLMls/kqck82BhDJWGdJmds5wHRLQfXMGAENX3d9SHuSBW29QPefoJMOeUn5nGYhr+Umy89My2WN+1YiI0tdO368wUylZcDVsRExkdOtUtqqAPSw/HNfe3MVeNsRelSlG6EYJrsSoy7DL0gWUiw37N9g7Nvw+8AzQOsfjkPTCmo= 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=eYSv3Xnk; arc=fail smtp.client-ip=52.101.83.69 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="eYSv3Xnk" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nmSOfKAolwJbaF2G5838bMqsUU9QyGuQmU8DQUhYrxgpZy1p4+GfUda9KGDyZvI/LQ7inejOW5puPpULprByb8LVBSJitCPI/mCy0Etd3vsAWwH/LwXLMDwpACFRO7NHspUeRevC7bjSfkJ1qpMK97nhIvpqOrqrXRcaYKarTIHbl92UfB6jw+hUTLPm1cqzIKW/GgZvE2wDb4E8bQaHviudwghbDQALG5x/z7D/at08NYxMOORANHn0keUfE4qWvbGNznxIcL3If9+IGS270/lEmZJ3tCZtMkzGfJjRyGYSsTQsiBCJWGeuXRvQAXd53RIel/fXLb6s2+3UyfC+zQ== 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=v4Fmw7iHUgzbrXOXTVXY+leGFo0fvVq256bZ4rm30lD/hNT8yBEa7QczG0m3UfabbuhER6geC70LaBxrCVOfYikl4jJtadIHEmt+ulJqJBz+9c1hy34CdaXmywvHHTeHnZDolEPYqTjl3PNCKjMCXkj0v3zikL1QnYLHeoBiZAmXD4gkJqys1ZpSaXpsmu3JyUt58H3N77Iw9dtIT/Ves8nPx96u29gyDF9f0S0ZFwxOGCE73gRXfNFFeaiaQJXstKLeGNbzHJ1c6cbfKlgGyv0V04Z5m/yzrOl6RqE4t149hMYWRPVvMF6MfNC7edtXK0duSJVhwyLpOSgYWRCHAQ== 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=eYSv3XnkTziCoBeGFCRyBNq/gyTUbs87HVJcXSO1Ne8BCs6tI0FOPoncBwKRL0wJbeVv7NK87t94MiuSW9OCGHq2ri36tBd3v/s9+RB6I1rnEp959uCDSdyKExu7wE1Cv884xoPO4N0PnwBnHSMA2uN8L3xT84a+rMC0p4rkn9Nbwsjy8wbv637glTyDYUzigV9vHU7SII4WpSYpzzFzj4U8fPiwzVUk38loxX/kOoYo7A+5XOTDF/Emts6RnzU3Q+M4FEoprklunfwAj8MUlxeUO8yLh+P9jRgW/aWwD1ZgW30y5Ax601Vab7hR+KM7aaRJoEqn4DDRY8tLcSrujA== 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 DB9PR04MB11533.eurprd04.prod.outlook.com (2603:10a6:10:5e2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.13; Fri, 31 Oct 2025 16:39:48 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9275.011; Fri, 31 Oct 2025 16:39:48 +0000 From: Frank Li Date: Fri, 31 Oct 2025 12:39:13 -0400 Subject: [PATCH v9 1/6] i3c: Add HDR API support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251031-i3c_ddr-v9-1-f1e523ebaf78@nxp.com> References: <20251031-i3c_ddr-v9-0-f1e523ebaf78@nxp.com> In-Reply-To: <20251031-i3c_ddr-v9-0-f1e523ebaf78@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=1761928780; l=10620; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=Xu8bp9V4hfsx8ETYTi55tKRQ6COWT2egdx/YMlh7Rpg=; b=k99mgiHm35yxDA+jU8NbNEx0eUgpPYR+6zhNGcl7hoSajhcdksC4+brMk/KBNflfQ+QvwP5Uv h1QlR73WV4gDQJh++WQhl9KgJVO1HqVYQFn/MzEou12zNYetmeuwjcq X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR02CA0015.namprd02.prod.outlook.com (2603:10b6:510:2d0::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_|DB9PR04MB11533:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ea950c5-09c0-49f5-a84e-08de189c1b32 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|19092799006|52116014|7416014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?ZUN2eGcrUHRtcy9JU1RjOGtrL0kyMHdrRnNST3lzVTB0SU1jYmFCbm9aTk5y?= =?utf-8?B?MDRhR2phaUNvTUVrSXVNbzFnNEFJdDh1akRuL0orY2htR21oYXA2QTJKZjlH?= =?utf-8?B?OW4vZ3BqWEQ3bDN5bUtwQzhQTXFFYkdiWnBnN0g2K1kyODZadGUydmdRTkIr?= =?utf-8?B?NGtldUY2VUdFYS9zc1B2MVZIdmV0ZVNoaTFOaVJsbUo2Qm00UU5yUUcwdmgv?= =?utf-8?B?a1MxNjJlTjIyZDk2dkZCcmRoekp0QVdtQXJ4TlZ3OHpvVThMZjRQY2FXUExV?= =?utf-8?B?SWc5VUc3K3Y5K0J2MGlFNE9SM05PSVRNc1pKREdvWTIyRytzSStvenV2ditN?= =?utf-8?B?UXVCdFlaS3AyNXRFb2h2ZDh5Y0hVUEJVOVNMTVZLSkI0UTUyM0J0aUJzU202?= =?utf-8?B?dFVmaFFsUzI5TjBqL3pHb00zY0FZNTJGY3RyTmlqMzRqczZOZDdZRXdFZDZq?= =?utf-8?B?dmc0dWZya3lERVptZklUOTNtWFovZTRDanRvZ1dtem1mWTFuYUVDbVA2Nndy?= =?utf-8?B?U202VmxweGhPeS8yeHJ3MGhrYUVGNlBMVFYxOXRhdkw1dVlZS1luNk9UQmM1?= =?utf-8?B?bFRxRWVRVHdQVnkvekJuY0JsUEtoVFlLSVdmUnI1MEhiWXMwZUZFY2U1VGgy?= =?utf-8?B?SmlLaVVtK3o0QjJzOHR6citiLzdIS3BORHY4eVh4TWVEcysxd21ublNTNDFR?= =?utf-8?B?SUoxK1d4QTAwOGdKeG1jajFJSHRqakVFTVlqalZHV2RBblMyWDF1RW5OUGdF?= =?utf-8?B?Nkc2dG1YZUl6R2p4Q08vYkpwQ0I5V2Y1V0o4VGxJMzlJWldHcFJjb1JoUEpK?= =?utf-8?B?NDNmTFN3ODcvZTdWNm4rMXRlUmJORlRKcXNqU3lqNkZ2bTJCSVovNWxjZG5a?= =?utf-8?B?SVY1NE9pMmJHYWpkMGNGQ3U4aTB0akE2Q3RuMjR1OWhhK04yUVlyUFByV1pB?= =?utf-8?B?TEd5WUxaTXBVMXlIalhwYlVtRmVGNTF3Vlh5cmxadlhyVW4wd0RWcnVTMGVL?= =?utf-8?B?QVQwRzd4dUt4cGNpM3pvbU1MVTl6dXZFNHkwOVlCeTJScThtK2JzZW5EV1hH?= =?utf-8?B?UDlJZUNZS0N0SUEzbzF5ZjExMWN4bHhrYUVKSGhpaTRMbHhibDBiVDBtSUY3?= =?utf-8?B?YnBzb3pwZWNUM1k4S2xyTnJxR20xd2FYcDFNa1h6YW84a0YydnhXUVhSUHpB?= =?utf-8?B?dStXUzE1MmRRNDhlS1A4c1FIdUY4QVdzRTI4bVhOb012dXpEbWYreXl4NXMz?= =?utf-8?B?aVNJaG1sU0IxN3VlUmNkcmF0a01TMW9palczSEZ3elBWRTZBMVh3aWlMQlFv?= =?utf-8?B?c3JmclBwTlpHdElXS1RFYWJ3aWU0Z0dzL0J1aTloYnpRNHZ4Rysydi9rdzZR?= =?utf-8?B?cWNKbW9ic21JODRtTy9xckF1RUpVZ2pPRUZFeWNGNUdycUNVbmUvTjNnMHBV?= =?utf-8?B?T01iLytaMGtxQkFzNlRNUEgveldxZFN5bVVGVDhCUEZwcWp1TDlIeDZNV3Ax?= =?utf-8?B?SURxZUladlByNG9KQVN4bUZDWHNUcENoaGIvNm9uRGhYaW5KVDNUZDg2Ujd4?= =?utf-8?B?MGE0ODY3NC9qeTFGYlFmLzVIT3RRUFdoUFJ4Z3NxdVdFcFRSR0kvTXJzaU5V?= =?utf-8?B?UGkxZWhSRlN5U1JQV1R0RGxBcFRNN2VOS1ZxeVNGblRQS3BGWFhHdDFiWjFM?= =?utf-8?B?SjZSZzd3Y2R6aGx1c3BCTnQycDJYVnhIUENiT1ZDUjdLSCtaNE1yVVdaSTE2?= =?utf-8?B?WEFHakIySjhXQzd2bWttbTRONlk0dlVIbjJ0NVFuTTFObE01YVVQY0tMTEV0?= =?utf-8?B?MnRMUGoydGlad3d6blJ3MFFVTDFGQWMwUi92N0p5aEVwZ01GZXhyV21xTHBS?= =?utf-8?B?RjlFMnlkL1RkZHBuZDRYaDl6OU91eGYwVlpOd3cyWnVCV1QydW1jMEVXTkF4?= =?utf-8?B?b3RFWFhaMGFDZXBraldoYXRwck5rcVErN3RHQ3g3b1lZdStKeWlUK3pBVWhN?= =?utf-8?B?ZFR0cUxpbzkrTzR6Q0RCd3JNVmo0bjE3RXlmZnMwMDk5YzRnY2dacVF6Y2kv?= =?utf-8?Q?3XRn7d?= 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)(1800799024)(366016)(19092799006)(52116014)(7416014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Q0pNSm1aWnFSS1lCMzBRZ0dudGZGNDBSYUgzWkd3eWpnR0xQQ1NlWHVwZXVF?= =?utf-8?B?ZENqTVNoa2pXZGp6MHFCSnRZbzIyR3RtTjZSVld2RGtDbnpOOXByN0JERnpD?= =?utf-8?B?NjhERVZ5RGsrMG5hb0c1MEU1dmNRaDBjZHl1SklRLzhDVHNVTXVTanRkZUht?= =?utf-8?B?QXluL1Znd0pOWlJ4NzBCYzY5WkpuMStTL0E5OHprZTZRUGowUXkyM2Nud2FV?= =?utf-8?B?eXN5aUw2UFVaT2FkY0kvMEk2cE85d2lMaEs5N0FiUHRYaDd3NzZxMWdvc1F4?= =?utf-8?B?Y3lOYWdEVHpZUW9rTnhKZGRyaytGb1Rrazh3TkkxVzZNOUd2NHFpSEN3YVBl?= =?utf-8?B?eDY3b1o3dXJLYUJUdlhsREF4bUtJR05JeE9nNTBkVEtYUFAvSmZqRUhmL1dZ?= =?utf-8?B?VU5JL21ZTHRIOEhCV3N1bXc3QkhaQXM1UWdoZTZjRzczaEZlTDc5czdqZUE5?= =?utf-8?B?YU45aC9NVFJFTzNTK1htU05mUXpYM28wNEJyVWRmeVpaMmt0S2pMN0t3Ti9P?= =?utf-8?B?Q0JNOSt5andjVkEzQXgxK3o0OG1URzN1SUwzdG1hMlVpSis0eW5mSG5vRGV5?= =?utf-8?B?MDZCOFYxNWpjMUc4Wnc3REdmUERIdmJGUkZva2krMkFkSnFSdnJncktLUGdU?= =?utf-8?B?WHVYNDAyRWE2cHBUZUlTVFZLY2ZyeG1DSzRJN3FoTzBXRk1HeWI1MytwNVdE?= =?utf-8?B?NHR0d25NQU5hcWJSQjBHUDV6aTRJTXVUcW90TU1FZU9jc2lOTzlPc0dZa2h2?= =?utf-8?B?Qk9ZdXJqcTR4QWIrOGI5K3lIQXdPeWVzQTBlZkliRWlJZ0pEcVZWNnJ2c29t?= =?utf-8?B?R1IyazZnR3crdDQybXJaVUhCcU5HZnVtL0JvM0diY05GOS9hbnVhSG1wWnE3?= =?utf-8?B?WENIVXFYL1Fxa21BUGZlcW1LWkx4bHdLU1EwZkphbjBOSFdZK0I1alpna0g1?= =?utf-8?B?UXkzM0lhcUxXLzArc0JoVEVBUjNXcENZVlYxZDlySFFqeXM3V3BJYWlnQXVM?= =?utf-8?B?SE13M1lqNlRzZENVQTZyL2REdkl2THVPTjFjTXdEMitvcll5NHowOGZZdVI1?= =?utf-8?B?K1BJZUIxWkhzaEs2b1FjR2x0L1ZJdlpXNlNhODJOc2ZPcW16V3BPWjBaVEdw?= =?utf-8?B?QldBaWQxZVdOdndpc044OXJ2RGZFZlEyQld5am1aUHhDc2RUS29jSGNabG9K?= =?utf-8?B?am0xWEJiVlNXM1daUlFMWnh6aVcwRS9rOHRhd3dzNjdOdEl0QUhqWCtnaFZP?= =?utf-8?B?MGx0UUF1VDh6M011Z1pSTElBTkI2RFhqVndLa1hiVE9pUUhibWpxUUFaLzMz?= =?utf-8?B?K0t6Z0FwNEpxK1MvWitwd1VhQXpSK3MrZTIvMDRLeFJBUHhMdE9odG1HQWZj?= =?utf-8?B?OFdzUlp1YnErT09ocHlsUHk2WkNQc29TU3B2OFprVmcrNEV0QW9UT2hNdk9X?= =?utf-8?B?RXRqdXlldTlYVW1CQjBlTG5BblhXNWRHa0tud3pob1g0Y3RWaW9FbHovdGlo?= =?utf-8?B?Q0V5eXZDbTBBeVlpT08yTlBWYnczdy93aWJMbVFKS0dONHRPVHAwNHF6WG1y?= =?utf-8?B?ZWJGWGs1b3hPbFlxbDZWeklPV01XcWpXTDVnOU10eGZlM3dnVy9kT2JnWTlm?= =?utf-8?B?cStLVnI5dlNWWGZ0dkZxOFZ6MHR6U3QyVTdMa0FMMElLTEFuQzB6SVBNWklR?= =?utf-8?B?aWV6OGx1QklGWWFhMjFIck4rRWtaUG1tczlPaldnQ0psMXZ5TktwYTFTMnlE?= =?utf-8?B?YjloNnFLWld6UjdpVjFJdEF3ZUpzci9RN0FPam9XL0JzTnhUWFIzN1N0azdj?= =?utf-8?B?MTFuMjV5NGphSTROVFQ5L3Y3RENsQzJsR2NCWDlQMTJsUVB2Y1BCY1NSbS9a?= =?utf-8?B?UjdNN2hwMHVYbXNlbTdRdy9FZFBvT1dnY2gwREkxMXFlaStFbmVHTnN0M2hY?= =?utf-8?B?M2tBb0JlTHA0SW0zOWFBMi9RZnlXaTY5cmM1Wm9kNEpTbzlEZUc3SnU4aGNr?= =?utf-8?B?amZORDVKdXUzYkRWYkhmYSt1aEpJUEE5SEl5ZHpjRHhaWWRBRmhDbENzcVZm?= =?utf-8?B?YkJjSWZEbHhRNjVVRWxvZ1lsdyswZ3RJa1pWWDRZZzIwUnRoekpsSDlJQ0Nx?= =?utf-8?Q?Mdb0=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9ea950c5-09c0-49f5-a84e-08de189c1b32 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2025 16:39:48.8494 (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: SqTJzJXx16Uo++M95/91RNTXMQDB0+kB45+vGVNWEr31TKT6EvXlowqaM02hC55aKkjXJ3z5GTM0CF+R+QCzJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB11533 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 Tue Feb 10 00:24:15 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013069.outbound.protection.outlook.com [52.101.83.69]) (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 D28D72EB841; Fri, 31 Oct 2025 16:40:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.69 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761928816; cv=fail; b=rDfLassU17qiqurXKb1d7COo8t/aSk8Lt/o1zb5x5KXRfbZbAWVRirmrMqNRCbFxJv+c9APXSqz2uLiXETvg1ZbgfK+27hxXOQPl3iyju+HVg5dqnd/dQBvJZMw7C7siVYrJUFmsFnQ1DYIxdncg/m+ttUHFw1/MOk47quB9sSQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761928816; c=relaxed/simple; bh=5vasvYWn6j296foC0KD1do8HEXNE6j61yOhJlnouXFY=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=MrJEXM4PrZawYCosVgIcpDZwFx7UW0c7DfrVrsUi2gkxPodE8IgR9o9S2+1DZ/dd+0FOxIdEmu58MiwNg7NYDtZ2uZxtOPLyBBkO+6LZ6aQqnTS19S0C9LnIarW6LVPoX0WRNHLiu+28BscTP62fcF5/KiL+Y+uLZzMdn1BBH6Q= 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=bZooXuqR; arc=fail smtp.client-ip=52.101.83.69 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="bZooXuqR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yz0Vr+NrWgWf1/rhmiFoHSvDzNlyDPF58OiTTh3yP5zyLiBYXVTpPN/45aHFZgE6vf4pHkgYyG/3kbAALSXDgaHL6RncbfJifulZvZVKQxpyf2WWbj23R7f3pZZBGxa7CEjnS3ur4Hfz0s2oLjyZa+wvoAOYtXyKW2tPENi0InflKLdjPWjOYRdnv5bYTPuvr/URitZbMpaTCrpWoB/9Uv2bbt1mKzCPA/LnGz4UwPM8REhWrTiLPv9NsijjtVf+iJ8KjUjWEgIBwnC5oSkeL5yByd8bV1IZaDgA0zGNoxFOWnreMSE5gUk7OVql89aEl8997UTHZ2K8zsPISWBzkw== 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=xt7GgYSVUlLx1+wJJ/jhLPLa4z4i+rrMy+Dp74VBefq2srqO40ETyGwwAi1lJaUvqCORAwr+yM8XG7Gbh98yq8KjOiDJLEV7sNwWId4IddPgqbQhGmjfli9ML5nTtUrRJ8ZgYwghMDJim3H+grZHtuvsT8Rp4hNf1X/QiDmkHl4zD4fpJnSXyN79GYxCal3BXzLQrzPXXAHdPQFVjxPZ8kERa452UfUrT0sttEX9E75ffmO356/hjXjo9u3GgcN38WelrcBBHLRvB9IJQdFTBbOq+Vvji+niW3a8JhBh/SGsm/0tE2jgOyCDNcHGHAr2mWDEF8CMf4jDhPiMYmIVqQ== 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=bZooXuqRZxcE7TFfb+Lxtg9O82QPOCQLzJsDR3X/pDwMCP5aQ0bu5X9DdgIBj61vSjzr0GZyfB5WP7+3zq5U0IGoRWnb/Ppi2SEA9tqxLWfWn8K2jzHAcdd+jpnhdiyzNFE8u3Kz+EfYf1JPUWn3fo51IurWKzSMpf37AN1uUp/HLBSMA8M9c4eeEJknUDgC2Mnv+c5T8hVgQN27Pc7/oVnL0CI4eNAtBMnMVH9ZSvBU1SIgUmLLZc6Gw94k9SQIniJaB0jlDz9xzIj3Ec9kxBdjMye2ttpqTi7WRpo2KNNHVlZlBXmlUK6NywsXq57n1+VdEN3BJgfrjQbhLaHkOg== 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 DB9PR04MB11533.eurprd04.prod.outlook.com (2603:10a6:10:5e2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.13; Fri, 31 Oct 2025 16:39:52 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9275.011; Fri, 31 Oct 2025 16:39:52 +0000 From: Frank Li Date: Fri, 31 Oct 2025 12:39:14 -0400 Subject: [PATCH v9 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: <20251031-i3c_ddr-v9-2-f1e523ebaf78@nxp.com> References: <20251031-i3c_ddr-v9-0-f1e523ebaf78@nxp.com> In-Reply-To: <20251031-i3c_ddr-v9-0-f1e523ebaf78@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=1761928780; l=1345; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=5vasvYWn6j296foC0KD1do8HEXNE6j61yOhJlnouXFY=; b=BAalunJT6z23qzEpsEiJgvTKjrnv3TysGrRCDmdrtMB3C+KHEI7YepFei3tpT8V6wyWqswWMN 4VU3L2LTIl9AA3Rddf2+s5AASPZccn7/rlbj54dnzcdZ4UoPda2Etfj X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR02CA0015.namprd02.prod.outlook.com (2603:10b6:510:2d0::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_|DB9PR04MB11533:EE_ X-MS-Office365-Filtering-Correlation-Id: 1c15ab2b-9c6a-4e65-0117-08de189c1d9d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|19092799006|52116014|7416014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VWhzcVJzUkhqbUdjbHRzRVU0dzJxUElraHQrZGYwUXlGVHZXYlk0LysvNUI2?= =?utf-8?B?RnJDcng4bWxtTmh1ZUtiYzZjZ21wa1NrZC9Pbk9vQU04V1Qrd29PelBKMEJJ?= =?utf-8?B?Wm56bDBIOUxBY3pnVjRRdDNwLzI2RXhKanZyTDIyY282WXBGMEtxbG0zb1Rq?= =?utf-8?B?MTg0RWxXcFpZRWkzR1hLbnJWYnludGhQMkYyREpYNXBNOElMSlBvWmVUTzdy?= =?utf-8?B?dzVVRitUTldIa1JJek05T0tjZ213OGxieGMyeHBpS2d0bThBUk1vZVpnTE95?= =?utf-8?B?NlN0Tk1VSTdaaGpyQ0R2bVM4ekhEK2dUZUVabFYrYTJuaXBQWC9SdzBieGxI?= =?utf-8?B?SGRDR1EvSDNFWGk5b3NnTkpvNERUY1lCZ056VVFLMDg3SksvM0hLTDNTd2dl?= =?utf-8?B?dEVTaFROVWduZ294bmd5S2dTa2JJbVM0Y3haQWt3TFVObHJMS1E2Mm5DT1Ew?= =?utf-8?B?NWpnNmg0Qmc3c0VhQU12TS9BL0lyeXZhRzZBTHo0QzFFcUEyWlIzMXNsYS9W?= =?utf-8?B?V1lXQTViWGN6Y0ViS3lRSjFVVHcyYlRyTzE3Q1prQjlCUzd5V1BWYXJNTWJ6?= =?utf-8?B?U3M3Um9ITlJVSGNhdUFtaUJPOE9ZalJPc0ZZS2FTVU91Y25uRERwM0VmdGtr?= =?utf-8?B?cnFKU1REY0dldUh0amZQa3RiOTNoTnZIL2NXaEM0cTd6bEUrV0dhS3IvOGRO?= =?utf-8?B?TGQ2c01hV2hkNkRQa1BnaWlQbDlBLzFvRklIQXZnaDdodVVmM212WmZ1ejRr?= =?utf-8?B?cnNBVWhEeUFXZjBEZStvZUs0VUlqVENBZ2ZyaDBrMitFeTB3SjJYc3gzcFdr?= =?utf-8?B?OHJScnBoaVowSE80UUt3cXNKRDN4MnAwRDVQMmhhZHNlaUs5SHFmQVJRRm5Y?= =?utf-8?B?ZU5OdHpLcUNOalZJTC81MmRJeE1Sdk5URERHeElEeTY1STZBNkI2N1Vjb0Iw?= =?utf-8?B?TUV6c3VzdDRCT21BVzlyQXYvaVh2L1k3SCs4bnZqY1RqM1dUakFRN2xaWG5S?= =?utf-8?B?WE5XcjhRN3ZnRUNxWHl6K0oxSXErVEdwWWsrU2JmQmhDcVZJUHdJeDJrUkda?= =?utf-8?B?SlB1K1dXWnRkc0lvdFFFeVNBTWYybkR6cTNzNlJxNXhIRWZVbTNKTlZtVzJD?= =?utf-8?B?bWhiRjhxU1FHZ0RjTm5IcERJTGRMMmlFdnFzczVJNFVOem1WanZ1RVJmdkhT?= =?utf-8?B?R3drVkNhWkFTbEJBeENWd3FMN3hXamcvN0hBZms0cWFZTUVJNDhZd1FLY1VV?= =?utf-8?B?c0c3N0xlc2tIR1J2M0prSy9lcWxBZ0V1ZG8zeW4vL2JvN3EzQWg4a3Y1RVZE?= =?utf-8?B?c0oyaWtrRkRkUHRlQ0lGSm1PaTlwVi9xRE84L3BSNjRDTmNIWS9CbXd0RUY3?= =?utf-8?B?OFRNSVNOM1Q2bWNoaFRnMFNpYUo0c004RXRCeFVLZ3pIekdGbkJpd1pOVGFP?= =?utf-8?B?Rm13NXhHRDRuNUIvY0NyVTl0SldmSXFpV3dtTmE0NjBnc0MvdlBNL0p0MnFE?= =?utf-8?B?V2phMk5kVFJsRjZGK251emxETkw0cFJ0SEpCOFZSR3RmTEJQbTZWMURYTWFj?= =?utf-8?B?OVdaS2JZUDVFcDRHMkJ5TzBtVjRIT2czZEsveGZBRmF5SlgvNDM5dlJvTHhD?= =?utf-8?B?dndtajZJNjU2V1o3T0ZMOVVBejJ0N25mK3hEU2lNNE0wTUJ2UXp6VzdsbjZE?= =?utf-8?B?MVVhelZDQWI5dk5tZjNzT0hDU3k5aFU4OHR0YXY5blkyUml4elFBam0yblo4?= =?utf-8?B?cFVJYUwrNFh4ZjlaSTZIaDJScjI1OFZlYUNHZ01BVDFVcHlOS0pnRjVPTFAx?= =?utf-8?B?VVFpanozSVpxQnpqS2pSK1ZkZGovdDh6NGhhNzRydkdQby9DeDVJaWxXdWZN?= =?utf-8?B?cE43WE42VlVwTzVMbU5zcjRlR3Z6MkJBK0tqUlZHRkFOUEppVUtRdEpUWEor?= =?utf-8?B?dEMzWXN6MXBsU0sraVRla21Tb0RZbVA0Y2VONEFZRVlPZUorZ2JnTkdBMkNC?= =?utf-8?B?d29CemNBbGF2Mlg5WE14S2hFK1E5RWZzQnB6ckhPMnlQdWRXT3RhZDhxTS9p?= =?utf-8?Q?QQvsif?= 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)(1800799024)(366016)(19092799006)(52116014)(7416014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?emgxS25TY1B1R1U1WUhYTlh2RWkyY05VU3IyemlWTlpXN09pbERUd0NhK2Ix?= =?utf-8?B?SVNtaUROM09KallFaHZwN3d5bjVLdVE3SzFMM3VJWW9NbzlvSDFIVzUzYjAr?= =?utf-8?B?WlNGY1hxNDRZMkkrWG84eWpNK1UxeDlsUUQ2aXNLUDB4K3A3T0V3ZzlTT2tJ?= =?utf-8?B?eGJlMlZyS3dSRTZ6aS80aEFkbDU1eFlXcG5hOXRyZzlIN0dESVJ2TU4xZUIw?= =?utf-8?B?MkZFdzdZQXhXZ2ltSzVYOVI5R2JKcjJLV0hHcXRPT0VUR2hUSWdmeUw0N3RL?= =?utf-8?B?KzlQRXB6UFVvaUpvYThOMEdHdjNKMTJqSXVSVzNhT1o1WHpFMDNHaTJrTFVy?= =?utf-8?B?UThBQVBZMFQzZW4wbm54RGVmWnRsVFVRYnRlcU1PSzNTcktnUkFMWmE3SkJ3?= =?utf-8?B?RGhPZHB1UDNQMkloY3RWUE5HNjFOS05BQXBKcnNOWTFGL2grYmMxblFkZFA2?= =?utf-8?B?SWZ0UVRzTDliOFdZR3A5R2ZnSGRaYWt4VWoyajg4cCswVy9NSy9KV2V4SUda?= =?utf-8?B?VG85SS9IUnU4aWpSakhmMG84NVNOdVFUOVBxZWNHYTE1US9jb1VwbmtjQjBP?= =?utf-8?B?U3M3a3lwZStiVjYrTmgyRWdHaHVrdDMvRGVMdzQrWnM0NDR1a2JrMFZwN0Fn?= =?utf-8?B?bGJYVUJPUG9Pa3VEOTVObGg5a2NDZU16NitVYUYyaFIwNzJtNmg0eUFEMFpN?= =?utf-8?B?eS9BMjNPYmc5N0lIYzJSalEyV2ZSQTVkN25CUnVucmFkN25aUWtja3lERFR6?= =?utf-8?B?SFdod2gxK3MvWC9uWFFLdmpZdmc0Y0g3aS9CQ0lqR0p3VUpaRllyNUFiRlow?= =?utf-8?B?dk43elBraU44ODM0VmJaWW4zOGVTb1ZTbXFXVHgzZTFXWlB2K05MN1RiK3Jo?= =?utf-8?B?bG85KzVhMHNWOWxiZWJjTGI2Njcwc09aeEFCRnJKLzQrZTJ2Vi80TFR6dzFv?= =?utf-8?B?ZDByNEYzYUpoa1Q4VWF4S3dJSGhhdUZvSzJ5VDJqR3c4eEpQVWhpTnphTXBY?= =?utf-8?B?Myt0SktYMGhyaXBITnc3dDdqUXpXMlQyQ3RZeFB0SWtHS3BwR0xUUlV3dXdV?= =?utf-8?B?cUg3dVVSNEQwS1Yyai9Jell0NkZiQzZoeUNlVEkwWDJYN2EvSm9JZXA2M05B?= =?utf-8?B?bzdmaW04Y015dUNrQkVhUjBEdU5sV0NOTkVYT3g2SWJYWjNwUjdHcDZKcVEx?= =?utf-8?B?RmUvSlg4dy93TW12bkRkR2w1WGtoUmZVckZ6bGNPRmV6anFkaCszY2NsQXBr?= =?utf-8?B?TjFUZ2ZNd21iaWJCVERxWHFNTmg2eE5wcHlnK0U2b2ZpQVBZdHZkTVIwZHJP?= =?utf-8?B?Qll5bWgxc05jL0xlOFdMRkc1eWNva2JVL01JVktEaS90SnlvTjRpY0p4S29N?= =?utf-8?B?cWNuUEFSQ0RQM1dGQmkvUHdmcHBaditoeXNITEU0ZTR0OHE1K1RQalhKaUdl?= =?utf-8?B?cytxaDh0YkdHTmpzZXhJZms3aHdOdWxJYXRkaXQzdUE3bnRaMndUaFNENjgw?= =?utf-8?B?VFF6by9RbG5BRnBEejRmSXRjZWxhQVNmYm5tTFgyaUN3Rm5SSFBkMER6eFNy?= =?utf-8?B?VU5JSzcybUFNY3JNZkhIWnFVck9HMFRMeXpaWTNZVFd6Qlk3Q21zdUQ0Zklk?= =?utf-8?B?L2VhQkVsRjY5VjNhbWZrNGt3VlVvTEovTURLY1hNS013K0ZCa2FQdEtmRTNq?= =?utf-8?B?NG5OU2lpTjNYcitBTlp5c3lIV1hFL0pxME5VVk4weGIzeTVtQkt3U3V4N2dO?= =?utf-8?B?SWNlYkZ4dkdwK2huVThvR1dEQSs0aXhLZkJDc1F6a21Rb05RYUV4Ky9Pc1Fk?= =?utf-8?B?TDBWOEtVeXNRWkE3SVJRVWwxNFVoZWpSRUpUNnd2aTR2Si9yRmU3SmRYOUs2?= =?utf-8?B?bkpzeXkyZHlmQ3FybXYvdGZWY25EUXd1YXNXcTc4OXRrZ0d0aEs2OUJBYVlZ?= =?utf-8?B?RUxrcVV3dE9GUzZsdkErT3h0T1B0NU54SkxreW1mK0VkWEwzU1JYNDhsZzFZ?= =?utf-8?B?MUdRaWF6cG8ranRDbDBWTzEyWExmQzk4QytkRFp2eHNxNWxzWGE1aUFaelIz?= =?utf-8?B?SlpnQXE4RXZHYWJEZ3BER1JST3ptejRzMDZ6S0RlbEZHVmNuck0yUVhYY1ZL?= =?utf-8?Q?K8es=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1c15ab2b-9c6a-4e65-0117-08de189c1d9d X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2025 16:39:52.5165 (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: Nc/dYOig7WG6/CJY+agWGBb5qy7VYHNAdM7iy1xwuBISsADIFHSpHlPd41tn/dWKLbHavToaCUjJoXGzamUnuQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB11533 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 Tue Feb 10 00:24:15 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013069.outbound.protection.outlook.com [52.101.83.69]) (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 81D2C2ED866; Fri, 31 Oct 2025 16:40:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.69 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761928828; cv=fail; b=QnEfhzZcdKtFQhfF49v2SqgisrAbL5Euq9zACac0tV8+nG7VLSWr3UU30ujbeUfeQtC+dqAG2I97cagwcVARpEDYq6WYJl5otzthbBw977zQ/R+ce8GOIzE45mmF3n2bNGH2ZQ6qzvqoeVARrfzx/thtHUHgeFsgcGo+3iWyDTQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761928828; c=relaxed/simple; bh=HH693NU8kzd+Iv3hWINyPBycptPq4xE1Q1XbUVwF0WQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=HLdd5a+oPY7ZMV34R7YF7rs+VPfzWp06pL/rlpPqE08A37UQm4mzXBV0bkBqFl1CbUG1jegEoGlNSL3fQsWvD6uW3k3z0i7+Ye7DY22yobGtk1y1A4329qZqzI0ivracECj7qzwDwxw0v/m+DwWoC6H3+GPhi4lQS2In128Et3c= 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=V/8V8clm; arc=fail smtp.client-ip=52.101.83.69 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="V/8V8clm" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KITGEZnYSQCewc3dpVhdBkOk7ObKqxRifDGZT5hdambk8E+oL8NH3jteSkDG1TZZ5kf9Nkw6+VWwTwyfMunKwgLd6xv0J3/qqAnuw4Ei6sNq0X/MAMufiA8gBLSZtkwNwLOpd29dHf/JVNu3DYLjWkS3AkOxWWO2pR/KHDSAfkcvIvawjAPNm25SJVGEQgkpagdOmPaLDxS8h743+HsDIefTutIqyavhCI4tFb7GICVt8EzxSHIBFTzDTSKUWqGnoY/clYzBSmdHlqCFZg3hEpApakBXae4Cm1IHyBul2B+Sr1hKaDUpqT+Sti3kJrT7FjieIXGmjKXLJmVBFSKE+g== 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=VilCPOqvrHAB8poybLyzvTEZe5dVjB+03Hgs3JTVzI8QR4G33nXm4ECn6FF4HdYplQ7qKaZNMk7kXFO/is/XV88xJpnG9q9JzlJCAgyEvuzBzzakRbtC6iin3L6d3oqekSF6LsMN68VGP/LKHmUIRnYwKr0fkVUEbtoH57DThUzpS9YcqPzOT2UT5hiTVwcoyibH2bNevalmvf19pyYYkmqrr8b9Ym67FluZS1ZdrCe5SnWv4MTYYmit74ot0Nyi9wUzQREUrNswo9T4dc+ZW9Pk5Ym1VfjEnFdUdclLeoCIdTT++xj4y3EZrO3oFzrFzNB1PFgCB54rM9GRf9SAiQ== 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=V/8V8clmkMu4XnyqCzA0IJCHRipJ7HqYYh9G5HtX2j6StV9ygWlb2grALx0ssBFn98J1Hj/btJYmZK2XmEtBXGok7+4jAgqTdB2TGN4i7dfjDyvOaZLw1YHrpdfVW8okR87WIHzLHZVxYz199Q6wxAS5rGZsX/yRvdNBXAUvviFsQH+rtLtCo/brf+JFxuMApOzvQwiaPWdMJOBLGnsSOZ4NQJsbKHqWLWWmP6lVwsAD0ImgqGJxGf+NXRI2XpbFCCCW1Sv3fu7h58aUsNNmDHIfotr1LgOHEB/+ischtDE2gkwth/VRMvx8zggtmiDh7MvwvocFJjQkIKoXzj7s5A== 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 DB9PR04MB11533.eurprd04.prod.outlook.com (2603:10a6:10:5e2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.13; Fri, 31 Oct 2025 16:39:56 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9275.011; Fri, 31 Oct 2025 16:39:56 +0000 From: Frank Li Date: Fri, 31 Oct 2025 12:39:15 -0400 Subject: [PATCH v9 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: <20251031-i3c_ddr-v9-3-f1e523ebaf78@nxp.com> References: <20251031-i3c_ddr-v9-0-f1e523ebaf78@nxp.com> In-Reply-To: <20251031-i3c_ddr-v9-0-f1e523ebaf78@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=1761928780; l=3017; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=HH693NU8kzd+Iv3hWINyPBycptPq4xE1Q1XbUVwF0WQ=; b=E40IWE4gX2ImcipX64jzF3h2G8CADhcB6ZjBOBvbDKaZtXoo58e8q2wCsK4WqTyz61zQXtH+o qTTFfISLy20AZBNmecuG7unS9nFYbzVgz2AlxZWEOJWIzmg/ItQOXNd X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR02CA0015.namprd02.prod.outlook.com (2603:10b6:510:2d0::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_|DB9PR04MB11533:EE_ X-MS-Office365-Filtering-Correlation-Id: 25c0effb-26c8-4fcc-06bd-08de189c1fd0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|19092799006|52116014|7416014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?M1hwKy9nQzJYMXoweTlrOTdBcG5QUklJSVU2MW4rOHVUQzNjUjNVRDRHRXZX?= =?utf-8?B?SjUxUVJWeE5Ld2c1amdPQ0ZhOHZKU0VjRmN4SzBFcVk2R1lhWEJRYTQ2Ynl2?= =?utf-8?B?YVBwa0k5VDNWRTJTUGp5dkFmUkZrV2ZWWjk1TWlWRkFscytWMUgxYUZGMlhK?= =?utf-8?B?MlZKdE5IQ0M4L012MU9rRWN1LzAzeFNiWDJwdlF1S2JyTUVjbGpuUkRmdVg1?= =?utf-8?B?b1BieHB5M1IwR0dPazRDOHhYc1M2Wm9DMUJoeEY2ZEdQbDhNbmg0Nm9OZ2FH?= =?utf-8?B?bGFkUUVoVmFUbHpFWmlTTy91ZEh3VXZvTWd6aVZ6azY3Y0RTR0I0N1FoK05F?= =?utf-8?B?R1VaOXZTZmY3OFNhU0E2ampYR0NWVnNsZDlqdDZkMWtVRllNMnFmZjFyaVZ2?= =?utf-8?B?dEt0clZ1TmJGcnNXVkZDME1Pd25Qd0lGVmtlT1d5YlM1aGhvdUlDZDRFMXFt?= =?utf-8?B?UDEzRWsxcnNETUhJSjM4VmZFU0t6dHJtREx1RkhVKzJxOWZ4b2dNdzVpMmlv?= =?utf-8?B?ZU5yVGRJcFk0aXdra1VNUzRQK0xGUy90SFIwczBmQkJjUHQ0TGdxVHVNdGZJ?= =?utf-8?B?R29kOGdzUXhQUkZad2NQTHloNDNJcVlxbCtLU3dIY1dUbTVFSDZJSklyenVK?= =?utf-8?B?Y1JUak1wZ2RUMVc5SzREZHdCL1o3SW0xemUxYS91eTNDSTZORHhEbHp2a1lj?= =?utf-8?B?MTNwV1A4YjJvNHNmejRibVdNWUZEd1Q1bVlqb3pZK3BvMGV1cEFCMDU3U21W?= =?utf-8?B?bXV0M0xvVVphWjgxNUczTnp5akx1V2hybUlwYVhDZjJGVEFDN2VGeXNxSCtO?= =?utf-8?B?OUdiNVoyWWlPZWViMGFTa1lhUzh6VlFSUEVnQkptYmVsOVdnc1NIOXVidHlN?= =?utf-8?B?MHBPU2J6QXI0Umg0djl0Ry9xVkY0RHpmTVlCOGkwS0ttUGphWElldUc2RUx3?= =?utf-8?B?elRNc00rYmlxWnV1di80Z1NKZlB5aTJqVDBwL3VaQnZDNE5tNVd0Y2pJRnVr?= =?utf-8?B?cWFVVFNtWmZ0YVJjRTBPR3hOL25xYjRYRldDb0FpeG9ITTRsMHNHVFBWalNP?= =?utf-8?B?eFRLZ1pVYkJXbnYxN1B4ODJ2MU44VVlxRnlFcm9wc3JBU3pud01vRE1XWmpJ?= =?utf-8?B?RjgwREZwVllxc1dkb2EyNFZPN0pGZWtYZDdEQVQvNzJpd3d2c0NyOFp0dlRD?= =?utf-8?B?dTBna0FBaGk2UzZieTZ2TWRra0pCa1owTktwbER5V3ZTMGxDVVlOZmh6bVNx?= =?utf-8?B?RmlYY1RnYWxOZWYycy9mdGMxdDRxY3JLaGhJS0p2Zjd5M1R4QkZySHB6RllY?= =?utf-8?B?Q2Ixd1o3V2ZJUzF0UFVSSUVqSzg0VTAzZXA1Z001K2RZMFNvMGNwTkFsSUN1?= =?utf-8?B?Wnc1a1gyc084NHVBaHVtSGhjVktabTZDY2lqTkNya3BGRGJUa1JnZUVTMlp6?= =?utf-8?B?eFl3VVVZZjM1TGx0QkxLMVBPZmUxblUzNDVsK1pUVFRhK2NTQWJsMFliR3Ru?= =?utf-8?B?dHU1bm9Na3YxRVd5WGs3NWJHZ0NIM0dId3BtSThySVkrVjdQS1J2WEI4SnI0?= =?utf-8?B?eHYzM0pZRzdDUFE5OXdibFovMjQwMm5vbnBzdmRERDNwZ0Nwd05SNkRkdjdj?= =?utf-8?B?UVR3TDM3R3RkSDFCMnhUWDNzSGdzUFNoY0NkMStCUFhvemtTZndtZ0VlN0Rz?= =?utf-8?B?ZU04c0tnN2RwSWE1dUx2ejVRSGx2VGU0UDRPUmQrZFVXSjVqa1lrUnlYcUlu?= =?utf-8?B?aTJLM0prcGhyOTdEeVZteHdleEhweStYNWtudDNIekhiVkRvUWdZelFmc2Ux?= =?utf-8?B?K3p3ajNDcXdINVJkTlgyNGRBTjNOSmgxb1RmWWsrVzNKVjMxN29VTTF3SG5F?= =?utf-8?B?Z3pxQmpVNml6QVJBZy9tVjZIR01kNERsZWpSaC9XU0Z0K2RZRnMvWUlwQ25t?= =?utf-8?B?dWVQMTdyMXl2Yjg4Q1pidG9nVXgyNXBlcU5CanVMdmhoT3ZJanhaS1RFWTlO?= =?utf-8?B?S3g5bGwzd2E5TXY3ZmFGYXZFb2IxRGR4U1psaU1PM3ZpVGxxdVNSbzNhTXJU?= =?utf-8?Q?q1YL+D?= 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)(1800799024)(366016)(19092799006)(52116014)(7416014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bVBtdHFmdFRLQ1pmN3RoaTloSHIxY2UwRDJyNjl0THJFREFDV210UGluRTZt?= =?utf-8?B?TFppcWxCLzdlNlY0cThiM1Bid0FmdDIrejRMTFQ5cTg0OXRzcTBNR2JhajUy?= =?utf-8?B?UlRRRzFuTWJkVVdLcnpFUkppWlYzb3lncVY2OURnVnhqYW1tMTJDRktxajMz?= =?utf-8?B?ZVkrQnc4a2dTVzFKUG9tQzNWQ3pXdzlQOG12M0pGZUJlTWZsTTN4Nk5hcmVI?= =?utf-8?B?MTZkUEdneEJOb3JyVnRGdklEdnFtYU5pZ3lac3ZodWZlMi9mZWpjYlJWNWlG?= =?utf-8?B?SmtPMHd3WGw4SXJwQkVJeTNmdk9Bb25lcUZKUVVVL21sSFJTd0IzVXNVanBI?= =?utf-8?B?U2VxdFVTaHF0cGNEOUd5NXVNZGFNSGplazNpUWcwWmg1djZjMFdHVWlXdVVk?= =?utf-8?B?M0FqS1pkN0p6UEZzd01Kemo2VzZhUm1HaDFMdjlIbTVWckxGQ2xkUUtDUm5z?= =?utf-8?B?aVR1cHd4ckFQRDZ5T1VSTlEzVkgrcUQ2QkxsTVN2ellYWTlwU2k0MURRUW1R?= =?utf-8?B?a0xadWI0Q0pLVGNmUDZ1M0hzREk4MWQydVFSU002Z0xNVkVUdkZQTzZWYmVh?= =?utf-8?B?bm1vQTh3a1pocVNhckppdjgreUg0N2RaOFk3M014VVd1QUpzR3hSTWdvL1c4?= =?utf-8?B?em9uWlZkTStMVzdQbHNMM1I1eExleWZYYVI4QW0raEhpcVNvSE9hUjlJcHdr?= =?utf-8?B?ZTFuNXdCeW5TdDRkTGNmdGZwaXJ5ckdOa3J1REZhWjRMUTRVN3FRckJYeHZx?= =?utf-8?B?bXJneVR5WnhSYUtZTjl3L0wyZ0JWMDBNNEkyQnR3cm1HM3AxZ2JkR0IyQ2U4?= =?utf-8?B?WmxveHEzVFJ2dmE0RG5BejNkNTRNK1UwQXJnZW10OTVlaGFtY0hPVkY1eEg3?= =?utf-8?B?YS8xM0czKzZNN01kNTYwZkNzS0Z2eW5XQW5aNXhYT21yU1N6VU91Z1ZoZ0x5?= =?utf-8?B?d0dkUDNmRzdVVUdSWTFFWkRIVkg1dTFwa0tSa3AvTmxFSTFpbmlwM2VOOXk3?= =?utf-8?B?Y0Jyei9JQmpyMmVpN3pPTVhDenRvT2J0dGJJUy9BZ1pMcUs4d240U09QUnRh?= =?utf-8?B?VUJMQ0g2Y1dqdndDSjM2YlJoZ0tJTDMxcUgzR3MvR29pMFArT2loYkVGUGh3?= =?utf-8?B?UitYT1BEV3dQd2xJcDlVYmcxYnpjRDFOZEQwNGtmcFcyQXdaSGZuNmFrYnhL?= =?utf-8?B?S1VPdzZNR2hjTkNUNTBVOWY4Tkl0N1p4QzRMYllxSWJtbUg2Wnl6bkxMYzdz?= =?utf-8?B?VDlMTjFXbS94NFdseXkvK3lNb2NZTkJoQnNHR1BmdXJ2NW5SQ1g2djdlMHFx?= =?utf-8?B?bWlTc3k4RVRQd0VEMmVrUTI5c0plQ3pyNWJmRUIzTjliTEdseVdsRG9hUFVs?= =?utf-8?B?N01SVWMvVEVrWTM0RXd1THFSd0lLcy9NdTR5RXU1ZUhPL1U2eEhUK1ZpV0F0?= =?utf-8?B?UHVub0xQNHowMnJPUXBhZFJMeC9PcEwwY2dnVFZzOSsvSFJ5bDFnYUJrQWhB?= =?utf-8?B?aHRkT2oxMHBNRGNyUTh6bE9Ycm0vRk9HdDNhMzlDdWxLYkxKZENTMlZYUjYw?= =?utf-8?B?NDVNUDVNSUZDdkVha0ozaHdIQ09iWENvUzUxVVlNSWxsM1EvdTZFMmVXa3Yz?= =?utf-8?B?OEk5a0l4YWhDSG9ITTduTk1xZzZTTVQyTHR4Z2p4eW11NG1yMjRIZlBnVE9q?= =?utf-8?B?TDFYWXBpWHpjbjlIcUpLT0FqTHNQY2ZubnQ4TDZrckRWMU5CLzJWUVF3eTc5?= =?utf-8?B?R2FoNUVEbk0xNW9QZVBOcVhPdW41d1gwYzErYjlJemdHYW5VZ1U3OFF0NFJR?= =?utf-8?B?TmU0YzN3VFp5aWU4ZmhWUXpwM3lCb2NPZTBORm9OVXBCSGtPYUc0T0JzdlZk?= =?utf-8?B?VldDNHo3WGhjdlJTVm5BR2ZrNjZ2aVRKZ0lRa09Fa0F3K0hrUkxxd0d0bVgx?= =?utf-8?B?SWtFdDJGdldlaU5kblAwdVdtSk93KzROYXN3S2F6NHBuRlB1a3dZSVJFdVpx?= =?utf-8?B?eXB3bXBpWTV5Nk5WelN3VzB1dTNGd1M3NTNwZmRFODRVeVJZYkt3NUczNUtM?= =?utf-8?B?dnkyb2d1K2tFdHp1bDZYeDBycVI5dDRMWFdvbWNtT1VPM0NOMmpmak5JY3lY?= =?utf-8?Q?OO8o=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 25c0effb-26c8-4fcc-06bd-08de189c1fd0 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2025 16:39:56.2064 (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: 7N98a7TWpwJOtkCrxl1SyIzCxy+O4JymITWJG6uupDiInFSBc1MPqB80iL34Xuax+M4nP8YcB0l1jzUCjjj+ag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB11533 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 Tue Feb 10 00:24:15 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013069.outbound.protection.outlook.com [52.101.83.69]) (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 E52AA2F693D; Fri, 31 Oct 2025 16:40:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.69 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761928836; cv=fail; b=gQpQM9Cef45asiJy18X8B764TuIhlo/BliO/RIMUUOWkL5JIuN9F50qC3auyvOTgAnKhc/ditpaKU3OlfynMmmzIW9Dl0xAJmCJMKE1zgSXCTt+mtw0e2XIi67il26UayPRBOjW70xBllXnYaPpLVx8TztoK1x4lYU/k/DOl49c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761928836; c=relaxed/simple; bh=qTffBCdu8Mi22zZGCzL0uFmkILG2U6LbqIh7+jK2h4k=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=jc6Yp/igIxnR8uykb8V4OsaK2pjsQUXntAWKTGDmnw9luuKORaOHElHECqVgekHMl5wJOWxmbanQ2p/Ye7oOXSIa5IZxksH/MpNgF5busVpu11yQcqhJMgxvnalZ8KpLthv+s4eZXdNsmyYunaRrQGCBrHSgwwkEefRgfrj9uRI= 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=CErsIqtn; arc=fail smtp.client-ip=52.101.83.69 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="CErsIqtn" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WBamWBGqLHsH7L5dGerMyIrioRymnof1Jcbbe8yVFuo9sqokzcF+DbznyS+sKoBaPnJZoOSf+2xX3fTaizBbRi0cuNJQ1g0CJdL5JJT56GIauqwvXjNuKSb7ebTv1m2oQVR0QbHMXq4cBdBXkvprRw4IYFCNETCycwi/ZRnLPYQj3r14Pxezg/L8sCTeuNQNpwGaDptFQK5F+HL2RBkyBVDxIpq6ZETH6S2iX7/gzwjN5mh/MZt0R+hOFv5p1DUEOZdr26MOCVa2yaEc1dNDPUQqSbvhQf+S4/9Kv9PIlf7WA4WcXd2WHc9bObuAZcfOIQ2d3SIofPjwosuuTkUqgQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mizs44l9kM6gfuXuMhguTCgPiOcdxwSSLKRegAmEMuw=; b=Rb0Z0iQ1qq3BFegwmRxl/LMshgDY2TwUw859exTSeqz7in4dk90Liu50/8OXdRjNm2lx3xCzGxUpd8knXIfYPkiyoq1CCrCfn012Gl45+5qCnHuTGqDWmd3ict+N0c2mrd1wfTiDzYbueHAIhYUfxQLFKALCJYWHQ7+peAgastKaPYb0JuBjnK2WwHQBu85xs/QSyw59Qbio04633Dl3fhKoScpskxnkcRa6uRZWRHzO9e8jmzuAWCsnVOgJKYiuioDzQ7RSAT/bMQ6U/K+MZ50DrwTJTa7YErjzTK+YyfrjBk29Cqus6sPgaAmGP4wKUhxqcbFUkN2YvfyRXKTXlA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mizs44l9kM6gfuXuMhguTCgPiOcdxwSSLKRegAmEMuw=; b=CErsIqtnYr8PSF4LBV2ddTFzqS8nM/anKzVvFvXNcIPrxUeQWtZi15Ij14PHDrowddGBt2p7if4hmDvZMvcGBoi7NwTTqmsPADt3zi1uHNaFp+wQK7i6PBfy4KogqTv9s050o2CenEHQfaXf6pVuW/DwFvKc1qDchiDbXfMlDOXo5UlQxRdf53Uj7uGkJ4b6OEGmcy7sjx+oqoXB+tseeQWAhGm1zsMbzBKDSxcfCUgyqhCBjSfQHMswV6LFOAfRO6nEOjTTiwt6Sb4tFsqHPcVwkPKRioOmVm37ozMhqvkFonbOvbtQ4mfHHHDUtpoXykmXQ+EmikCj+8meAP7Tsg== 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 DB9PR04MB11533.eurprd04.prod.outlook.com (2603:10a6:10:5e2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.13; Fri, 31 Oct 2025 16:40:00 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9275.011; Fri, 31 Oct 2025 16:40:00 +0000 From: Frank Li Date: Fri, 31 Oct 2025 12:39:16 -0400 Subject: [PATCH v9 4/6] i3c: master: svc: Add basic HDR mode support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251031-i3c_ddr-v9-4-f1e523ebaf78@nxp.com> References: <20251031-i3c_ddr-v9-0-f1e523ebaf78@nxp.com> In-Reply-To: <20251031-i3c_ddr-v9-0-f1e523ebaf78@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=1761928780; l=9137; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=qTffBCdu8Mi22zZGCzL0uFmkILG2U6LbqIh7+jK2h4k=; b=TJV/JZoT/bJoII0g1HQapd+WtVHHxgxkqzVtDrEJs/dbkTcmgcXRB3KmUjI3ufNtKYWFzQvVk VdllsKSOjX5Db8GqhCpmWCLKxgIKEw/buwz2K5/I3/bXnhI06+YhDm+ X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR02CA0015.namprd02.prod.outlook.com (2603:10b6:510:2d0::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_|DB9PR04MB11533:EE_ X-MS-Office365-Filtering-Correlation-Id: fad75863-21da-4035-f6aa-08de189c2218 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|19092799006|52116014|7416014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cmxaUU1OQ1hKSnJiT1JFazgxdSsrUEYzODFxUWR0SmdqenhRQXpjTzFsSGNu?= =?utf-8?B?azRGaGR5U2VPZGgwOFNPUk5NN0JBdHRnd010VFRiTll3T0wvdzR4bEZsQk1v?= =?utf-8?B?dmN5eGJwWGEySkJDOXIrVHhRb1ZpcFpvOHJVUUw2MTdEOFNzQmU5eFpyYjVJ?= =?utf-8?B?eGMwbWhqV1oraFQ5cnZtNkJjOUlGaWYrV1ZaQ1lMdjRaMUs2MDROL1FtR1hP?= =?utf-8?B?bmtkMlh1UXZFNFUxZ1lBSDRFclBHNVhRVHlqODhYUmhPbG5sVGl0Rk5lQ3E3?= =?utf-8?B?aFpzYjE0Wlpidlh4ckxZZndsRFJRNHUvRmU3QWtBTENKNy9HckZOS1NBbEVm?= =?utf-8?B?MjZNVDR4R1FqM0NVV0tuU3dObzcvbStXRGpTU1Z4U0UzMlY2eVRPTElBNHFL?= =?utf-8?B?b3IyZ3hiaXpKOTNycFc0c3NDZjBTSlQ5QTQwdGEvbDN0eXVLQVE4OWJvM29I?= =?utf-8?B?alZLVTJvazczblhEbGREayt3VlpKeGxaZW5sT0Z1eVNCSmlZVVRwU1RnbTJu?= =?utf-8?B?N1c3Z3c2MEFjRnFpVDBqZzhpSmkrZnA3dkg3ZFVVSjFZOTZsQlFTWGUwcWNQ?= =?utf-8?B?bXhickdYMkU4Zjg1dU0xc1V5ZXVNS2IrZzd1UHlwaFNxdTJjYmdKSkdsbUZm?= =?utf-8?B?RU5zZGFIaDVUZ3NMYWN1N25meHVpYU9aeEZsTGE1aEF6RVM0QTdlcDJ1T2J6?= =?utf-8?B?YTl1b29aOWNTRU9sN2VhdnRiekJSeVJna0hSZGhZajlWNlRVekZnVDI5TDNC?= =?utf-8?B?endEUmtsVVFKQzhpNDJqMFdaNngxMDA0MURseEVaY3NPVXlQa3J0RnRxZzB1?= =?utf-8?B?ZElnN0t5NFhRVEVUUnNJSW1ybnRzTXhDQmg3Q2JRQmRtNlI0VjJPdjRZNHJ1?= =?utf-8?B?K2hNNGFNOEx4blFCMnhRd3pQMmRlU2VEdG9RN1hWcll1MHBLcUY3ZzNoMDVI?= =?utf-8?B?a0cvMHZDUTlrUWt0dE9aUkdLUmJwc0JXMnlOendhekxLRjVyRUpLZXVtU1Bz?= =?utf-8?B?WEVFWW9JalhUSnBwdUV4RndlblAzMUM4ZCtuYW5FZHorU3hWak1nQkwyTFFB?= =?utf-8?B?MURiZ1ptVS9iMHhkQ1VKclpOMjB2YzN2YnFOQjF5R2k3OU9SdHhCRXI0ZWhk?= =?utf-8?B?bERFZDY3cDhvbk1oaUNrL0VOMEVLSkR4bFlTQjNjY0pFeDRTd09qZVhzRlhS?= =?utf-8?B?TGR3QnM1cGUya2tBOUlwRDVvNm9oWGw0MUNVVE1BREtaYVpqeTJXSmNEeUxv?= =?utf-8?B?RHVGWnQxR1daMk9JMFlpYXE1cmJZL3VVUXlPbVgwZTNocjE2M0M2dGVERlhK?= =?utf-8?B?cExNdHJ3WURtd0x1OWlHWHgvRVJ3VWZWSnFFZ09PNEh3cEpjMjlJenFwNU1N?= =?utf-8?B?Z3l3RnMzT3l3Z2xDbUdaWCt3YXVhV3loaWV0Vy9nd1BMdUx3dEFzSCtrbkp2?= =?utf-8?B?MXI0THZRalQ4ZG5KNEJ5VkdpajlVbk1scFBTd0NwTWZ3RXVMbXkrTGpPWGth?= =?utf-8?B?WWZGWGxpSmhobHdER0pIQ0Y5SmNhL2xpNEMwdC9TazJndUE0Lys0bXdyZ0ha?= =?utf-8?B?RVY2aTNlL2tsdGFpOVpCYllwanNtUjdMR1JpZmNCdVN4bXZObzAvOEJTWFdE?= =?utf-8?B?RkszZGViTDZWY0ZkczlqVG1wNWJIM1Iwa25xMis1aVJOeVpKVXBDUGtoS3I2?= =?utf-8?B?YnVhVmFPL2pSWFlCTmo0MUphK0hCeTMvc1pVdHdyeWViZ1YrSEtIbDVhOXJH?= =?utf-8?B?bDJrZVVvNWo2UXo3UUYzUkdhT05RU0hlSEcvOEV3STlpdVJpQXQ5RXk2NVg5?= =?utf-8?B?TzN1RzJCc1lzR1lKWTN4MnMxMVRZVzk4UWZPOWlsSTh5bXhGS24zemxraDNJ?= =?utf-8?B?MjlKZVNDMWZhSjFGaDlVbm94Y0I1Q2FlWW5sbzA4bXkzbUFmY291c3EweGQ0?= =?utf-8?B?UnFTZjB4TkZHSFB5U1lQazBaVlBXZWRNZ254ak9iRXhOK3BNM3B2c1Q4TERH?= =?utf-8?B?dmJScDJRdFFHeHdGWWltd21kdHAwMmgvYklVb2JnOHNEOGtWREdSVVQvdDkr?= =?utf-8?Q?dYFmt5?= 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)(1800799024)(366016)(19092799006)(52116014)(7416014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Z09leHhDejk1YWl1N2gzYnVuVFJYaysydTdtSVVIVmJjbi9jQ2M5L1BpZ0Rz?= =?utf-8?B?RGFHdEp3SW42RDIzc3RpYXBvTnZueXREWkJzWndrNlM5c3ZSMzRIQllzMTk0?= =?utf-8?B?UVhiZHZObEU0TWR3OVpvLzY5ZDVPck1ueFVEZWV0eTJiNXJqNXpxT1RLMlRU?= =?utf-8?B?ZXZtbmNMcmxtckxVTUN1ek1JZ1VWTnVRNmtKVTVsZ2VtVncxK3ptS1JZanow?= =?utf-8?B?YUJMWE5KTzNEOG1CQmR1YWhYcEs3NzB6ajk5V2tBMzl1cXJEWE1ESGVFSmJi?= =?utf-8?B?aEdpYUJXaldvZndkMGxlZGI0WjFLYVRYUUxZK294UjN1OVY4M2thcjRocXBq?= =?utf-8?B?b29KSjMvd2t4WFQwYisyam52UTBWYWowQkhjV1A4MEFrNjY3eVJKSGZ0RzJI?= =?utf-8?B?aUhVemY2UktCaXh6SHVlQkdQbUhTVWRUWjVyL2RyR2pHLzhoODZKRVFzaXIw?= =?utf-8?B?QWgrZVY3SnRsREI5eklXNWFJa25qRjluN0puUjJEcmtzTm4zTmNxTDhQMW45?= =?utf-8?B?UFkwdzNzUitLK1BTVTk4V2JCeHVRSHFaZDhZVlJuaXNKdlNHRTF3TlVBc004?= =?utf-8?B?b1dWUTc5RTR2QnRJeFBkUWpNNklOYW5QOFNZUHM3U2VPck85Y3AvZ3RjQVZs?= =?utf-8?B?cmtwY3hhNWp1Umh2UjN6bDVXbDVVT2Yzc2dLTER2RWhFSXRyYm1tbHhMeDJV?= =?utf-8?B?ViswYVlCRDBpZnZJVkxndkRkK0N5N3daV29XMjh3WkZuVXJsSkdsTEtSVndC?= =?utf-8?B?SVVRcFFUQWxkZ1V0K3ZQSXlXSm5TL0R3bUU5REg4cGxwcUpybzFrczZ4YnQ2?= =?utf-8?B?eEkzb2FvZEFRYmZMNTNyV1RqLzR2YWRYUEM3OGNiOE94UmxyZ1dCZGluQzlh?= =?utf-8?B?UkYrczdWRUlhNHFBQTFMSlkrajZETjR5Vkl0eW0vN1UwbURReHdWYXZ6bXFr?= =?utf-8?B?TWFhckFyU2tyT1pndjJidnRmWEJvSCtVYlNhZWRVNnR1SUcrcGNPRlR5dzMv?= =?utf-8?B?cXVWTktJNTRKWEU1M2YzTndxdkdLTTZlUThDV0dmTkJCd2RRUHUxajVRektH?= =?utf-8?B?TUN2VGEybXlhN2d1ejZ4WjhuWjVlY1pnaUt0dDAwUFZPZ1EvdkhYOGJZQzRy?= =?utf-8?B?dFYxQVV5b24wRmJrUUdZYUVxdkozWEozQVBRcVJNU21KQ2FWNkpJbmNzeTZX?= =?utf-8?B?bWwyVEVrWnd4Q2Q5NzMwblo5a0IyRHRsZnd4WURoNHp2UGlGbVNKRk9VTmg1?= =?utf-8?B?QkdnLzUxb29iL01QRk9HZE9JOUluZTgwVllPT0lHOFRENEFIek5SVGdKSE1N?= =?utf-8?B?MmY3VTNUL253UUxkdW5HNDhsU2MxRXlLc1UzL3FlaUF2QmRXZ0U5MnV3VEgx?= =?utf-8?B?aTJBT1E4aE9ZNk5uYkdKdk9CSmcyV3dFZkpMQ04rdzU5Z0txQkZ0NmROYkNK?= =?utf-8?B?Um16KzRML0lZbzRTZWRvTDNCN21zVEhrOFYzbW5DZUZmdm9hNHgyWWNxaWM0?= =?utf-8?B?YXZtMHZGSHpDay9ITFlaUG1BRVc0Y09SZXRtUFEybzNEK0lyU2pVbUpZcENi?= =?utf-8?B?bEp4Z2Z5U2NtSThwa1R1bDM4V1pLUWZDeFh3dEZ4c2c5aHlSZi9GSk1QektU?= =?utf-8?B?ODlwVXFwd1V3TVFsaFhQL1hzY1k0VFNHdWw3UW55dkNqcUp3RThDNHlNRTFD?= =?utf-8?B?T0dBcE9wSG12NmtMT2F0aTFZUTkxVXZ2SlFmSVBmNWNzUUQzbmYvTTFWd292?= =?utf-8?B?YTFtU1hJZ09Nd2d4dUg3dkZsa2NYd1V2ZVdIYnNSaUovU3FlOE5KNXNCbGFZ?= =?utf-8?B?d2lkQ1FJSVpsRGRhaTRUclhEUTNYSDJ0eHZ3U0g3Q1RYVFprWWlJM0lldVdO?= =?utf-8?B?YXBsN01ub0c3SmVnVFFGWU5LY0JoK0ZlVTM4elB0N0VFemJKNk1DUE1XV1Q1?= =?utf-8?B?UUZ5azV2YjI5VDNibmRSamVUUXhnMlRNVFVZejZyQldVZTNZZXJGamw0djk5?= =?utf-8?B?ZXNiQXJjNUg1TUNQSnlNLzEvbmdFUUJDNi9IeWVrMU43cTZPMjBIUE1TTUJV?= =?utf-8?B?bUlLalFaeDZoRS85eXVWUFVsbEtQSStBMDJPbyt0S2Rta1R5V3FSOHZRZ2Jp?= =?utf-8?Q?k8EQ=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fad75863-21da-4035-f6aa-08de189c2218 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2025 16:40:00.2364 (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: f/bAsa5hxhe+S1wIhjSZs/6cpcXAwc8uxKgF/9khHNM25ZxPlsKzNeT9zNF+tJHh2Fr8dAj0WP9iDPqLZRfkzw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB11533 Add basic HDR mode support for the svs I3C master driver. Only support for private transfers and does not support sending CCC commands in HDR mode. Key differences: - HDR uses commands (0x00-0x7F for write, 0x80-0xFF for read) to distinguish transfer direction. - HDR read/write commands must be written to FIFO before issuing the I3C address command. The hardware automatically sends the standard CCC command to enter HDR mode. - HDR exit pattern must be sent instead of send a stop after transfer completion. - Read/write data size must be an even number. Co-developed-by: Carlos Song Signed-off-by: Carlos Song Signed-off-by: Frank Li --- change in v7: - add comment about why need check return value readl_poll_timeout() in svc_i3c_master_emit_force_exit() - add comment about why need udelay(1) - remove reg =3D 0; - chagne to use readl_poll_timeout_atomic(); - replace all i3c_priv_xfer with new i3c_xfer. change in v4 - use hdr_cap. change in v3 - rename to svc_cmd_is_read() - rename to i3c_mode_to_svc_type() - use local varible bool rnw to reduce change change in v2 - support HDR DDR write - rdterm unit is byte, not words (RM is wrong). --- drivers/i3c/master/svc-i3c-master.c | 96 ++++++++++++++++++++++++++++++++-= ---- 1 file changed, 83 insertions(+), 13 deletions(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i= 3c-master.c index 7c516e05d0a1a118479ee3d8ea8ae37ae19fea57..a732443caaf15a2f6e54de46bba= fdeb3fc9a9296 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -40,11 +40,13 @@ #define SVC_I3C_MCTRL_REQUEST_NONE 0 #define SVC_I3C_MCTRL_REQUEST_START_ADDR 1 #define SVC_I3C_MCTRL_REQUEST_STOP 2 +#define SVC_I3C_MCTRL_REQUEST_FORCE_EXIT 6 #define SVC_I3C_MCTRL_REQUEST_IBI_ACKNACK 3 #define SVC_I3C_MCTRL_REQUEST_PROC_DAA 4 #define SVC_I3C_MCTRL_REQUEST_AUTO_IBI 7 #define SVC_I3C_MCTRL_TYPE_I3C 0 #define SVC_I3C_MCTRL_TYPE_I2C BIT(4) +#define SVC_I3C_MCTRL_TYPE_DDR BIT(5) #define SVC_I3C_MCTRL_IBIRESP_AUTO 0 #define SVC_I3C_MCTRL_IBIRESP_ACK_WITHOUT_BYTE 0 #define SVC_I3C_MCTRL_IBIRESP_ACK_WITH_BYTE BIT(7) @@ -95,6 +97,7 @@ #define SVC_I3C_MINTMASKED 0x098 #define SVC_I3C_MERRWARN 0x09C #define SVC_I3C_MERRWARN_NACK BIT(2) +#define SVC_I3C_MERRWARN_CRC BIT(10) #define SVC_I3C_MERRWARN_TIMEOUT BIT(20) #define SVC_I3C_MDMACTRL 0x0A0 #define SVC_I3C_MDATACTRL 0x0AC @@ -174,7 +177,7 @@ struct svc_i3c_cmd { const void *out; unsigned int len; unsigned int actual_len; - struct i3c_priv_xfer *xfer; + struct i3c_xfer *xfer; bool continued; }; =20 @@ -389,7 +392,32 @@ svc_i3c_master_dev_from_addr(struct svc_i3c_master *ma= ster, =20 static bool svc_cmd_is_read(u32 rnw_cmd, u32 type) { - return rnw_cmd; + return (type =3D=3D SVC_I3C_MCTRL_TYPE_DDR) ? !!(rnw_cmd & 0x80) : rnw_cm= d; +} + +static void svc_i3c_master_emit_force_exit(struct svc_i3c_master *master) +{ + u32 reg; + + writel(SVC_I3C_MCTRL_REQUEST_FORCE_EXIT, master->regs + SVC_I3C_MCTRL); + + /* + * Not need check error here because it is never happen at hardware. IP + * just wait for few fclk cycle to complete DDR exit pattern. Even + * though fclk stop, timeout happen here, the whole data actually + * already finish transfer. The next command will be timeout because + * wrong hardware state. + */ + readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS, reg, + SVC_I3C_MSTATUS_MCTRLDONE(reg), 0, 1000); + + /* + * This delay is necessary after the emission of a stop, otherwise eg. + * repeating IBIs do not get detected. There is a note in the manual + * about it, stating that the stop condition might not be settled + * correctly if a start condition follows too rapidly. + */ + udelay(1); } =20 static void svc_i3c_master_emit_stop(struct svc_i3c_master *master) @@ -521,7 +549,7 @@ static void svc_i3c_master_ibi_isr(struct svc_i3c_maste= r *master) * cycle, leading to missed client IBI handlers. * * A typical scenario is when IBIWON occurs and bus arbitration is lost - * at svc_i3c_master_priv_xfers(). + * at svc_i3c_master_i3c_xfers(). * * Clear SVC_I3C_MINT_IBIWON before sending SVC_I3C_MCTRL_REQUEST_AUTO_IB= I. */ @@ -801,6 +829,8 @@ static int svc_i3c_master_bus_init(struct i3c_master_co= ntroller *m) =20 info.dyn_addr =3D ret; =20 + info.hdr_cap =3D I3C_CCC_HDR_MODE(I3C_HDR_DDR); + writel(SVC_MDYNADDR_VALID | SVC_MDYNADDR_ADDR(info.dyn_addr), master->regs + SVC_I3C_MDYNADDR); =20 @@ -1314,6 +1344,16 @@ static int svc_i3c_master_xfer(struct svc_i3c_master= *master, /* clean SVC_I3C_MINT_IBIWON w1c bits */ writel(SVC_I3C_MINT_IBIWON, master->regs + SVC_I3C_MSTATUS); =20 + if (xfer_type =3D=3D SVC_I3C_MCTRL_TYPE_DDR) { + /* DDR command need prefill into FIFO */ + writel(rnw_cmd, master->regs + SVC_I3C_MWDATAB); + if (!rnw) { + /* write data also need prefill into FIFO */ + ret =3D svc_i3c_master_write(master, out, xfer_len); + if (ret) + goto emit_stop; + } + } =20 while (retry--) { writel(SVC_I3C_MCTRL_REQUEST_START_ADDR | @@ -1407,7 +1447,7 @@ static int svc_i3c_master_xfer(struct svc_i3c_master = *master, =20 if (rnw) ret =3D svc_i3c_master_read(master, in, xfer_len); - else + else if (xfer_type !=3D SVC_I3C_MCTRL_TYPE_DDR) ret =3D svc_i3c_master_write(master, out, xfer_len); if (ret < 0) goto emit_stop; @@ -1420,10 +1460,19 @@ static int svc_i3c_master_xfer(struct svc_i3c_maste= r *master, if (ret) goto emit_stop; =20 + if (xfer_type =3D=3D SVC_I3C_MCTRL_TYPE_DDR && + (readl(master->regs + SVC_I3C_MERRWARN) & SVC_I3C_MERRWARN_CRC)) { + ret =3D -ENXIO; + goto emit_stop; + } + writel(SVC_I3C_MINT_COMPLETE, master->regs + SVC_I3C_MSTATUS); =20 if (!continued) { - svc_i3c_master_emit_stop(master); + if (xfer_type !=3D SVC_I3C_MCTRL_TYPE_DDR) + svc_i3c_master_emit_stop(master); + else + svc_i3c_master_emit_force_exit(master); =20 /* Wait idle if stop is sent. */ readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg, @@ -1433,7 +1482,11 @@ static int svc_i3c_master_xfer(struct svc_i3c_master= *master, return 0; =20 emit_stop: - svc_i3c_master_emit_stop(master); + if (xfer_type !=3D SVC_I3C_MCTRL_TYPE_DDR) + svc_i3c_master_emit_stop(master); + else + svc_i3c_master_emit_force_exit(master); + svc_i3c_master_clear_merrwarn(master); svc_i3c_master_flush_fifo(master); =20 @@ -1480,6 +1533,11 @@ static void svc_i3c_master_dequeue_xfer(struct svc_i= 3c_master *master, spin_unlock_irqrestore(&master->xferqueue.lock, flags); } =20 +static int i3c_mode_to_svc_type(enum i3c_xfer_mode mode) +{ + return (mode =3D=3D I3C_SDR) ? SVC_I3C_MCTRL_TYPE_I3C : SVC_I3C_MCTRL_TYP= E_DDR; +} + static void svc_i3c_master_start_xfer_locked(struct svc_i3c_master *master) { struct svc_i3c_xfer *xfer =3D master->xferqueue.cur; @@ -1669,9 +1727,8 @@ static int svc_i3c_master_send_ccc_cmd(struct i3c_mas= ter_controller *m, return ret; } =20 -static int svc_i3c_master_priv_xfers(struct i3c_dev_desc *dev, - struct i3c_priv_xfer *xfers, - int nxfers) +static int svc_i3c_master_i3c_xfers(struct i3c_dev_desc *dev, struct i3c_x= fer *xfers, + int nxfers, enum i3c_xfer_mode mode) { struct i3c_master_controller *m =3D i3c_dev_get_master(dev); struct svc_i3c_master *master =3D to_svc_i3c_master(m); @@ -1679,19 +1736,32 @@ static int svc_i3c_master_priv_xfers(struct i3c_dev= _desc *dev, struct svc_i3c_xfer *xfer; int ret, i; =20 + if (mode !=3D I3C_SDR) { + /* + * Only support data size less than FIFO SIZE when using DDR + * mode. First entry is cmd in FIFO, so actual available FIFO + * for data is SVC_I3C_FIFO_SIZE - 2 since DDR only supports + * even length. + */ + for (i =3D 0; i < nxfers; i++) + if (xfers[i].len > SVC_I3C_FIFO_SIZE - 2) + return -EINVAL; + } + xfer =3D svc_i3c_master_alloc_xfer(master, nxfers); if (!xfer) return -ENOMEM; =20 - xfer->type =3D SVC_I3C_MCTRL_TYPE_I3C; + xfer->type =3D i3c_mode_to_svc_type(mode); =20 for (i =3D 0; i < nxfers; i++) { + u32 rnw_cmd =3D (mode =3D=3D I3C_SDR) ? xfers[i].rnw : xfers[i].cmd; + bool rnw =3D svc_cmd_is_read(rnw_cmd, xfer->type); struct svc_i3c_cmd *cmd =3D &xfer->cmds[i]; - bool rnw =3D xfers[i].rnw; =20 cmd->xfer =3D &xfers[i]; cmd->addr =3D master->addrs[data->index]; - cmd->rnw =3D rnw; + cmd->rnw_cmd =3D rnw_cmd; cmd->in =3D rnw ? xfers[i].data.in : NULL; cmd->out =3D rnw ? NULL : xfers[i].data.out; cmd->len =3D xfers[i].len; @@ -1890,7 +1960,7 @@ static const struct i3c_master_controller_ops svc_i3c= _master_ops =3D { .do_daa =3D svc_i3c_master_do_daa, .supports_ccc_cmd =3D svc_i3c_master_supports_ccc_cmd, .send_ccc_cmd =3D svc_i3c_master_send_ccc_cmd, - .priv_xfers =3D svc_i3c_master_priv_xfers, + .i3c_xfers =3D svc_i3c_master_i3c_xfers, .i2c_xfers =3D svc_i3c_master_i2c_xfers, .request_ibi =3D svc_i3c_master_request_ibi, .free_ibi =3D svc_i3c_master_free_ibi, --=20 2.34.1 From nobody Tue Feb 10 00:24:15 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013069.outbound.protection.outlook.com [52.101.83.69]) (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 6ED2A2F7AAF; Fri, 31 Oct 2025 16:40:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.69 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761928844; cv=fail; b=MfGO5rpZb7viTKbIZLIOmg3zOQRps4oqj7yG1QU7Hp9QM0zWTsceGwpG9Yhw1uEAQA6r2B4uVegUAoZce092GekJwPmkXRWkwiGy9+VblhY23zpSjaqYfOgty9+nWJJL9ANG06gzrK0DWjS7hjEwFEkdNkEhdz+sm2LaaJuBAJ0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761928844; c=relaxed/simple; bh=IyO4gvDiMVkIrAv3wfTcayqnmwaqUsnJdgwnigkUdYg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=qUFouyXuJt65YAZHoHbjecm35jK5fP1HrUgoyUEHDbYxrvHoJ9yN2aLIZCvlRHoXfxEGGrzSA/EvN/SiLwfnqRyS4/hu8SS6DAENcwWhDx9PDmVroxqkJpFtIN/5nA7zgsDHPoVAtk82Yk4LCmCy1UD0fYnH951tufbMYvfDvWU= 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=n4YoWQiQ; arc=fail smtp.client-ip=52.101.83.69 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="n4YoWQiQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bpUCpjbS7ddUOxwEJMQchUw7TCKbVvERBk6qUyBK+RD3Y7zxpkTyDS1dU20Wq8pCxXUko9sQM4SZXVy0AaSi4w0G9j5lQMzqk3pkRPlLFfFSDJL+d7nj0VFf9dnfVbFDV8SQwFhlQWQukp4AF4oz5pmTzDTrpBUH0EVPKdrx7yf3iRVuQ5rN0PipdzNAFbe7rRDHy+Nc7qYFXI524DmNm4ZhlMEXvEdMwGoQr4ejNOWT5ErJbxrkjS+1FCsaQtR4p6tERsJzlM5l3ihWzCr5p2kwItoARJfpBLiHb45fP0MDyU/tyo+XjLPeiYgu5dusKMSXZPAXcoKfkIgWEqL1sg== 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=n3j+VmMEUR+VVcbf0DTW16S0qiyN4/SpiBo5g5ipogHavXwkn6QZ61epVlhVA0AjLv7kTNZ4+KiIlXjgqCmTEdmGhJSQbiIrc9Gmf7LwNlVeJu1vD+MHEmh8dd0/hIYDgs35OiiEFemuFIz1sqQ06psc/s/0P4exFyy2MjDBPKf5MNAA3KAJnbr1e3txxUpVSRR7TuslgLTCuq4Y8bcMGae9x+UzCtIjQDU+BNVlRBZiMQIbZu1T1PhmE3zxD/Dk1+OhWKrqWt6tzylT5QVEOJWXUstFvyHRdYFPFyhdtl58q63vx3gio91IR8KLbLkSinXKbbzuy4Z9nFbNn8or/Q== 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=n4YoWQiQMZPEnO0ZWzosYzdyLW9gOaqladWGG/KLVsgU/rGhNHOkpX0NxiLqr18YqVmGQeqkpWM4KwvkbOzkzWLD/lwFgewTI8qzuu/7xuf20Lws5d1GNXFve9wuTCRS20faBY/ka475uqyWg0UzxSOBSkbXmpWiuqw8VYD5rk/mf6oWi7S1mx6f7M+yZGBOd9hIAcX9OhQY8Xu1L/JgGo0Kt0szjY0qT5yg9Jj2De5OlkdwfsTiLMNRzxQN1jL/xag8OLqXpdPstapaT7lrPzMr0x87b456BNgkqkEpTsVLeBceKFB8c22q9yHL7euKh3SNH/fPr9JZmS+3uUibPw== 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 DB9PR04MB11533.eurprd04.prod.outlook.com (2603:10a6:10:5e2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.13; Fri, 31 Oct 2025 16:40:04 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9275.011; Fri, 31 Oct 2025 16:40:04 +0000 From: Frank Li Date: Fri, 31 Oct 2025 12:39:17 -0400 Subject: [PATCH v9 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: <20251031-i3c_ddr-v9-5-f1e523ebaf78@nxp.com> References: <20251031-i3c_ddr-v9-0-f1e523ebaf78@nxp.com> In-Reply-To: <20251031-i3c_ddr-v9-0-f1e523ebaf78@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=1761928780; l=1253; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=IyO4gvDiMVkIrAv3wfTcayqnmwaqUsnJdgwnigkUdYg=; b=5Lxd8QztLrTXC4wIVh0bbyTqTk2ASLNyApNagheRkxcChZqcTko41dlSL3tRi5anGp/Mj1Oad rg52mFjpeh4DWWY2YmRrxrXa564q3p9lnuM2QguncVFr3CRe3TerYQr X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR02CA0015.namprd02.prod.outlook.com (2603:10b6:510:2d0::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_|DB9PR04MB11533:EE_ X-MS-Office365-Filtering-Correlation-Id: 241eb36d-12d1-4ba4-ee2d-08de189c2490 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|19092799006|52116014|7416014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?blhjUFQyY3IyaUc2b3FhMmVId0ZYR1NSczlYeUlKMzAvWDlkSldyS2JTa016?= =?utf-8?B?N0FYMUhoNlBzOE91T1dJYU54SVgvaXIvbzBDdnJQY0tGRWNUWDBZSUI5ek1K?= =?utf-8?B?MUJXK2FwRWl5bTA1aWJwQkljZmEycjdrT0c0cWphaDhKQ2dkWHhhRm9NZEFI?= =?utf-8?B?UEM3M24rNHBLbkFRSWU3dmg2S0Q2azFmYll0bUxDbkxNeGR0dCszV1VRWllX?= =?utf-8?B?ZlRldVNPVnJiMXdTL0JTODZaeVp3dTA2ZjdwUXJmWStTN3VCdHZISWFidmFQ?= =?utf-8?B?OUFDM2g0L05SNFpRQWZIRTI3Yk9laTArLy9jd2JlcTc0cU01ODZydk1xRUZ3?= =?utf-8?B?Z1FmREpTTEx1aWZsdVZ2VWNuakFNL2dnOWo0dkdacURtR1FjMEJOekxvdjht?= =?utf-8?B?dlc4WWg1a3lWRytHTE9vbllDRnEzS2RqSU4ybnJSdFRqRjJSYTlnVFpVYnVX?= =?utf-8?B?UGY5elhRdlFFL0E1M1RyTGJvUnJXQ1Q2QUdyRUYzRkhNdEl4d25kMUZMWWM2?= =?utf-8?B?WkZrdzFBaGtMVG0ybXJRY3phWE5SMCtVRGpaVnB0WGIrSHI5VE9RMVcyTWlo?= =?utf-8?B?WkFDb2daSmVBTC94MDFvSWZBcW1CTVlkM3VTYWhoN01NV055MDhvZmFGVnkx?= =?utf-8?B?bk1pK2o1V1dOcDNudmIwR0wwL3FoUGNXd01XTDJDTG81bDkrenJ4Wkp0NnZT?= =?utf-8?B?Y2xrVGZHb1Z0QUlPaW0vaGNuUUs1WWtYcEw2bmNCLytaZzhwb1pvTkRaMEx1?= =?utf-8?B?NjBSRDc1NHR2elRSWjlUUUlJVFV0alBGc2Z4Z0VnS1ZqUlBnbTk3NVJaZ0xk?= =?utf-8?B?ZCs3MXpVRkFaOHJTNzRZbTdBaDI5WG5VL1NMN0hvYWdyOUYybEwzanE1WGR5?= =?utf-8?B?YSsvcFU4SWJ0QkhUdk9GY0V0UW5LYitTZ0c4UnZDZzArQkRyQWdjR3lHYUt0?= =?utf-8?B?WHRwa2dKdHd2bFpaK1NZRnoxaW9IdkNuVkNLR295VkdhVzlGc1BPYWlSQnZV?= =?utf-8?B?aElwSHV0T0kvL3VrVER4cTR5ZlBZanNVVTROMFRGVHN3R3llZUdsQmE3UWc5?= =?utf-8?B?WVhIV0FjOFlrdU5lOGt3ZXQrMzRWWW5ESVpRQndFcGIxbEcySWxuYTlsckpv?= =?utf-8?B?L0F0YzQ2U0lxNktVTnRLaFFkNk9qY1huWmI1aWtueTZnQlVqNE10ZHB1bDFy?= =?utf-8?B?SDVDVTRYbEJXRFFob2N4clRGTGszRW1qcHozcmN2MHh1alNrbE45NnNEKzRh?= =?utf-8?B?b29EZ0lWVnFSM0t5b0xwWHFsR0psM0MvU2VWWCszRnRLdFYxS2hkK3lZWUg5?= =?utf-8?B?aEJmdFhtZjZQcXNXOGxXcVVJSmhPNWFCTkZocGZsRWZHUGhPUkpETUM4UkVR?= =?utf-8?B?Zm4ydHNHR2xrZzYrcGwvclJTZVBHU0lTdFRubThsbmk4MUVqTWc4ZUZzcGkw?= =?utf-8?B?RDU0MFl2MkZNeHNQbkhWS3F1SlNOK3FZaEVxQlkrdEpzclB0KzdXOVdtMGVu?= =?utf-8?B?LzFQRlZEM0dWWER3R1FjLzdLNU45QmJZUExkSnhHZUpnYU0vYVF1TkFsK1hs?= =?utf-8?B?L3owZUdya3FPWHNNK2xRSmlVVERSU1JWMmo5cGUwdFYzZ1g3YVZlMUxZbCtS?= =?utf-8?B?aU5xNVdKZE9QdHlDc25sUzZpcXdDVnY3VWU4Vm1hU1cvMVRKSkpydmZ6d3Fs?= =?utf-8?B?NnE4Ky9xbnNkbm9jOWJHQk1RaWZyYUwvSVkxOGFiVVRlb0ovYnVweEQzbzlM?= =?utf-8?B?V21UWVpXM0Uxc0RYazJSdVZxOEx4eG1jZkkvc1dtdGVjc3ZvQ3UzY2tYeTB1?= =?utf-8?B?UE1YbFNNNDUyK0NZemVvem5PcWdBQ2dMVU5kQnZ0RmhTYTNOaUhVK1ZKV2tK?= =?utf-8?B?bFN3T0FEQyt5YTBOR2h2WlBpeGlOdjJrbUE3TXgrL0NIQndUempJUnhKMU5L?= =?utf-8?B?c3NvNDE3a3lJeGMwYXpUOFEvMkZMWjZvM25QYWxTQ25UMTYwZWU2S1hOVE5j?= =?utf-8?B?YWRxYjdSYXQ2QmJ5eVhhaWdWaTlLSlNnL1FRbFFCVU95b2YvSW1yZGozcDdI?= =?utf-8?Q?kOCMb7?= 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)(1800799024)(366016)(19092799006)(52116014)(7416014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?L1lRbUpjUlR2VWlBb0NtdlQxN2RHSUVlOWtldE9qcGxhOTZxUDJ6eUdWbEhx?= =?utf-8?B?M3htVGhpdHJ6M2RldmZydis2dnAyNXJ4b0R4dTdpemMreVFoNVF0VWRId2Jt?= =?utf-8?B?Vi9SaVF2OENKeE9WQlA0OVEwa0IrMlFvKzZXR3pWUlJzOVBKb1RuZVhUZFJl?= =?utf-8?B?VWppck1FOWx2TVB6bG1aVTNMOVl3bitybk1mVFIvcEtnNU4xRXMxVVg1bGwr?= =?utf-8?B?SWh1SFNMSlZXWnhWQmNNQW5QSHl0am1seUdLTnBZaXlremJhOTd4cWpaNy8r?= =?utf-8?B?cG1GbEx1RnByWEpSRTAvRmhDS2k0QUxwZHhadXRDUE9JenBjOW1qb1ZvUEFh?= =?utf-8?B?Wk9KZWRwUms4RXlrQkwxbGYycEd0MGFiekxWc09YaGN5TXIxeSsyWENOdGtx?= =?utf-8?B?Q0VyNzV1aURMa2ZnMlVZVEFldW1DdGFTWU82dFN0VXFTYm9FUjlLL1VQYW1C?= =?utf-8?B?ZTZYT2lVd2pHQVNJN0ZtNWxjNm9xdXJhMzI3ZWUzRTdpQ0F4NnZhL3BIT2Iw?= =?utf-8?B?R3p2QzllZzVJb05EZ2RkR3hFbjlDUXdqemZqSzVURVJqQ1dRUFFUQmpUYnJm?= =?utf-8?B?RWh6Z0k3cHNKQjBLUjU0VVBRRnozSzhLVEtOSmhlWUduS2dBMmNIdlMrczcw?= =?utf-8?B?cGRSZzczWnRsUCthaFFuNzNCVzF2b1JUZVhhQnVPY1haVFk1Z09JV1NjQ083?= =?utf-8?B?Ti9aNUNiRSsrV0xMNVV4WVlkZXRSRmdzamQ0SDEzcFZDLzdVSjRRSlVuQ1VW?= =?utf-8?B?OG55aFpVOW5uQk92Ums3UUFNNVNUbStPbGt3d0ZJSjBZQ1drR21vSE1WbWFB?= =?utf-8?B?Q0JvWGpqT0tPMHRxTXVLL25qOC82WVN3UGYxRnNZTU90NDl5dWFMM29JODhv?= =?utf-8?B?emFVUnBJSXlxQnlNKzBxeWkzSGhKU0NrKzJYdmJ1VkZtMVZaUVBiRmNiWGJj?= =?utf-8?B?eTVoaER0cElUR0Q3bWFaN3U3M0dyS2FrS2JmNFVpdlFLNmhDMGVkUzhjS2tZ?= =?utf-8?B?L2VLTHB3VjlTRWpjNDV5TERtQTNLa1JBeTlvb0s2SlBSUFNCRklqU25jcm5C?= =?utf-8?B?dlpDVHRBSmU3bCtjbnN6cUxnRklCQ0VYSnc5a2g2WVpwc1d6aE1ORWVDanRO?= =?utf-8?B?RmdBMFlOdHl3WGcvSTdGWForS3Q4V2w4c3hoY0t1c0hFOXZudWdCVGpYdndU?= =?utf-8?B?TTloUXE4QmtQdDJrSXBiOUxLUVBGd3kyVWNjUlNTLzZWYTArUDRaUjJKUEdY?= =?utf-8?B?WU43RXNSNHFHVG1lZ2NlUkJIZTNlSXpLMUI5SXdiWWZPcFVWKzdnY0oweG1J?= =?utf-8?B?YjBWazVwWjBLQnFwK3k1S3dCVk9mOGc1NmxYejY0Skl5dUtVOGl2UnVPUVdu?= =?utf-8?B?Y3V0dmJ3cDFUczBhdkg5TEI0YUd4OWp1eWJCaExrR2NRbmRWdFZndlFFTGZo?= =?utf-8?B?Y0xxWlEzMnVCK2dFak5uZEwydWppT0xDWHE5NVNlb2dQOVg2Z3BUMlZWMi9u?= =?utf-8?B?bDhnd2VmcXJmeWtpZjRpVEVUaHdVYWYxRW5ISWJVdU5sK2pPZlFVek8razcz?= =?utf-8?B?TEJJNFA4bWtOZWN1MGtBbDNrYXo1aDB3elFma1lJOVJTMUlxcytrU0JyUmp1?= =?utf-8?B?aDYxcjg4ZUxPZTVDaVFjVGVteDRiTktNY2kwMEMrcWs2Sm9DTHcyQkJWd0Y4?= =?utf-8?B?WnlQejdmSDFYanBqM3ZEL0pLQTN1aHFBamxBMFpYNmxjaDVaTkdBdUMzTm5E?= =?utf-8?B?b1hPNHBvNVRRZjRJUkpZRGxtcVAzbUh6L3l6STJRR3YxdlhDbUpsTEdoR1Fw?= =?utf-8?B?YmwrVmJxd0VBWlk5b2xyOWszR2wyeStDRlRrV29RYzR1NVB0Rkh4OEZZc0kr?= =?utf-8?B?TDRXdE9yMmtKSmcxVkFsRFdTZmhKemI2SjQrUWtTcVRhbWU4WDVsWE1qMUlu?= =?utf-8?B?NzI3aEMzeFFVR29RUWd5VExtZE9WQXRCTFFpcTBwZ0Vmd0FyTHU2eGFWbUlD?= =?utf-8?B?RlIwdGd2TjFBSFFJM05XTWZpNk83NkVsTy9jWFp4Sm8yajVwL1FnemFPTkVS?= =?utf-8?B?TnA2TXZWRlE5UFJ2dFdnQmdkc0J0VGhMRE03YkwydVNZTXA3TVlVWWx1UVlP?= =?utf-8?Q?kBhk=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 241eb36d-12d1-4ba4-ee2d-08de189c2490 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2025 16:40:04.2557 (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: VPueVkGZLFPhTdMABjxopBkaCagPE4/7eGtqdAebuHV2dd/zcp069EeNsqcymOsquCQXKt3KQ3M3iCw7KLcSpw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB11533 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 Tue Feb 10 00:24:15 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013069.outbound.protection.outlook.com [52.101.83.69]) (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 10A8C2F1FFE; Fri, 31 Oct 2025 16:40:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.69 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761928858; cv=fail; b=mD9peWiVyGVBx0lXJqsxv5xB71j2+QdD9tobOWcA2GOAqA5QA7i5HtNNNBHKMH5Wtf22TF8kEG3jdqbeRpOpkwENAyLYa7WzA2NpaELgjXsgR5PVO0t3xhMu85Fz1jh5+Smz5Vf9N2fXaVAIIVEKHaE19D+Ko7fet4/JxE+Az0M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761928858; c=relaxed/simple; bh=MtNipip3mm8U9aiWoQ1K+nU5RjAoMS9jieFnn0iQcOA=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=DiLLpfsl8nIPvdzj+c5HW/8VZWJHqw4RU9I/8KoKU51k8884xZ72xex90vGrOtcmx34XnPFhDQ195zc2ALtRr5HI/82E7am4VrRStviqLbv4/dgLmQh2HdnVoPrzjx9VNXuCSo3VM8dWdF/9tflkWRs0CexnBdFC/W9l9Msk0A0= 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=aITui5mu; arc=fail smtp.client-ip=52.101.83.69 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="aITui5mu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VaPGuzDKqlVVh9LZYrxl+nLbbyqADBQ3Xm30X8KkhRY0ZqkI/2YdVW0+ka7p43pquvz/eogve9a8r+z78Rb60mjomIuIij+OXaItk1S8LjmIb9wu0G3ToHKetflTrOiO3ZIxD5dI3LfVsxcIp11bv7sYEGyITWF3aex3up4j8k/U4lvQR7XPpRC9f0f+ZUQTRIR/g12nHPTCIpnzDw78yHDiWLkgm++rM3yVqVukWntGIFDpXVshy2Z7qS8LwH6O48ZPKVp18ndpwmNLa2P1a9WoY6KqQuSUTalqI5RVg9uLb+GeExl7mlZDRtgUOhaUn5PYzw0FeTZ7KYFB7X/yXA== 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=9QG7k7+vQnOqD/I5Svlzbt4gIIDu0jDiCTGT7+NgEPQ=; b=pLBzt5JEoIZTGQvdYAUiNs43ayh+te9axxMXD8MFAA0Tu1Dv12rzkLigFDFbB1U5DZzGFR6ZM7F2x8I86kOLJhJPZq9mcPhcAwm67UwOB110AaK4qaug7iH7KogryJaS3oqWaMA+Ub/VIG98v5aWHBhG/aYeLOcNS0DEcT5ohKwgrr84ft6CAygrVI9NCvR1zNm6CAKjf/mpgQONIaEE+ph6o3iwIXorAF3n/XYmbrkGSKXy2WFkA0BQ/+rGb4K18JuWH+hXFYwN5ns4azwl8HhrRWuP1ei832MvxEQkrSUx5pEHgmBTNtCIFapZHY+H4rKmcMfDIhwPHAz/1LLmqg== 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=9QG7k7+vQnOqD/I5Svlzbt4gIIDu0jDiCTGT7+NgEPQ=; b=aITui5musTubpP96w6mmbRYyW11l4HQ/3p4P9PsmVlit0OkQyxl89EOzjrrgU8G/rtxRznlwKCb3Q3K06Jw9p77Q44Ax85fUEs1vip+Cx5wG1JSWIltSLRRN0Ymr/4inPzkXRjXZuj9yWSzYhegab+GCHbsyf+jXAnw3GfnHBaCRAI8AeJMW0wr26jxWKrofiG4kySyUDYMTxHnbHSyaN+eepwdQ2uIjpQ4+VzyEUf8YbYZiYNxkmnVP5lvKYbiDqcZ30bJQ+emozhNxc3nHpUgmSP/QHInkCF+LzX86h+QozDJkDrKu97ec1YveZ5nA2TbroYpDASp+nSLuVDDbVg== 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 DB9PR04MB11533.eurprd04.prod.outlook.com (2603:10a6:10:5e2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.13; Fri, 31 Oct 2025 16:40:08 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9275.011; Fri, 31 Oct 2025 16:40:08 +0000 From: Frank Li Date: Fri, 31 Oct 2025 12:39:18 -0400 Subject: [PATCH v9 6/6] iio: magnetometer: Add mmc5633 sensor Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251031-i3c_ddr-v9-6-f1e523ebaf78@nxp.com> References: <20251031-i3c_ddr-v9-0-f1e523ebaf78@nxp.com> In-Reply-To: <20251031-i3c_ddr-v9-0-f1e523ebaf78@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=1761928780; l=19445; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=MtNipip3mm8U9aiWoQ1K+nU5RjAoMS9jieFnn0iQcOA=; b=eWfk1CoWVrSFTKVZvucvyYVxOhzw+crMIUQZi4md3jOJ9nyAUnrduP5xVGrJHJdCuCCN88yhg KSwRJ3N7CXYDEgCUCj1QjuLVdQ643PTeA81glA4T+knsihaduo+H+ZN X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR02CA0015.namprd02.prod.outlook.com (2603:10b6:510:2d0::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_|DB9PR04MB11533:EE_ X-MS-Office365-Filtering-Correlation-Id: 9debd1de-fb8b-42c9-e75e-08de189c270d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|19092799006|52116014|7416014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?MVlEcW5UdnIwZlFqUmdWOGRvMzJsQUtOWURQV1V6aUU3NmJ0YW1may82eW94?= =?utf-8?B?TXJjaXNWaXZYK3JsQ0hwMStBL056Ui9pRXJFeUxyc2UrVnpobHVtdGt0ZkVC?= =?utf-8?B?Z3lid0w5TzFzakpxdkNZTmNsYnBzbEUxZmMzK2swcmdnTjdsSlNlNE5XdGZO?= =?utf-8?B?TzRqVVhDS0RSSmgxUWRNMFBZRFp0NTIzMHo4VVVDeVNJWnBKd0hlRHo2ZHNs?= =?utf-8?B?c09DNWZYY0VrZnlOd2Y2MEc4eUloeHlTdEtFbXBqQWdtaGJZeDVzS1BJZ1k3?= =?utf-8?B?WmF4YW01QnZnYUYxMFptNkdUVFhaV3hIWGFRUFN2bEkwY1NnUC9PeS93SWN4?= =?utf-8?B?ZVptQTN5a1pQRzJlWjJVeGt2a2FKcmhCc3JxNVlyY3Fjc0I5bU1NQUNPUkZm?= =?utf-8?B?a2lMUTJ2M0FXRy9hVThVaXY3MXZRUWM1bUhjbFNQTFhGZzE2YithUzV3NUsv?= =?utf-8?B?WmFJZ25rbUZDWWtDWjJHVUcrcUdWQ01CSmMzM1E4VUIwMnYyWXM2WDdQNGRB?= =?utf-8?B?ZlF0ZFdJUFkxUUg4Yll3Y3VRd1pRZGZtRGF5ZlhGeDBLbk9wUVFDcWNmNlpQ?= =?utf-8?B?RUtJNS9PRTA0YUgzNUQ4MUFXWFR3U0k5UGJBejZHdFBSdE92Y3pBMzB5Z3N4?= =?utf-8?B?dWdiZlFiMnNwckxscXA5MnhBMkVjUlg4MklFanVmVzNQdVBGeDkwbkgvQU40?= =?utf-8?B?RURyZnNhRkZGVFlwQ1ZKK2I2RG9FRlJtdUR4VFpBQUVJRmpQd1JEY0FqaGVW?= =?utf-8?B?SU9BMWpKZjkwdzZabXJWd3BWaVJOUS9KVTBxc1BKZXJTeHh3b1ZIbCtjTmRR?= =?utf-8?B?Y1YyVHBnQkxLWGJ5R0NmL2ZtVDc5eU5wTExBY3lEektvSGc3RDM0N1JETGJL?= =?utf-8?B?QTNEREVWZGtudzdaci9TVUdYNVVVNXZpd3FBdVRFMzd6ZWc3T3lzWnkvamJL?= =?utf-8?B?NXVCeGljOVNWdjlkVXB1cDJKeEd5ZFR4UFNUU25JUmxpcHZZSCtuUkxORVNY?= =?utf-8?B?dU01UnMvREVlckNKT1Ywd2RIYjdmMThDODlxNHptRHZEYTVTbDd2Qk9icmV1?= =?utf-8?B?OEptb0JPMDRXS2hac0tJVlkxR3FCcW5ScDZrK3ErbWxQTDkxdWlxYmJoejVv?= =?utf-8?B?VFIzRTJpbDZ6a08wQi9weFhvK21LU3BmTUNLTmZPOVJPeTBDcVdvbU1rWW9W?= =?utf-8?B?Ylc1YmIrdWhFRUYzb3VTUWdrMjA4QWF1a1JWMnVxMkdhY3F5cThhMWQzbitB?= =?utf-8?B?aDhYb0pxWjAya2ZuRkhNYzZZK3ExMkZIbjMxVWVCNytiMzhWVDZKWGtMZmta?= =?utf-8?B?SDg4Ry9naEcxYVFPem9nWTN2eGY5a0hScWlsZ3QrUE5OVnZSQUxEeEpuYjcy?= =?utf-8?B?SHVJMUlZb0ozWHB1dG5FM2tISWNsZytvOVNrSDJoRzVUZjRVOVdnQlpoNy9k?= =?utf-8?B?ME5qV1Y4MVlXNkp0dHZUWTZNekhDeGpqb2loWDk4QjQ3R1c1SHA2Yk44UGIv?= =?utf-8?B?NnVRdytmNzhRamlRQmpldHNaSElVOExKdHlaUHdlL3hFZExZOTJ0SWFPenRu?= =?utf-8?B?SHlFdjlWd2lvdi9MSm0ya3RTV3VpbytURlp4UkkwMXNDZWNKcTBKZ3RYNEFZ?= =?utf-8?B?Rkp1dzdkRmJTZE1nNFEyTlk5MmZQendTZG81bndQZGlsRXBHS0Jnc3VMOEpF?= =?utf-8?B?TG01OVpsK0lJczU3elRzTzRaVWhEc2k3ZkQvKzJ4cUhRWVlvSElTUytQcW1Y?= =?utf-8?B?TTdsODZSWGJXZHZ5c25QSnU2V0EvaTZTNkRlRGFSSTBQdmZrTTQxNnRja0k5?= =?utf-8?B?NzUrOUdSK0h0bDNmWjY5dUVLdnV6VWQ1TG1RNXMxRzY1MVpRR1VtUElFZFBv?= =?utf-8?B?VG5WUE1Vd2tSbXhvQllSTmh6Y1o4WlQvWDk2Q1NLOUI0eXI5UUppZmlaTnph?= =?utf-8?B?RUxmMkpnd1l3Q0k5b2lHU2ZGNys0RjNJU1EwN0szTkRrM3BaTmM2M3hsa0Ro?= =?utf-8?B?Rk1YUUFYdHdsc1c4bnJtaFlQbWt2ZWovR1NNQzVEVWVQOHlWSGJDK2YzcjlZ?= =?utf-8?Q?wLricS?= 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)(1800799024)(366016)(19092799006)(52116014)(7416014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZHdWS0lCR1B3VzNMMDVhcHJycjArS3NJVGR5TzZvcDdDdkR5a1ZQdjBVd0VB?= =?utf-8?B?ZHpMV096RW1zRTIxSjd0QVN5ck1zbXBjVUVPR3FrU0k5RVV2dXJNQzBnZS96?= =?utf-8?B?Z3NQZUQ3YkgxSGx0cHVYaXZ3ckxTQ2ZZUDdXQzJySUYva0VWVFVsZ3pzdk8y?= =?utf-8?B?bEg2NEpDT2twbHQvcytQR3gwbUJuY1pPTVlJZmREbjJaalVrWjN1UjF1Y1Q0?= =?utf-8?B?TTdzNDdUdXI2WW9FTlNUMTVjVDZLWm1zVHFUbFZla0V4dG50aHVja1NPQTli?= =?utf-8?B?TDNKY2hZQ09KSEN6elQwU1NiU1BlbmFTQ3JpaUJzZFVrR2V1L3pMVGsyb3Fr?= =?utf-8?B?VDRUakxGN29oMWZQZTh4YVRmQmlMY1I5Y2NxZU50bTExRHN6N1dEOVhMSHpI?= =?utf-8?B?R3huWmdsL0t0OExKa3dWN0tFbTRaTzdqYWdza2I1RXN5OEVSUms3OHZLSDJJ?= =?utf-8?B?cHdEMzVvMWtyMnVpVzgzR3NVdzFUZVZFTEpRczhGZ2E4MStqVVRrNU5lMWhn?= =?utf-8?B?YWdoby8wSkdTMkxYNDJGcDh3WDkxdzBMV3pIK0JyeU51ZUkwK3l2RFVwTUFy?= =?utf-8?B?OEl4NEZLVzhobmNWN3FUaWZuejkzV0swNmUrMHkrMUlsUlplS2N3OHNxR0RC?= =?utf-8?B?UEtsN0NqaVFGbG94QWtzVThoWUs3SU1ndUpNVHFxU1V4L3lLQ3NCWENVUHN1?= =?utf-8?B?bThwZkhKd2d5SHJWcDA3YnU1UWdWOTlSdUluQ0R1VE9GWENidU11OXlaOCty?= =?utf-8?B?aGFTRzljOFpjM3oydCsrVFE2cThVTmNnUG9hU2xBMG9ia0RVMGR2MjJxUElS?= =?utf-8?B?ZzJHSlA4UjRwNHVNbDhnaUxWZ2dVc1c3c0dCdUZubW5pQmtodUU3NkFYN1lW?= =?utf-8?B?S3lrUGRneWg2SEx1aDA3dFYrdFBKVHhaNXF2QVphZDhXRmNQYlhhTWtnbm4w?= =?utf-8?B?U0UvcG55aGNwckMwd0VhQ0FNZHVFcHB2RjI2cXZOOVJHcys5ZFNnVkxPQmp2?= =?utf-8?B?KzZNZWx2cENBN0lMbm8yRGJDaHMwenhqUFJ3YVNFSWVBM0RnWVB0bzlBbys2?= =?utf-8?B?NnZkbEI0YkZaSnBkYUhObDBxNTk4Zmp6RndjdkkzSWVqMzhDTXMyaDlRZkZG?= =?utf-8?B?MlVleXZNTXBoTVJTWGRxY290VHNWcVZ3N1dZbENVcEhlZGNzQk9oQVoyRmRG?= =?utf-8?B?NjhPdTJiYzUxT0ZpWml3SnNQU01MK0kwcXRxcHRUU29TakN4VndtaklhUVps?= =?utf-8?B?S1hHWU9YYUZ4dkZ1QSsrNUpiTmhMc3c5c1BRcXlNeURWWHgzUWpBc1ljcjRN?= =?utf-8?B?ejFtaDJSN01URUN3STEvQUZtekVaaHJ4QjhHdDMzeldGcjJ1WDJ3ejZGMUxW?= =?utf-8?B?aEwvT0dYcG9LSTc4N1UvRk1JbFBSbjE4RnBHRzVuamRMSEYvTjg4ZThrcFpY?= =?utf-8?B?bVlIN1NxaWZqekFqa3J5ZFg2dDdEV3BQc05mRVo4R252OEYxT0JocVBXS2dM?= =?utf-8?B?amdsYmowd3JsN3JpK3ppZFRROXpVd2JqL1VCQjBheklJTnFieXhiT1pwUE4z?= =?utf-8?B?dmczSTl0aXJtZTFnaFp6MjlaWjFTWUhKdXpSM0RYVGN2TVVyZkg1RDlrcGdR?= =?utf-8?B?NnlJYUt5c2J6Vy9nN2R3ZlNIcTJodUVSVUJsZnk2YmFOR2U3bHp6TVBXTENo?= =?utf-8?B?dUhzSGc4UFdpK0ZVczd0cG5hZHNBUlRVMEhLR2Jndmh1TDV4cXpjNjhzKzhV?= =?utf-8?B?S1NzcjNsY3k1TVJBclhkMFZBTnpkTU1odkk5NG9PdjZySmU3UGxhR1FKZ09o?= =?utf-8?B?dVByTkdHdmVPS3BRdE9KdHI3enRyWm10S25iWDZONzZwSjM1WGQ4VjBIYzZO?= =?utf-8?B?MUd3WmNtM2M3Z1RpYU8wMDVqU0dNSkVHQjcyMTVkc1hiNWRJWFhpU3pmVGZr?= =?utf-8?B?UnkwckpOZk14YTVCTmZvaW1QckFoR0tCQmlTVXprb2EydVZGdnpMdFUzSzFl?= =?utf-8?B?SVFyVVJiTWFLdGhwaURIVTFURkxjNE1jc3RHdW5GSVE4YUx0Y3luN3FYZHpF?= =?utf-8?B?bDgyVlRUNHNCbzNFb0xsZ2tEYzRNbVF4K0Y2bWJhRktDWGcxWHV5VS92dVps?= =?utf-8?Q?nTME=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9debd1de-fb8b-42c9-e75e-08de189c270d X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2025 16:40:08.4015 (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: oTrxXP4F/HJo60rb84B7GKUftUVspVZIDaseuxBHCgh/MhMxXlIWpvOlua9YZ7337vrz75lZn8Wdp4VGVT58kg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB11533 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 --- 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 | 598 +++++++++++++++++++++++++++++++++= ++++ 3 files changed, 611 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..55b5bd52abe85cd120ce2249ad2= a2cfaad6a6a21 --- /dev/null +++ b/drivers/iio/magnetometer/mmc5633.c @@ -0,0 +1,598 @@ +// 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_XOUT_L 0x00 +#define MMC5633_REG_XOUT_H 0x01 +#define MMC5633_REG_YOUT_L 0x02 +#define MMC5633_REG_YOUT_H 0x03 +#define MMC5633_REG_ZOUT_L 0x04 +#define MMC5633_REG_ZOUT_H 0x05 +#define MMC5633_REG_XOUT_2 0x06 +#define MMC5633_REG_YOUT_2 0x07 +#define MMC5633_REG_ZOUT_2 0x08 +#define MMC5633_REG_TOUT 0x09 + +#define MMC5633_REG_STATUS1 0x18 +#define MMC5633_REG_STATUS0 0x19 +#define MMC5633_REG_CTRL0 0x1b +#define MMC5633_REG_CTRL1 0x1c +#define MMC5633_REG_CTRL2 0x1d + +#define MMC5633_REG_ID 0x39 + +#define MMC5633_STATUS1_MEAS_T_DONE_BIT BIT(7) +#define MMC5633_STATUS1_MEAS_M_DONE_BIT BIT(6) + +#define MMC5633_CTRL0_CMM_FREQ_EN BIT(7) +#define MMC5633_CTRL0_AUTO_ST_EN BIT(6) +#define MMC5633_CTRL0_AUTO_SR_EN BIT(5) +#define MMC5633_CTRL0_RESET BIT(4) +#define MMC5633_CTRL0_SET BIT(3) +#define MMC5633_CTRL0_MEAS_T BIT(1) +#define MMC5633_CTRL0_MEAS_M BIT(0) + +#define MMC5633_CTRL1_BW_MASK GENMASK(1, 0) + +#define MMC5633_WAIT_SET_RESET_US (1 * USEC_PER_MSEC) + +#define MMC5633_HDR_CTRL0_MEAS_M 0x01 +#define MMC5633_HDR_CTRL0_MEAS_T 0x03 +#define MMC5633_HDR_CTRL0_SET 0x05 +#define MMC5633_HDR_CTRL0_RESET 0x07 + +enum mmc5633_axis { + MMC5633_AXIS_X, + MMC5633_AXIS_Y, + MMC5633_AXIS_Z, + MMC5633_TEMPERATURE, +}; + +struct mmc5633_data { + struct i3c_device *i3cdev; + struct mutex mutex; /* protect to finish one whole measurement */ + struct regmap *regmap; +}; + +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_XOUT_L, buf, sz); +} + +/* X,Y,Z 3 channels, each channel has 3 byte and TEMP */ +#define MMC5633_ALL_SIZE (3 * 3 + 1) + +static int mmc5633_get_raw(struct mmc5633_data *data, int index, unsigned = char *buf, int *val) +{ + if (index =3D=3D MMC5633_TEMPERATURE) { + *val =3D buf[MMC5633_ALL_SIZE - 1]; + return 0; + } + /* + * X[19..12] X[11..4] Y[19..12] Y[11..4] Z[19..12] Z[11..4] X[3..0] Y[3..= 0] Z[3..0] + */ + *val =3D get_unaligned_be16(buf + 2 * index) << 4; + *val |=3D buf[index + 6] >> 4; + + return 0; +} + +static int mmc5633_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, int *val, + int *val2, long mask) +{ + struct mmc5633_data *data =3D iio_priv(indio_dev); + char buf[MMC5633_ALL_SIZE]; + unsigned int reg, i; + int ret; + + switch (mask) { + case IIO_CHAN_INFO_RAW: + scoped_guard(mutex, &data->mutex) { + ret =3D mmc5633_read_measurement(data, chan->address, buf, MMC5633_ALL_= SIZE); + if (ret < 0) + return ret; + } + + ret =3D mmc5633_get_raw(data, chan->address, buf, val); + if (ret < 0) + return ret; + return IIO_VAL_INT; + case IIO_CHAN_INFO_SCALE: + if (chan->type =3D=3D IIO_MAGN) { + *val =3D 0; + *val2 =3D 62500; + } else { + *val =3D 0; + *val2 =3D 800000000; /* 0.8C */ + } + return IIO_VAL_INT_PLUS_NANO; + case IIO_CHAN_INFO_OFFSET: + if (chan->type =3D=3D IIO_TEMP) { + *val =3D -75; + return IIO_VAL_INT; + } + return -EINVAL; + case IIO_CHAN_INFO_SAMP_FREQ: + scoped_guard(mutex, &data->mutex) { + ret =3D regmap_read(data->regmap, MMC5633_REG_CTRL1, ®); + if (ret < 0) + return ret; + } + + i =3D FIELD_GET(MMC5633_CTRL1_BW_MASK, reg); + if (i >=3D ARRAY_SIZE(mmc5633_samp_freq)) + return -EINVAL; + + *val =3D mmc5633_samp_freq[i][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_XOUT_L: + case MMC5633_REG_XOUT_H: + case MMC5633_REG_YOUT_L: + case MMC5633_REG_YOUT_H: + case MMC5633_REG_ZOUT_L: + case MMC5633_REG_ZOUT_H: + case MMC5633_REG_XOUT_2: + case MMC5633_REG_YOUT_2: + case MMC5633_REG_ZOUT_2: + case MMC5633_REG_TOUT: + case MMC5633_REG_STATUS1: + case MMC5633_REG_ID: + return true; + default: + return false; + } +} + +static bool mmc5633_is_volatile_reg(struct device *dev, unsigned int reg) +{ + switch (reg) { + case MMC5633_REG_CTRL0: + case MMC5633_REG_CTRL1: + return false; + default: + return true; + } +} + +static const struct reg_default mmc5633_reg_defaults[] =3D { + { MMC5633_REG_CTRL0, 0x00 }, + { MMC5633_REG_CTRL1, 0x00 }, +}; + +static const struct regmap_config mmc5633_regmap_config =3D { + .name =3D "mmc5633_regmap", + + .reg_bits =3D 8, + .val_bits =3D 8, + + .max_register =3D MMC5633_REG_ID, + .cache_type =3D REGCACHE_MAPLE, + + .writeable_reg =3D mmc5633_is_writeable_reg, + .readable_reg =3D mmc5633_is_readable_reg, + .volatile_reg =3D mmc5633_is_volatile_reg, + + .reg_defaults =3D mmc5633_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(mmc5633_reg_defaults), +}; + +static int mmc5633_common_probe(struct 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; + int ret; + + 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"); + + ret =3D regmap_attach_dev(dev, regmap, &mmc5633_regmap_config); + if (ret) + return ret; + + 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; + int ret; + + 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"); + + ret =3D regmap_attach_dev(dev, regmap, &mmc5633_regmap_config); + if (ret) + return ret; + + 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