Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2217082/?format=api
{ "id": 2217082, "url": "http://patchwork.ozlabs.org/api/patches/2217082/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260327163450.3287313-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": "<20260327163450.3287313-4-o.rempel@pengutronix.de>", "list_archive_url": null, "date": "2026-03-27T16:34:47", "name": "[v7,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/20260327163450.3287313-4-o.rempel@pengutronix.de/mbox/", "series": [ { "id": 497796, "url": "http://patchwork.ozlabs.org/api/series/497796/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/list/?series=497796", "date": "2026-03-27T16:34:48", "name": "mfd: Add support for NXP MC33978/MC34978 MSDI", "version": 7, "mbox": "http://patchwork.ozlabs.org/series/497796/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2217082/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2217082/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linux-gpio+bounces-34276-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-34276-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 4fj6544XWVz1y1P\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 28 Mar 2026 03:47:36 +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 3752430A3DF0\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 27 Mar 2026 16:35:32 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 6AC8D350D7E;\n\tFri, 27 Mar 2026 16:35:21 +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 396ED2EB87B\n\tfor <linux-gpio@vger.kernel.org>; Fri, 27 Mar 2026 16:35:19 +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 1w6A9G-00066b-6m; Fri, 27 Mar 2026 17:35:02 +0100", "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 1w6A9F-002PtO-0y;\n\tFri, 27 Mar 2026 17:35:01 +0100", "from ore by dude04 with local (Exim 4.98.2)\n\t(envelope-from <ore@pengutronix.de>)\n\tid 1w6A9F-0000000DnDN-0vkm;\n\tFri, 27 Mar 2026 17:35:01 +0100" ], "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774629321; cv=none;\n b=p1gsBxSaiUxexaohwZHZEcTJFP5dGopESackQ8ixtTzwasb97/8qDrUMXSHd7qIdW1jDZX7N99+mZ7AqH/PwaLUZUHibvH7zYTlB6l0QEIfBjG7Mqu9VWBGLk26queFaV3pYQNI0sUmV8L+p8unuhotunWaMM5JGpuP1wMlPIsU=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774629321; c=relaxed/simple;\n\tbh=8xtnfyOCPoMAjd/pmwd2+flY4k9ekfKU3fDWMuAiUOs=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=Vx0qHXHs8OlqXgBe2HwgZe/xf4bVcb14g5tzDKDdUAhMsrHjzOnQFrmXq2YN+v/4rqmhhHJJPbdxEerWSRlXfufA3rU2k5mahphGRmlTc9yg4vDOeimGMWtFTnAJrqkz59BtrcqKAAgtx0tlbKOKjq7mos5IsllG6Z7rkvwoadk=", "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 v7 3/6] pinctrl: core: Make pin group callbacks optional for\n pin-only drivers", "Date": "Fri, 27 Mar 2026 17:34:47 +0100", "Message-ID": "<20260327163450.3287313-4-o.rempel@pengutronix.de>", "X-Mailer": "git-send-email 2.47.3", "In-Reply-To": "<20260327163450.3287313-1-o.rempel@pengutronix.de>", "References": "<20260327163450.3287313-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 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": [ "v7", "3/6" ] }