diff options
author | Jingoo Han <jg1.han@samsung.com> | 2013-04-30 01:01:25 -0400 |
---|---|---|
committer | Wim Van Sebroeck <wim@iguana.be> | 2013-07-11 14:54:53 -0400 |
commit | 3666eb028827c3a9df942cbc0a16388898c5a686 (patch) | |
tree | 92ebf5835b4597f032544533edfaec99b17f2d52 /drivers/watchdog | |
parent | ac1bb694c05302a0552c5a34ba701f246004bc03 (diff) |
watchdog: nuc900_wdt: use devm_*() functions
Use devm_*() functions to make cleanup paths simpler.
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Diffstat (limited to 'drivers/watchdog')
-rw-r--r-- | drivers/watchdog/nuc900_wdt.c | 50 |
1 files changed, 11 insertions, 39 deletions
diff --git a/drivers/watchdog/nuc900_wdt.c b/drivers/watchdog/nuc900_wdt.c index 04c45a102992..e2b6d2cf5c9d 100644 --- a/drivers/watchdog/nuc900_wdt.c +++ b/drivers/watchdog/nuc900_wdt.c | |||
@@ -61,7 +61,6 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started " | |||
61 | "(default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | 61 | "(default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); |
62 | 62 | ||
63 | struct nuc900_wdt { | 63 | struct nuc900_wdt { |
64 | struct resource *res; | ||
65 | struct clk *wdt_clock; | 64 | struct clk *wdt_clock; |
66 | struct platform_device *pdev; | 65 | struct platform_device *pdev; |
67 | void __iomem *wdt_base; | 66 | void __iomem *wdt_base; |
@@ -244,9 +243,11 @@ static struct miscdevice nuc900wdt_miscdev = { | |||
244 | 243 | ||
245 | static int nuc900wdt_probe(struct platform_device *pdev) | 244 | static int nuc900wdt_probe(struct platform_device *pdev) |
246 | { | 245 | { |
246 | struct resource *res; | ||
247 | int ret = 0; | 247 | int ret = 0; |
248 | 248 | ||
249 | nuc900_wdt = kzalloc(sizeof(struct nuc900_wdt), GFP_KERNEL); | 249 | nuc900_wdt = devm_kzalloc(&pdev->dev, sizeof(*nuc900_wdt), |
250 | GFP_KERNEL); | ||
250 | if (!nuc900_wdt) | 251 | if (!nuc900_wdt) |
251 | return -ENOMEM; | 252 | return -ENOMEM; |
252 | 253 | ||
@@ -254,33 +255,20 @@ static int nuc900wdt_probe(struct platform_device *pdev) | |||
254 | 255 | ||
255 | spin_lock_init(&nuc900_wdt->wdt_lock); | 256 | spin_lock_init(&nuc900_wdt->wdt_lock); |
256 | 257 | ||
257 | nuc900_wdt->res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 258 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
258 | if (nuc900_wdt->res == NULL) { | 259 | if (res == NULL) { |
259 | dev_err(&pdev->dev, "no memory resource specified\n"); | 260 | dev_err(&pdev->dev, "no memory resource specified\n"); |
260 | ret = -ENOENT; | 261 | return -ENOENT; |
261 | goto err_get; | ||
262 | } | 262 | } |
263 | 263 | ||
264 | if (!request_mem_region(nuc900_wdt->res->start, | 264 | nuc900_wdt->wdt_base = devm_ioremap_resource(&pdev->dev, res); |
265 | resource_size(nuc900_wdt->res), pdev->name)) { | 265 | if (IS_ERR(nuc900_wdt->wdt_base)) |
266 | dev_err(&pdev->dev, "failed to get memory region\n"); | 266 | return PTR_ERR(nuc900_wdt->wdt_base); |
267 | ret = -ENOENT; | ||
268 | goto err_get; | ||
269 | } | ||
270 | |||
271 | nuc900_wdt->wdt_base = ioremap(nuc900_wdt->res->start, | ||
272 | resource_size(nuc900_wdt->res)); | ||
273 | if (nuc900_wdt->wdt_base == NULL) { | ||
274 | dev_err(&pdev->dev, "failed to ioremap() region\n"); | ||
275 | ret = -EINVAL; | ||
276 | goto err_req; | ||
277 | } | ||
278 | 267 | ||
279 | nuc900_wdt->wdt_clock = clk_get(&pdev->dev, NULL); | 268 | nuc900_wdt->wdt_clock = devm_clk_get(&pdev->dev, NULL); |
280 | if (IS_ERR(nuc900_wdt->wdt_clock)) { | 269 | if (IS_ERR(nuc900_wdt->wdt_clock)) { |
281 | dev_err(&pdev->dev, "failed to find watchdog clock source\n"); | 270 | dev_err(&pdev->dev, "failed to find watchdog clock source\n"); |
282 | ret = PTR_ERR(nuc900_wdt->wdt_clock); | 271 | return PTR_ERR(nuc900_wdt->wdt_clock); |
283 | goto err_map; | ||
284 | } | 272 | } |
285 | 273 | ||
286 | clk_enable(nuc900_wdt->wdt_clock); | 274 | clk_enable(nuc900_wdt->wdt_clock); |
@@ -298,14 +286,6 @@ static int nuc900wdt_probe(struct platform_device *pdev) | |||
298 | 286 | ||
299 | err_clk: | 287 | err_clk: |
300 | clk_disable(nuc900_wdt->wdt_clock); | 288 | clk_disable(nuc900_wdt->wdt_clock); |
301 | clk_put(nuc900_wdt->wdt_clock); | ||
302 | err_map: | ||
303 | iounmap(nuc900_wdt->wdt_base); | ||
304 | err_req: | ||
305 | release_mem_region(nuc900_wdt->res->start, | ||
306 | resource_size(nuc900_wdt->res)); | ||
307 | err_get: | ||
308 | kfree(nuc900_wdt); | ||
309 | return ret; | 289 | return ret; |
310 | } | 290 | } |
311 | 291 | ||
@@ -314,14 +294,6 @@ static int nuc900wdt_remove(struct platform_device *pdev) | |||
314 | misc_deregister(&nuc900wdt_miscdev); | 294 | misc_deregister(&nuc900wdt_miscdev); |
315 | 295 | ||
316 | clk_disable(nuc900_wdt->wdt_clock); | 296 | clk_disable(nuc900_wdt->wdt_clock); |
317 | clk_put(nuc900_wdt->wdt_clock); | ||
318 | |||
319 | iounmap(nuc900_wdt->wdt_base); | ||
320 | |||
321 | release_mem_region(nuc900_wdt->res->start, | ||
322 | resource_size(nuc900_wdt->res)); | ||
323 | |||
324 | kfree(nuc900_wdt); | ||
325 | 297 | ||
326 | return 0; | 298 | return 0; |
327 | } | 299 | } |