summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Ryabinin <ryabinin.a.a@gmail.com>2012-03-23 22:09:20 +0400
committerAndrew Ryabinin <ryabinin.a.a@gmail.com>2012-04-19 17:31:13 +0400
commit8187d8d5d158bef269048694fd6e65d89263cd42 (patch)
treee96b29053f82f930ccd8be12c0c013b6cf78778f
parent8361c1d901a86a16f3bfe22593f0314f8cf37249 (diff)
downloadrockbox-8187d8d5d158bef269048694fd6e65d89263cd42.tar.gz
rockbox-8187d8d5d158bef269048694fd6e65d89263cd42.zip
hm60x: Use binary search in button driver.
Change-Id: I4abca66150c23ffb7cc27c4c5320b8117c27e228
-rw-r--r--firmware/target/arm/rk27xx/hm60x/button-hm60x.c32
1 files 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) {
31 31
32int button_read_device(void) { 32int button_read_device(void) {
33 int adc_val = adc_read(ADC_BUTTONS); 33 int adc_val = adc_read(ADC_BUTTONS);
34 if (adc_val < 30) { 34 int gpio_btn = GPIO_PCDR & BUTTON_POWER;
35 return BUTTON_UP | (GPIO_PCDR & POWEROFF_BUTTON); 35
36 } else if (adc_val < 250) { 36 if (adc_val < 380) { /* 0 - 379 */
37 return BUTTON_RIGHT | (GPIO_PCDR & POWEROFF_BUTTON); 37 if (adc_val < 250) { /* 0 - 249 */
38 } else if (adc_val < 380) { 38 if (adc_val < 30) { /* 0 - 29 */
39 return BUTTON_LEFT | (GPIO_PCDR & POWEROFF_BUTTON); 39 return BUTTON_UP | gpio_btn;
40 } else if (adc_val < 450) { 40 } else { /* 30 - 249 */
41 return BUTTON_DOWN | (GPIO_PCDR & POWEROFF_BUTTON); 41 return BUTTON_RIGHT | gpio_btn;
42 } else if (adc_val < 560) { 42 }
43 return BUTTON_PLAY | (GPIO_PCDR & POWEROFF_BUTTON); 43 } else { /* 250 - 379 */
44 return BUTTON_LEFT | gpio_btn;
45 }
46 } else { /* > 380 */
47 if (adc_val < 460) { /* 380 - 459 */
48 return BUTTON_DOWN | gpio_btn;
49 } else { /* > 460 */
50 if (adc_val < 560) {
51 return BUTTON_SELECT | gpio_btn;
52 }
53 }
44 } 54 }
45 return (GPIO_PCDR & POWEROFF_BUTTON); 55 return gpio_btn;
46} 56}