aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/watchdog/nuc900_wdt.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/watchdog/nuc900_wdt.c')
-rw-r--r--drivers/watchdog/nuc900_wdt.c50
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
63struct nuc900_wdt { 63struct 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
245static int nuc900wdt_probe(struct platform_device *pdev) 244static 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
299err_clk: 287err_clk:
300 clk_disable(nuc900_wdt->wdt_clock); 288 clk_disable(nuc900_wdt->wdt_clock);
301 clk_put(nuc900_wdt->wdt_clock);
302err_map:
303 iounmap(nuc900_wdt->wdt_base);
304err_req:
305 release_mem_region(nuc900_wdt->res->start,
306 resource_size(nuc900_wdt->res));
307err_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}