Merge tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / watchdog / s3c2410_wdt.c
index 27bcd4e..c1a221c 100644 (file)
@@ -53,7 +53,7 @@
 #define CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME   (15)
 
 static bool nowayout   = WATCHDOG_NOWAYOUT;
-static int tmr_margin  = CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME;
+static int tmr_margin;
 static int tmr_atboot  = CONFIG_S3C2410_WATCHDOG_ATBOOT;
 static int soft_noboot;
 static int debug;
@@ -226,6 +226,7 @@ static struct watchdog_ops s3c2410wdt_ops = {
 static struct watchdog_device s3c2410_wdd = {
        .info = &s3c2410_wdt_ident,
        .ops = &s3c2410wdt_ops,
+       .timeout = CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME,
 };
 
 /* interrupt handler code */
@@ -309,7 +310,6 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
        unsigned int wtcon;
        int started = 0;
        int ret;
-       int size;
 
        DBG("%s: probe=%p\n", __func__, pdev);
 
@@ -330,28 +330,20 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
        }
 
        /* get the memory region for the watchdog timer */
-
-       size = resource_size(wdt_mem);
-       if (!request_mem_region(wdt_mem->start, size, pdev->name)) {
-               dev_err(dev, "failed to get memory region\n");
-               ret = -EBUSY;
-               goto err;
-       }
-
-       wdt_base = ioremap(wdt_mem->start, size);
+       wdt_base = devm_request_and_ioremap(dev, wdt_mem);
        if (wdt_base == NULL) {
-               dev_err(dev, "failed to ioremap() region\n");
-               ret = -EINVAL;
-               goto err_req;
+               dev_err(dev, "failed to devm_request_and_ioremap() region\n");
+               ret = -ENOMEM;
+               goto err;
        }
 
        DBG("probe: mapped wdt_base=%p\n", wdt_base);
 
-       wdt_clock = clk_get(&pdev->dev, "watchdog");
+       wdt_clock = devm_clk_get(dev, "watchdog");
        if (IS_ERR(wdt_clock)) {
                dev_err(dev, "failed to find watchdog clock source\n");
                ret = PTR_ERR(wdt_clock);
-               goto err_map;
+               goto err;
        }
 
        clk_prepare_enable(wdt_clock);
@@ -365,7 +357,8 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
        /* see if we can actually set the requested timer margin, and if
         * not, try the default value */
 
-       if (s3c2410wdt_set_heartbeat(&s3c2410_wdd, tmr_margin)) {
+       watchdog_init_timeout(&s3c2410_wdd, tmr_margin,  &pdev->dev);
+       if (s3c2410wdt_set_heartbeat(&s3c2410_wdd, s3c2410_wdd.timeout)) {
                started = s3c2410wdt_set_heartbeat(&s3c2410_wdd,
                                        CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME);
 
@@ -378,7 +371,8 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
                                                        "cannot start\n");
        }
 
-       ret = request_irq(wdt_irq->start, s3c2410wdt_irq, 0, pdev->name, pdev);
+       ret = devm_request_irq(dev, wdt_irq->start, s3c2410wdt_irq, 0,
+                               pdev->name, pdev);
        if (ret != 0) {
                dev_err(dev, "failed to install irq (%d)\n", ret);
                goto err_cpufreq;
@@ -389,7 +383,7 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
        ret = watchdog_register_device(&s3c2410_wdd);
        if (ret) {
                dev_err(dev, "cannot register watchdog (%d)\n", ret);
-               goto err_irq;
+               goto err_cpufreq;
        }
 
        if (tmr_atboot && started == 0) {
@@ -414,23 +408,13 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
 
        return 0;
 
- err_irq:
-       free_irq(wdt_irq->start, pdev);
-
  err_cpufreq:
        s3c2410wdt_cpufreq_deregister();
 
  err_clk:
        clk_disable_unprepare(wdt_clock);
-       clk_put(wdt_clock);
        wdt_clock = NULL;
 
- err_map:
-       iounmap(wdt_base);
-
- err_req:
-       release_mem_region(wdt_mem->start, size);
-
  err:
        wdt_irq = NULL;
        wdt_mem = NULL;
@@ -441,17 +425,11 @@ static int s3c2410wdt_remove(struct platform_device *dev)
 {
        watchdog_unregister_device(&s3c2410_wdd);
 
-       free_irq(wdt_irq->start, dev);
-
        s3c2410wdt_cpufreq_deregister();
 
        clk_disable_unprepare(wdt_clock);
-       clk_put(wdt_clock);
        wdt_clock = NULL;
 
-       iounmap(wdt_base);
-
-       release_mem_region(wdt_mem->start, resource_size(wdt_mem));
        wdt_irq = NULL;
        wdt_mem = NULL;
        return 0;