Message ID | 1364883895-20865-1-git-send-email-sachin.kamat@linaro.org |
---|---|
State | Accepted |
Headers | show |
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>
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; }
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(-)