Patchwork [1/8] drivers/rtc/rtc-88pm860x.c: Use devm_* APIs

login
register
mail settings
Submitter Sachin Kamat
Date April 2, 2013, 6:24 a.m.
Message ID <1364883895-20865-1-git-send-email-sachin.kamat@linaro.org>
Download mbox | patch
Permalink /patch/232891/
State New
Headers show

Comments

Sachin Kamat - April 2, 2013, 6:24 a.m.
devm_* functions are device managed and make cleanup
code simpler.

Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Cc: Haojian Zhuang <haojian.zhuang@linaro.org>
---
 drivers/rtc/rtc-88pm860x.c |   29 +++++++++++------------------
 1 file changed, 11 insertions(+), 18 deletions(-)
Haojian Zhuang - April 2, 2013, 6:59 a.m.
On 2 April 2013 14:24, Sachin Kamat <sachin.kamat@linaro.org> wrote:
> devm_* functions are device managed and make cleanup
> code simpler.
>
> Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
> Cc: Haojian Zhuang <haojian.zhuang@linaro.org>
> ---
>  drivers/rtc/rtc-88pm860x.c |   29 +++++++++++------------------
>  1 file changed, 11 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/rtc/rtc-88pm860x.c b/drivers/rtc/rtc-88pm860x.c
> index f663746..0f2b91b 100644
> --- a/drivers/rtc/rtc-88pm860x.c
> +++ b/drivers/rtc/rtc-88pm860x.c
> @@ -318,14 +318,14 @@ static int pm860x_rtc_probe(struct platform_device *pdev)
>
>         pdata = pdev->dev.platform_data;
>
> -       info = kzalloc(sizeof(struct pm860x_rtc_info), GFP_KERNEL);
> +       info = devm_kzalloc(&pdev->dev, sizeof(struct pm860x_rtc_info),
> +                           GFP_KERNEL);
>         if (!info)
>                 return -ENOMEM;
>         info->irq = platform_get_irq(pdev, 0);
>         if (info->irq < 0) {
>                 dev_err(&pdev->dev, "No IRQ resource!\n");
> -               ret = -EINVAL;
> -               goto out;
> +               return info->irq;
>         }
>
>         info->chip = chip;
> @@ -333,12 +333,13 @@ static int pm860x_rtc_probe(struct platform_device *pdev)
>         info->dev = &pdev->dev;
>         dev_set_drvdata(&pdev->dev, info);
>
> -       ret = request_threaded_irq(info->irq, NULL, rtc_update_handler,
> -                                  IRQF_ONESHOT, "rtc", info);
> +       ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL,
> +                                       rtc_update_handler, IRQF_ONESHOT, "rtc",
> +                                       info);
>         if (ret < 0) {
>                 dev_err(chip->dev, "Failed to request IRQ: #%d: %d\n",
>                         info->irq, ret);
> -               goto out;
> +               return ret;
>         }
>
>         /* set addresses of 32-bit base value for RTC time */
> @@ -350,7 +351,7 @@ static int pm860x_rtc_probe(struct platform_device *pdev)
>         ret = pm860x_rtc_read_time(&pdev->dev, &tm);
>         if (ret < 0) {
>                 dev_err(&pdev->dev, "Failed to read initial time.\n");
> -               goto out_rtc;
> +               return ret;
>         }
>         if ((tm.tm_year < 70) || (tm.tm_year > 138)) {
>                 tm.tm_year = 70;
> @@ -362,7 +363,7 @@ static int pm860x_rtc_probe(struct platform_device *pdev)
>                 ret = pm860x_rtc_set_time(&pdev->dev, &tm);
>                 if (ret < 0) {
>                         dev_err(&pdev->dev, "Failed to set initial time.\n");
> -                       goto out_rtc;
> +                       return ret;
>                 }
>         }
>         rtc_tm_to_time(&tm, &ticks);
> @@ -373,12 +374,12 @@ static int pm860x_rtc_probe(struct platform_device *pdev)
>                 }
>         }
>
> -       info->rtc_dev = rtc_device_register("88pm860x-rtc", &pdev->dev,
> +       info->rtc_dev = devm_rtc_device_register(&pdev->dev, "88pm860x-rtc",
>                                             &pm860x_rtc_ops, THIS_MODULE);
>         ret = PTR_ERR(info->rtc_dev);
>         if (IS_ERR(info->rtc_dev)) {
>                 dev_err(&pdev->dev, "Failed to register RTC device: %d\n", ret);
> -               goto out_rtc;
> +               return ret;
>         }
>
>         /*
> @@ -405,11 +406,6 @@ static int pm860x_rtc_probe(struct platform_device *pdev)
>         device_init_wakeup(&pdev->dev, 1);
>
>         return 0;
> -out_rtc:
> -       free_irq(info->irq, info);
> -out:
> -       kfree(info);
> -       return ret;
>  }
>
>  static int pm860x_rtc_remove(struct platform_device *pdev)
> @@ -423,9 +419,6 @@ static int pm860x_rtc_remove(struct platform_device *pdev)
>  #endif /* VRTC_CALIBRATION */
>
>         platform_set_drvdata(pdev, NULL);
> -       rtc_device_unregister(info->rtc_dev);
> -       free_irq(info->irq, info);
> -       kfree(info);
>         return 0;
>  }
>
> --
> 1.7.9.5
>

