aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJingoo Han <jg1.han@samsung.com>2013-04-29 19:20:51 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-04-29 21:28:38 -0400
commitddb396f12556286dfb19f54f39293d8d3fe89c60 (patch)
treecb9ad3907dcfd24e0bc138563cf8841795ef1b8f
parent4ad21183da64a27fbe4bb547ae385ad1ff912690 (diff)
rtc: rtc-rp5c01: use devm_*() functions
Use devm_*() functions to make cleanup paths simpler. Signed-off-by: Jingoo Han <jg1.han@samsung.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/rtc/rtc-rp5c01.c26
1 files changed, 8 insertions, 18 deletions
diff --git a/drivers/rtc/rtc-rp5c01.c b/drivers/rtc/rtc-rp5c01.c
index d25d2f6c0cad..873c689f01c3 100644
--- a/drivers/rtc/rtc-rp5c01.c
+++ b/drivers/rtc/rtc-rp5c01.c
@@ -230,15 +230,13 @@ static int __init rp5c01_rtc_probe(struct platform_device *dev)
230 if (!res) 230 if (!res)
231 return -ENODEV; 231 return -ENODEV;
232 232
233 priv = kzalloc(sizeof(*priv), GFP_KERNEL); 233 priv = devm_kzalloc(&dev->dev, sizeof(*priv), GFP_KERNEL);
234 if (!priv) 234 if (!priv)
235 return -ENOMEM; 235 return -ENOMEM;
236 236
237 priv->regs = ioremap(res->start, resource_size(res)); 237 priv->regs = devm_ioremap(&dev->dev, res->start, resource_size(res));
238 if (!priv->regs) { 238 if (!priv->regs)
239 error = -ENOMEM; 239 return -ENOMEM;
240 goto out_free_priv;
241 }
242 240
243 sysfs_bin_attr_init(&priv->nvram_attr); 241 sysfs_bin_attr_init(&priv->nvram_attr);
244 priv->nvram_attr.attr.name = "nvram"; 242 priv->nvram_attr.attr.name = "nvram";
@@ -251,27 +249,22 @@ static int __init rp5c01_rtc_probe(struct platform_device *dev)
251 249
252 platform_set_drvdata(dev, priv); 250 platform_set_drvdata(dev, priv);
253 251
254 rtc = rtc_device_register("rtc-rp5c01", &dev->dev, &rp5c01_rtc_ops, 252 rtc = devm_rtc_device_register(&dev->dev, "rtc-rp5c01", &rp5c01_rtc_ops,
255 THIS_MODULE); 253 THIS_MODULE);
256 if (IS_ERR(rtc)) { 254 if (IS_ERR(rtc)) {
257 error = PTR_ERR(rtc); 255 error = PTR_ERR(rtc);
258 goto out_unmap; 256 goto out;
259 } 257 }
260 priv->rtc = rtc; 258 priv->rtc = rtc;
261 259
262 error = sysfs_create_bin_file(&dev->dev.kobj, &priv->nvram_attr); 260 error = sysfs_create_bin_file(&dev->dev.kobj, &priv->nvram_attr);
263 if (error) 261 if (error)
264 goto out_unregister; 262 goto out;
265 263
266 return 0; 264 return 0;
267 265
268out_unregister: 266out:
269 rtc_device_unregister(rtc);
270out_unmap:
271 platform_set_drvdata(dev, NULL); 267 platform_set_drvdata(dev, NULL);
272 iounmap(priv->regs);
273out_free_priv:
274 kfree(priv);
275 return error; 268 return error;
276} 269}
277 270
@@ -280,9 +273,6 @@ static int __exit rp5c01_rtc_remove(struct platform_device *dev)
280 struct rp5c01_priv *priv = platform_get_drvdata(dev); 273 struct rp5c01_priv *priv = platform_get_drvdata(dev);
281 274
282 sysfs_remove_bin_file(&dev->dev.kobj, &priv->nvram_attr); 275 sysfs_remove_bin_file(&dev->dev.kobj, &priv->nvram_attr);
283 rtc_device_unregister(priv->rtc);
284 iounmap(priv->regs);
285 kfree(priv);
286 return 0; 276 return 0;
287} 277}
288 278