Merge remote-tracking branch 'linus/master' into testing
[cascardo/linux.git] / drivers / watchdog / ts72xx_wdt.c
index b8a9245..4da59b4 100644 (file)
@@ -396,7 +396,7 @@ static int ts72xx_wdt_probe(struct platform_device *pdev)
        struct resource *r1, *r2;
        int error = 0;
 
-       wdt = kzalloc(sizeof(struct ts72xx_wdt), GFP_KERNEL);
+       wdt = devm_kzalloc(&pdev->dev, sizeof(struct ts72xx_wdt), GFP_KERNEL);
        if (!wdt) {
                dev_err(&pdev->dev, "failed to allocate memory\n");
                return -ENOMEM;
@@ -405,44 +405,22 @@ static int ts72xx_wdt_probe(struct platform_device *pdev)
        r1 = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!r1) {
                dev_err(&pdev->dev, "failed to get memory resource\n");
-               error = -ENODEV;
-               goto fail;
+               return -ENODEV;
        }
 
-       r1 = request_mem_region(r1->start, resource_size(r1), pdev->name);
-       if (!r1) {
-               dev_err(&pdev->dev, "cannot request memory region\n");
-               error = -EBUSY;
-               goto fail;
-       }
-
-       wdt->control_reg = ioremap(r1->start, resource_size(r1));
-       if (!wdt->control_reg) {
-               dev_err(&pdev->dev, "failed to map memory\n");
-               error = -ENODEV;
-               goto fail_free_control;
-       }
+       wdt->control_reg = devm_ioremap_resource(&pdev->dev, r1);
+       if (IS_ERR(wdt->control_reg))
+               return PTR_ERR(wdt->control_reg);
 
        r2 = platform_get_resource(pdev, IORESOURCE_MEM, 1);
        if (!r2) {
                dev_err(&pdev->dev, "failed to get memory resource\n");
-               error = -ENODEV;
-               goto fail_unmap_control;
-       }
-
-       r2 = request_mem_region(r2->start, resource_size(r2), pdev->name);
-       if (!r2) {
-               dev_err(&pdev->dev, "cannot request memory region\n");
-               error = -EBUSY;
-               goto fail_unmap_control;
+               return -ENODEV;
        }
 
-       wdt->feed_reg = ioremap(r2->start, resource_size(r2));
-       if (!wdt->feed_reg) {
-               dev_err(&pdev->dev, "failed to map memory\n");
-               error = -ENODEV;
-               goto fail_free_feed;
-       }
+       wdt->feed_reg = devm_ioremap_resource(&pdev->dev, r2);
+       if (IS_ERR(wdt->feed_reg))
+               return PTR_ERR(wdt->feed_reg);
 
        platform_set_drvdata(pdev, wdt);
        ts72xx_wdt_pdev = pdev;
@@ -455,45 +433,20 @@ static int ts72xx_wdt_probe(struct platform_device *pdev)
        error = misc_register(&ts72xx_wdt_miscdev);
        if (error) {
                dev_err(&pdev->dev, "failed to register miscdev\n");
-               goto fail_unmap_feed;
+               return error;
        }
 
        dev_info(&pdev->dev, "TS-72xx Watchdog driver\n");
 
        return 0;
-
-fail_unmap_feed:
-       platform_set_drvdata(pdev, NULL);
-       iounmap(wdt->feed_reg);
-fail_free_feed:
-       release_mem_region(r2->start, resource_size(r2));
-fail_unmap_control:
-       iounmap(wdt->control_reg);
-fail_free_control:
-       release_mem_region(r1->start, resource_size(r1));
-fail:
-       kfree(wdt);
-       return error;
 }
 
 static int ts72xx_wdt_remove(struct platform_device *pdev)
 {
-       struct ts72xx_wdt *wdt = platform_get_drvdata(pdev);
-       struct resource *res;
        int error;
 
        error = misc_deregister(&ts72xx_wdt_miscdev);
-       platform_set_drvdata(pdev, NULL);
-
-       iounmap(wdt->feed_reg);
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-       release_mem_region(res->start, resource_size(res));
-
-       iounmap(wdt->control_reg);
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       release_mem_region(res->start, resource_size(res));
 
-       kfree(wdt);
        return error;
 }