| From fb522512156e4efbea747ce99d8bca7304aec9ce Mon Sep 17 00:00:00 2001 |
| From: Anson Huang <Anson.Huang@nxp.com> |
| Date: Thu, 19 Sep 2019 17:39:17 +0800 |
| Subject: [PATCH] gpio: mxc: Only get the second IRQ when there is more than |
| one IRQ |
| |
| commit c8f3d144004dd3f471ffd414690d15a005e4acd6 upstream. |
| |
| On some of i.MX SoCs like i.MX8QXP, there is ONLY one IRQ for each |
| GPIO bank, so it is better to check the IRQ count before getting |
| second IRQ to avoid below error message during probe: |
| |
| [ 1.070908] gpio-mxc 5d080000.gpio: IRQ index 1 not found |
| [ 1.077420] gpio-mxc 5d090000.gpio: IRQ index 1 not found |
| [ 1.083766] gpio-mxc 5d0a0000.gpio: IRQ index 1 not found |
| [ 1.090122] gpio-mxc 5d0b0000.gpio: IRQ index 1 not found |
| [ 1.096470] gpio-mxc 5d0c0000.gpio: IRQ index 1 not found |
| [ 1.102804] gpio-mxc 5d0d0000.gpio: IRQ index 1 not found |
| [ 1.109144] gpio-mxc 5d0e0000.gpio: IRQ index 1 not found |
| [ 1.115475] gpio-mxc 5d0f0000.gpio: IRQ index 1 not found |
| |
| Signed-off-by: Anson Huang <Anson.Huang@nxp.com> |
| Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c |
| index b2813580c582..5d2a1edc0960 100644 |
| --- a/drivers/gpio/gpio-mxc.c |
| +++ b/drivers/gpio/gpio-mxc.c |
| @@ -411,6 +411,7 @@ static int mxc_gpio_probe(struct platform_device *pdev) |
| { |
| struct device_node *np = pdev->dev.of_node; |
| struct mxc_gpio_port *port; |
| + int irq_count; |
| int irq_base; |
| int err; |
| |
| @@ -426,9 +427,15 @@ static int mxc_gpio_probe(struct platform_device *pdev) |
| if (IS_ERR(port->base)) |
| return PTR_ERR(port->base); |
| |
| - port->irq_high = platform_get_irq(pdev, 1); |
| - if (port->irq_high < 0) |
| - port->irq_high = 0; |
| + irq_count = platform_irq_count(pdev); |
| + if (irq_count < 0) |
| + return irq_count; |
| + |
| + if (irq_count > 1) { |
| + port->irq_high = platform_get_irq(pdev, 1); |
| + if (port->irq_high < 0) |
| + port->irq_high = 0; |
| + } |
| |
| port->irq = platform_get_irq(pdev, 0); |
| if (port->irq < 0) |
| -- |
| 2.7.4 |
| |