get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2216179/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2216179,
    "url": "http://patchwork.ozlabs.org/api/patches/2216179/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260325-pinctrl-mux-v4-5-043c2c82e623@nxp.com/",
    "project": {
        "id": 42,
        "url": "http://patchwork.ozlabs.org/api/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": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260325-pinctrl-mux-v4-5-043c2c82e623@nxp.com>",
    "list_archive_url": null,
    "date": "2026-03-25T23:04:14",
    "name": "[v4,5/7] pinctrl: add generic board-level pinctrl driver using mux framework",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "0d7fb614f73221cf6fa9db50b151b8a5ff011c4d",
    "submitter": {
        "id": 68011,
        "url": "http://patchwork.ozlabs.org/api/people/68011/?format=api",
        "name": "Frank Li",
        "email": "Frank.Li@nxp.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260325-pinctrl-mux-v4-5-043c2c82e623@nxp.com/mbox/",
    "series": [
        {
            "id": 497519,
            "url": "http://patchwork.ozlabs.org/api/series/497519/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/list/?series=497519",
            "date": "2026-03-25T23:04:16",
            "name": "pinctrl: Add generic pinctrl for board-level mux chips",
            "version": 4,
            "mbox": "http://patchwork.ozlabs.org/series/497519/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2216179/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2216179/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-gpio+bounces-34180-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=bC97txeu;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-gpio+bounces-34180-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=\"bC97txeu\"",
            "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.83.34",
            "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 sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fh2gP5q5Rz1y1G\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 10:10:09 +1100 (AEDT)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 7FEE2311515E\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 23:04:52 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 4D700397E89;\n\tWed, 25 Mar 2026 23:04:52 +0000 (UTC)",
            "from GVXPR05CU001.outbound.protection.outlook.com\n (mail-swedencentralazon11013034.outbound.protection.outlook.com\n [52.101.83.34])\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 61BC6396B78;\n\tWed, 25 Mar 2026 23:04:50 +0000 (UTC)",
            "from DU0PR04MB9372.eurprd04.prod.outlook.com (2603:10a6:10:35b::7)\n by GV2PR04MB12140.eurprd04.prod.outlook.com (2603:10a6:150:30c::18) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.24; Wed, 25 Mar\n 2026 23:04:47 +0000",
            "from DU0PR04MB9372.eurprd04.prod.outlook.com\n ([fe80::4f6:1e57:c3b9:62b4]) by DU0PR04MB9372.eurprd04.prod.outlook.com\n ([fe80::4f6:1e57:c3b9:62b4%4]) with mapi id 15.20.9745.019; Wed, 25 Mar 2026\n 23:04:47 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774479892; cv=fail;\n b=l2Bv72PzNrB2HPuJtZ1YtgQSeC47a4h8+RdbpTCZd9/smg9eFBwwGb3vHvyGiFCxiheMuQTO7aAuon/WHWYrU/Oku98JoAb20F0rldcp4OhVM7/dljGFi0lop9o4ikSsBncIMTT4bEK2ujnS8QuFKbYg92N1/T4v+ZQ6w+PF38A=",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=T88bAum4bwRn4pBRxms+brwWlfqd5FW+n3ZSY+0vQjHrTrgqT51/+6Tki5C2uTjXbLrf5gp0ZqKxL3HW1HRMc99y60PB1p8PLtTwD+c+SGgrhgJFwF7oE5vwFMCquncK1/rffaN4levUHI/rR2lNIW1Pn9CN38dupbjATVb7x1aqbocgRDk3dCPVG13RTSevTV0Uc7/ji+JD7GVNdomfJoD/rI04IPc3V4DfVlzeGeIynqbkpr0Q6H5eKzkRhbmUlTgJu73P9+0lj7U3ojgkbodPUaWgy19ATiLgPDWczUUyPNzADovkTZ8urxshKKJfYhw5zSJpeiYePxES5wuL3A=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774479892; c=relaxed/simple;\n\tbh=xqBJiEfvOH7Nl2xCbI4j+xB91+y2euFq8Sn6ZgSOdbg=;\n\th=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To:\n\t To:Cc:MIME-Version;\n b=eqzxTACP9mQ/iWYgCQoa5OSM+om/rX5+uqcBp6vEUca9rRbQ/WmOU1v+4NryNx5PEAV/DjMted930aogPOG8WBRr7GU0QEzb22XzKOZ7zLghaVRoJoc3xcVzPWz/ZicsLUGkx7JJsXEQ3Uo5KbMx5paYy+2SmcETqwlvnY6Ba9Y=",
            "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=PMucjSSuJLQ3mLwi6d1B/lBooHKCgoMCMRWNm3Wh8Zs=;\n b=O+oUulbSDXJhOjld/3fL6XIvtrQRtJ/DzAsNedc9GkFUImCc/VjjOjhBArkQgZ2L8dIvIklueaTfcKbCPaTnsbRit0zu3xA71bSe9W0LkAX31TwTq/Q0ebCIzf4lBBiiw3qokMBzXHnfze1pDp9agGHZ67FShLdg8RuE0/ERRJPLWYQzzYVv6rhYlGKtHOJL3pFj40riWIkMfzJKH6qk3Bya4wBq9LCGGiRQ6Db5/CwhDiQXxVycD3ZqQBPgfSW/UfyjQC31Twj7IAazIsy1DY1L1vQpKAtsUhpVUWgXZfG7dieCCXTlpq/KH82OcMR71NNYyAi6VoiHEj83uyzZ1Q=="
        ],
        "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=bC97txeu; arc=fail smtp.client-ip=52.101.83.34",
            "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=PMucjSSuJLQ3mLwi6d1B/lBooHKCgoMCMRWNm3Wh8Zs=;\n b=bC97txeuHQPJRegoJ5J959LShjw/F8WQJ8f3XApNHNeb/dFnsaBU1ox8pp4kYlufbtEJjyLJo0jBBmT2YYdF7Wzl4LvTUhogPM/ek+U6+tvyp9YdY9aLM0ErU8BW4UpjU/tjW4Er7ZXE94mbhKxkklbRENWH2nekL2SFeS6kwGoyfRhOZgQjqEb2zRC42qxq47c7sVeaheJmfGqR6qOhgK16UogdlN/vZinZ+TdxZ8BQfXRGDrCfyLxmizOO9wlYwL24JeJ/Q7947zyL7GWg1mLSHsQSL9aYr5jrd4l24oiClBGzxsBl79eJYdWIF5O+b3gAXrSbr0dXuEDXxHLVlg==",
        "From": "Frank Li <Frank.Li@nxp.com>",
        "Date": "Wed, 25 Mar 2026 19:04:14 -0400",
        "Subject": "[PATCH v4 5/7] pinctrl: add generic board-level pinctrl driver\n using mux framework",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "Message-Id": "<20260325-pinctrl-mux-v4-5-043c2c82e623@nxp.com>",
        "References": "<20260325-pinctrl-mux-v4-0-043c2c82e623@nxp.com>",
        "In-Reply-To": "<20260325-pinctrl-mux-v4-0-043c2c82e623@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, Haibo Chen <haibo.chen@nxp.com>,\n Frank Li <Frank.Li@nxp.com>",
        "X-Mailer": "b4 0.14.2",
        "X-Developer-Signature": "v=1; a=ed25519-sha256; t=1774479864; l=7998;\n i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id;\n bh=xqBJiEfvOH7Nl2xCbI4j+xB91+y2euFq8Sn6ZgSOdbg=;\n b=nPZkXfOA1P0baip/c2np4LQmAiQJuqHBEUphDHkFRpH8SK71V8+eL8ZpQCfX/C3fU+7KGEWRt\n xkVGE6l3WOeCHoFaKo+H9y8PrLL3ASMr1Vpfq+Z21CrEDhHh3HMCbot",
        "X-Developer-Key": "i=Frank.Li@nxp.com; a=ed25519;\n pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q=",
        "X-ClientProxiedBy": "SJ0PR03CA0161.namprd03.prod.outlook.com\n (2603:10b6:a03:338::16) To DU0PR04MB9372.eurprd04.prod.outlook.com\n (2603:10a6:10:35b::7)",
        "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": "DU0PR04MB9372:EE_|GV2PR04MB12140:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "1cbd3c9d-37a1-432f-b771-08de8ac2e90f",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|376014|19092799006|366016|52116014|7416014|1800799024|18002099003|56012099003|22082099003|38350700014;",
        "X-Microsoft-Antispam-Message-Info": "\n\tZsV7WoC6us0toeNjdKg81mdlEeomYcSfsTasQ2nKgaOm8X7QYbTZalOtFzXZgxdvpaBz6EkX11nKDLA5tmQJ2FXAKp0sqHvvTTywXvmeufmK59Xj6Xng7i3Cby+PPZsM+1xlVAx/2Zxe4DxcI3jJ8RgeGz//0a2Cf18Tk0Ez9E0TPAGp41jKczTChQNbbTxSxFBbjFZyDqhQaZ6xIpsraO841bx1kJv5NmSBxXUZcX5mdoiptnYPGHwamC81qjqTBE2tpZLYCrXD/ster5jEcM56uP4wVKJAKJfDaeWHRAdXf1/LppZhytUm0BV4zsdJo+gOxkIdDPrzIaLm/ZPLGjwaM6D2SV6FidpU0X9iSu1BVBM/vcoGZcw2iwGWylb7sAhmeJaqw+M2F3Tx2wtapZCpgk2UDyUB7ZngQ5eh3rPeSxhZBt8smrKvmHrha4Y4u/Rn0EMjy6arM8L8jXwMoEPL/OhPfsvRKrevtrV9N2MEYP2xoR7z0rDajaX+pSWrvBg2nRVetLy+76rsybOz9btgUp4WbW2VsfEray0l0fDYY8Zs9ESrNVdghGDXTWTJAoRHvJhJBeKQuf0fjheqsNFSDhI4hQZGoHqFfA/EeBRR1QYQgWkwJherxYq2HPz6ZKjoar6MLEvqKzq9UauQMvEvWJUnqOLzLg2dvygOXYiTt5hlgfjjABAv7gNZJiBIi6GhTWV6y3vev+4SVLUGKJmNSa3A0GC00FWBwfOye8eiSEUZNKER4oJYJWzT9MdS1QhQMiWFdmI0PcYZcyrI3ytbxrXydHp2EoPA7Adg0lM=",
        "X-Forefront-Antispam-Report": "\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU0PR04MB9372.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(19092799006)(366016)(52116014)(7416014)(1800799024)(18002099003)(56012099003)(22082099003)(38350700014);DIR:OUT;SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?iWq0xQJ4BteKkjw8xYGAugHC62ka?=\n\t=?utf-8?q?CYF2p1tptIVSq/cVx5FZDvn79WuaaT48VrpAgfYkZlYgE+feZWBPSwL7iuxSYMids?=\n\t=?utf-8?q?9Ouf8GV/MdTLy4oArA1O+QDFnUEkzEiZlQWPf8q5s6oEdW90enzD8jOvGEDAHr8u4?=\n\t=?utf-8?q?+/9AWVOFY5jyNHqToaNruiU9ZoisYursAiM/vCP6z1lQlNwspColu8Cu81JIyQBtR?=\n\t=?utf-8?q?KTx0Xuky0cyX3hOioCMaBib+n0tWKBGhVYsYnfq9TwrxAIy2HFsG7Av8b+knR+W7I?=\n\t=?utf-8?q?VOTlBUU3On5SEVno1uG3QEYl623F5Yhg7lC6HS2UXkOle/tO5esiNq7gCzP1OYpey?=\n\t=?utf-8?q?LZec3zJfZSkc7Fb3+iQ9IEp/WF4NcyNJMOdC18ND75IqaZCzwbXuJ8a/Z0mVxs9iA?=\n\t=?utf-8?q?x2/66E7VftU9dauUAH/0HBscLlfmhIQJF30O46dyslW9lKwcwqi3hgPCkZ7duvrQI?=\n\t=?utf-8?q?ZKq2tAkZqb/dCFMbSGRAIBzU5gW48EhmZ7kO2TFeqzUT6G0cJFiy0/ycV55kNcMMc?=\n\t=?utf-8?q?dJKLvD1sMzDGh+yIedi2vDrLz/xCy7zCAay8dx3XwmwhYEBbuggNlzTaHVUNuKEjH?=\n\t=?utf-8?q?JF6bM7bTBqB3U+VXmu7ZrSeAjY2w7paoOwKJ52tDTWdmx/XhC5ew+0G39KqMOOBCf?=\n\t=?utf-8?q?06iCkdKYSRNvCLZLlYNok32feZ/1/wYv3w1pvexCtP7iatvW/hSBPJp15hECWIjdE?=\n\t=?utf-8?q?RBWa/FjIrmFtS0KI13A76Sfg3itjJACyub87GMWnISgyXFgADimQ/rv95viMsaxR0?=\n\t=?utf-8?q?YlpMqPyrw1O3+vb7totHuj+x8W6urdfxsFxukbVmxcmFu5qhYKf1axIRLKzyfZzzF?=\n\t=?utf-8?q?LL0ZlogRl+f68IEbUds43wz8EAMwXQHdSOwGmHM5Kk+raPDfBihBXMmWvr/qkIxNo?=\n\t=?utf-8?q?SUusbHPKhToxGSaEHymkrtPLXC4eK42qA9QXQUS1g+RTY28fwQ8jkZJjIwRoSPCyQ?=\n\t=?utf-8?q?D8RTfG2lKvp5mipCqEJ4Or1Bx2bjcZP274lFF6w7B3ij3Pi6O5VTzv077lZnSmMKp?=\n\t=?utf-8?q?iQLKLDGTijL6WSAx0KWx5/BLETzVE9Uyb0JJzz8AYR2h6C6/DykWrVrT2TgSFL+Cx?=\n\t=?utf-8?q?1zEFem7HP68pRTN761TTZal6TeRqfjoGDDsK3CZD1YPT3kMDuXp8rqS7xXCpaZl0p?=\n\t=?utf-8?q?Afnc8JdCra3U1n1BnbmnWpZYAAlJFYAWt6fwgL3dMWfBmuwGfPIXjS73aAl71rviy?=\n\t=?utf-8?q?UdaSac5EpT5cswubwIhGz0rmuwmKxwd1u+9yCmSQHEzevV6dUF45WXzor4SvOi0r0?=\n\t=?utf-8?q?jXFyjQ7i8sYF9I+SVfxMwGlF42sstGU5wIWi5ggcP/cyKLkblX872hJMEFW49ZJoh?=\n\t=?utf-8?q?epC/DuIr1DcisoaELeB9cI1u9qu2bYo+iUXmIcZLB9+JYyJmMCrpAqar32HhCF0lR?=\n\t=?utf-8?q?CmO+QrTHFSsjyZp60qcKuCciPgKrzuRhUNIUhHVmgjgz0NLQgRz6WM5dcFJvHDggm?=\n\t=?utf-8?q?cM3TA59Th9iYsglzvmZuqL43Wbeu1hSx50uqvZbVQMAabAP4ss1+iZdUqAtfNaGGQ?=\n\t=?utf-8?q?94tJ41Lq06AvSdAyy0gcdjiDW/xElMunoeb2RLB1XNWPowtdbp8+ed4Du2aWe8VDP?=\n\t=?utf-8?q?w6bJTEoxe+cdY9OYYS90SjbofPrJyMK6hTLYBwRgEKDkIz2IDBBm5xHdSX1m61y0z?=\n\t=?utf-8?q?Cz/UTmZpxS?=",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 1cbd3c9d-37a1-432f-b771-08de8ac2e90f",
        "X-MS-Exchange-CrossTenant-AuthSource": "DU0PR04MB9372.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "25 Mar 2026 23:04:47.3387\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 DMf7DXbHmP5YdsKZCAHiHJd1v1PLCsEr/Q/cvLlMSoCQ7VmVFJjcJ0qK/BKaohdfxFac9tsMPLM2iLGFRyojBg==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "GV2PR04MB12140"
    },
    "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---\nchagne in v4:\n- use new pinctrl_generic_pins_to_map()\n\nchange in v3:\n- use pinctrl_generic_pins_function_dt_node_to_map() and\npinctrl_utils_free_map().\n\nchange in v2:\n- fix copywrite by add nxp\n- fix if (!*map) check\n- add release_mux to call mux_state_deselect()\n---\n drivers/pinctrl/Kconfig               |   9 ++\n drivers/pinctrl/Makefile              |   1 +\n drivers/pinctrl/pinctrl-generic-mux.c | 197 ++++++++++++++++++++++++++++++++++\n 3 files changed, 207 insertions(+)",
    "diff": "diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig\nindex afecd9407f5354f5b92223f8cd80d2f7a08f8e7d..b6d4755e67510786c34f890c5e7a3fcf0adf45e4 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_PINCTRL\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..d1c1ff16a78dfd9ea66c51e9f70af1839844bcec\n--- /dev/null\n+++ b/drivers/pinctrl/pinctrl-generic-mux.c\n@@ -0,0 +1,197 @@\n+// SPDX-License-Identifier: GPL-2.0-only\n+/*\n+ * Generic Pin Control Driver for Board-Level Mux Chips\n+ * Copyright 2026 NXP\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 \"pinconf.h\"\n+#include \"pinmux.h\"\n+#include \"pinctrl-utils.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 protect [pinctrl|pinmux]_generic functions */\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 **maps, unsigned int *num_maps)\n+{\n+\tunsigned int num_reserved_maps = 0;\n+\tstruct mux_pin_function *function;\n+\tconst char **group_names;\n+\tint ret;\n+\n+\tfunction = devm_kzalloc(pctldev->dev, sizeof(*function), GFP_KERNEL);\n+\tif (!function)\n+\t\treturn -ENOMEM;\n+\n+\tgroup_names = devm_kcalloc(pctldev->dev, 1, sizeof(*group_names), GFP_KERNEL);\n+\tif (!group_names)\n+\t\treturn -ENOMEM;\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\treturn PTR_ERR(function->mux_state);\n+\n+\tret = pinctrl_generic_to_map(pctldev, np_config, np_config, maps,\n+\t\t\t\t     num_maps, &num_reserved_maps, group_names,\n+\t\t\t\t     0, &np_config->name, NULL);\n+\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tret = pinmux_generic_add_function(pctldev, np_config->name, group_names,\n+\t\t\t\t\t  1, function);\n+\tif (ret < 0) {\n+\t\tpinctrl_utils_free_map(pctldev, *maps, *num_maps);\n+\t\treturn ret;\n+\t}\n+\n+\treturn 0;\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 = pinctrl_utils_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 void mux_pinmux_release_mux(struct pinctrl_dev *pctldev,\n+\t\t\t\t   unsigned int func_selector,\n+\t\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+\n+\tguard(mutex)(&mpctl->lock);\n+\n+\tfunction = pinmux_generic_get_function(pctldev, func_selector);\n+\tfunc = function->data;\n+\n+\tmux_state_deselect(func->mux_state);\n+\n+\tmpctl->cur_select = -1;\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+\t.release_mux = mux_pinmux_release_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": [
        "v4",
        "5/7"
    ]
}