gpio/omap: free irq domain in probe() failure paths
authorJon Hunter <jon-hunter@ti.com>
Thu, 4 Apr 2013 20:16:12 +0000 (15:16 -0500)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 10 Apr 2013 21:41:16 +0000 (23:41 +0200)
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>
drivers/gpio/gpio-omap.c

index 352f9949c05444e70d1cae60e9fc362eee416d55..0de2e0d71b9266a5100497e34165dfb710668de4 100644 (file)
@@ -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);
 
@@ -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;
        }
 
@@ -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