#include <linux/delay.h>
#include <linux/platform_device.h>
#include <linux/input.h>
-#include <linux/workqueue.h>
#include <linux/adc.h>
#include <asm/gpio.h>
struct rk29_keys_button *button;
struct input_dev *input;
struct timer_list timer;
- struct work_struct work;
};
struct rk29_keys_drvdata {
struct rk29_button_data data[0];
};
-static void keys_do_something(struct work_struct *work)
-{
- struct rk29_button_data *bdata =
- container_of(work, struct rk29_button_data, work);
-
- key_dbg(bdata, "do what?\n");
- return;
-}
-
static void keys_long_press_timer(unsigned long _data)
{
int state;
struct rk29_button_data *bdata = dev_id;
struct rk29_keys_button *button = bdata->button;
BUG_ON(irq != gpio_to_irq(button->gpio));
- if(button->wakeup)
- schedule_work(&bdata->work);
bdata->long_press_count = 0;
mod_timer(&bdata->timer,
jiffies + msecs_to_jiffies(DEFAULT_DEBOUNCE_INTERVAL));
else if(button->code)
setup_timer(&bdata->timer,
keys_timer, (unsigned long)bdata);
- INIT_WORK(&bdata->work, keys_do_something);
if(button->gpio) {
error = gpio_request(button->gpio, button->desc ?: "keys");
if (error < 0) {
while (--i >= 0) {
free_irq(gpio_to_irq(pdata->buttons[i].gpio), &ddata->data[i]);
del_timer_sync(&ddata->data[i].timer);
- cancel_work_sync(&ddata->data[i].work);
gpio_free(pdata->buttons[i].gpio);
}
if(pdata->chn >= 0 && ddata->client);
int irq = gpio_to_irq(pdata->buttons[i].gpio);
free_irq(irq, &ddata->data[i]);
del_timer_sync(&ddata->data[i].timer);
- cancel_work_sync(&ddata->data[i].work);
gpio_free(pdata->buttons[i].gpio);
}
if(pdata->chn >= 0 && ddata->client);