]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/watchdog/sama5d4_wdt.c
iwlwifi: mvm: synchronize TID queue removal
[mirror_ubuntu-bionic-kernel.git] / drivers / watchdog / sama5d4_wdt.c
index 362fd229786df6cea1600108a9060b89b800f475..f5ac54b69e576362b0689cc127ed323b342e7291 100644 (file)
@@ -111,9 +111,7 @@ static int sama5d4_wdt_set_timeout(struct watchdog_device *wdd,
        u32 value = WDT_SEC2TICKS(timeout);
 
        wdt->mr &= ~AT91_WDT_WDV;
-       wdt->mr &= ~AT91_WDT_WDD;
        wdt->mr |= AT91_WDT_SET_WDV(value);
-       wdt->mr |= AT91_WDT_SET_WDD(value);
 
        /*
         * WDDIS has to be 0 when updating WDD/WDV. The datasheet states: When
@@ -228,15 +226,13 @@ static int sama5d4_wdt_probe(struct platform_device *pdev)
 
        wdt->reg_base = regs;
 
-       if (pdev->dev.of_node) {
-               irq = irq_of_parse_and_map(pdev->dev.of_node, 0);
-               if (!irq)
-                       dev_warn(&pdev->dev, "failed to get IRQ from DT\n");
+       irq = irq_of_parse_and_map(pdev->dev.of_node, 0);
+       if (!irq)
+               dev_warn(&pdev->dev, "failed to get IRQ from DT\n");
 
-               ret = of_sama5d4_wdt_init(pdev->dev.of_node, wdt);
-               if (ret)
-                       return ret;
-       }
+       ret = of_sama5d4_wdt_init(pdev->dev.of_node, wdt);
+       if (ret)
+               return ret;
 
        if ((wdt->mr & AT91_WDT_WDFIEN) && irq) {
                ret = devm_request_irq(&pdev->dev, irq, sama5d4_wdt_irq_handler,
@@ -249,15 +245,11 @@ static int sama5d4_wdt_probe(struct platform_device *pdev)
                }
        }
 
-       ret = watchdog_init_timeout(wdd, wdt_timeout, &pdev->dev);
-       if (ret) {
-               dev_err(&pdev->dev, "unable to set timeout value\n");
-               return ret;
-       }
+       watchdog_init_timeout(wdd, wdt_timeout, &pdev->dev);
 
        timeout = WDT_SEC2TICKS(wdd->timeout);
 
-       wdt->mr |= AT91_WDT_SET_WDD(timeout);
+       wdt->mr |= AT91_WDT_SET_WDD(WDT_SEC2TICKS(MAX_WDT_TIMEOUT));
        wdt->mr |= AT91_WDT_SET_WDV(timeout);
 
        ret = sama5d4_wdt_init(wdt);
@@ -302,6 +294,11 @@ static int sama5d4_wdt_resume(struct device *dev)
 {
        struct sama5d4_wdt *wdt = dev_get_drvdata(dev);
 
+       /*
+        * FIXME: writing MR also pings the watchdog which may not be desired.
+        * This should only be done when the registers are lost on suspend but
+        * there is no way to get this information right now.
+        */
        sama5d4_wdt_init(wdt);
 
        return 0;