Re: [PATCH 2/4] pinctrl: at91: Fix failure path in at91_gpio_probe path

2014-09-05 Thread Linus Walleij
On Sun, Aug 31, 2014 at 1:21 PM, Pramod Gurav
 wrote:

> This fixes the whole error handling in probe function by capturing and
> returning error values on kernel function like clk_prepare,
> clk_enable, gpiochip_add etc.
>
> CC: Jean-Christophe Plagniol-Villard 
> CC: Linus Walleij 
> Signed-off-by: Pramod Gurav 
> ---
>  drivers/pinctrl/pinctrl-at91.c |   20 +---
>  1 files changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
> index 480460d..7abe683 100644
> --- a/drivers/pinctrl/pinctrl-at91.c
> +++ b/drivers/pinctrl/pinctrl-at91.c
> @@ -1578,16 +1578,19 @@ static int at91_gpio_probe(struct platform_device 
> *pdev)
> at91_chip->clock = devm_clk_get(&pdev->dev, NULL);
> if (IS_ERR(at91_chip->clock)) {
> dev_err(&pdev->dev, "failed to get clock, ignoring.\n");
> +   ret = IS_ERR(at91_chip->clock);

No. IS_ERR() returns a bool.

You want to use PTR_ERR().

Yours,
Linus Walleij
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/4] pinctrl: at91: Fix failure path in at91_gpio_probe path

2014-08-31 Thread Pramod Gurav
This fixes the whole error handling in probe function by capturing and
returning error values on kernel function like clk_prepare,
clk_enable, gpiochip_add etc.

CC: Jean-Christophe Plagniol-Villard 
CC: Linus Walleij 
Signed-off-by: Pramod Gurav 
---
 drivers/pinctrl/pinctrl-at91.c |   20 +---
 1 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
index 480460d..7abe683 100644
--- a/drivers/pinctrl/pinctrl-at91.c
+++ b/drivers/pinctrl/pinctrl-at91.c
@@ -1578,16 +1578,19 @@ static int at91_gpio_probe(struct platform_device *pdev)
at91_chip->clock = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(at91_chip->clock)) {
dev_err(&pdev->dev, "failed to get clock, ignoring.\n");
+   ret = IS_ERR(at91_chip->clock);
goto err;
}
 
-   if (clk_prepare(at91_chip->clock))
-   goto err;
+   ret = clk_prepare(at91_chip->clock);
+   if (ret)
+   goto clk_prepare_err;
 
/* enable PIO controller's clock */
-   if (clk_enable(at91_chip->clock)) {
+   ret = clk_enable(at91_chip->clock);
+   if (ret) {
dev_err(&pdev->dev, "failed to enable clock, ignoring.\n");
-   goto clk_err;
+   goto clk_enable_err;
}
 
at91_chip->chip = at91_gpio_template;
@@ -1612,7 +1615,7 @@ static int at91_gpio_probe(struct platform_device *pdev)
 
if (!names) {
ret = -ENOMEM;
-   goto clk_err;
+   goto clk_enable_err;
}
 
for (i = 0; i < chip->ngpio; i++)
@@ -1630,7 +1633,7 @@ static int at91_gpio_probe(struct platform_device *pdev)
 
ret = gpiochip_add(chip);
if (ret)
-   goto clk_err;
+   goto gpiochip_add_err;
 
gpio_chips[alias_idx] = at91_chip;
gpio_banks = max(gpio_banks, alias_idx + 1);
@@ -1643,8 +1646,11 @@ static int at91_gpio_probe(struct platform_device *pdev)
 
return 0;
 
-clk_err:
+gpiochip_add_err:
+   clk_disable(at91_chip->clock);
+clk_enable_err:
clk_unprepare(at91_chip->clock);
+clk_prepare_err:
 err:
dev_err(&pdev->dev, "Failure %i for GPIO %i\n", ret, alias_idx);
 
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/