forked from kofal.net/zmk
fix: Improve startup time with proper settings loading.
* Avoid doing duplicate calls to setings_load_subtree, which iterates NVS fully each time under the hood, and instead use on settings_load later in the lifecycle.
This commit is contained in:
committed by
Pete Johanson
parent
f18974e8c4
commit
80173f8ea3
@@ -121,12 +121,27 @@ static int ext_power_settings_set(const char *name, size_t len, settings_read_cb
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
struct settings_handler ext_power_conf = {.name = "ext_power/state",
|
||||
.h_set = ext_power_settings_set};
|
||||
static int ext_power_settings_commit() {
|
||||
const struct device *dev = DEVICE_DT_GET(DT_DRV_INST(0));
|
||||
struct ext_power_generic_data *data = dev->data;
|
||||
|
||||
if (!data->settings_init) {
|
||||
|
||||
data->status = true;
|
||||
k_work_schedule(&ext_power_save_work, K_NO_WAIT);
|
||||
|
||||
ext_power_enable(dev);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
SETTINGS_STATIC_HANDLER_DEFINE(ext_power, "ext_power/state", NULL, ext_power_settings_set,
|
||||
ext_power_settings_commit, NULL);
|
||||
|
||||
#endif
|
||||
|
||||
static int ext_power_generic_init(const struct device *dev) {
|
||||
struct ext_power_generic_data *data = dev->data;
|
||||
const struct ext_power_generic_config *config = dev->config;
|
||||
|
||||
if (gpio_pin_configure_dt(&config->control, GPIO_OUTPUT_INACTIVE)) {
|
||||
@@ -135,25 +150,7 @@ static int ext_power_generic_init(const struct device *dev) {
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_SETTINGS)
|
||||
settings_subsys_init();
|
||||
|
||||
int err = settings_register(&ext_power_conf);
|
||||
if (err) {
|
||||
LOG_ERR("Failed to register the ext_power settings handler (err %d)", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
k_work_init_delayable(&ext_power_save_work, ext_power_save_state_work);
|
||||
|
||||
// Set default value (on) if settings isn't set
|
||||
settings_load_subtree("ext_power");
|
||||
if (!data->settings_init) {
|
||||
|
||||
data->status = true;
|
||||
k_work_schedule(&ext_power_save_work, K_NO_WAIT);
|
||||
|
||||
ext_power_enable(dev);
|
||||
}
|
||||
#else
|
||||
// Default to the ext_power being open when no settings
|
||||
ext_power_enable(dev);
|
||||
|
||||
Reference in New Issue
Block a user