watchdog: imgpdc: Fix max timeout
authorEzequiel Garcia <ezequiel.garcia@imgtec.com>
Mon, 11 May 2015 17:41:04 +0000 (14:41 -0300)
committerWim Van Sebroeck <wim@iguana.be>
Mon, 22 Jun 2015 13:54:15 +0000 (15:54 +0200)
Maximum timeout is currently set in clock cycles, but the watchdog
core expects it to be in seconds. Fix it.

Signed-off-by: Ezequiel Garcia <ezequiel.garcia@imgtec.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
drivers/watchdog/imgpdc_wdt.c

index 28c10e292aa3072b43446b483c32a3fe508a10c9..56b8ebcc3775633f02e1d92c5a1f4acc3198903e 100644 (file)
@@ -152,6 +152,7 @@ static int pdc_wdt_restart(struct notifier_block *this, unsigned long mode,
 
 static int pdc_wdt_probe(struct platform_device *pdev)
 {
+       u64 div;
        int ret, val;
        unsigned long clk_rate;
        struct resource *res;
@@ -211,7 +212,10 @@ static int pdc_wdt_probe(struct platform_device *pdev)
 
        pdc_wdt->wdt_dev.info = &pdc_wdt_info;
        pdc_wdt->wdt_dev.ops = &pdc_wdt_ops;
-       pdc_wdt->wdt_dev.max_timeout = 1 << PDC_WDT_CONFIG_DELAY_MASK;
+
+       div = 1ULL << (PDC_WDT_CONFIG_DELAY_MASK + 1);
+       do_div(div, clk_rate);
+       pdc_wdt->wdt_dev.max_timeout = div;
        pdc_wdt->wdt_dev.timeout = PDC_WDT_DEF_TIMEOUT;
        pdc_wdt->wdt_dev.parent = &pdev->dev;
        watchdog_set_drvdata(&pdc_wdt->wdt_dev, pdc_wdt);