Re: [PATCH] gpio: tegra186: Support multi-socket devices
From: Jon Hunter
Date: Tue Feb 17 2026 - 04:31:58 EST
On 16/02/2026 11:29, Bartosz Golaszewski wrote:
On Mon, 16 Feb 2026 05:58:42 +0100, Prathamesh Shete <pshete@xxxxxxxxxx> said:
On Tegra platforms, multiple SoC instances may be present with each
defining the same GPIO name. For such devices, this results in
duplicate GPIO names.
When the device has a valid NUMA node, prepend the NUMA node ID
to the GPIO name prefix. The node ID identifies each socket,
ensuring GPIO line names remain distinct across multiple sockets.
Signed-off-by: Prathamesh Shete <pshete@xxxxxxxxxx>
---
drivers/gpio/gpio-tegra186.c | 26 +++++++++++++++++---------
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/drivers/gpio/gpio-tegra186.c b/drivers/gpio/gpio-tegra186.c
index 9c874f07be75..daf5aaffa28a 100644
--- a/drivers/gpio/gpio-tegra186.c
+++ b/drivers/gpio/gpio-tegra186.c
@@ -857,7 +857,8 @@ static int tegra186_gpio_probe(struct platform_device *pdev)
struct device_node *np;
struct resource *res;
char **names;
- int err;
+ char *instance = "";
+ int node, err;
gpio = devm_kzalloc(&pdev->dev, sizeof(*gpio), GFP_KERNEL);
if (!gpio)
@@ -937,17 +938,21 @@ static int tegra186_gpio_probe(struct platform_device *pdev)
if (!names)
return -ENOMEM;
+ node = dev_to_node(&pdev->dev);
+ if (node >= 0) {
+ instance = devm_kasprintf(gpio->gpio.parent, GFP_KERNEL, "%d-", node);
I've never noticed it before (and it's not introduced by this patch) but I
really dislike the child device registering devres nodes with its parent...
+ if (!instance)
+ return -ENOMEM;
+ }
+
for (i = 0, offset = 0; i < gpio->soc->num_ports; i++) {
const struct tegra_gpio_port *port = &gpio->soc->ports[i];
char *name;
for (j = 0; j < port->pins; j++) {
- if (gpio->soc->prefix)
- name = devm_kasprintf(gpio->gpio.parent, GFP_KERNEL, "%s-P%s.%02x",
- gpio->soc->prefix, port->name, j);
- else
- name = devm_kasprintf(gpio->gpio.parent, GFP_KERNEL, "P%s.%02x",
- port->name, j);
+ name = devm_kasprintf(gpio->gpio.parent, GFP_KERNEL, "%s%sP%s.%02x",
+ instance ?: "", gpio->soc->prefix ?: "",
instance can't be NULL here, can it? Either print it unconditionally or
initialize it to NULL.
The other alternative here is that we just use 'instance' without the ternary operator because we initialise to "" ...
name = devm_kasprintf(gpio->gpio.parent, GFP_KERNEL, "%s%sP%s.%02x",
instance, gpio->soc->prefix ?: "",
port->name, j);
Jon
--
nvpublic