Skip to content

Commit

Permalink
gpio/omap: free irq domain in probe() failure paths
Browse files Browse the repository at this point in the history
Currently the IRQ domain is not freed once allocated, in the case where
omap_gpio_probe() fails. Therefore, ensure we free the domain if the
probe does fail. Furthermore, the local variable "ret" is not needed
and so remove this.

Signed-off-by: Jon Hunter <jon-hunter@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Reviewed-by: Kevin Hilman <khilman@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
  • Loading branch information
Jon Hunter authored and Linus Walleij committed Apr 10, 2013
1 parent 2b78f1e commit 879fe32
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions drivers/gpio/gpio-omap.c
Original file line number Diff line number Diff line change
Expand Up @@ -1094,7 +1094,6 @@ static int omap_gpio_probe(struct platform_device *pdev)
const struct omap_gpio_platform_data *pdata;
struct resource *res;
struct gpio_bank *bank;
int ret = 0;

match = of_match_device(of_match_ptr(omap_gpio_match), dev);

Expand Down Expand Up @@ -1143,18 +1142,21 @@ static int omap_gpio_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (unlikely(!res)) {
dev_err(dev, "Invalid mem resource\n");
irq_domain_remove(bank->domain);
return -ENODEV;
}

if (!devm_request_mem_region(dev, res->start, resource_size(res),
pdev->name)) {
dev_err(dev, "Region already claimed\n");
irq_domain_remove(bank->domain);
return -EBUSY;
}

bank->base = devm_ioremap(dev, res->start, resource_size(res));
if (!bank->base) {
dev_err(dev, "Could not ioremap\n");
irq_domain_remove(bank->domain);
return -ENOMEM;
}

Expand All @@ -1178,7 +1180,7 @@ static int omap_gpio_probe(struct platform_device *pdev)

list_add_tail(&bank->node, &omap_gpio_list);

return ret;
return 0;
}

#ifdef CONFIG_ARCH_OMAP2PLUS
Expand Down

0 comments on commit 879fe32

Please sign in to comment.