diff options
Diffstat (limited to 'drivers/spi/spi-sprd-adi.c')
| -rw-r--r-- | drivers/spi/spi-sprd-adi.c | 8 | 
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/spi/spi-sprd-adi.c b/drivers/spi/spi-sprd-adi.c index 9a051286f120..87dadb6b8ebf 100644 --- a/drivers/spi/spi-sprd-adi.c +++ b/drivers/spi/spi-sprd-adi.c @@ -77,6 +77,7 @@  /* Bits definitions for register REG_WDG_CTRL */  #define BIT_WDG_RUN			BIT(1) +#define BIT_WDG_NEW			BIT(2)  #define BIT_WDG_RST			BIT(3)  /* Registers definitions for PMIC */ @@ -383,6 +384,10 @@ static int sprd_adi_restart_handler(struct notifier_block *this,  	/* Unlock the watchdog */  	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOCK, WDG_UNLOCK_KEY); +	sprd_adi_read(sadi, sadi->slave_pbase + REG_WDG_CTRL, &val); +	val |= BIT_WDG_NEW; +	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_CTRL, val); +  	/* Load the watchdog timeout value, 50ms is always enough. */  	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_LOW,  		       WDG_LOAD_VAL & WDG_LOAD_MASK); @@ -393,6 +398,9 @@ static int sprd_adi_restart_handler(struct notifier_block *this,  	val |= BIT_WDG_RUN | BIT_WDG_RST;  	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_CTRL, val); +	/* Lock the watchdog */ +	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOCK, ~WDG_UNLOCK_KEY); +  	mdelay(1000);  	dev_emerg(sadi->dev, "Unable to restart system\n");  |