Acked-by: Haojian Zhuang <haojian.zhuang@linaro.org>

Patch

diff --git a/drivers/rtc/rtc-88pm860x.c b/drivers/rtc/rtc-88pm860x.c
index f663746..0f2b91b 100644
--- a/drivers/rtc/rtc-88pm860x.c
+++ b/drivers/rtc/rtc-88pm860x.c
@@ -318,14 +318,14 @@  static int pm860x_rtc_probe(struct platform_device *pdev)
 
 	pdata = pdev->dev.platform_data;
 
-	info = kzalloc(sizeof(struct pm860x_rtc_info), GFP_KERNEL);
+	info = devm_kzalloc(&pdev->dev, sizeof(struct pm860x_rtc_info),
+			    GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 	info->irq = platform_get_irq(pdev, 0);
 	if (info->irq < 0) {
 		dev_err(&pdev->dev, "No IRQ resource!\n");
-		ret = -EINVAL;
-		goto out;
+		return info->irq;
 	}
 
 	info->chip = chip;
@@ -333,12 +333,13 @@  static int pm860x_rtc_probe(struct platform_device *pdev)
 	info->dev = &pdev->dev;
 	dev_set_drvdata(&pdev->dev, info);
 
-	ret = request_threaded_irq(info->irq, NULL, rtc_update_handler,
-				   IRQF_ONESHOT, "rtc", info);
+	ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL,
+					rtc_update_handler, IRQF_ONESHOT, "rtc",
+					info);
 	if (ret < 0) {
 		dev_err(chip->dev, "Failed to request IRQ: #%d: %d\n",
 			info->irq, ret);
-		goto out;
+		return ret;
 	}
 
 	/* set addresses of 32-bit base value for RTC time */
@@ -350,7 +351,7 @@  static int pm860x_rtc_probe(struct platform_device *pdev)
 	ret = pm860x_rtc_read_time(&pdev->dev, &tm);
 	if (ret < 0) {
 		dev_err(&pdev->dev, "Failed to read initial time.\n");
-		goto out_rtc;
+		return ret;
 	}
 	if ((tm.tm_year < 70) || (tm.tm_year > 138)) {
 		tm.tm_year = 70;
@@ -362,7 +363,7 @@  static int pm860x_rtc_probe(struct platform_device *pdev)
 		ret = pm860x_rtc_set_time(&pdev->dev, &tm);
 		if (ret < 0) {
 			dev_err(&pdev->dev, "Failed to set initial time.\n");
-			goto out_rtc;
+			return ret;
 		}
 	}
 	rtc_tm_to_time(&tm, &ticks);
@@ -373,12 +374,12 @@  static int pm860x_rtc_probe(struct platform_device *pdev)
 		}
 	}
 
-	info->rtc_dev = rtc_device_register("88pm860x-rtc", &pdev->dev,
+	info->rtc_dev = devm_rtc_device_register(&pdev->dev, "88pm860x-rtc",
 					    &pm860x_rtc_ops, THIS_MODULE);
 	ret = PTR_ERR(info->rtc_dev);
 	if (IS_ERR(info->rtc_dev)) {
 		dev_err(&pdev->dev, "Failed to register RTC device: %d\n", ret);
-		goto out_rtc;
+		return ret;
 	}
 
 	/*
@@ -405,11 +406,6 @@  static int pm860x_rtc_probe(struct platform_device *pdev)
 	device_init_wakeup(&pdev->dev, 1);
 
 	return 0;
-out_rtc:
-	free_irq(info->irq, info);
-out:
-	kfree(info);
-	return ret;
 }
 
 static int pm860x_rtc_remove(struct platform_device *pdev)
@@ -423,9 +419,6 @@  static int pm860x_rtc_remove(struct platform_device *pdev)
 #endif	/* VRTC_CALIBRATION */
 
 	platform_set_drvdata(pdev, NULL);
-	rtc_device_unregister(info->rtc_dev);
-	free_irq(info->irq, info);
-	kfree(info);
 	return 0;
 }