Revert "gpio: mlxbf3: only get IRQ for device instance 0"
authorDavid Thompson <davthompson@nvidia.com>
Mon, 11 Aug 2025 17:50:44 +0000 (13:50 -0400)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Tue, 12 Aug 2025 13:40:15 +0000 (15:40 +0200)
This reverts commit 10af0273a35ab4513ca1546644b8c853044da134.

While this change was merged, it is not the preferred solution.
During review of a similar change to the gpio-mlxbf2 driver, the
use of "platform_get_irq_optional" was identified as the preferred
solution, so let's use it for gpio-mlxbf3 driver as well.

Cc: stable@vger.kernel.org
Fixes: 10af0273a35a ("gpio: mlxbf3: only get IRQ for device instance 0")
Signed-off-by: David Thompson <davthompson@nvidia.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/8d2b630c71b3742f2c74242cf7d602706a6108e6.1754928650.git.davthompson@nvidia.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-mlxbf3.c

index 9875e34bde72a401e2ac8b28ba9a549c160f9d58..10ea71273c891521ac4e4f210d3441faa77e3309 100644 (file)
@@ -190,9 +190,7 @@ static int mlxbf3_gpio_probe(struct platform_device *pdev)
        struct mlxbf3_gpio_context *gs;
        struct gpio_irq_chip *girq;
        struct gpio_chip *gc;
-       char *colon_ptr;
        int ret, irq;
-       long num;
 
        gs = devm_kzalloc(dev, sizeof(*gs), GFP_KERNEL);
        if (!gs)
@@ -229,39 +227,25 @@ static int mlxbf3_gpio_probe(struct platform_device *pdev)
        gc->owner = THIS_MODULE;
        gc->add_pin_ranges = mlxbf3_gpio_add_pin_ranges;
 
-       colon_ptr = strchr(dev_name(dev), ':');
-       if (!colon_ptr) {
-               dev_err(dev, "invalid device name format\n");
-               return -EINVAL;
-       }
-
-       ret = kstrtol(++colon_ptr, 16, &num);
-       if (ret) {
-               dev_err(dev, "invalid device instance\n");
-               return ret;
-       }
-
-       if (!num) {
-               irq = platform_get_irq(pdev, 0);
-               if (irq >= 0) {
-                       girq = &gs->gc.irq;
-                       gpio_irq_chip_set_chip(girq, &gpio_mlxbf3_irqchip);
-                       girq->default_type = IRQ_TYPE_NONE;
-                       /* This will let us handle the parent IRQ in the driver */
-                       girq->num_parents = 0;
-                       girq->parents = NULL;
-                       girq->parent_handler = NULL;
-                       girq->handler = handle_bad_irq;
-
-                       /*
-                        * Directly request the irq here instead of passing
-                        * a flow-handler because the irq is shared.
-                        */
-                       ret = devm_request_irq(dev, irq, mlxbf3_gpio_irq_handler,
-                                              IRQF_SHARED, dev_name(dev), gs);
-                       if (ret)
-                               return dev_err_probe(dev, ret, "failed to request IRQ");
-               }
+       irq = platform_get_irq(pdev, 0);
+       if (irq >= 0) {
+               girq = &gs->gc.irq;
+               gpio_irq_chip_set_chip(girq, &gpio_mlxbf3_irqchip);
+               girq->default_type = IRQ_TYPE_NONE;
+               /* This will let us handle the parent IRQ in the driver */
+               girq->num_parents = 0;
+               girq->parents = NULL;
+               girq->parent_handler = NULL;
+               girq->handler = handle_bad_irq;
+
+               /*
+                * Directly request the irq here instead of passing
+                * a flow-handler because the irq is shared.
+                */
+               ret = devm_request_irq(dev, irq, mlxbf3_gpio_irq_handler,
+                                      IRQF_SHARED, dev_name(dev), gs);
+               if (ret)
+                       return dev_err_probe(dev, ret, "failed to request IRQ");
        }
 
        platform_set_drvdata(pdev, gs);