diff options
author | Andrew Ryabinin <ryabinin.a.a@gmail.com> | 2012-12-29 00:19:23 +0400 |
---|---|---|
committer | Andrew Ryabinin <ryabinin.a.a@gmail.com> | 2012-12-29 00:19:23 +0400 |
commit | 97250a0156acda59575330575648062a7ccab689 (patch) | |
tree | 14a9e45fdf3416c157f506bdf300f48285199e68 /firmware/target | |
parent | 362ade3892f40ee1b0360f3af1ab013a6ef32e5e (diff) | |
download | rockbox-97250a0156acda59575330575648062a7ccab689.tar.gz rockbox-97250a0156acda59575330575648062a7ccab689.zip |
hm60x/hm801: Add hold button support.
Change-Id: I05557ecfbf0bd821d8966862a38f7f22656b36ef
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/rk27xx/hm60x/button-hm60x.c | 25 | ||||
-rw-r--r-- | firmware/target/arm/rk27xx/hm60x/button-target.h | 2 | ||||
-rw-r--r-- | firmware/target/arm/rk27xx/hm801/button-hm801.c | 27 | ||||
-rw-r--r-- | firmware/target/arm/rk27xx/hm801/button-target.h | 2 |
4 files changed, 55 insertions, 1 deletions
diff --git a/firmware/target/arm/rk27xx/hm60x/button-hm60x.c b/firmware/target/arm/rk27xx/hm60x/button-hm60x.c index af31e78133..dfd209ceed 100644 --- a/firmware/target/arm/rk27xx/hm60x/button-hm60x.c +++ b/firmware/target/arm/rk27xx/hm60x/button-hm60x.c @@ -23,15 +23,40 @@ #include "system.h" #include "button.h" #include "adc.h" +#include "backlight.h" void button_init_device(void) { /* setup button gpio as input */ GPIO_PCCON &= ~(POWEROFF_BUTTON); + GPIO_PACON &= ~(1); + + /* setup button gpio as pulldown */ + SCU_GPIOUPCON |= (1<<17) | + 1 ; +} + +bool button_hold() { + return (GPIO_PADR & 1); } int button_read_device(void) { int adc_val = adc_read(ADC_BUTTONS); int gpio_btn = GPIO_PCDR & BUTTON_POWER; + static bool hold_button = false; + bool hold_button_old; + + hold_button_old = hold_button; + hold_button = button_hold(); + +#ifndef BOOTLOADER + if (hold_button != hold_button_old) { + backlight_hold_changed(hold_button); + } +#endif + + if (hold_button) { + return 0; + } if (adc_val < 380) { /* 0 - 379 */ if (adc_val < 250) { /* 0 - 249 */ diff --git a/firmware/target/arm/rk27xx/hm60x/button-target.h b/firmware/target/arm/rk27xx/hm60x/button-target.h index ff4c9423b3..b6950b52de 100644 --- a/firmware/target/arm/rk27xx/hm60x/button-target.h +++ b/firmware/target/arm/rk27xx/hm60x/button-target.h @@ -21,6 +21,8 @@ #ifndef _BUTTON_TARGET_H_ #define _BUTTON_TARGET_H_ +#define HAS_BUTTON_HOLD + #define BUTTON_UP 0x00000001 #define BUTTON_POWER 0x00000002 #define BUTTON_DOWN 0x00000004 diff --git a/firmware/target/arm/rk27xx/hm801/button-hm801.c b/firmware/target/arm/rk27xx/hm801/button-hm801.c index d0323e6f4d..0ac1b3b0aa 100644 --- a/firmware/target/arm/rk27xx/hm801/button-hm801.c +++ b/firmware/target/arm/rk27xx/hm801/button-hm801.c @@ -23,6 +23,7 @@ #include "system.h" #include "button.h" #include "adc.h" +#include "backlight.h" enum keyboard_type_t { KEYBOARD_V1, @@ -34,6 +35,12 @@ static enum keyboard_type_t kbd_type; void button_init_device(void) { /* setup button gpio as input */ GPIO_PCCON &= ~(POWEROFF_BUTTON); + GPIO_PACON &= ~1; + + + /* setup button gpio as pulldown */ + SCU_GPIOUPCON |= (1<<17) | + 1 ; /* identify keyboard type */ SCU_IOMUXB_CON &= ~(1<<2); @@ -45,6 +52,10 @@ void button_init_device(void) { } } +bool button_hold() { + return (GPIO_PADR & 1); +} + static int button_read_device_v1(void) { int adc_val = adc_read(ADC_BUTTONS); int button = 0; @@ -125,7 +136,21 @@ static int button_read_device_v2(void) { } int button_read_device(void) { - if (kbd_type == KEYBOARD_V1) { + static bool hold_button = false; + bool hold_button_old; + + hold_button_old = hold_button; + hold_button = button_hold(); + +#ifndef BOOTLOADER + if (hold_button != hold_button_old) { + backlight_hold_changed(hold_button); + } +#endif + + if (hold_button) { + return 0; + } else if (kbd_type == KEYBOARD_V1) { return button_read_device_v1(); } else { return button_read_device_v2(); diff --git a/firmware/target/arm/rk27xx/hm801/button-target.h b/firmware/target/arm/rk27xx/hm801/button-target.h index 7754f867e5..29c31d0df6 100644 --- a/firmware/target/arm/rk27xx/hm801/button-target.h +++ b/firmware/target/arm/rk27xx/hm801/button-target.h @@ -21,6 +21,8 @@ #ifndef _BUTTON_TARGET_H_ #define _BUTTON_TARGET_H_ +#define HAS_BUTTON_HOLD + #define BUTTON_UP 0x00000001 #define BUTTON_POWER 0x00000002 #define BUTTON_DOWN 0x00000004 |