get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2217455,
    "url": "http://patchwork.ozlabs.org/api/patches/2217455/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260329090601.532477-4-o.rempel@pengutronix.de/",
    "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": "<20260329090601.532477-4-o.rempel@pengutronix.de>",
    "list_archive_url": null,
    "date": "2026-03-29T09:05:58",
    "name": "[v8,3/6] pinctrl: core: Make pin group callbacks optional for pin-only drivers",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "d7ffc92f4d63a7cbe90ec7b33e1729d0192b00fb",
    "submitter": {
        "id": 71360,
        "url": "http://patchwork.ozlabs.org/api/people/71360/?format=api",
        "name": "Oleksij Rempel",
        "email": "o.rempel@pengutronix.de"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260329090601.532477-4-o.rempel@pengutronix.de/mbox/",
    "series": [
        {
            "id": 497911,
            "url": "http://patchwork.ozlabs.org/api/series/497911/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/list/?series=497911",
            "date": "2026-03-29T09:05:56",
            "name": "mfd: Add support for NXP MC33978/MC34978 MSDI",
            "version": 8,
            "mbox": "http://patchwork.ozlabs.org/series/497911/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2217455/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2217455/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-gpio+bounces-34359-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 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-34359-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=185.203.201.7",
            "smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=pengutronix.de",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=pengutronix.de"
        ],
        "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 4fk7rL5RGVz1xrn\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 29 Mar 2026 20:10:10 +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 CDC5D305809B\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 29 Mar 2026 09:06:29 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 768AD2F0C45;\n\tSun, 29 Mar 2026 09:06:29 +0000 (UTC)",
            "from metis.whiteo.stw.pengutronix.de\n (metis.whiteo.stw.pengutronix.de [185.203.201.7])\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 7A7052EAD1C\n\tfor <linux-gpio@vger.kernel.org>; Sun, 29 Mar 2026 09:06:26 +0000 (UTC)",
            "from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])\n\tby metis.whiteo.stw.pengutronix.de with esmtps\n (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)\n\t(Exim 4.92)\n\t(envelope-from <ore@pengutronix.de>)\n\tid 1w6m5s-00018s-0v; Sun, 29 Mar 2026 11:06:04 +0200",
            "from dude04.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::ac]\n helo=dude04)\n\tby drehscheibe.grey.stw.pengutronix.de with esmtps  (TLS1.3) tls\n TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n\t(Exim 4.96)\n\t(envelope-from <ore@pengutronix.de>)\n\tid 1w6m5q-002gZT-3A;\n\tSun, 29 Mar 2026 11:06:02 +0200",
            "from ore by dude04 with local (Exim 4.98.2)\n\t(envelope-from <ore@pengutronix.de>)\n\tid 1w6m5q-00000002EXz-3pfC;\n\tSun, 29 Mar 2026 11:06:02 +0200"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774775189; cv=none;\n b=JAco7/mcxjoZMHmXF4eXDuHMPRiZmt/Pc2jAy835gGQZNPcrcxgedsXo7OvymrqAa4UjcIYw3dKBOup8Y14CpXqqrO2GL4LfRjUKIAauTDXsC+2rXSsVDe+ErFD1LqjBB9tbQo2PzokMNCR6kFB/i/JgpaWFY94hou1mVx7bSLk=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774775189; c=relaxed/simple;\n\tbh=Dc6be1ReMf0XtYba7yU5owpNbyYAxXLNnVva7u1i93U=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=SUsppf1r+O2J0/hfl/K/IN/ckc9GPfleQ3vEJcnzVt7w+q8W8MA98YkY853Cg5FJWo17Rk09LeK20FG9QyaxrVmEs4CEXK5ab4ypAjHRpN5KXN5hQO6jNT255LR8pYjNg04rZRlhsa1A6IcKhOYRRcIMfuoFWeP0ZOaFiMZ3+Os=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=pengutronix.de;\n spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7",
        "From": "Oleksij Rempel <o.rempel@pengutronix.de>",
        "To": "Guenter Roeck <linux@roeck-us.net>,\n\tRob Herring <robh@kernel.org>,\n\tKrzysztof Kozlowski <krzk+dt@kernel.org>,\n\tConor Dooley <conor+dt@kernel.org>,\n\tLee Jones <lee@kernel.org>,\n\tPeter Rosin <peda@axentia.se>,\n\tLinus Walleij <linusw@kernel.org>",
        "Cc": "Oleksij Rempel <o.rempel@pengutronix.de>,\n\tkernel@pengutronix.de,\n\tlinux-kernel@vger.kernel.org,\n\tdevicetree@vger.kernel.org,\n\tlinux-hwmon@vger.kernel.org,\n\tlinux-gpio@vger.kernel.org,\n\tDavid Jander <david@protonic.nl>",
        "Subject": "[PATCH v8 3/6] pinctrl: core: Make pin group callbacks optional for\n pin-only drivers",
        "Date": "Sun, 29 Mar 2026 11:05:58 +0200",
        "Message-ID": "<20260329090601.532477-4-o.rempel@pengutronix.de>",
        "X-Mailer": "git-send-email 2.47.3",
        "In-Reply-To": "<20260329090601.532477-1-o.rempel@pengutronix.de>",
        "References": "<20260329090601.532477-1-o.rempel@pengutronix.de>",
        "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",
        "Content-Transfer-Encoding": "8bit",
        "X-SA-Exim-Connect-IP": "2a0a:edc0:0:c01:1d::a2",
        "X-SA-Exim-Mail-From": "ore@pengutronix.de",
        "X-SA-Exim-Scanned": "No (on metis.whiteo.stw.pengutronix.de);\n SAEximRunCond expanded to false",
        "X-PTX-Original-Recipient": "linux-gpio@vger.kernel.org"
    },
    "content": "Currently, the pinctrl core strictly requires all drivers to implement\n.get_groups_count and .get_group_name callbacks in their pinctrl_ops.\n\nHowever, for simple pinctrl drivers that act purely as GPIO controllers\nand pin-specific configuration proxies, without any concept of muxing or\npin groups, this strict requirement forces the implementation of dummy\ncallbacks just to satisfy pinctrl_check_ops().\n\nRelax this requirement for pin-only drivers by making the group callbacks\noptional when no muxing or group pin configuration support is provided.\nUpdate the core and debugfs helpers to check for the existence of these\ncallbacks before invoking them.\n\nDrivers that provide muxing or group pin configuration operations still\nmust implement group enumeration and naming callbacks, and are rejected\nat registration time if they do not.\n\nSuggested-by: Linus Walleij <linusw@kernel.org>\nSigned-off-by: Oleksij Rempel <o.rempel@pengutronix.de>\nReviewed-by: Linus Walleij <linusw@kernel.org>\n---\nchanges v8:\n- no changes\nchanges v7:\n- no changes\nchanges v6:\n- Reject drivers in pinctrl_check_ops() that use pmxops or group confops\n  without providing group callbacks.\n- Add <linux/pinctrl/pinconf.h> to core.c.\n- Revert the unnecessary NULL check in pinconf_show_setting(), since\n  group settings are now strictly gated.\n- Keep debugfs group listings tolerant of drivers without group callbacks.\nchanges v5:\n- no changes\nchanges v4:\n- add Reviewed-by: Linus Walleij ...\nchanges v3:\n- no changes\n---\n drivers/pinctrl/core.c    | 41 ++++++++++++++++++++++++++++++++++-----\n drivers/pinctrl/pinconf.c |  9 +++++++--\n 2 files changed, 43 insertions(+), 7 deletions(-)",
    "diff": "diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c\nindex b5e97689589f..19a9a370d7b9 100644\n--- a/drivers/pinctrl/core.c\n+++ b/drivers/pinctrl/core.c\n@@ -30,6 +30,7 @@\n #include <linux/pinctrl/consumer.h>\n #include <linux/pinctrl/devinfo.h>\n #include <linux/pinctrl/machine.h>\n+#include <linux/pinctrl/pinconf.h>\n #include <linux/pinctrl/pinctrl.h>\n \n #include \"core.h\"\n@@ -621,8 +622,13 @@ static int pinctrl_generic_group_name_to_selector(struct pinctrl_dev *pctldev,\n \t\t\t\t\t\t  const char *function)\n {\n \tconst struct pinctrl_ops *ops = pctldev->desc->pctlops;\n-\tint ngroups = ops->get_groups_count(pctldev);\n \tint selector = 0;\n+\tint ngroups;\n+\n+\tif (!ops->get_groups_count || !ops->get_group_name)\n+\t\treturn -EINVAL;\n+\n+\tngroups = ops->get_groups_count(pctldev);\n \n \t/* See if this pctldev has this group */\n \twhile (selector < ngroups) {\n@@ -737,8 +743,15 @@ int pinctrl_get_group_selector(struct pinctrl_dev *pctldev,\n \t\t\t       const char *pin_group)\n {\n \tconst struct pinctrl_ops *pctlops = pctldev->desc->pctlops;\n-\tunsigned int ngroups = pctlops->get_groups_count(pctldev);\n \tunsigned int group_selector = 0;\n+\tunsigned int ngroups;\n+\n+\tif (!pctlops->get_groups_count || !pctlops->get_group_name) {\n+\t\tdev_err(pctldev->dev, \"does not support pin groups\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tngroups = pctlops->get_groups_count(pctldev);\n \n \twhile (group_selector < ngroups) {\n \t\tconst char *gname = pctlops->get_group_name(pctldev,\n@@ -1769,6 +1782,11 @@ static int pinctrl_groups_show(struct seq_file *s, void *what)\n \n \tmutex_lock(&pctldev->mutex);\n \n+\tif (!ops->get_groups_count || !ops->get_group_name) {\n+\t\tmutex_unlock(&pctldev->mutex);\n+\t\treturn 0;\n+\t}\n+\n \tngroups = ops->get_groups_count(pctldev);\n \n \tseq_puts(s, \"registered pin groups:\\n\");\n@@ -2049,12 +2067,25 @@ static void pinctrl_remove_device_debugfs(struct pinctrl_dev *pctldev)\n static int pinctrl_check_ops(struct pinctrl_dev *pctldev)\n {\n \tconst struct pinctrl_ops *ops = pctldev->desc->pctlops;\n+\tconst struct pinconf_ops *confops = pctldev->desc->confops;\n+\tbool needs_groups = false;\n \n-\tif (!ops ||\n-\t    !ops->get_groups_count ||\n-\t    !ops->get_group_name)\n+\tif (!ops)\n \t\treturn -EINVAL;\n \n+\tif (pctldev->desc->pmxops)\n+\t\tneeds_groups = true;\n+\n+\tif (confops && (confops->pin_config_group_get ||\n+\t\t\tconfops->pin_config_group_set))\n+\t\tneeds_groups = true;\n+\n+\tif (needs_groups && (!ops->get_groups_count || !ops->get_group_name)) {\n+\t\tdev_err(pctldev->dev,\n+\t\t\t\"driver needs group callbacks for mux or group config\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n \treturn 0;\n }\n \ndiff --git a/drivers/pinctrl/pinconf.c b/drivers/pinctrl/pinconf.c\nindex dca963633b5d..81686844dfa5 100644\n--- a/drivers/pinctrl/pinconf.c\n+++ b/drivers/pinctrl/pinconf.c\n@@ -275,7 +275,7 @@ void pinconf_show_setting(struct seq_file *s,\n \tcase PIN_MAP_TYPE_CONFIGS_GROUP:\n \t\tseq_printf(s, \"group %s (%d)\",\n \t\t\t   pctlops->get_group_name(pctldev,\n-\t\t\t\t\tsetting->data.configs.group_or_pin),\n+\t\t\t\t\t\t   setting->data.configs.group_or_pin),\n \t\t\t   setting->data.configs.group_or_pin);\n \t\tbreak;\n \tdefault:\n@@ -348,8 +348,13 @@ static int pinconf_groups_show(struct seq_file *s, void *what)\n {\n \tstruct pinctrl_dev *pctldev = s->private;\n \tconst struct pinctrl_ops *pctlops = pctldev->desc->pctlops;\n-\tunsigned int ngroups = pctlops->get_groups_count(pctldev);\n \tunsigned int selector = 0;\n+\tunsigned int ngroups;\n+\n+\tif (!pctlops->get_groups_count || !pctlops->get_group_name)\n+\t\treturn 0;\n+\n+\tngroups = pctlops->get_groups_count(pctldev);\n \n \tseq_puts(s, \"Pin config settings per pin group\\n\");\n \tseq_puts(s, \"Format: group (name): configs\\n\");\n",
    "prefixes": [
        "v8",
        "3/6"
    ]
}