get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2217319,
    "url": "http://patchwork.ozlabs.org/api/patches/2217319/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260327-pinctrl-mux-v5-3-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-3-d4aec9d62c62@nxp.com>",
    "list_archive_url": null,
    "date": "2026-03-27T21:34:00",
    "name": "[v5,3/7] pinctrl: extract pinctrl_generic_to_map() from pinctrl_generic_pins_function_dt_node_to_map()",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "eb9ef133f68f4e7c8c2c7df63d30e5cccaf2dc8e",
    "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-3-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/2217319/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2217319/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-gpio+bounces-34330-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=C/rl0NsG;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c15:e001:75::12fc:5321; helo=sin.lore.kernel.org;\n envelope-from=linux-gpio+bounces-34330-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=\"C/rl0NsG\"",
            "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.65.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 sin.lore.kernel.org (sin.lore.kernel.org\n [IPv6:2600:3c15:e001:75::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 4fjDTB5pD7z1y0D\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 28 Mar 2026 08:35:26 +1100 (AEDT)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sin.lore.kernel.org (Postfix) with ESMTP id 337413028768\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 27 Mar 2026 21:34:41 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 0336A39E6FC;\n\tFri, 27 Mar 2026 21:34:30 +0000 (UTC)",
            "from DU2PR03CU002.outbound.protection.outlook.com\n (mail-northeuropeazon11011034.outbound.protection.outlook.com [52.101.65.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 27E9139E196;\n\tFri, 27 Mar 2026 21:34:27 +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:25 +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:25 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774647269; cv=fail;\n b=klZrobN08TdD3B0kiy+WxPdMA8O/+IEa5R0DzfZaQ5LyCGLFv+arLMlTH4J4RrtLvF9yJJOR8Sdl5IWGbHZe+2N1E6+8kgJpAbbbanQm4abD6wkPy9G8wyWUeZo61lDOhySQnt+Hwn04XPevPGvqu/lORdXGoq+utwXlxeXw0Lo=",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=nYmsjbWYHHVvGnUirMT004ALFJin8dcbyl7BRLSlVkhO27wS/u6LnWD7mj4H9Ngt1FFkLsem16yZuU+gNZGgdOrMc/c+UnZUp8uFsO0m7eGo0vosvEcTcXztbuIZND5xI8nDrJDjUL+yevEjmVxj3q6vqnmAk/hbwmPOsXoF8qZ2ll1FtyQd2wZUInN419vA5CYeTn482beNaac5SxsXcLsNEuDeicyb1R0eQPVTOfuOkITRkeenW5/eRCnwZiYceOkTGVxR2YZa7PJcoExHPDnezV0FgC+wltQucQ68wpylYqOGcgBR+wCx6Xuha4eP9sZd3Z8hfU5bKRZzNvzuWg=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774647269; c=relaxed/simple;\n\tbh=0ZyVR7Ew+8FME46WeOTKzZa52qmd5gLcnJhFdFuN+5s=;\n\th=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To:\n\t To:Cc:MIME-Version;\n b=aUOJPPH14FZHLmAdf02Bsg92aBSwAR3h9+CnzcrLesG+h4Q2CfcKgCkx/CuKtK1CuX2pOQUSi374nJfekgmrG6UcclgJfW3vQFt3mxPQlMNXFJtHRgGiRF8em6sZhTuL2H5pzB/mkbEcW7DAkZPnpT+h1djCSvB4ENytH32tIxk=",
            "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=UrrVM+j+cGadW4s/MJcZpCgs/Z76Y+uI11BU37xJ5ro=;\n b=Y7RqQ6keT1RioIqyy1e2phzu0qAb0cA4U8BrWjWi1XKs0Gm0dkmO1+DBmPwGdIunNEXESvzHe51v5wks9ZbGpaoFHOefodDkzo8vPaNlZ8vg/8RY1DNfvLyxGSlida8P1qwGR99YFXwoVGeQMYWDxkXKZjzRiwOOo48lQX/Pdn0yg3NBFEBJEjn2eTHflrJcR1nqtmX7QxFB7vCdl+xTSDWEFVgStTXanf7SmT1aCH+Aqt2MObPRxkK2/Wwx/0eVdV3E/OszK5q6o01S1XOUiNk3zGUY0hSSDDY4CRzcoA1EvKSZi/NI0ShxekDdI9I2ic/hKCz17P1LlOqr+2LfbQ=="
        ],
        "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=C/rl0NsG; arc=fail smtp.client-ip=52.101.65.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=UrrVM+j+cGadW4s/MJcZpCgs/Z76Y+uI11BU37xJ5ro=;\n b=C/rl0NsGx+v5N8DWWzWBh0PtSBB6/OGv9wrY1I6ZaaZx2kd5qmpRc6eDDyxaNBh6jnsgJXdfnT0f2j2nkUEqFbOcAoa8pEUCrijtjJd7fNjvQ5qJ4VyhKcNgUX0jbUiUflaeUjEeyF1rZbUgntxBxNVdrzYO1J2tQ67PrKM9/MEIRRTQVY9WwflTzxZqs7SPq812QidOOaEiLAaaJw5fgAe6w4LLXo3aoTwcdQ57CIg3jQ9SMiwUJ2FvB3fMVwHTT4s9tebqY4t5UFT6TdqG709M6OMR64hL5E1rVd65wtjkYKMVWcmm1aJf56Iuxo7Lk9ZHZMAhb1HIqjHW6kWuxQ==",
        "From": "Frank Li <Frank.Li@nxp.com>",
        "Date": "Fri, 27 Mar 2026 17:34:00 -0400",
        "Subject": "[PATCH v5 3/7] pinctrl: extract pinctrl_generic_to_map() from\n pinctrl_generic_pins_function_dt_node_to_map()",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "Message-Id": "<20260327-pinctrl-mux-v5-3-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>, Conor Dooley <conor.dooley@microchip.com>",
        "X-Mailer": "b4 0.14.2",
        "X-Developer-Signature": "v=1; a=ed25519-sha256; t=1774647254; l=6512;\n i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id;\n bh=0ZyVR7Ew+8FME46WeOTKzZa52qmd5gLcnJhFdFuN+5s=;\n b=wwC73dWs3eIpSolXqDXA5Kk9HghxPneCkXMsCUEdfQPSsE87Rk/SPCw9RG4KG6w8QLMCEANUC\n ZPotpA5umLXCbzwBJwvpv6OwNaFn4WdEbUO28RSxc+xN6ZWCy+rNWXC",
        "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": "b77ac431-2f2a-443c-ebf5-08de8c489e43",
        "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\t8L5+BywlKp629wt7fnv8onl6pl/l9NKkyZG/wuSqKA7A0gguQAvtQrCMZP2hKdvs92RoJz6eBdGVwFfznTUe9cPFAOC5IvXhx6jgI+j5Y1pqchOHd4WofXEUbm7qLZwELaByhQJ4uNYATHIECooumzeYN1X9X4Gc8jdzRRZUBiI1kbX+BSzbHLQ6xK7ckzTeB9tWfpfxWiZuFy2QBAOs7dARXW17sKnwHQWyBipY62i2grwWeM8KjkZ3XDj6NTlFvVAvdOCHmY4GKK0pJaG9rQ2TWFRueShQai/BhvAbjg+jGkhFf2vB24wAEyhBCxAUai6Yekqu3/YhZwVZkbPuk3VXEY9XzI1gYWHMTpOxFuYl+hPTeSENnMLVexSrlZZLyD92UewIMCwg/+HswvPOTn+MGFzuGp9RG+gJnxXTfL1uJmV6GIQl8rTrqAsDQ5CmDJ7Tl2MCM5x76+EXzvIesF+LI/0SVSR2DMClbOWV6Te0p3ofc8Ss9UKsXsRK+HI9dukhhnGzJOFKfEYiLo76nNa+e6BLVFfh2dXI3Dz/Z/arodRFBhAHVqtd8Kcy/dOrTge1WvdY2lvrJjNqrW2uTPyEcC06uUoXOWO3TU/YysBAS0g/KmVtThYMebSJ7/3acclI5X5IAqsdsJ8KLvS6K/DJPz+pmP5/zqCAoE4mUaYb4hmgG1zmz/aSS8kvstP8G5GDZUu875AEjv6TcAz8/4wY3IzcKP3+Kfu9tnjZ5Roow+ySVXNLb8MJKPIatp0nI/1o6wiRgEm0NxX0DUhof3XsHxYN+W/lvKqjRG2aMrs=",
        "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?hW6syPAKyzLDspyUilP3vwpC1hwb?=\n\t=?utf-8?q?sBBlhiOwflW0kR6z2d+dCJVxvaDVhXzTjFJvCfg1KmKZrROvvThONLso8/D9DptrA?=\n\t=?utf-8?q?s+soOrFhG3Cmisl3Fru1ncXYe70KBA1k+wSvMKDwzcVonQGfMO8aGlDdyMN4nOEiI?=\n\t=?utf-8?q?XdiZyTopbCTailTXfFuga7N48JAVP+rmwxeF7k/X7mvxpRPPm6B571doDCj1/iGdH?=\n\t=?utf-8?q?v+X91v/TH6ifH7jWEuY44x2dIjzZ3WBsvPhYRa5FHgHCnUl9388toAwtNNmk2lUJ+?=\n\t=?utf-8?q?M+JkoM9CRWJLK/eE3S3ATxoF2c3wcSGVMJetUXWOanTMDE1djWuVxC7LHCbtjGOYI?=\n\t=?utf-8?q?4pzQ3RXqISbmxYLCBdQ8AiVN54Ew3fMAJdCjTAt/DAxvqKl+G41NzEMxMLUBAOCWt?=\n\t=?utf-8?q?X63PSrZyJiO8j6/HyvfzooDkU4anH4KC9c6k3Vp0c9UIW22omDgyr7EGmU2T9Pv5Y?=\n\t=?utf-8?q?xsK7+T6/6RGvqHCxX93FswDIB2bEmzSEpNnkGfZdZoFE8dvBQ/c1IhF70GjvsincL?=\n\t=?utf-8?q?pwQujooaFgDfiCeikBh9S+D0iXmWBOfz3fDgyXhdLYtQoBXOqLVd+hRAlz9BxNXeG?=\n\t=?utf-8?q?zXZBpB1dxzCbFwkQrqV1NPs+CjpQVgc8GLax6ghkstQUE9q6XTmZTOphNKLlfowP2?=\n\t=?utf-8?q?jCY2uBJB1x4UFXQDhDOmOnmWBaUtPbvArfdA68PfV62s+aJwGrMi2PvoccdmbKV7Z?=\n\t=?utf-8?q?puQIcCbaP/yqQD5TAPUjIIUznSXc25EA0ZMlroHBZS/6dkpkx/s1lgvZo2D707HQZ?=\n\t=?utf-8?q?PzexE38vdNPrMmaGzcGiaMdCuXZBTp3Qy0+swvLz/TPQp1hmaT2z0bSUFnUKsnW1z?=\n\t=?utf-8?q?Cs6WyFD7CMvs01AtRys+BzLGqErF9WxkJXM0Nv3PhYSCVtw1MJdda3Eajz2uZt5xP?=\n\t=?utf-8?q?dD8WLuOJ6T3ghk2TXtPKmY7KFTAIsJ3rc3NgEKJexaGq5WNrU7Xindb8Yq7VDFsh5?=\n\t=?utf-8?q?GEWTSq6aUzPLtRcewyBnpBCZ4rMjPQHEU1+pcvWflq33clFQRwcTtL4LuieZLk9GS?=\n\t=?utf-8?q?A8E5vyJOdwfVHadRT3GuinTjnAAPD6+Untb0Fby5mTJI+eQ4LdIbnvXTC6PxXAfm5?=\n\t=?utf-8?q?d8AUtmUtjf2DxyAJwgeKcPCIFoNFT7gzQRXVgMcS/hAEFY0L1kfDhVza7QxnbjMOe?=\n\t=?utf-8?q?AY+Qc9Mwu/uQUgqnC5v1doK5AXezIXSUUC1iID/jRMT8epzMIIsFjJfWkXfrESQbK?=\n\t=?utf-8?q?WjXmfmL2CZwAw1Ymh5kTy54mCjec7jVD0/oH7+3C/81TiAATGUcFAK7BuF2slCvNp?=\n\t=?utf-8?q?kLa2KKf0lDFwlLsMB4AtQX3WiWO3guXN+TtNVFB2Cw15hWIf6EfwRxj8C5mWwVx74?=\n\t=?utf-8?q?gbzvULdOGOfrlf8oeiyZYtKskhcn19i5WsdUKZCl/RxQ59k8brx8hNOIrFSmdMyYq?=\n\t=?utf-8?q?+ZiaMLzwr5FQouRkfqrlybx0gbYlZ0cHZSVVGwc63DdGwcTNMZ8zQb9cl5vBdOE3s?=\n\t=?utf-8?q?E44edSroW6+YqIH/TJw/j56qoeJSnmEjGxoieXaNqL5x7JNhNEmqOQvVHTMwgVQSd?=\n\t=?utf-8?q?imE1ub/UUcD70ZOsVw4P8fgQJ4j1s1UDI9dQQWmdKdMLwlwNlpijQ0e9wc84oTGBO?=\n\t=?utf-8?q?DShsmds+gJuoHzSQHM5pjU57DvGVHykFQqOq7W/5tWWndCZE/8ehTWdU4nBOY9lsy?=\n\t=?utf-8?q?lNSAbJEe47?=",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n b77ac431-2f2a-443c-ebf5-08de8c489e43",
        "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:25.5369\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 m/0twQpxCLKryaAHxWMOqHbZnyC9BVVtUbvHvgSeFUY+Aqg+QIN64RBofZ51JZvSD/u40myT9W95dXww1FC36A==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "AM9PR04MB8668"
    },
    "content": "Refactor pinctrl_generic_pins_function_dt_subnode_to_map() by separating DT\nparsing logic from map creation. Introduce a new helper\npinctrl_generic_to_map() to handle mapping to kernel data structures, while\nkeeping DT property parsing in the subnode function.\n\nImprove code structure and enables easier reuse for platforms using\ndifferent DT properties (e.g. pinmux) without modifying the\ndt_node_to_map-style callback API. Avoid unnecessary coupling to\npinctrl_generic_pins_function_dt_node_to_map(), which provides\nfunctionality not needed when the phandle target is unambiguous.\n\nMaximize code reuse and provide a cleaner extension point for future\npinctrl drivers.\n\nSuggested-by: Conor Dooley <conor.dooley@microchip.com>\nSigned-off-by: Frank Li <Frank.Li@nxp.com>\n---\nchange in v5\n- add npins in pinctrl_generic_to_map();\n- remove below line in pinctrl_generic_to_map();\npins = devm_kcalloc(dev, npins, sizeof(*pins), GFP_KERNEL);\n\nchange in v4\n- new patch\n---\n drivers/pinctrl/pinconf.h         | 18 ++++++++\n drivers/pinctrl/pinctrl-generic.c | 94 +++++++++++++++++++++++----------------\n 2 files changed, 73 insertions(+), 39 deletions(-)",
    "diff": "diff --git a/drivers/pinctrl/pinconf.h b/drivers/pinctrl/pinconf.h\nindex 2880adef476e68950ffdd540ea42cdee6a16ec27..67044dff61e4c2b2ccc0c10524b442d17f3ec42f 100644\n--- a/drivers/pinctrl/pinconf.h\n+++ b/drivers/pinctrl/pinconf.h\n@@ -166,6 +166,13 @@ int pinctrl_generic_pins_function_dt_node_to_map(struct pinctrl_dev *pctldev,\n \t\t\t\t\t\t struct device_node *np,\n \t\t\t\t\t\t struct pinctrl_map **maps,\n \t\t\t\t\t\t unsigned int *num_maps);\n+\n+int pinctrl_generic_to_map(struct pinctrl_dev *pctldev, struct device_node *parent,\n+\t\t\t   struct device_node *np, struct pinctrl_map **maps,\n+\t\t\t   unsigned int *num_maps, unsigned int *num_reserved_maps,\n+\t\t\t   const char **group_name, unsigned int ngroups,\n+\t\t\t   const char **functions, unsigned int *pins,\n+\t\t\t   unsigned int npins);\n #else\n static inline int\n pinctrl_generic_pins_function_dt_node_to_map(struct pinctrl_dev *pctldev,\n@@ -175,4 +182,15 @@ pinctrl_generic_pins_function_dt_node_to_map(struct pinctrl_dev *pctldev,\n {\n \treturn -ENOTSUPP;\n }\n+\n+static inline int\n+pinctrl_generic_to_map(struct pinctrl_dev *pctldev, struct device_node *parent,\n+\t\t       struct device_node *np, struct pinctrl_map **maps,\n+\t\t       unsigned int *num_maps, unsigned int *num_reserved_maps,\n+\t\t       const char **group_name, unsigned int ngroups,\n+\t\t       const char **functions, unsigned int *pins,\n+\t\t       void *function_data)\n+{\n+\treturn -ENOTSUPP;\n+}\n #endif\ndiff --git a/drivers/pinctrl/pinctrl-generic.c b/drivers/pinctrl/pinctrl-generic.c\nindex efb39c6a670331775855efdc8566102b5c6202ef..76670aef62da47ede2901f5af6199dcd2896d894 100644\n--- a/drivers/pinctrl/pinctrl-generic.c\n+++ b/drivers/pinctrl/pinctrl-generic.c\n@@ -17,29 +17,18 @@\n #include \"pinctrl-utils.h\"\n #include \"pinmux.h\"\n \n-static int pinctrl_generic_pins_function_dt_subnode_to_map(struct pinctrl_dev *pctldev,\n-\t\t\t\t\t\t\t   struct device_node *parent,\n-\t\t\t\t\t\t\t   struct device_node *np,\n-\t\t\t\t\t\t\t   struct pinctrl_map **maps,\n-\t\t\t\t\t\t\t   unsigned int *num_maps,\n-\t\t\t\t\t\t\t   unsigned int *num_reserved_maps,\n-\t\t\t\t\t\t\t   const char **group_names,\n-\t\t\t\t\t\t\t   unsigned int ngroups)\n+int pinctrl_generic_to_map(struct pinctrl_dev *pctldev, struct device_node *parent,\n+\t\t\t   struct device_node *np, struct pinctrl_map **maps,\n+\t\t\t   unsigned int *num_maps, unsigned int *num_reserved_maps,\n+\t\t\t   const char **group_names, unsigned int ngroups,\n+\t\t\t   const char **functions, unsigned int *pins,\n+\t\t\t   unsigned int npins)\n {\n \tstruct device *dev = pctldev->dev;\n-\tconst char **functions;\n+\tunsigned int num_configs;\n \tconst char *group_name;\n \tunsigned long *configs;\n-\tunsigned int num_configs, pin, *pins;\n-\tint npins, ret, reserve = 1;\n-\n-\tnpins = of_property_count_u32_elems(np, \"pins\");\n-\n-\tif (npins < 1) {\n-\t\tdev_err(dev, \"invalid pinctrl group %pOFn.%pOFn %d\\n\",\n-\t\t\tparent, np, npins);\n-\t\treturn npins;\n-\t}\n+\tint ret, reserve = 1;\n \n \tgroup_name = devm_kasprintf(dev, GFP_KERNEL, \"%pOFn.%pOFn\", parent, np);\n \tif (!group_name)\n@@ -47,26 +36,6 @@ static int pinctrl_generic_pins_function_dt_subnode_to_map(struct pinctrl_dev *p\n \n \tgroup_names[ngroups] = group_name;\n \n-\tpins = devm_kcalloc(dev, npins, sizeof(*pins), GFP_KERNEL);\n-\tif (!pins)\n-\t\treturn -ENOMEM;\n-\n-\tfunctions = devm_kcalloc(dev, npins, sizeof(*functions), GFP_KERNEL);\n-\tif (!functions)\n-\t\treturn -ENOMEM;\n-\n-\tfor (int i = 0; i < npins; i++) {\n-\t\tret = of_property_read_u32_index(np, \"pins\", i, &pin);\n-\t\tif (ret)\n-\t\t\treturn ret;\n-\n-\t\tpins[i] = pin;\n-\n-\t\tret = of_property_read_string(np, \"function\", &functions[i]);\n-\t\tif (ret)\n-\t\t\treturn ret;\n-\t}\n-\n \tret = pinctrl_utils_reserve_map(pctldev, maps, num_reserved_maps, num_maps, reserve);\n \tif (ret)\n \t\treturn ret;\n@@ -103,6 +72,53 @@ static int pinctrl_generic_pins_function_dt_subnode_to_map(struct pinctrl_dev *p\n \treturn 0;\n };\n \n+static int pinctrl_generic_pins_function_dt_subnode_to_map(struct pinctrl_dev *pctldev,\n+\t\t\t\t\t\t\t   struct device_node *parent,\n+\t\t\t\t\t\t\t   struct device_node *np,\n+\t\t\t\t\t\t\t   struct pinctrl_map **maps,\n+\t\t\t\t\t\t\t   unsigned int *num_maps,\n+\t\t\t\t\t\t\t   unsigned int *num_reserved_maps,\n+\t\t\t\t\t\t\t   const char **group_names,\n+\t\t\t\t\t\t\t   unsigned int ngroups)\n+{\n+\tstruct device *dev = pctldev->dev;\n+\tunsigned int pin, *pins;\n+\tconst char **functions;\n+\tint npins, ret;\n+\n+\tnpins = of_property_count_u32_elems(np, \"pins\");\n+\n+\tif (npins < 1) {\n+\t\tdev_err(dev, \"invalid pinctrl group %pOFn.%pOFn %d\\n\",\n+\t\t\tparent, np, npins);\n+\t\treturn npins;\n+\t}\n+\n+\tpins = devm_kcalloc(dev, npins, sizeof(*pins), GFP_KERNEL);\n+\tif (!pins)\n+\t\treturn -ENOMEM;\n+\n+\tfunctions = devm_kcalloc(dev, npins, sizeof(*functions), GFP_KERNEL);\n+\tif (!functions)\n+\t\treturn -ENOMEM;\n+\n+\tfor (int i = 0; i < npins; i++) {\n+\t\tret = of_property_read_u32_index(np, \"pins\", i, &pin);\n+\t\tif (ret)\n+\t\t\treturn ret;\n+\n+\t\tpins[i] = pin;\n+\n+\t\tret = of_property_read_string(np, \"function\", &functions[i]);\n+\t\tif (ret)\n+\t\t\treturn ret;\n+\t}\n+\n+\treturn pinctrl_generic_to_map(pctldev, parent, np, maps, num_maps,\n+\t\t\t\t      num_reserved_maps, group_names, ngroups,\n+\t\t\t\t      functions, pins, npins);\n+}\n+\n /*\n  * For platforms that do not define groups or functions in the driver, but\n  * instead use the devicetree to describe them. This function will, unlike\n",
    "prefixes": [
        "v5",
        "3/7"
    ]
}