#ifndef __RK29_KEYS_H__
#define __RK29_KEYS_H__
-#include <linux/input.h>
-
-#define DEFAULT_DEBOUNCE_INTERVAL 10 //10ms
-#define LONG_PRESS_COUNT 100 //100 * 10 = 1000ms
-#define ONE_SEC_COUNT (1000/DEFAULT_DEBOUNCE_INTERVAL)
-
-#define ADC_SAMPLE_TIME 10
-
-struct rk29_keys_button {
- int code;
- int code_long_press;
- int gpio;
- int adc_value;
- int adc_state;
- int active_low;
- char *desc;
- int wakeup;
-};
-
-
-struct rk29_keys_platform_data {
- struct rk29_keys_button *buttons;
- int nbuttons;
- int chn;
- int rep;
-};
-
+#include <plat/key.h>
#endif
--- /dev/null
+#include <mach/gpio.h>
+#include <plat/key.h>
+
+#define EV_ENCALL KEY_F4
+#define EV_MENU KEY_F1
+
+#define PRESS_LEV_LOW 1
+#define PRESS_LEV_HIGH 0
+
+static struct rk29_keys_button key_button[] = {
+ {
+ .desc = "menu",
+ .code = EV_MENU,
+ .gpio = RK30_PIN6_PA0,
+ .active_low = PRESS_LEV_LOW,
+ },
+ {
+ .desc = "vol+",
+ .code = KEY_VOLUMEUP,
+ .gpio = RK30_PIN6_PA1,
+ .active_low = PRESS_LEV_LOW,
+ },
+ {
+ .desc = "vol-",
+ .code = KEY_VOLUMEDOWN,
+ .gpio = RK30_PIN6_PA2,
+ .active_low = PRESS_LEV_LOW,
+ },
+ {
+ .desc = "home",
+ .code = KEY_HOME,
+ .gpio = RK30_PIN6_PA3,
+ .active_low = PRESS_LEV_LOW,
+ },
+ {
+ .desc = "search",
+ .code = KEY_SEARCH,
+ .gpio = RK30_PIN6_PA4,
+ .active_low = PRESS_LEV_LOW,
+ },
+ {
+ .desc = "esc",
+ .code = KEY_BACK,
+ .gpio = RK30_PIN6_PA5,
+ .active_low = PRESS_LEV_LOW,
+ },
+ {
+ .desc = "sensor",
+ .code = KEY_CAMERA,
+ .gpio = RK30_PIN6_PA6,
+ .active_low = PRESS_LEV_LOW,
+ },
+ {
+ .desc = "play",
+ .code = KEY_POWER,
+ .gpio = RK30_PIN6_PA7,
+ .active_low = PRESS_LEV_LOW,
+ //.code_long_press = EV_ENCALL,
+ .wakeup = 1,
+ },
+#if 0
+ {
+ .desc = "vol+",
+ .code = KEY_VOLUMEDOWN,
+ .adc_value = 95,
+ .gpio = INVALID_GPIO,
+ .active_low = PRESS_LEV_LOW,
+ },
+ {
+ .desc = "vol-",
+ .code = KEY_VOLUMEUP,
+ .adc_value = 249,
+ .gpio = INVALID_GPIO,
+ .active_low = PRESS_LEV_LOW,
+ },
+ {
+ .desc = "menu",
+ .code = EV_MENU,
+ .adc_value = 406,
+ .gpio = INVALID_GPIO,
+ .active_low = PRESS_LEV_LOW,
+ },
+ {
+ .desc = "home",
+ .code = KEY_HOME,
+ .code_long_press = KEY_F4,
+ .adc_value = 561,
+ .gpio = INVALID_GPIO,
+ .active_low = PRESS_LEV_LOW,
+ },
+ {
+ .desc = "esc",
+ .code = KEY_ESC,
+ .adc_value = 726,
+ .gpio = INVALID_GPIO,
+ .active_low = PRESS_LEV_LOW,
+ },
+ {
+ .desc = "adkey6",
+ .code = KEY_BACK,
+ .code_long_press = EV_ENCALL,
+ .adc_value = 899,
+ .gpio = INVALID_GPIO,
+ .active_low = PRESS_LEV_LOW,
+ },
+#endif
+};
+struct rk29_keys_platform_data rk29_keys_pdata = {
+ .buttons = key_button,
+ .nbuttons = ARRAY_SIZE(key_button),
+ .chn = -1, //chn: 0-7, if do not use ADC,set 'chn' -1
+};
+
.num_resources = ARRAY_SIZE(resources_nand),
};
#endif
-
+#ifdef CONFIG_KEYS_RK29
+extern struct rk29_keys_platform_data rk29_keys_pdata;
+static struct platform_device device_keys = {
+ .name = "rk29-keypad",
+ .id = -1,
+ .dev = {
+ .platform_data = &rk29_keys_pdata,
+ },
+};
+#endif
static int __init rk30_init_devices(void)
{
rk30_init_uart();
rk30_init_i2c();
#ifdef CONFIG_MTD_NAND_RK29XX
platform_device_register(&device_nand);
+#endif
+#ifdef CONFIG_KEYS_RK29
+ platform_device_register(&device_keys);
#endif
return 0;
}
--- /dev/null
+#ifndef __RK29_KEYS_H__
+#define __RK29_KEYS_H__
+#include <linux/input.h>
+
+#define DEFAULT_DEBOUNCE_INTERVAL 10 //10ms
+#define LONG_PRESS_COUNT 100 //100 * 10 = 1000ms
+#define ONE_SEC_COUNT (1000/DEFAULT_DEBOUNCE_INTERVAL)
+
+#define ADC_SAMPLE_TIME 10
+
+struct rk29_keys_button {
+ int code;
+ int code_long_press;
+ int gpio;
+ int adc_value;
+ int adc_state;
+ int active_low;
+ char *desc;
+ int wakeup;
+};
+
+
+struct rk29_keys_platform_data {
+ struct rk29_keys_button *buttons;
+ int nbuttons;
+ int chn;
+ int rep;
+};
+
+#endif