diff options
| author | Jon Hunter <jon-hunter@ti.com> | 2013-04-04 15:16:12 -0500 | 
|---|---|---|
| committer | Linus Walleij <linus.walleij@linaro.org> | 2013-04-10 23:41:16 +0200 | 
| commit | 879fe32438be9ff1ea2cf44e39e11b58206a76b2 (patch) | |
| tree | d9a45c4e94551ebb068c81054c445ba6ec71af82 /drivers/gpio/gpio-omap.c | |
| parent | 2b78f1e1389aef263071b9edf41c0980b092e601 (diff) | |
| download | olio-linux-3.10-879fe32438be9ff1ea2cf44e39e11b58206a76b2.tar.xz olio-linux-3.10-879fe32438be9ff1ea2cf44e39e11b58206a76b2.zip  | |
gpio/omap: free irq domain in probe() failure paths
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>
Diffstat (limited to 'drivers/gpio/gpio-omap.c')
| -rw-r--r-- | drivers/gpio/gpio-omap.c | 6 | 
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index 352f9949c05..0de2e0d71b9 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -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  |