| From 56bdf7270ff4f870e2d4bfacdc00161e766dba2d Mon Sep 17 00:00:00 2001 |
| From: David Thompson <davthompson@nvidia.com> |
| Date: Mon, 11 Aug 2025 13:50:44 -0400 |
| Subject: Revert "gpio: mlxbf3: only get IRQ for device instance 0" |
| |
| From: David Thompson <davthompson@nvidia.com> |
| |
| commit 56bdf7270ff4f870e2d4bfacdc00161e766dba2d upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/gpio/gpio-mlxbf3.c | 54 +++++++++++++++------------------------------ |
| 1 file changed, 19 insertions(+), 35 deletions(-) |
| |
| --- a/drivers/gpio/gpio-mlxbf3.c |
| +++ b/drivers/gpio/gpio-mlxbf3.c |
| @@ -190,9 +190,7 @@ static int mlxbf3_gpio_probe(struct plat |
| 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 plat |
| 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); |