From 8187d8d5d158bef269048694fd6e65d89263cd42 Mon Sep 17 00:00:00 2001 From: Andrew Ryabinin Date: Fri, 23 Mar 2012 22:09:20 +0400 Subject: hm60x: Use binary search in button driver. Change-Id: I4abca66150c23ffb7cc27c4c5320b8117c27e228 --- firmware/target/arm/rk27xx/hm60x/button-hm60x.c | 32 ++++++++++++++++--------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/firmware/target/arm/rk27xx/hm60x/button-hm60x.c b/firmware/target/arm/rk27xx/hm60x/button-hm60x.c index eaadaa131c..af31e78133 100644 --- a/firmware/target/arm/rk27xx/hm60x/button-hm60x.c +++ b/firmware/target/arm/rk27xx/hm60x/button-hm60x.c @@ -31,16 +31,26 @@ void button_init_device(void) { int button_read_device(void) { int adc_val = adc_read(ADC_BUTTONS); - if (adc_val < 30) { - return BUTTON_UP | (GPIO_PCDR & POWEROFF_BUTTON); - } else if (adc_val < 250) { - return BUTTON_RIGHT | (GPIO_PCDR & POWEROFF_BUTTON); - } else if (adc_val < 380) { - return BUTTON_LEFT | (GPIO_PCDR & POWEROFF_BUTTON); - } else if (adc_val < 450) { - return BUTTON_DOWN | (GPIO_PCDR & POWEROFF_BUTTON); - } else if (adc_val < 560) { - return BUTTON_PLAY | (GPIO_PCDR & POWEROFF_BUTTON); + int gpio_btn = GPIO_PCDR & BUTTON_POWER; + + if (adc_val < 380) { /* 0 - 379 */ + if (adc_val < 250) { /* 0 - 249 */ + if (adc_val < 30) { /* 0 - 29 */ + return BUTTON_UP | gpio_btn; + } else { /* 30 - 249 */ + return BUTTON_RIGHT | gpio_btn; + } + } else { /* 250 - 379 */ + return BUTTON_LEFT | gpio_btn; + } + } else { /* > 380 */ + if (adc_val < 460) { /* 380 - 459 */ + return BUTTON_DOWN | gpio_btn; + } else { /* > 460 */ + if (adc_val < 560) { + return BUTTON_SELECT | gpio_btn; + } + } } - return (GPIO_PCDR & POWEROFF_BUTTON); + return gpio_btn; } -- cgit v1.2.3