mmc: sdhci-of-arasan: add sdhci_arasan_voltage_switch for arasan,5.1
[firefly-linux-kernel-4.4.55.git] / drivers / watchdog / ts72xx_wdt.c
index b8a92459f10f354d763a1e9d3995e28389d8fda6..4b541934b6c59e6702345e14ea90360ff67a694e 100644 (file)
@@ -61,7 +61,7 @@ struct ts72xx_wdt {
        struct platform_device *pdev;
 };
 
-struct platform_device *ts72xx_wdt_pdev;
+static struct platform_device *ts72xx_wdt_pdev;
 
 /*
  * TS-72xx Watchdog supports following timeouts (value written
@@ -192,7 +192,7 @@ static int ts72xx_wdt_open(struct inode *inode, struct file *file)
                dev_err(&wdt->pdev->dev,
                        "failed to convert timeout (%d) to register value\n",
                        timeout);
-               return -EINVAL;
+               return regval;
        }
 
        if (mutex_lock_interruptible(&wdt->lock))
@@ -305,12 +305,14 @@ static long ts72xx_wdt_ioctl(struct file *file, unsigned int cmd,
 
        switch (cmd) {
        case WDIOC_GETSUPPORT:
-               error = copy_to_user(argp, &winfo, sizeof(winfo));
+               if (copy_to_user(argp, &winfo, sizeof(winfo)))
+                       error = -EFAULT;
                break;
 
        case WDIOC_GETSTATUS:
        case WDIOC_GETBOOTSTATUS:
-               return put_user(0, p);
+               error = put_user(0, p);
+               break;
 
        case WDIOC_KEEPALIVE:
                ts72xx_wdt_kick(wdt);
@@ -319,10 +321,9 @@ static long ts72xx_wdt_ioctl(struct file *file, unsigned int cmd,
        case WDIOC_SETOPTIONS: {
                int options;
 
-               if (get_user(options, p)) {
-                       error = -EFAULT;
+               error = get_user(options, p);
+               if (error)
                        break;
-               }
 
                error = -EINVAL;
 
@@ -340,30 +341,26 @@ static long ts72xx_wdt_ioctl(struct file *file, unsigned int cmd,
 
        case WDIOC_SETTIMEOUT: {
                int new_timeout;
+               int regval;
 
-               if (get_user(new_timeout, p)) {
-                       error = -EFAULT;
-               } else {
-                       int regval;
-
-                       regval = timeout_to_regval(new_timeout);
-                       if (regval < 0) {
-                               error = -EINVAL;
-                       } else {
-                               ts72xx_wdt_stop(wdt);
-                               wdt->regval = regval;
-                               ts72xx_wdt_start(wdt);
-                       }
-               }
+               error = get_user(new_timeout, p);
                if (error)
                        break;
 
+               regval = timeout_to_regval(new_timeout);
+               if (regval < 0) {
+                       error = regval;
+                       break;
+               }
+               ts72xx_wdt_stop(wdt);
+               wdt->regval = regval;
+               ts72xx_wdt_start(wdt);
+
                /*FALLTHROUGH*/
        }
 
        case WDIOC_GETTIMEOUT:
-               if (put_user(regval_to_timeout(wdt->regval), p))
-                       error = -EFAULT;
+               error = put_user(regval_to_timeout(wdt->regval), p);
                break;
 
        default:
@@ -396,53 +393,19 @@ static int ts72xx_wdt_probe(struct platform_device *pdev)
        struct resource *r1, *r2;
        int error = 0;
 
-       wdt = kzalloc(sizeof(struct ts72xx_wdt), GFP_KERNEL);
-       if (!wdt) {
-               dev_err(&pdev->dev, "failed to allocate memory\n");
+       wdt = devm_kzalloc(&pdev->dev, sizeof(struct ts72xx_wdt), GFP_KERNEL);
+       if (!wdt)
                return -ENOMEM;
-       }
 
        r1 = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!r1) {
-               dev_err(&pdev->dev, "failed to get memory resource\n");
-               error = -ENODEV;
-               goto fail;
-       }
-
-       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;
-       }
-
-       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,46 +418,18 @@ 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;
+       misc_deregister(&ts72xx_wdt_miscdev);
+       return 0;
 }
 
 static struct platform_driver ts72xx_wdt_driver = {
@@ -502,7 +437,6 @@ static struct platform_driver ts72xx_wdt_driver = {
        .remove         = ts72xx_wdt_remove,
        .driver         = {
                .name   = "ts72xx-wdt",
-               .owner  = THIS_MODULE,
        },
 };