#define PRESS_LEV_HIGH 0\r
\r
static struct rk29_keys_button key_button[] = {\r
- [0] = {\r
+ {\r
.desc = "vol+",\r
.code = KEY_VOLUMEDOWN,\r
.gpio = RK29_PIN0_PB0,\r
.active_low = PRESS_LEV_LOW,\r
},\r
- [1] = {\r
+ {\r
.desc = "vol-",\r
.code = KEY_VOLUMEUP,\r
.gpio = RK29_PIN0_PB1,\r
.active_low = PRESS_LEV_LOW,\r
},\r
- [2] = {\r
+ {\r
.desc = "menu",\r
.code = EV_MENU,\r
.gpio = RK29_PIN0_PB2,\r
.active_low = PRESS_LEV_LOW,\r
},\r
- [3] = {\r
+ {\r
.desc = "home",\r
.code = KEY_HOME,\r
- .code_long_press = KEY_F4,\r
.gpio = RK29_PIN0_PB3,\r
.active_low = PRESS_LEV_LOW,\r
},\r
- [4] = {\r
- .desc = "back",\r
- .code = KEY_BACK,\r
+ {\r
+ .desc = "esc",\r
+ .code = KEY_ESC,\r
.gpio = RK29_PIN0_PB4,\r
.active_low = PRESS_LEV_LOW,\r
},\r
- [5] = {\r
- .desc = "esc",\r
- .code = KEY_ESC,\r
+ {\r
+ .desc = "iokey6",\r
+ .code = KEY_BACK,\r
+ .code_long_press = EV_ENCALL,\r
.gpio = RK29_PIN0_PB5,\r
.active_low = PRESS_LEV_LOW,\r
},\r
-#if 0\r
- [6] = {\r
+ {\r
.desc = "vol+",\r
.code = KEY_VOLUMEDOWN,\r
.adc_value = 95,\r
.active_low = PRESS_LEV_LOW,\r
},\r
- [7] = {\r
+ {\r
.desc = "vol-",\r
.code = KEY_VOLUMEUP,\r
.adc_value = 249,\r
.active_low = PRESS_LEV_LOW,\r
},\r
- [8] = {\r
+ {\r
.desc = "menu",\r
.code = EV_MENU,\r
.adc_value = 406,\r
.active_low = PRESS_LEV_LOW,\r
},\r
- [9] = {\r
+ {\r
.desc = "home",\r
.code = KEY_HOME,\r
.code_long_press = KEY_F4,\r
.adc_value = 561,\r
.active_low = PRESS_LEV_LOW,\r
},\r
- [10] = {\r
- .desc = "back",\r
- .code = KEY_BACK,\r
+ {\r
+ .desc = "esc",\r
+ .code = KEY_ESC,\r
.adc_value = 726,\r
.active_low = PRESS_LEV_LOW,\r
},\r
- [11] = {\r
- .desc = "esc",\r
- .code = KEY_ESC,\r
+ {\r
+ .desc = "adkey6",\r
+ .code = KEY_BACK,\r
+ .code_long_press = EV_ENCALL,\r
.adc_value = 899,\r
.active_low = PRESS_LEV_LOW,\r
},\r
-#endif\r
};\r
struct rk29_keys_platform_data rk29_keys_pdata = {\r
.buttons = key_button,\r
.nbuttons = ARRAY_SIZE(key_button),\r
- .chn = -1, //chn: 0-7, if do not use ADC,set 'chn' -1\r
+ .chn = 1, //chn: 0-7, if do not use ADC,set 'chn' -1\r
};\r
\r
struct rk29_keys_drvdata {
int nbuttons;
+ int result;
struct input_dev *input;
struct adc_client *client;
struct timer_list timer;
if(state) {
if(bdata->long_press_count != 0) {
if(bdata->long_press_count % (LONG_PRESS_COUNT+ONE_SEC_COUNT) == 0){
- key_dbg(bdata, "key[%s]: report ev[%d] state[0]\n", button->desc, button->code_long_press);
+ key_dbg(bdata, "%skey[%s]: report ev[%d] state[0]\n",
+ (!button->gpio)?"ad":"io", button->desc, button->code_long_press);
input_event(input, type, button->code_long_press, 0);
input_sync(input);
}
else if(bdata->long_press_count%LONG_PRESS_COUNT == 0) {
- key_dbg(bdata, "key[%s]: report ev[%d] state[1]\n", button->desc, button->code_long_press);
+ key_dbg(bdata, "%skey[%s]: report ev[%d] state[1]\n",
+ (!button->gpio)?"ad":"io", button->desc, button->code_long_press);
input_event(input, type, button->code_long_press, 1);
input_sync(input);
}
else {
if(bdata->long_press_count <= LONG_PRESS_COUNT) {
bdata->long_press_count = 0;
- key_dbg(bdata, "key[%s]: report ev[%d] state[1], report ev[%d] state[0]\n",
- button->desc, button->code, button->code);
+ key_dbg(bdata, "%skey[%s]: report ev[%d] state[1], report ev[%d] state[0]\n",
+ (!button->gpio)?"ad":"io", button->desc, button->code, button->code);
input_event(input, type, button->code, 1);
input_sync(input);
input_event(input, type, button->code, 0);
}
else {
if(bdata->state != state)
- key_dbg(bdata, "key[%s]: report ev[%d] state[0]\n", button->desc, button->code_long_press);
+ key_dbg(bdata, "%skey[%s]: report ev[%d] state[0]\n",
+ (!button->gpio)?"ad":"io", button->desc, button->code_long_press);
input_event(input, type, button->code_long_press, 0);
input_sync(input);
}
state = !!button->adc_state;
if(bdata->state != state) {
bdata->state = state;
- key_dbg(bdata, "key[%s]: report ev[%d] state[%d]\n", button->desc, button->code, bdata->state);
+ key_dbg(bdata, "%skey[%s]: report ev[%d] state[%d]\n",
+ (!button->gpio)?"ad":"io", button->desc, button->code, bdata->state);
input_event(input, type, button->code, bdata->state);
input_sync(input);
}
{
struct rk29_keys_drvdata *ddata = (struct rk29_keys_drvdata *)client_param;
int i;
+ if(result > INVALID_ADVALUE && result < EMPTY_ADVALUE)
+ ddata->result = result;
for (i = 0; i < ddata->nbuttons; i++) {
struct rk29_button_data *bdata = &ddata->data[i];
struct rk29_keys_button *button = bdata->button;
button->adc_state = 1;
else
button->adc_state = 0;
-
+ if(bdata->state != button->adc_state)
+ mod_timer(&bdata->timer,
+ jiffies + msecs_to_jiffies(DEFAULT_DEBOUNCE_INTERVAL));
}
return;
}
adc_async_read(ddata->client);
mod_timer(&ddata->timer, jiffies + msecs_to_jiffies(ADC_SAMPLE_TIME));
}
+static ssize_t adc_value_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+ struct rk29_keys_drvdata *ddata = dev_get_drvdata(dev);
+
+ return sprintf(buf, "adc_value: %d\n", ddata->result);
+}
+
+static DEVICE_ATTR(get_adc_value, S_IRUGO | S_IWUSR, adc_value_show, NULL);
static int __devinit keys_probe(struct platform_device *pdev)
{
}
device_init_wakeup(&pdev->dev, wakeup);
-
- return 0;
+ error = device_create_file(&pdev->dev, &dev_attr_get_adc_value);
+ return error;
fail2:
while (--i >= 0) {
.probe = keys_probe,
.remove = __devexit_p(keys_remove),
.driver = {
- .name = "gpio-keys",
+ .name = "rk29-keys",
.owner = THIS_MODULE,
#ifdef CONFIG_PM
.pm = &keys_pm_ops,