#define HWRST_STATUS_IQMODE            0xb0
 #define HWRST_STATUS_SPRDISK           0xc0
 #define HWRST_STATUS_FACTORYTEST       0xe0
+#define HWRST_STATUS_WATCHDOG          0xf0
 
 /* Use default timeout 50 ms that converts to watchdog values */
 #define WDG_LOAD_VAL                   ((50 * 1000) / 32768)
        return 0;
 }
 
+static void sprd_adi_set_wdt_rst_mode(struct sprd_adi *sadi)
+{
+#ifdef CONFIG_SPRD_WATCHDOG
+       u32 val;
+
+       /* Set default watchdog reboot mode */
+       sprd_adi_read(sadi, sadi->slave_pbase + PMIC_RST_STATUS, &val);
+       val |= HWRST_STATUS_WATCHDOG;
+       sprd_adi_write(sadi, sadi->slave_pbase + PMIC_RST_STATUS, val);
+#endif
+}
+
 static int sprd_adi_restart_handler(struct notifier_block *this,
                                    unsigned long mode, void *cmd)
 {
 
        /* Record the reboot mode */
        sprd_adi_read(sadi, sadi->slave_pbase + PMIC_RST_STATUS, &val);
+       val &= ~HWRST_STATUS_WATCHDOG;
        val |= reboot_mode;
        sprd_adi_write(sadi, sadi->slave_pbase + PMIC_RST_STATUS, val);
 
        }
 
        sprd_adi_hw_init(sadi);
+       sprd_adi_set_wdt_rst_mode(sadi);
 
        ctlr->dev.of_node = pdev->dev.of_node;
        ctlr->bus_num = pdev->id;