Index: firmware/drivers/button.c =================================================================== --- firmware/drivers/button.c (revision 17583) +++ firmware/drivers/button.c (working copy) @@ -321,51 +321,27 @@ long button_get(bool block) { - struct queue_event ev; - int pending_count = queue_count(&button_queue); - -#ifdef HAVE_ADJUSTABLE_CPU_FREQ - /* Control the CPU boost trying to keep queue empty. */ - if (pending_count == 0) - button_boost(false); - else if (pending_count > 2) - button_boost(true); -#endif - - if ( block || pending_count ) - { - queue_wait(&button_queue, &ev); - -#if 0 - /* Ignore if the event was too old and for simplicity, just - * wait for a new button_get() request. */ - if (current_tick - ev.tick > MAX_EVENT_AGE) - return BUTTON_NONE; -#endif - button_data = ev.data; - return ev.id; - } - - return BUTTON_NONE; + return button_get_w_tmo(block ? TIMEOUT_BLOCK : TIMEOUT_NOBLOCK); } long button_get_w_tmo(int ticks) { struct queue_event ev; -#ifdef HAVE_ADJUSTABLE_CPU_FREQ - /* Be sure to keep boosted state. */ - if (!queue_empty(&button_queue)) - return button_get(true); - - button_boost(false); -#endif - - queue_wait_w_tmo(&button_queue, &ev, ticks); + if (ticks == TIMEOUT_BLOCK) + queue_wait(&button_queue, &ev); + else + queue_wait_w_tmo(&button_queue, &ev, ticks); + if (ev.id == SYS_TIMEOUT) ev.id = BUTTON_NONE; else button_data = ev.data; + +#ifdef HAVE_ADJUSTABLE_CPU_FREQ + /* Control the CPU boost trying to keep queue empty. */ + button_boost(!queue_empty(&button_queue)); +#endif return ev.id; } Index: apps/action.c =================================================================== --- apps/action.c (revision 17583) +++ apps/action.c (working copy) @@ -113,12 +113,7 @@ int ret = ACTION_UNKNOWN; static int last_context = CONTEXT_STD; - if (timeout == TIMEOUT_NOBLOCK) - button = button_get(false); - else if (timeout == TIMEOUT_BLOCK) - button = button_get(true); - else - button = button_get_w_tmo(timeout); + button = button_get_w_tmo(timeout); /* Data from sys events can be pulled with button_get_data */ if (button == BUTTON_NONE || button & SYS_EVENT)