Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.0/patches/2198484/?format=api
{ "id": 2198484, "url": "http://patchwork.ozlabs.org/api/1.0/patches/2198484/?format=api", "project": { "id": 42, "url": "http://patchwork.ozlabs.org/api/1.0/projects/42/?format=api", "name": "Linux GPIO development", "link_name": "linux-gpio", "list_id": "linux-gpio.vger.kernel.org", "list_email": "linux-gpio@vger.kernel.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260219-pinctrl-mux-v1-3-678d21637788@nxp.com>", "date": "2026-02-19T22:23:43", "name": "[3/5] pinctrl: add generic board-level pinctrl driver using mux framework", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "4faf6b854bfaae76e26213b7416ab6a8c3e11ef0", "submitter": { "id": 68011, "url": "http://patchwork.ozlabs.org/api/1.0/people/68011/?format=api", "name": "Frank Li", "email": "Frank.Li@nxp.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260219-pinctrl-mux-v1-3-678d21637788@nxp.com/mbox/", "series": [ { "id": 492735, "url": "http://patchwork.ozlabs.org/api/1.0/series/492735/?format=api", "date": "2026-02-19T22:23:40", "name": "pinctrl: Add generic pinctrl for board-level mux chips", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/492735/mbox/" } ], "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2198484/checks/", "tags": {}, "headers": { "Return-Path": "\n <linux-gpio+bounces-31917-incoming=patchwork.ozlabs.org@vger.kernel.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "linux-gpio@vger.kernel.org" ], "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256\n header.s=selector1 header.b=JtnG1QhK;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-gpio+bounces-31917-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)", "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=\"JtnG1QhK\"", "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.107.159.3", "smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com", "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=nxp.com", "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nxp.com;" ], "Received": [ "from tor.lore.kernel.org (tor.lore.kernel.org\n [IPv6:2600:3c04:e001:36c::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fH7GB5TBDz1xwg\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 20 Feb 2026 09:24:18 +1100 (AEDT)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id A26893022544\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 19 Feb 2026 22:24:07 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 4554D32C302;\n\tThu, 19 Feb 2026 22:24:07 +0000 (UTC)", "from OSPPR02CU001.outbound.protection.outlook.com\n (mail-norwayeastazon11013003.outbound.protection.outlook.com [40.107.159.3])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 70B0732BF2F;\n\tThu, 19 Feb 2026 22:24:05 +0000 (UTC)", "from PA4PR04MB9366.eurprd04.prod.outlook.com (2603:10a6:102:2a9::8)\n by FRWPR04MB11281.eurprd04.prod.outlook.com (2603:10a6:d10:19e::19) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Thu, 19 Feb\n 2026 22:24:03 +0000", "from PA4PR04MB9366.eurprd04.prod.outlook.com\n ([fe80::75e4:8143:ddbc:6588]) by PA4PR04MB9366.eurprd04.prod.outlook.com\n ([fe80::75e4:8143:ddbc:6588%6]) with mapi id 15.20.9632.010; Thu, 19 Feb 2026\n 22:24:03 +0000" ], "ARC-Seal": [ "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771539847; cv=fail;\n b=C/iBvlw3iy47xbzxUsp5iQKUBMg7kpGCIkITKCArH6j8lnKG3IHd6ktPxiujHGw+UN63w79pUZjZsbL4ajEkj85iRlmJmo2NUzDtQ3BiAvbzdQM+qmEIE+qkLV89YgWIlfW6lmdwQCyn55KoMGhsZxu63lfPCpVP0jaJbglFQEQ=", "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=iakUL359Ovrlgq3Gl02GPusPVMyEePD0TdaNh5J7VazFaF5b6zyITTcoGAAXG0vzelbrsTlYgIBoNSLrDMxvWAqKga5GIiSwpRTFXf3ny63Rzjy3clv+jrI8cBd1G7/An9+ARKvRweh2uCf+IlPkytKQzDQZZrHrks2BMQOJQMQJ0ideD6XMOAUf+KvofRhIbQWq4cn4FCIzFNzFv4LaQYqGXcX7i1gyCNVJDPyHyoQW6ozW0vtZfGGphRKLKuGyPx7zTinkip1lSnSzqxnSo+/qARlMc+kmS+g2qxd0T0sQtHjkj6zw6GKsCQ9B+k6V5f54jBLl5Y4XHXpm6jTJ/w==" ], "ARC-Message-Signature": [ "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771539847; c=relaxed/simple;\n\tbh=TiB2IM53CX9+LHV20atkxy9VBdVbc5izvWLpnwEd0vQ=;\n\th=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To:\n\t To:Cc:MIME-Version;\n b=loK3unLJlLHgGsUh7P044FbVuHCRemNelT6oGotw816+IRbAjsY6hlLLx72TODEKiL/4/W839MG8kS/kwtGxtE1RF/+2mBPcUhp2ht0/vigv0dkMaHsGRnlcYOBJB3OP3EyPXzOsPZlqP0vV9gmG1DS7jgmzPKX50pZXqEvYi9g=", "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=rnMeViOCrTMbPLpYSVWD9aL264//DNh+id7xvmX9rsM=;\n b=udjJtMQPOfXJbgNxoaD8tzxY19IeFGORLLVKKTAetwFpiCVhz0cHMqLOpGUUwBJgff+wj2iLCOHZLogsWZtfsIx7XHkcTAaB+4R6LN9wZI2+1X97jHRLZhYkTRUyZc8ZQrv16jBSeF3M0LuDA1HCurzj/rBgGau8zpiRPuVca2C8ECzmWeKpXcdYo7d0ZuxzXUtg1pe+sVjTCfETCw8CFx5dyOgRrBsuGD9zRjDx2c4TyVO+4pPcb80wWfOoJLiczTLJrtf8TMXZx2Ge1DAc/hceaMxulviPOsIRuM78ik4CCVmLhnyrJfaxvv6WMpS4a5r5jTRRaECurB9n6C89Nw==" ], "ARC-Authentication-Results": [ "i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com;\n spf=pass smtp.mailfrom=nxp.com;\n dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=JtnG1QhK; arc=fail smtp.client-ip=40.107.159.3", "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass\n header.d=nxp.com; arc=none" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=rnMeViOCrTMbPLpYSVWD9aL264//DNh+id7xvmX9rsM=;\n b=JtnG1QhKP3ocIGRaxbmV3aU0dyBWyJex5EAaZyNmfuJiVcgQJuCfs9XbLuMyIqjX6ZfIccZkNneipxsOtPMwCfpX3AwBrkscax7Nw/ssVNN/mghT5ASU+5KOVi9LjX37j39YBUaMMGbQshvO65QXYaH3fwb+jo4hETBvGuqDZz/2ka9PdHL/+i00Ky7poh+wawgWgT7d2p+6bfNLYKpwpiGqATZBYDjlh3+dicX47ddAmaHQET/Hcbl9R6alyEj6AmQeTssYacOKlbY5WuAjrEsEj+xwsCev90TGGNWl3K9iC5t5QTw5m3yQ1aRpPBdoeWAEZAg7yDGSI9khnuy2lA==", "From": "Frank Li <Frank.Li@nxp.com>", "Date": "Thu, 19 Feb 2026 17:23:43 -0500", "Subject": "[PATCH 3/5] pinctrl: add generic board-level pinctrl driver using\n mux framework", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "7bit", "Message-Id": "<20260219-pinctrl-mux-v1-3-678d21637788@nxp.com>", "References": "<20260219-pinctrl-mux-v1-0-678d21637788@nxp.com>", "In-Reply-To": "<20260219-pinctrl-mux-v1-0-678d21637788@nxp.com>", "To": "Peter Rosin <peda@axentia.se>, Linus Walleij <linusw@kernel.org>,\n Rob Herring <robh@kernel.org>, Krzysztof Kozlowski <krzk+dt@kernel.org>,\n Conor Dooley <conor+dt@kernel.org>,\n =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= <rafal@milecki.pl>,\n Sascha Hauer <s.hauer@pengutronix.de>,\n Pengutronix Kernel Team <kernel@pengutronix.de>,\n Fabio Estevam <festevam@gmail.com>", "Cc": "linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org,\n devicetree@vger.kernel.org, imx@lists.linux.dev,\n linux-arm-kernel@lists.infradead.org, Frank Li <Frank.Li@nxp.com>", "X-Mailer": "b4 0.14.2", "X-Developer-Signature": "v=1; a=ed25519-sha256; t=1771539829; l=8074;\n i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id;\n bh=TiB2IM53CX9+LHV20atkxy9VBdVbc5izvWLpnwEd0vQ=;\n b=Zoe0nu6ADpXQbtLI5d8rCs3cwzwXHjJp/Q79hB/nw3xkU/pDZdSyE+S2wwcmIckM7acHpBqgh\n gEGUzwJ8hRvCxFBhHo7rYjME72vk61Y7kk1tZxbZmLRXAUXaDqwc8gp", "X-Developer-Key": "i=Frank.Li@nxp.com; a=ed25519;\n pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q=", "X-ClientProxiedBy": "PH3PEPF0000409D.namprd05.prod.outlook.com\n (2603:10b6:518:1::50) To PA4PR04MB9366.eurprd04.prod.outlook.com\n (2603:10a6:102:2a9::8)", "Precedence": "bulk", "X-Mailing-List": "linux-gpio@vger.kernel.org", "List-Id": "<linux-gpio.vger.kernel.org>", "List-Subscribe": "<mailto:linux-gpio+subscribe@vger.kernel.org>", "List-Unsubscribe": "<mailto:linux-gpio+unsubscribe@vger.kernel.org>", "MIME-Version": "1.0", "X-MS-PublicTrafficType": "Email", "X-MS-TrafficTypeDiagnostic": "PA4PR04MB9366:EE_|FRWPR04MB11281:EE_", "X-MS-Office365-Filtering-Correlation-Id": "941ec195-e730-4716-5642-08de70059635", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|376014|52116014|7416014|366016|19092799006|1800799024|38350700014;", "X-Microsoft-Antispam-Message-Info": "=?utf-8?q?C8KssGK057nf0UTsT78KbQy23goi+vL?=\n\t=?utf-8?q?O34W2SgzkmM0oVomgyRIoQ4lO7C51s/jNkVTGMSa4u72NOk1sPMlFreyiKD4zKuTQ?=\n\t=?utf-8?q?3Yv7iuBO6qsY+s08RfWHSxhev4bg2gnqFn/aYuol46RKGr7+IMljinOG4rdAXJEzj?=\n\t=?utf-8?q?HNLqE7LZoFCswY6+4GxKk5ZgPdTu5v1UB76YIbX3UcX64LTns2akomtpMuNb40NcJ?=\n\t=?utf-8?q?5ANCX2DVNfveDFitcBU8tx0XI5wTFGOUmUD6r5lDlhVUPuOFRzUElRyEbW/gvOuvu?=\n\t=?utf-8?q?MP6pyK5K1dPUPvpWG5n8aCGG/8qSYK1RKW9jaXVHLYOQX+V0ZnRFE0oSs09zGyevy?=\n\t=?utf-8?q?LamQd6w7w4AZsU1SccMlXwqd1+kJGMztAaGHDSub4BMbB1vdyUzl5G9Iterm/KYvI?=\n\t=?utf-8?q?Oo4sCoY/+xjKY8blc2lerAk2BmKwDRziPdVcni3PePqFarbP3TNNga6pyx6iOjHA6?=\n\t=?utf-8?q?cJRHIx5ubI5MiUW27z7JnolqtbZDgx9NftkEg3r5B0UohOJaG8wCVtOA72IiUAkLE?=\n\t=?utf-8?q?Z8e/6yq+3Lb/PPm4lfkQJissCjj0zMEW5Z9NUzrzkK0bh/vBNAkQj40aYNIHQ59YL?=\n\t=?utf-8?q?q9Tsua39NmRM3NC8DeGsfDL/ood7CXep5o4UmRgk6qr6BJY7KUuFVGR9Xbylfrvj2?=\n\t=?utf-8?q?zaXnEmEgA3PRanXu2V6c+l/rwp4MY6yJA7kf9SuFoBt3CUC2H61W9LhRUR2RRpkbl?=\n\t=?utf-8?q?KZ0qaSgSRRIKtummLJq9laG3+pNKoaLNt9SDbczfEcea2rK/kpW5YrLFNdRMg74hL?=\n\t=?utf-8?q?xv1kn7a22W/vMRULIxERyro7diKR1pN3AATNcoy3lFzxtuUNCMyw4hB+tZf7gQdzf?=\n\t=?utf-8?q?JbkyBCTaWNXEDYHLVwTxXw63vlkiPrP4c6lYctUBPjTVS8i5L++EjLM7oACXo9QmA?=\n\t=?utf-8?q?FNFZHeyR5jjRnhBFY6qBAnn+XCqrwiwqgsTvmNkN0OPMVRN03y0/fUc1J92FrPKnZ?=\n\t=?utf-8?q?2X9fGkzavRpGBMfk7tb8TSgkj19GcnVrI+sk8C2tGE/vpZoYLfSvPETl3ToyyoO3m?=\n\t=?utf-8?q?KM19NGN4fbDZd/nCD7+7HAVgjHbs0Ff7C0VMBOcVpCpPYb9sJ0/XORaWy8w40B1Ge?=\n\t=?utf-8?q?B7ejgbzzSkV89yfYMaeQ0VrBLECcQK/La0pScwhY2+mtCR3LJNHcTL/c7XzfscQmr?=\n\t=?utf-8?q?i0sPBBF9wjPiYBx40WdOTU3FpehqPq1wVYA8B28GiKz2kKgKMkQCKRB9OhfnUsH3j?=\n\t=?utf-8?q?qLL3JDmjCCAhjxqjmEKsDwXVLHJO2Jsc/gkfoDl0gBopxAoxTST09Prc6H2ehDBR7?=\n\t=?utf-8?q?0mjmDOB3tLUD3S5WLmLQGTJnDYOB4yG7m9A/U1IoX9SIwyiaTTH+BjcVBn015+4yv?=\n\t=?utf-8?q?UIkOQZUVHvVfCzrbve7neTLSuI8MxSx1FzkAHvTojcHJjnhomgLjBblZxU2QbImWF?=\n\t=?utf-8?q?lSssZDXVCfdoYTu6thBLmSOmGegVHxJkx5tXiEDy1v4YLfsxJF5dxgn6oK/2nwZ1x?=\n\t=?utf-8?q?lJrLYHkef92lJM+W+Io5SbKYzkXu9i9hr80uMKQthz88FRCyBzOdIn8QgnCfvCIYe?=\n\t=?utf-8?q?6R7O90hDpsd4w4AIExV3YeP2+b1GlNugLTPJRoEfdGpGggkwJpOg=3D?=", "X-Forefront-Antispam-Report": "\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA4PR04MB9366.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(366016)(19092799006)(1800799024)(38350700014);DIR:OUT;SFP:1101;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?94+Fv7HqC9zYXWHha7lSIU5WgnPx?=\n\t=?utf-8?q?r061vmHEYtTFvb991GkClqFlpZKzcWbgy92n/5ANoNBpHHcgbz7L2Ij+nHpVfVAoF?=\n\t=?utf-8?q?dwiD4XF6xqcIo0wN9pgKGSN7Z+DpA9LI2odAbU1KT+j/WsR1EYvW+ev/Ay18UbwPY?=\n\t=?utf-8?q?rTUtxcSvkrm8HkkS2+uxJ9fsuZye68Z7ZVkbOYKW4E5YBQXVN9+zyPgAuDstvKbwk?=\n\t=?utf-8?q?Y8aRP/sxoKEWDvywOMBzQPdSG6gC1DGsnEv3MCgXFyXT+prwdkS5rwk9UnQxzvkRN?=\n\t=?utf-8?q?Zi/pbGJPGKCYSa0QfYbiOSpYMGn6crjrb4TtFGkqcHt/PAbJgAoZrWyOH0ivCVyfq?=\n\t=?utf-8?q?Rb/CGmlD+GYKKCHPhQ5Y/znvyh5T7wdFy1c3NFScgGvIER8GHGLkLyBJnt7bhRwF+?=\n\t=?utf-8?q?d+DAsQdfaRMLdCrBKA3hsVXYo2H3B/+N3AkFreYTZrKftq5uvqgnBUTqpDd49si7t?=\n\t=?utf-8?q?8/UIuo/JxggtaXgjb1/tf6CkGRUAxEZsLUMXcncVmiRscIWSiuYuRScJBVzuKVUM9?=\n\t=?utf-8?q?OsnpExPiTXd/53rpdfcStc/dQt7u387+NgTsFAnkbOvy4reGAU6HWVvpIfojeMd4p?=\n\t=?utf-8?q?VGH0qCFUqjx/tCy0N0Z1eagjRTzGCQjkWiFaEbT7s94Cbw9imhFblUSP0ohoSiB4z?=\n\t=?utf-8?q?gl6DWt+rOcr4IA75MM3uB0UOj+pmo/Dfr6yQBGS1X3oF4kPGx0AF3qxiCT3eyTF+g?=\n\t=?utf-8?q?PFmb2/qUy51rt1j5/Lhec6wLOAH8ZyDhHfzb5gEhYnumRwrGp/KhMCGDY0IZOziwT?=\n\t=?utf-8?q?Y4XW48oyLhu/Lk9i8dvMakVlEIOH5wX82IDPX/AIYvLTkfiOhkU+u0VmSzByi5wTP?=\n\t=?utf-8?q?5UnL/DA36SumNosEIe/bgthmuUitJEik3h0/oxI9wLegX2k4j576HAQHp7giUIDGt?=\n\t=?utf-8?q?cjkJkoLAhT4mfc9MqRYUhGx0dz3MfGDz02Dxatp9kIHbvmCTM2PyAfOgr1tX5bKHl?=\n\t=?utf-8?q?J9EA/J3PU1ndVw0V+i4ZnZFLfdNgXfftcn1ZTQDXp4UlhmIMdNabrO4Am6Pf6aJ/m?=\n\t=?utf-8?q?zhG2ovt7Rvo03Gb0Ib8S88PwE5kgskn6VOCq8KJsSWStNaFKEwFgd++Vx76xrXP1z?=\n\t=?utf-8?q?Ak4pU2p9VD5qgQ3wxS2fK1+v8ppkSBTsttjGJKCpm20X6IF85pYdcjmbm/BIVTHN3?=\n\t=?utf-8?q?uYtAB5+AFTwJpkDL8YFT/XH0uN15bjAmOmqTF100yonym0W1zs1HwD2YH5nkvaFbc?=\n\t=?utf-8?q?uCb7yKfjddsJ/qUCXsDrWloYjvrnI2VykI+YjUdbf27Ga5yLWGoyoKJk7wh5zu7Dq?=\n\t=?utf-8?q?hz3axO9CpFdN7CifPpHIQeTl50Y9kFgPhJV+awppASCfxuwuX9110Z/ryvKHIAe+c?=\n\t=?utf-8?q?jIqp1X/+v/rCFfv06ynoPV1waPk5ttUzcKz7RK1dPTdQcOKkfW8EloqZtDLs0VRlI?=\n\t=?utf-8?q?lIVf0356mmmbazZwHkyAlLDpstwS3u/7ugAnBrUvoQ2psrXIB3uPY+Q2iz55wgy+t?=\n\t=?utf-8?q?ZL3sqfNg4zlmWBNyzz2HiMym1GZc02jhJMUCaiahb70InXVNqdXY3hLOgFmrG9Pbe?=\n\t=?utf-8?q?Rw6o4WRCWQxs+gKS0gAsq9Dk62FpQwQ3ARwdDdWowNcWJ7mLxl3ycjczbwLdXPsf4?=\n\t=?utf-8?q?sl6kTg7V61TDlwgOqBIX4oeblJAr5pac19K32pFodt6hNGXKGTYR7oWiPz+W71y8S?=\n\t=?utf-8?q?quDGqAroo+?=", "X-OriginatorOrg": "nxp.com", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 941ec195-e730-4716-5642-08de70059635", "X-MS-Exchange-CrossTenant-AuthSource": "PA4PR04MB9366.eurprd04.prod.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "19 Feb 2026 22:24:03.1837\n (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": "\n 2S2tVyM7NXvvEn7X7x9MkKN5f5sXNGZluLuqZ5gmTUvzTFh8zbK0EkAH14kISektOCimVKb6LjSKye9xD6HG5Q==", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "FRWPR04MB11281" }, "content": "Many boards use on-board mux chips (often controlled by GPIOs from an I2C\nexpander) to switch shared signals between peripherals.\n\nAdd a generic pinctrl driver built on top of the mux framework to\ncentralize mux handling and avoid probe ordering issues. Keep board-level\nrouting out of individual drivers and supports boot-time only mux\nselection.\n\nEnsure correct probe ordering, especially when the GPIO expander is probed\nlater.\n\nSigned-off-by: Frank Li <Frank.Li@nxp.com>\n---\n drivers/pinctrl/Kconfig | 9 ++\n drivers/pinctrl/Makefile | 1 +\n drivers/pinctrl/pinctrl-generic-mux.c | 222 ++++++++++++++++++++++++++++++++++\n 3 files changed, 232 insertions(+)", "diff": "diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig\nindex afecd9407f5354f5b92223f8cd80d2f7a08f8e7d..0657eeeeb587fa5e68dc3c1e00be35608e243b80 100644\n--- a/drivers/pinctrl/Kconfig\n+++ b/drivers/pinctrl/Kconfig\n@@ -274,6 +274,15 @@ config PINCTRL_GEMINI\n \tselect GENERIC_PINCONF\n \tselect MFD_SYSCON\n \n+config PINCTRL_GENERIC_MUX\n+\ttristate \"Generic Pinctrl driver by using multiplexer\"\n+\tdepends on MULTIPLEXER\n+\tselect PINMUX\n+\tselect GENERIC_PINCONF\n+\thelp\n+ Generic pinctrl driver by MULTIPLEXER framework to control on\n+ board pin selection.\n+\n config PINCTRL_INGENIC\n \tbool \"Pinctrl driver for the Ingenic JZ47xx SoCs\"\n \tdefault MACH_INGENIC\ndiff --git a/drivers/pinctrl/Makefile b/drivers/pinctrl/Makefile\nindex f7d5d5f76d0c8becc0aa1d77c68b6ced924ea264..fcd1703440d24579636e8ddb6cbd83a0a982dfb7 100644\n--- a/drivers/pinctrl/Makefile\n+++ b/drivers/pinctrl/Makefile\n@@ -29,6 +29,7 @@ obj-$(CONFIG_PINCTRL_EQUILIBRIUM) += pinctrl-equilibrium.o\n obj-$(CONFIG_PINCTRL_EP93XX)\t+= pinctrl-ep93xx.o\n obj-$(CONFIG_PINCTRL_EYEQ5)\t+= pinctrl-eyeq5.o\n obj-$(CONFIG_PINCTRL_GEMINI)\t+= pinctrl-gemini.o\n+obj-$(CONFIG_PINCTRL_GENERIC_MUX) += pinctrl-generic-mux.o\n obj-$(CONFIG_PINCTRL_INGENIC)\t+= pinctrl-ingenic.o\n obj-$(CONFIG_PINCTRL_K210)\t+= pinctrl-k210.o\n obj-$(CONFIG_PINCTRL_K230)\t+= pinctrl-k230.o\ndiff --git a/drivers/pinctrl/pinctrl-generic-mux.c b/drivers/pinctrl/pinctrl-generic-mux.c\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..555dd2966e205e7f90a8bf8df3e46ed51d29d562\n--- /dev/null\n+++ b/drivers/pinctrl/pinctrl-generic-mux.c\n@@ -0,0 +1,222 @@\n+// SPDX-License-Identifier: GPL-2.0-only\n+/*\n+ * Generic Pin Control Driver for Board-Level Mux Chips\n+ * Copyright (C) 2026\n+ */\n+\n+#include <linux/cleanup.h>\n+#include <linux/module.h>\n+#include <linux/of.h>\n+#include <linux/mutex.h>\n+#include <linux/mux/consumer.h>\n+#include <linux/platform_device.h>\n+#include <linux/pinctrl/pinconf-generic.h>\n+#include <linux/pinctrl/pinctrl.h>\n+#include <linux/pinctrl/pinmux.h>\n+#include <linux/slab.h>\n+\n+#include \"core.h\"\n+#include \"pinmux.h\"\n+\n+struct mux_pin_function {\n+\tstruct mux_state *mux_state;\n+};\n+\n+struct mux_pinctrl {\n+\tstruct device *dev;\n+\tstruct pinctrl_dev *pctl;\n+\n+\t/* mutex protecting the lists */\n+\tstruct mutex lock;\n+\tint cur_select;\n+};\n+\n+static int\n+mux_pinmux_dt_node_to_map(struct pinctrl_dev *pctldev,\n+\t\t\t struct device_node *np_config,\n+\t\t\t struct pinctrl_map **map, unsigned int *num_maps)\n+{\n+\tstruct mux_pinctrl *mpctl = pinctrl_dev_get_drvdata(pctldev);\n+\tstruct mux_pin_function *function;\n+\tstruct device *dev = mpctl->dev;\n+\tconst char **pgnames;\n+\tint selector;\n+\tint group;\n+\tint ret;\n+\n+\t*map = devm_kcalloc(dev, 1, sizeof(**map), GFP_KERNEL);\n+\tif (!map)\n+\t\treturn -ENOMEM;\n+\n+\t*num_maps = 0;\n+\n+\tfunction = devm_kzalloc(dev, sizeof(*function), GFP_KERNEL);\n+\tif (!function) {\n+\t\tret = -ENOMEM;\n+\t\tgoto err_func;\n+\t}\n+\n+\tpgnames = devm_kzalloc(dev, sizeof(*pgnames), GFP_KERNEL);\n+\tif (!pgnames) {\n+\t\tret = -ENOMEM;\n+\t\tgoto err_pgnames;\n+\t}\n+\n+\tpgnames[0] = np_config->name;\n+\n+\tguard(mutex)(&mpctl->lock);\n+\n+\tselector = pinmux_generic_add_function(mpctl->pctl, np_config->name,\n+\t\t\t\t\t pgnames, 1, function);\n+\tif (selector < 0) {\n+\t\tret = selector;\n+\t\tgoto err_add_func;\n+\t}\n+\n+\tgroup = pinctrl_generic_add_group(mpctl->pctl, np_config->name, NULL, 0, mpctl);\n+\tif (group < 0) {\n+\t\tret = group;\n+\t\tgoto err_add_group;\n+\t}\n+\n+\tfunction->mux_state = devm_mux_state_get_from_np(pctldev->dev, NULL, np_config);\n+\tif (IS_ERR(function->mux_state)) {\n+\t\tret = PTR_ERR(function->mux_state);\n+\t\tgoto err_mux_state_get;\n+\t}\n+\n+\t(*map)->type = PIN_MAP_TYPE_MUX_GROUP;\n+\t(*map)->data.mux.group = np_config->name;\n+\t(*map)->data.mux.function = np_config->name;\n+\n+\t*num_maps = 1;\n+\n+\treturn 0;\n+\n+err_mux_state_get:\n+\tpinctrl_generic_remove_group(mpctl->pctl, group);\n+err_add_group:\n+\tpinmux_generic_remove_function(mpctl->pctl, selector);\n+err_add_func:\n+\tdevm_kfree(dev, pgnames);\n+err_pgnames:\n+\tdevm_kfree(dev, function);\n+err_func:\n+\tdevm_kfree(dev, *map);\n+\n+\treturn ret;\n+}\n+\n+static void\n+mux_pinmux_dt_free_map(struct pinctrl_dev *pctldev, struct pinctrl_map *map,\n+\t\t unsigned int num_maps)\n+{\n+\tstruct mux_pinctrl *mpctl = pinctrl_dev_get_drvdata(pctldev);\n+\n+\tdevm_kfree(mpctl->dev, map);\n+}\n+\n+static const struct pinctrl_ops mux_pinctrl_ops = {\n+\t.get_groups_count = pinctrl_generic_get_group_count,\n+\t.get_group_name = pinctrl_generic_get_group_name,\n+\t.get_group_pins = pinctrl_generic_get_group_pins,\n+\t.dt_node_to_map = mux_pinmux_dt_node_to_map,\n+\t.dt_free_map = mux_pinmux_dt_free_map,\n+};\n+\n+static int mux_pinmux_set_mux(struct pinctrl_dev *pctldev,\n+\t\t\t unsigned int func_selector,\n+\t\t\t unsigned int group_selector)\n+{\n+\tstruct mux_pinctrl *mpctl = pinctrl_dev_get_drvdata(pctldev);\n+\tconst struct function_desc *function;\n+\tstruct mux_pin_function *func;\n+\tint ret;\n+\n+\tguard(mutex)(&mpctl->lock);\n+\n+\tfunction = pinmux_generic_get_function(pctldev, func_selector);\n+\tfunc = function->data;\n+\n+\tif (mpctl->cur_select == func_selector)\n+\t\treturn 0;\n+\n+\tif (mpctl->cur_select >= 0 && mpctl->cur_select != func_selector)\n+\t\treturn -EINVAL;\n+\n+\tret = mux_state_select(func->mux_state);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tmpctl->cur_select = func_selector;\n+\n+\treturn 0;\n+}\n+\n+static const struct pinmux_ops mux_pinmux_ops = {\n+\t.get_functions_count = pinmux_generic_get_function_count,\n+\t.get_function_name = pinmux_generic_get_function_name,\n+\t.get_function_groups = pinmux_generic_get_function_groups,\n+\t.set_mux = mux_pinmux_set_mux,\n+};\n+\n+static int mux_pinctrl_probe(struct platform_device *pdev)\n+{\n+\tstruct device *dev = &pdev->dev;\n+\tstruct mux_pinctrl *mpctl;\n+\tstruct pinctrl_desc *pctl_desc;\n+\tint ret;\n+\n+\tmpctl = devm_kzalloc(dev, sizeof(*mpctl), GFP_KERNEL);\n+\tif (!mpctl)\n+\t\treturn -ENOMEM;\n+\n+\tmpctl->dev = dev;\n+\tmpctl->cur_select = -1;\n+\n+\tplatform_set_drvdata(pdev, mpctl);\n+\n+\tpctl_desc = devm_kzalloc(dev, sizeof(*pctl_desc), GFP_KERNEL);\n+\tif (!pctl_desc)\n+\t\treturn -ENOMEM;\n+\n+\tret = devm_mutex_init(dev, &mpctl->lock);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tpctl_desc->name = dev_name(dev);\n+\tpctl_desc->owner = THIS_MODULE;\n+\tpctl_desc->pctlops = &mux_pinctrl_ops;\n+\tpctl_desc->pmxops = &mux_pinmux_ops;\n+\n+\tret = devm_pinctrl_register_and_init(dev, pctl_desc, mpctl,\n+\t\t\t\t\t &mpctl->pctl);\n+\tif (ret)\n+\t\treturn dev_err_probe(dev, ret, \"Failed to register pinctrl.\\n\");\n+\n+\tret = pinctrl_enable(mpctl->pctl);\n+\tif (ret)\n+\t\treturn dev_err_probe(dev, ret, \"Failed to enable pinctrl.\\n\");\n+\n+\treturn 0;\n+}\n+\n+static const struct of_device_id mux_pinctrl_of_match[] = {\n+\t{ .compatible = \"pinctrl-multiplexer\" },\n+\t{ }\n+};\n+MODULE_DEVICE_TABLE(of, mux_pinctrl_of_match);\n+\n+static struct platform_driver mux_pinctrl_driver = {\n+\t.driver = {\n+\t\t.name = \"generic-pinctrl-mux\",\n+\t\t.of_match_table = mux_pinctrl_of_match,\n+\t},\n+\t.probe = mux_pinctrl_probe,\n+};\n+module_platform_driver(mux_pinctrl_driver);\n+\n+MODULE_AUTHOR(\"Frank Li <Frank.Li@nxp.com>\");\n+MODULE_DESCRIPTION(\"Generic Pin Control Driver for Board-Level Mux Chips\");\n+MODULE_LICENSE(\"GPL\");\n+\n", "prefixes": [ "3/5" ] }