From 97250a0156acda59575330575648062a7ccab689 Mon Sep 17 00:00:00 2001 From: Andrew Ryabinin Date: Sat, 29 Dec 2012 00:19:23 +0400 Subject: hm60x/hm801: Add hold button support. Change-Id: I05557ecfbf0bd821d8966862a38f7f22656b36ef --- firmware/target/arm/rk27xx/hm801/button-hm801.c | 27 ++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'firmware/target/arm/rk27xx/hm801/button-hm801.c') 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(); -- cgit v1.2.3