diff options
Diffstat (limited to 'common/device_state.c')
-rw-r--r-- | common/device_state.c | 60 |
1 files changed, 6 insertions, 54 deletions
diff --git a/common/device_state.c b/common/device_state.c index 0c4024880a..17c32a7054 100644 --- a/common/device_state.c +++ b/common/device_state.c @@ -7,8 +7,6 @@ #include "device_state.h" #include "hooks.h" -static int enabled = 1; - int device_get_state(enum device_type device) { return device_states[device].state; @@ -19,6 +17,9 @@ void device_set_state(enum device_type device, enum device_state state) if (device_states[device].state == state) return; + if (state != DEVICE_STATE_UNKNOWN) + device_states[device].last_known_state = state; + device_states[device].state = state; } @@ -26,57 +27,11 @@ static void check_device_state(void) { int i; - if (!enabled) - return; - for (i = 0; i < DEVICE_COUNT; i++) board_update_device_state(i); } DECLARE_HOOK(HOOK_SECOND, check_device_state, HOOK_PRIO_DEFAULT); -static int device_has_interrupts(enum device_type device) -{ - return (device_states[device].deferred && - device_states[device].detect != GPIO_COUNT); -} - -static void disable_interrupts(enum device_type device) -{ - if (!device_has_interrupts(device)) - return; - - /* Cancel any deferred callbacks */ - hook_call_deferred(device_states[device].deferred, -1); - - /* Disable gpio interrupts */ - gpio_disable_interrupt(device_states[device].detect); -} - -static void enable_interrupts(enum device_type device) -{ - if (!device_has_interrupts(device)) - return; - - /* Enable gpio interrupts */ - gpio_enable_interrupt(device_states[device].detect); -} - -void device_detect_state_enable(int enable) -{ - int i; - - enabled = enable; - for (i = 0; i < DEVICE_COUNT; i++) { - if (enabled) { - enable_interrupts(i); - board_update_device_state(i); - } else { - disable_interrupts(i); - device_set_state(i, DEVICE_STATE_UNKNOWN); - } - } -} - static void print_state(const char *name, enum device_state state) { ccprintf("%-9s %s\n", name, state == DEVICE_STATE_ON ? "on" : @@ -87,12 +42,9 @@ static int command_devices(int argc, char **argv) { int i; - if (!enabled) - ccprintf("Device monitoring disabled\n"); - else - for (i = 0; i < DEVICE_COUNT; i++) - print_state(device_states[i].name, - device_states[i].state); + for (i = 0; i < DEVICE_COUNT; i++) + print_state(device_states[i].name, + device_states[i].state); return EC_SUCCESS; } |