diff --git a/drivers/regulator/regulator_common.c b/drivers/regulator/regulator_common.c index 745d270e880..55cef0dd78f 100644 --- a/drivers/regulator/regulator_common.c +++ b/drivers/regulator/regulator_common.c @@ -15,14 +15,19 @@ void regulator_common_data_init(const struct device *dev) int regulator_common_init_enable(const struct device *dev) { + const struct regulator_driver_api *api = dev->api; const struct regulator_common_config *config = dev->config; struct regulator_common_data *data = dev->data; + int ret; + + if (config->initial_mode != REGULATOR_INITIAL_MODE_UNKNOWN) { + ret = regulator_set_mode(dev, config->initial_mode); + if (ret < 0) { + return ret; + } + } if ((config->flags & REGULATOR_INIT_ENABLED) != 0U) { - const struct regulator_driver_api *api = dev->api; - - int ret; - ret = api->enable(dev); if (ret < 0) { return ret; diff --git a/tests/drivers/regulator/api/app.overlay b/tests/drivers/regulator/api/app.overlay index 4a928cdcb54..ea25ef18da6 100644 --- a/tests/drivers/regulator/api/app.overlay +++ b/tests/drivers/regulator/api/app.overlay @@ -23,6 +23,7 @@ regulator-min-microamp = <100>; regulator-max-microamp = <200>; regulator-allowed-modes = <1 10>; + regulator-initial-mode = <1>; }; }; }; diff --git a/tests/drivers/regulator/api/src/main.c b/tests/drivers/regulator/api/src/main.c index 20bbbe894c4..243e6e3e353 100644 --- a/tests/drivers/regulator/api/src/main.c +++ b/tests/drivers/regulator/api/src/main.c @@ -626,6 +626,9 @@ void *setup(void) zassert_true(regulator_is_enabled(reg1)); zassert_true(regulator_is_enabled(reg2)); + /* REG3 mode set at init time (initial-mode) */ + zassert_equal(regulator_fake_set_mode_fake.call_count, 1U); + return NULL; }