summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrathamesh Shete <pshete@nvidia.com>2026-02-17 11:14:31 +0300
committerBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>2026-02-23 12:39:33 +0300
commit2c299030c6813eaa9ef95773c64d65c50fa706ac (patch)
tree2741fcc941f9aad12179780a194ea51d73791137
parent2423e336d94868f0d2fcd81a87b90c5ea59736e0 (diff)
downloadlinux-2c299030c6813eaa9ef95773c64d65c50fa706ac.tar.xz
gpio: tegra186: Support multi-socket devices
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@nvidia.com> Acked-by: Thierry Reding <treding@nvidia.com> Reviewed-by: Jon Hunter <jonathanh@nvidia.com> Link: https://patch.msgid.link/20260217081431.1208351-2-pshete@nvidia.com Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
-rw-r--r--drivers/gpio/gpio-tegra186.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/gpio/gpio-tegra186.c b/drivers/gpio/gpio-tegra186.c
index f04cc240b5ec..fb26402b6c47 100644
--- a/drivers/gpio/gpio-tegra186.c
+++ b/drivers/gpio/gpio-tegra186.c
@@ -857,7 +857,7 @@ static int tegra186_gpio_probe(struct platform_device *pdev)
struct device_node *np;
struct resource *res;
char **names;
- int err;
+ int node, err;
gpio = devm_kzalloc(&pdev->dev, sizeof(*gpio), GFP_KERNEL);
if (!gpio)
@@ -937,13 +937,23 @@ static int tegra186_gpio_probe(struct platform_device *pdev)
if (!names)
return -ENOMEM;
+ node = dev_to_node(&pdev->dev);
+
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++) {
- name = devm_kasprintf(gpio->gpio.parent, GFP_KERNEL, "%sP%s.%02x",
- gpio->soc->prefix ?: "", port->name, j);
+ if (node >= 0)
+ name = devm_kasprintf(gpio->gpio.parent, GFP_KERNEL,
+ "%d-%sP%s.%02x", node,
+ gpio->soc->prefix ?: "",
+ port->name, j);
+ else
+ name = devm_kasprintf(gpio->gpio.parent, GFP_KERNEL,
+ "%sP%s.%02x",
+ gpio->soc->prefix ?: "",
+ port->name, j);
if (!name)
return -ENOMEM;