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>
This commit is contained in:
Prathamesh Shete 2026-02-17 08:14:31 +00:00 committed by Bartosz Golaszewski
parent 2423e336d9
commit 2c299030c6

View File

@ -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;