regulator: Implement uv_survival_time for handling under-voltage events

Add 'uv_survival_time' field to regulation_constraints for specifying
survival time post critical under-voltage event. Update the regulator
notifier call chain and Device Tree property parsing to use this new
field, allowing a configurable timeout before emergency shutdown.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://lore.kernel.org/r/20231026144824.4065145-6-o.rempel@pengutronix.de
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Oleksij Rempel 2023-10-26 16:48:24 +02:00 committed by Mark Brown
parent 759e2bd969
commit 1e22152aa5
No known key found for this signature in database
GPG key ID: 24D68B725D5487D0
3 changed files with 16 additions and 1 deletions

View file

@ -5094,7 +5094,7 @@ static void regulator_handle_critical(struct regulator_dev *rdev,
return;
hw_protection_shutdown(reason,
REGULATOR_DEF_UV_LESS_CRITICAL_WINDOW_MS);
rdev->constraints->uv_less_critical_window_ms);
}
/**

View file

@ -175,6 +175,13 @@ static int of_get_regulation_constraints(struct device *dev,
if (!ret)
constraints->enable_time = pval;
ret = of_property_read_u32(np, "regulator-uv-survival-time-ms", &pval);
if (!ret)
constraints->uv_less_critical_window_ms = pval;
else
constraints->uv_less_critical_window_ms =
REGULATOR_DEF_UV_LESS_CRITICAL_WINDOW_MS;
constraints->soft_start = of_property_read_bool(np,
"regulator-soft-start");
ret = of_property_read_u32(np, "regulator-active-discharge", &pval);

View file

@ -162,6 +162,13 @@ struct notification_limit {
* regulator_active_discharge values are used for
* initialisation.
* @enable_time: Turn-on time of the rails (unit: microseconds)
* @uv_less_critical_window_ms: Specifies the time window (in milliseconds)
* following a critical under-voltage (UV) event
* during which less critical actions can be
* safely carried out by the system (for example
* logging). After this time window more critical
* actions should be done (for example prevent
* HW damage).
*/
struct regulation_constraints {
@ -213,6 +220,7 @@ struct regulation_constraints {
unsigned int settling_time_up;
unsigned int settling_time_down;
unsigned int enable_time;
unsigned int uv_less_critical_window_ms;
unsigned int active_discharge;