This commit is contained in:
Bernardo Farah 2023-05-27 14:53:46 -04:00 committed by GitHub
commit 331f44d5da
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 0 deletions

View file

@ -305,6 +305,10 @@ endmenu
menu "Power Management" menu "Power Management"
config ZMK_USB_EXT_POWER_ONLY
bool "Turn off external power when USB is disconnected"
default n
config ZMK_IDLE_TIMEOUT config ZMK_IDLE_TIMEOUT
int "Milliseconds of inactivity before entering idle state (OLED shutoff, etc)" int "Milliseconds of inactivity before entering idle state (OLED shutoff, etc)"
default 30000 default 30000

View file

@ -16,6 +16,11 @@
#include <drivers/ext_power.h> #include <drivers/ext_power.h>
#include <zmk/activity.h>
#include <zmk/usb.h>
#include <zmk/event_manager.h>
#include <zmk/events/usb_conn_state_changed.h>
#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) #if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT)
#include <zephyr/logging/log.h> #include <zephyr/logging/log.h>
@ -125,6 +130,33 @@ struct settings_handler ext_power_conf = {.name = "ext_power/state",
.h_set = ext_power_settings_set}; .h_set = ext_power_settings_set};
#endif #endif
#if IS_ENABLED(CONFIG_ZMK_USB_EXT_POWER_ONLY)
static int ext_power_toggle(const struct device *dev, bool enable) {
// If our new state matches the power state, do nothing
if (!enable == (ext_power_get(dev) > 0)) {
return 0;
}
if (enable) {
return ext_power_enable(dev);
} else {
return ext_power_disable(dev);
}
}
static int ext_power_event_listener(const zmk_event_t *eh) {
if (as_zmk_usb_conn_state_changed(eh)) {
const struct device *ext_power = device_get_binding("EXT_POWER");
return ext_power_toggle(ext_power, zmk_usb_is_powered());
}
return -ENOTSUP;
}
ZMK_LISTENER(ext_power, ext_power_event_listener);
ZMK_SUBSCRIPTION(ext_power, zmk_usb_conn_state_changed);
#endif
static int ext_power_generic_init(const struct device *dev) { static int ext_power_generic_init(const struct device *dev) {
struct ext_power_generic_data *data = dev->data; struct ext_power_generic_data *data = dev->data;
const struct ext_power_generic_config *config = dev->config; const struct ext_power_generic_config *config = dev->config;
@ -154,6 +186,8 @@ static int ext_power_generic_init(const struct device *dev) {
ext_power_enable(dev); ext_power_enable(dev);
} }
#elif IS_ENABLED(CONFIG_ZMK_USB_EXT_POWER_ONLY)
ext_power_toggle(dev, zmk_usb_is_powered());
#else #else
// Default to the ext_power being open when no settings // Default to the ext_power being open when no settings
ext_power_enable(dev); ext_power_enable(dev);