struct watchdog_device wdog;
        bool ext_reset;
        bool clk_is_on;
+       bool no_ping;
 };
 
 static bool nowayout = WATCHDOG_NOWAYOUT;
 
        wdev->ext_reset = of_property_read_bool(dev->of_node,
                                                "fsl,ext-reset-output");
+       /*
+        * The i.MX7D doesn't support low power mode, so we need to ping the watchdog
+        * during suspend.
+        */
+       wdev->no_ping = !of_device_is_compatible(dev->of_node, "fsl,imx7d-wdt");
        platform_set_drvdata(pdev, wdog);
        watchdog_set_drvdata(wdog, wdev);
        watchdog_set_nowayout(wdog, nowayout);
        watchdog_set_restart_priority(wdog, 128);
        watchdog_init_timeout(wdog, timeout, dev);
-       watchdog_stop_ping_on_suspend(wdog);
+       if (wdev->no_ping)
+               watchdog_stop_ping_on_suspend(wdog);
 
        if (imx2_wdt_is_running(wdev)) {
                imx2_wdt_set_timeout(wdog, wdog->timeout);
                imx2_wdt_ping(wdog);
        }
 
-       clk_disable_unprepare(wdev->clk);
+       if (wdev->no_ping) {
+               clk_disable_unprepare(wdev->clk);
 
-       wdev->clk_is_on = false;
+               wdev->clk_is_on = false;
+       }
 
        return 0;
 }
        struct imx2_wdt_device *wdev = watchdog_get_drvdata(wdog);
        int ret;
 
-       ret = clk_prepare_enable(wdev->clk);
-       if (ret)
-               return ret;
+       if (wdev->no_ping) {
+               ret = clk_prepare_enable(wdev->clk);
 
-       wdev->clk_is_on = true;
+               if (ret)
+                       return ret;
+
+               wdev->clk_is_on = true;
+       }
 
        if (watchdog_active(wdog) && !imx2_wdt_is_running(wdev)) {
                /*
 
 static const struct of_device_id imx2_wdt_dt_ids[] = {
        { .compatible = "fsl,imx21-wdt", },
+       { .compatible = "fsl,imx7d-wdt", },
        { /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, imx2_wdt_dt_ids);