diff options
author | Phil Reid <preid@electromag.com.au> | 2016-01-14 22:32:22 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2016-01-27 04:50:22 -0500 |
commit | 73c13c83491142e2ee7850159fc73b5e0967806f (patch) | |
tree | be726c397004417ccdcea53ec26b3c02cde297a6 | |
parent | 92e963f50fc74041b5e9e744c330dca48e04f08d (diff) |
gpio: gpio-altera: Remove gpiochip on probe failure.
On failure to setup the irq altera_gpio_probe would return an error
but not go to cleanup. This resulted in kernel fault
"Unable to handle kernel paging request at virtual address xxxxxxxx"
later on in of_gpiochip_find_and_xlate.
Signed-off-by: Phil Reid <preid@electromag.com.au>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r-- | drivers/gpio/gpio-altera.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gpio/gpio-altera.c b/drivers/gpio/gpio-altera.c index 2aeaebd1c6e7..3f87a03abc22 100644 --- a/drivers/gpio/gpio-altera.c +++ b/drivers/gpio/gpio-altera.c | |||
@@ -312,8 +312,8 @@ static int altera_gpio_probe(struct platform_device *pdev) | |||
312 | handle_simple_irq, IRQ_TYPE_NONE); | 312 | handle_simple_irq, IRQ_TYPE_NONE); |
313 | 313 | ||
314 | if (ret) { | 314 | if (ret) { |
315 | dev_info(&pdev->dev, "could not add irqchip\n"); | 315 | dev_err(&pdev->dev, "could not add irqchip\n"); |
316 | return ret; | 316 | goto teardown; |
317 | } | 317 | } |
318 | 318 | ||
319 | gpiochip_set_chained_irqchip(&altera_gc->mmchip.gc, | 319 | gpiochip_set_chained_irqchip(&altera_gc->mmchip.gc, |
@@ -326,6 +326,7 @@ static int altera_gpio_probe(struct platform_device *pdev) | |||
326 | skip_irq: | 326 | skip_irq: |
327 | return 0; | 327 | return 0; |
328 | teardown: | 328 | teardown: |
329 | of_mm_gpiochip_remove(&altera_gc->mmchip); | ||
329 | pr_err("%s: registration failed with status %d\n", | 330 | pr_err("%s: registration failed with status %d\n", |
330 | node->full_name, ret); | 331 | node->full_name, ret); |
331 | 332 | ||