gpio: tegra186: fix resource handling in ACPI probe path
authorGuixin Liu <kanie@linux.alibaba.com>
Thu, 27 Mar 2025 03:23:49 +0000 (11:23 +0800)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Mon, 7 Apr 2025 06:53:10 +0000 (08:53 +0200)
When the Tegra186 GPIO controller is probed through ACPI matching,
the driver emits two error messages during probing:
  "tegra186-gpio NVDA0508:00: invalid resource (null)"
  "tegra186-gpio NVDA0508:00: invalid resource (null)"

Fix this by getting resource first and then do the ioremap.

Fixes: 2606e7c9f5fc ("gpio: tegra186: Add ACPI support")
Cc: stable@vger.kernel.org
Signed-off-by: Guixin Liu <kanie@linux.alibaba.com>
Link: https://lore.kernel.org/r/20250327032349.78809-1-kanie@linux.alibaba.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-tegra186.c

index 6895b65c86aff5b92bee2da0ad5f3306653828e6..d27bfac6c9f53d23806725f5fc89fd0331f4afb0 100644 (file)
@@ -823,6 +823,7 @@ static int tegra186_gpio_probe(struct platform_device *pdev)
        struct gpio_irq_chip *irq;
        struct tegra_gpio *gpio;
        struct device_node *np;
+       struct resource *res;
        char **names;
        int err;
 
@@ -842,19 +843,19 @@ static int tegra186_gpio_probe(struct platform_device *pdev)
        gpio->num_banks++;
 
        /* get register apertures */
-       gpio->secure = devm_platform_ioremap_resource_byname(pdev, "security");
-       if (IS_ERR(gpio->secure)) {
-               gpio->secure = devm_platform_ioremap_resource(pdev, 0);
-               if (IS_ERR(gpio->secure))
-                       return PTR_ERR(gpio->secure);
-       }
-
-       gpio->base = devm_platform_ioremap_resource_byname(pdev, "gpio");
-       if (IS_ERR(gpio->base)) {
-               gpio->base = devm_platform_ioremap_resource(pdev, 1);
-               if (IS_ERR(gpio->base))
-                       return PTR_ERR(gpio->base);
-       }
+       res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "security");
+       if (!res)
+               res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       gpio->secure = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(gpio->secure))
+               return PTR_ERR(gpio->secure);
+
+       res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "gpio");
+       if (!res)
+               res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+       gpio->base = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(gpio->base))
+               return PTR_ERR(gpio->base);
 
        err = platform_irq_count(pdev);
        if (err < 0)