]> Pileus Git - ~andy/linux/blobdiff - drivers/watchdog/riowd.c
Linux 3.14
[~andy/linux] / drivers / watchdog / riowd.c
index 0040451aec1dbd1d1542631072e3e4c0cb71719c..3dd8ed28adc8e92dad4c58c4a4663887a3492f8b 100644 (file)
@@ -183,7 +183,7 @@ static int riowd_probe(struct platform_device *op)
                goto out;
 
        err = -ENOMEM;
-       p = kzalloc(sizeof(*p), GFP_KERNEL);
+       p = devm_kzalloc(&op->dev, sizeof(*p), GFP_KERNEL);
        if (!p)
                goto out;
 
@@ -192,7 +192,7 @@ static int riowd_probe(struct platform_device *op)
        p->regs = of_ioremap(&op->resource[0], 0, 2, DRIVER_NAME);
        if (!p->regs) {
                pr_err("Cannot map registers\n");
-               goto out_free;
+               goto out;
        }
        /* Make miscdev useable right away */
        riowd_device = p;
@@ -206,27 +206,23 @@ static int riowd_probe(struct platform_device *op)
        pr_info("Hardware watchdog [%i minutes], regs at %p\n",
                riowd_timeout, p->regs);
 
-       dev_set_drvdata(&op->dev, p);
+       platform_set_drvdata(op, p);
        return 0;
 
 out_iounmap:
        riowd_device = NULL;
        of_iounmap(&op->resource[0], p->regs, 2);
 
-out_free:
-       kfree(p);
-
 out:
        return err;
 }
 
 static int riowd_remove(struct platform_device *op)
 {
-       struct riowd *p = dev_get_drvdata(&op->dev);
+       struct riowd *p = platform_get_drvdata(op);
 
        misc_deregister(&riowd_miscdev);
        of_iounmap(&op->resource[0], p->regs, 2);
-       kfree(p);
 
        return 0;
 }