mirror of https://github.com/zmkfirmware/zmk.git
Merge 3989d73875 into ac7f75b859
This commit is contained in:
commit
8c6888351c
|
|
@ -21,6 +21,9 @@
|
|||
#include <zephyr/logging/log.h>
|
||||
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||
|
||||
#define PERSIST_EXT_POWER_STATE \
|
||||
IS_ENABLED(CONFIG_SETTINGS) && !IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER)
|
||||
|
||||
struct ext_power_generic_config {
|
||||
const struct gpio_dt_spec *control;
|
||||
const size_t control_gpios_count;
|
||||
|
|
@ -29,12 +32,12 @@ struct ext_power_generic_config {
|
|||
|
||||
struct ext_power_generic_data {
|
||||
bool status;
|
||||
#if IS_ENABLED(CONFIG_SETTINGS)
|
||||
#if PERSIST_EXT_POWER_STATE
|
||||
bool settings_init;
|
||||
#endif
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_SETTINGS)
|
||||
#if PERSIST_EXT_POWER_STATE
|
||||
static void ext_power_save_state_work(struct k_work *work) {
|
||||
char setting_path[40];
|
||||
const struct device *ext_power = DEVICE_DT_GET(DT_DRV_INST(0));
|
||||
|
|
@ -48,7 +51,7 @@ static struct k_work_delayable ext_power_save_work;
|
|||
#endif
|
||||
|
||||
int ext_power_save_state(void) {
|
||||
#if IS_ENABLED(CONFIG_SETTINGS)
|
||||
#if PERSIST_EXT_POWER_STATE
|
||||
int ret = k_work_reschedule(&ext_power_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE));
|
||||
return MIN(ret, 0);
|
||||
#else
|
||||
|
|
@ -56,7 +59,7 @@ int ext_power_save_state(void) {
|
|||
#endif
|
||||
}
|
||||
|
||||
static int ext_power_generic_enable(const struct device *dev) {
|
||||
static int ext_power_generic_enable(const struct device *dev, bool save_state) {
|
||||
struct ext_power_generic_data *data = dev->data;
|
||||
const struct ext_power_generic_config *config = dev->config;
|
||||
|
||||
|
|
@ -68,10 +71,14 @@ static int ext_power_generic_enable(const struct device *dev) {
|
|||
}
|
||||
}
|
||||
data->status = true;
|
||||
return ext_power_save_state();
|
||||
return save_state ? ext_power_save_state() : 0;
|
||||
}
|
||||
|
||||
static int ext_power_generic_disable(const struct device *dev) {
|
||||
static int ext_power_stateful_enable(const struct device *dev) {
|
||||
return ext_power_generic_enable(dev, true);
|
||||
}
|
||||
|
||||
static int ext_power_generic_disable(const struct device *dev, bool save_state) {
|
||||
struct ext_power_generic_data *data = dev->data;
|
||||
const struct ext_power_generic_config *config = dev->config;
|
||||
|
||||
|
|
@ -83,7 +90,11 @@ static int ext_power_generic_disable(const struct device *dev) {
|
|||
}
|
||||
}
|
||||
data->status = false;
|
||||
return ext_power_save_state();
|
||||
return save_state ? ext_power_save_state() : 0;
|
||||
}
|
||||
|
||||
static int ext_power_stateful_disable(const struct device *dev) {
|
||||
return ext_power_generic_disable(dev, true);
|
||||
}
|
||||
|
||||
static int ext_power_generic_get(const struct device *dev) {
|
||||
|
|
@ -91,7 +102,7 @@ static int ext_power_generic_get(const struct device *dev) {
|
|||
return data->status;
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_SETTINGS)
|
||||
#if PERSIST_EXT_POWER_STATE
|
||||
static int ext_power_settings_set_status(const struct device *dev, size_t len,
|
||||
settings_read_cb read_cb, void *cb_arg) {
|
||||
struct ext_power_generic_data *data = dev->data;
|
||||
|
|
@ -105,9 +116,9 @@ static int ext_power_settings_set_status(const struct device *dev, size_t len,
|
|||
data->settings_init = true;
|
||||
|
||||
if (data->status) {
|
||||
ext_power_generic_enable(dev);
|
||||
ext_power_stateful_enable(dev);
|
||||
} else {
|
||||
ext_power_generic_disable(dev);
|
||||
ext_power_stateful_disable(dev);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -158,7 +169,7 @@ static int ext_power_generic_init(const struct device *dev) {
|
|||
}
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_SETTINGS)
|
||||
#if PERSIST_EXT_POWER_STATE
|
||||
k_work_init_delayable(&ext_power_save_work, ext_power_save_state_work);
|
||||
#endif
|
||||
|
||||
|
|
@ -176,10 +187,10 @@ static int ext_power_generic_init(const struct device *dev) {
|
|||
static int ext_power_generic_pm_action(const struct device *dev, enum pm_device_action action) {
|
||||
switch (action) {
|
||||
case PM_DEVICE_ACTION_RESUME:
|
||||
ext_power_generic_enable(dev);
|
||||
ext_power_generic_enable(dev, false);
|
||||
return 0;
|
||||
case PM_DEVICE_ACTION_SUSPEND:
|
||||
ext_power_generic_disable(dev);
|
||||
ext_power_generic_disable(dev, false);
|
||||
return 0;
|
||||
default:
|
||||
return -ENOTSUP;
|
||||
|
|
@ -197,13 +208,13 @@ static const struct ext_power_generic_config config = {
|
|||
|
||||
static struct ext_power_generic_data data = {
|
||||
.status = false,
|
||||
#if IS_ENABLED(CONFIG_SETTINGS)
|
||||
#if PERSIST_EXT_POWER_STATE
|
||||
.settings_init = false,
|
||||
#endif
|
||||
};
|
||||
|
||||
static const struct ext_power_api api = {.enable = ext_power_generic_enable,
|
||||
.disable = ext_power_generic_disable,
|
||||
static const struct ext_power_api api = {.enable = ext_power_stateful_enable,
|
||||
.disable = ext_power_stateful_disable,
|
||||
.get = ext_power_generic_get};
|
||||
|
||||
#define ZMK_EXT_POWER_INIT_PRIORITY 81
|
||||
|
|
|
|||
Loading…
Reference in New Issue