get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2217328,
    "url": "http://patchwork.ozlabs.org/api/patches/2217328/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260327-pinctrl-mux-v5-5-d4aec9d62c62@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": "<20260327-pinctrl-mux-v5-5-d4aec9d62c62@nxp.com>",
    "list_archive_url": null,
    "date": "2026-03-27T21:34:02",
    "name": "[v5,5/7] pinctrl: add generic board-level pinctrl driver using mux framework",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "d1d2fb556b03591d00fff71ae44055829abda8a4",
    "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/20260327-pinctrl-mux-v5-5-d4aec9d62c62@nxp.com/mbox/",
    "series": [
        {
            "id": 497832,
            "url": "http://patchwork.ozlabs.org/api/series/497832/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/list/?series=497832",
            "date": "2026-03-27T21:33:57",
            "name": "pinctrl: Add generic pinctrl for board-level mux chips",
            "version": 5,
            "mbox": "http://patchwork.ozlabs.org/series/497832/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2217328/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2217328/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-gpio+bounces-34332-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=NBBXavqa;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.105.105.114; helo=tor.lore.kernel.org;\n envelope-from=linux-gpio+bounces-34332-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=\"NBBXavqa\"",
            "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.107.162.1",
            "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 [172.105.105.114])\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 4fjDX43G6Hz1y0D\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 28 Mar 2026 08:37:56 +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 77D6A30B12AC\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 27 Mar 2026 21:34:51 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 7A3BF39F175;\n\tFri, 27 Mar 2026 21:34:35 +0000 (UTC)",
            "from PA4PR04CU001.outbound.protection.outlook.com\n (mail-francecentralazon11013001.outbound.protection.outlook.com\n [40.107.162.1])\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 7DD9739E16B;\n\tFri, 27 Mar 2026 21:34:33 +0000 (UTC)",
            "from PA4PR04MB9366.eurprd04.prod.outlook.com (2603:10a6:102:2a9::8)\n by AM9PR04MB8668.eurprd04.prod.outlook.com (2603:10a6:20b:43f::22) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Fri, 27 Mar\n 2026 21:34:31 +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.9745.024; Fri, 27 Mar 2026\n 21:34:31 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774647275; cv=fail;\n b=mG1KJZv99ysg8r0g3BOQWRPsA0evgrtt37SXZy51YTmXLpIsZjOLVyKM4DqF/6YaulOJSXjsopVbqFJPRqfMsuEE7PhFTX5DZV7gIBh0748CpNzJy7BWAAjCKUDgKfdKag9Kg4qQRfWv6mTQ+LGQRXexn+SwYjTRiv8w6crzb94=",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=jh76CgVp9zVyZ6fc6JH+ch6jSAWzhqXjdVvoFXYcqQCJhevs0E7+rtSBnS0GXTfOp+lTNiSoRJqUdNPPTdPCtujoabOYYsgtvw1HBTn75j63F9E4Ktjm/6RgKSMje8uJ8/TPoUwa3+Zcff4NY+xsjOboTobwz9Tw9iYR8GR6hRjX8iiZkEABYklY+GqLRmlZbiONzzaJe0DhU6qx6IFTOkBjZVYPURN0ouTkv+2NiHJPf3QZtEs3nwzujqNfM1oYSaeYqoeU+fH5zrHW8uEdBaNWNaZBcOPEFf5o+vUUt0oGwDwFztVT4zJgosGL+w63boshqmjF0DURs2EXy7pZ2A=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774647275; c=relaxed/simple;\n\tbh=cOYL5rr9PN45WbVPaLo4QNDVlTWljc2zsDVwsNh0YIw=;\n\th=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To:\n\t To:Cc:MIME-Version;\n b=sRT0epbw56WfqsBhXNMI4zoBG/a2DBvK0PQVzxBcpqB5RUJAeisyAgHTGwcOqEQyNLJRnDEvsjdF9FFpPbXfRF1peCMCBNISf/fDW758Aa2XmJXAPf7WJyI0v44ed+u1czkdqrb++FFm+5yiBXygaQ6Xv1DGk03oQnFehHDiWnU=",
            "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=NiWQsY3gAJMTO2/Nk33kRMMppd78eVFxT8bjQxj5TI0=;\n b=nMvSrTw2ILH73w8hrzRMqftcW4huTyzoW7ASSQteuDVXv9CYCtGjBjLxDI4XO452wEV2wRUEZ/5XHyatNIuYIPKoqNARCSbCMrn3u3YnLE849DZGgG+dhKSTb4JU0jwbZR3vDnGWqH6i+SFRd7up5swQ9I9toMHhqMncw3s0FDXVDxppSnrfadfnTtQ3zPfUiHyP/AvqrjXGQNWg8UX79KgXHTiSM3dEw0Cxd9s4bubMh8zmA/Mj3qtMu/eq1+2i90Z6MIsLcWuTczjYuPVgDh+2s4+E3g7/JHUItZjxhau4Gyk2fMP20+o4Mnm7APf1hlbu8TJ5BumfhxUYmkTnIw=="
        ],
        "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=NBBXavqa; arc=fail smtp.client-ip=40.107.162.1",
            "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=NiWQsY3gAJMTO2/Nk33kRMMppd78eVFxT8bjQxj5TI0=;\n b=NBBXavqaS8K1Gn6YVzMJsdXlPoxzgSbZdg6OGWTYNOQN++epepo/i8uApnZDH7mO2bGQEDE+ISGCcpBLSNwUL3BdVDjGeiCzcGoTsMfeTalpZwusPQzNEh2EibBu4FIBC0S0ZFD4rpkx8Cy5R14T6zBc9qY6tLs2IO3U7knNjH9Hta4dVA2Lc5p9hHksxK+kGAXQjfEFymzZ6SmZ2jF39rKRcdrot9Ix2eDud7wo4hz+wzFLMQPI74l/7DLWJfan3jcgAYgE7YQXijBITBfKRzdt+YnVjPc7bRpuOinhBhcjs02uOaij/CdrnEhT89M+DpMBf4adwHN+Sy1ny/ZMxA==",
        "From": "Frank Li <Frank.Li@nxp.com>",
        "Date": "Fri, 27 Mar 2026 17:34:02 -0400",
        "Subject": "[PATCH v5 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": "<20260327-pinctrl-mux-v5-5-d4aec9d62c62@nxp.com>",
        "References": "<20260327-pinctrl-mux-v5-0-d4aec9d62c62@nxp.com>",
        "In-Reply-To": "<20260327-pinctrl-mux-v5-0-d4aec9d62c62@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=1774647254; l=8001;\n i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id;\n bh=cOYL5rr9PN45WbVPaLo4QNDVlTWljc2zsDVwsNh0YIw=;\n b=vXuOWe6OQcPJX1BKl4jQDvOLIdcl02GDDMnkyrG8hgOVGTIlNzHoEEfWXItnlQymtCo+N4t7G\n fEa5nWQSIfCAnZHlTDYf9j2Xfox6JOFKVIAw18LYeGmFxh05yNZkI7a",
        "X-Developer-Key": "i=Frank.Li@nxp.com; a=ed25519;\n pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q=",
        "X-ClientProxiedBy": "SA1P222CA0182.NAMP222.PROD.OUTLOOK.COM\n (2603:10b6:806:3c4::20) 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_|AM9PR04MB8668:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "00dda89b-7f6a-42ae-7d79-08de8c48a180",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|366016|19092799006|1800799024|52116014|7416014|376014|38350700014|18002099003|56012099003|22082099003;",
        "X-Microsoft-Antispam-Message-Info": "\n\tRAOY11yvmTR0NcmczxEoHuODOVq4Jr8Nm/6Fh1LUqIzjI/9D1nwyZMjUXMhsrQ+EaExF9vBFVoYkK/OY4wGJuVmgMsHA1GG3QA+6AuND9ciABgyUdOICkrColbKz64f511Rcd6K/4DzTmCpEInnuDz9g3O3Gi8SYzlq8YzOk/FHtjDkoofHBMqkmAcAPrDjcy6gQFEDXafTWtPDuxhy6JHfEsnKX1QJib2HjeJ5zAjh/L7EOmFhGNkDqK7XcRYmtd2ExGoPK4Pdft9k9FXzQCgPzOwQklLDs6rk+crrLOQhZBlBT2pm3pJHoRTOhkNISV73wrbs4EGaa6txc1NrHKhcIOIC/eGXDu4L5f6g3Dq1lgClYxaJmTKod97tEOqRiZtjBKd151u1VWl+zr4YlLcLDrozE5ol352JxjVh+UNlEYJA4j+RmBmw9vrzSO52GhSG8fyDfRiqhzDmibS7nJUwJ3UEBuZcBaLsq09V1aApAvViSUVcfDHlXkhx5ChS7UyJXGe+bV2TS/7dsahwEaRXyDrj2eMQjQeGTPDqw+b2kGn9oMfEDMF/SkavGT23GPbtmjSsFedlaRih4QR8LmaxBISqN5New86COYBaG0ClCPltFHCxkWDdTlz5QanACgG3YhtTrTH77egzZlWW835Edde8lHF0IvNMI/IohOEwcsS36CtmZbWbtFjzmLn6ReFuwVJzHnfNXerhuvCzok2ZJqA60wfQMWtFeCqQrFLkG+7CGL5j8tV8MK4aCWVDYiFw1EkjPJLSOywGqw0MDfH3SxoZeRjk0e0t9V8lxEnU=",
        "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)(366016)(19092799006)(1800799024)(52116014)(7416014)(376014)(38350700014)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?ksSO6d01asMBjlegzVqLB3Dlj7mg?=\n\t=?utf-8?q?dqDRrEJpvgGQjpUyus+oWX/RBhW9TZpO7ViERNZoTel8QrXdbvshsTPjgTbkVDKum?=\n\t=?utf-8?q?r+BcXcruJ4TEyVJxV8iJMm+FPMWIEiSGXwDj1a+Ec4PBnvDO5KnlAB/vKpJnAX4Fu?=\n\t=?utf-8?q?lj8/N0XoxvOak0ECiblFxPooFASApd0piN+Q69jg4fCEa3M0V2xRAtXexUalc3o72?=\n\t=?utf-8?q?dFsVtJAshw8IPBJopVquhXqxrJeSHcT72oDVd7hdmb8qKZV8GnOMO534Rljvt2QPs?=\n\t=?utf-8?q?K6gLCyHodkRnb6pYP2rQMy2lhBA1Sj1M9fEeuMIm5nXE65zuOoHiteq18vn/2qK6A?=\n\t=?utf-8?q?rx94j4V4Np7m68edsaz7C0LO5h6e5qzNAYzRmzOJ4N32Z3VdydkC+vHGKYfyqUuKm?=\n\t=?utf-8?q?Zrf9CZTrThoqzrqCC9hewIhX59hhVNmMj731XgtJBIq9D3ngopVJNVBrWDmj76BBb?=\n\t=?utf-8?q?8i/crm5X5SxXPwMnTWrXXgCQkadbKGwxaZJYEYevVslatyXqn79xQ4E0hkx2Ls+gw?=\n\t=?utf-8?q?469h4m6PUu7l85EMjP7i3pR92UBCT7ZguD0XrQGnqoRfyxcvcxuXAtEOXg1pdnVW/?=\n\t=?utf-8?q?Z+Yc4lwc8sNGh4p0kWsZd0RFjl6BuQGbt8YHg4gqwBxo/IyUBZC4iQkmou3+Lb/wR?=\n\t=?utf-8?q?382eAf66vtNGwhsgLjwFA52o+PcPZ8qaRxelUxoz8GS0A3T5dHDq4yWOf09XXDID0?=\n\t=?utf-8?q?MZVy4EMr/ILawkEIOmPYqwBrOQMTHQUmBsTX09dlSCXZOkfNT3XXi2ioKZWyGKYeB?=\n\t=?utf-8?q?yDvMH3kzNbrQDK9Aj6MCMHONfo2TxOiljTAmhTgjK26U7L2Two6zchAo/e7XBvxD+?=\n\t=?utf-8?q?Nu7UO0qAtuvRuek6+EGYluFkHzcUKqFQ+xf6FAaX7cnjextf32ZBG5NYODuTSdTIO?=\n\t=?utf-8?q?78wsZtuI2nF42nqIQl7h8716Jt5Gt+ighzaOWlPcg0P9uRomseufkf5JaBeCsvn1S?=\n\t=?utf-8?q?gWtT//nhe99fFKVy8BHENqOYvB81R1P+itgNw6dps2QwCfI/k5UOk93CBkoDHl0hp?=\n\t=?utf-8?q?p6nHw78VU+lS/Cp41NLEYB9J7VUK0YuypI+mAgvb3E8eNnj+fjgwUVbTNJaGJWB5H?=\n\t=?utf-8?q?eyMuKdikemVHLT+TWjcueDO51k/mohIYwZXzJKrS4MuTf7T/05YyYYHRWpCFbARNU?=\n\t=?utf-8?q?1SSExI7NHQsoO9UXe1uFk+Tx6gDq4EhKMX8rApJjs5abkInPkIZRnY6C4vQ4MNt2C?=\n\t=?utf-8?q?PiTSSExaVQfrlHhEvh2nyAgEW+b+UlOVImVjwdF+rfe5OeQR0Ld/CmyeXmTm3r2LB?=\n\t=?utf-8?q?BujLAblNFdg3MYBTrkktBvmN8nH6JGHrcLa4AqGCcJJ5To/43MzhCmoiJ4I71QZVn?=\n\t=?utf-8?q?NhfxD5Oja90bzeIoBhZP1pvldZkLFODaJHGlpKNJQakP4ERraH4jAPDuCBJrZ14Y9?=\n\t=?utf-8?q?Yga0LQh4mnvxd5TGbjI3M+W6UZPV/4Vg54rCTKTLO4B2do1r52j8NbBdnER4nHTW+?=\n\t=?utf-8?q?G4pchU2HYYqDoVNNp/AIvNoJl1kDJfpxE+WuwzOKW8dv3tuOSS6n2UqvS0Hx5kkNz?=\n\t=?utf-8?q?59Ji2VjC7EUURZIj8lY+ROgd7jD6eFxRIZIlJTX17qzCyoZUKa65Gn4y3HJXbuOPP?=\n\t=?utf-8?q?Iz9m7/FRqJlh9OOY466xqeGaZaI+gZIsZC3Gv56/uIqtdzR00TW6+Wp1WurOOxFsW?=\n\t=?utf-8?q?dZaZyoTFw6?=",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 00dda89b-7f6a-42ae-7d79-08de8c48a180",
        "X-MS-Exchange-CrossTenant-AuthSource": "PA4PR04MB9366.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "27 Mar 2026 21:34:31.0166\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 iv5LBkwgZ3o92L9amCt+ONPDGHjRh+ELWNHlvBnQ/KM7mxdnsNUTmspkvwYGQMxUdddc2/g/pgknzWFXJSb3OQ==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "AM9PR04MB8668"
    },
    "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..add3179f40a65d16e71b63442d62504ab1013540\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, 0);\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": [
        "v5",
        "5/7"
    ]
}