Unverified Commit f7684f5a authored by Frieder Schrempf's avatar Frieder Schrempf Committed by Mark Brown
Browse files

regulator: pca9450: Enable system reset on WDOG_B assertion



By default the PCA9450 doesn't handle the assertion of the WDOG_B
signal, but this is required to guarantee that things like software
resets triggered by the watchdog work reliably.

As we don't want to rely on the bootloader to enable this, we tell
the PMIC to issue a cold reset in case the WDOG_B signal is
asserted (WDOG_B_CFG = 10), just as the NXP U-Boot code does.

Signed-off-by: default avatarFrieder Schrempf <frieder.schrempf@kontron.de>
Link: https://lore.kernel.org/r/20210211105534.38972-3-frieder.schrempf@kontron.de


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 8c67a11b
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -797,6 +797,14 @@ static int pca9450_i2c_probe(struct i2c_client *i2c,
		return ret;
	}

	/* Set reset behavior on assertion of WDOG_B signal */
	ret = regmap_update_bits(pca9450->regmap, PCA9450_REG_RESET_CTRL,
				WDOG_B_CFG_MASK, WDOG_B_CFG_COLD_LDO12);
	if (ret) {
		dev_err(&i2c->dev, "Failed to set WDOG_B reset behavior\n");
		return ret;
	}

	/*
	 * The driver uses the LDO5CTRL_H register to control the LDO5 regulator.
	 * This is only valid if the SD_VSEL input of the PMIC is high. Let's
+7 −0
Original line number Diff line number Diff line
@@ -216,4 +216,11 @@ enum {
#define IRQ_THERM_105			0x02
#define IRQ_THERM_125			0x01

/* PCA9450_REG_RESET_CTRL bits */
#define WDOG_B_CFG_MASK			0xC0
#define WDOG_B_CFG_NONE			0x00
#define WDOG_B_CFG_WARM			0x40
#define WDOG_B_CFG_COLD_LDO12		0x80
#define WDOG_B_CFG_COLD			0xC0

#endif /* __LINUX_REG_PCA9450_H__ */