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>
This commit is contained in:
@@ -312,8 +312,8 @@ static int altera_gpio_probe(struct platform_device *pdev)
|
|||||||
handle_simple_irq, IRQ_TYPE_NONE);
|
handle_simple_irq, IRQ_TYPE_NONE);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_info(&pdev->dev, "could not add irqchip\n");
|
dev_err(&pdev->dev, "could not add irqchip\n");
|
||||||
return ret;
|
goto teardown;
|
||||||
}
|
}
|
||||||
|
|
||||||
gpiochip_set_chained_irqchip(&altera_gc->mmchip.gc,
|
gpiochip_set_chained_irqchip(&altera_gc->mmchip.gc,
|
||||||
@@ -326,6 +326,7 @@ static int altera_gpio_probe(struct platform_device *pdev)
|
|||||||
skip_irq:
|
skip_irq:
|
||||||
return 0;
|
return 0;
|
||||||
teardown:
|
teardown:
|
||||||
|
of_mm_gpiochip_remove(&altera_gc->mmchip);
|
||||||
pr_err("%s: registration failed with status %d\n",
|
pr_err("%s: registration failed with status %d\n",
|
||||||
node->full_name, ret);
|
node->full_name, ret);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user