summaryrefslogtreecommitdiff
path: root/drivers/input/misc
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2011-03-18 16:02:26 -0700
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:38:39 -0800
commitd3d577b41a494c8d40f39683c83471f447493515 (patch)
treeda10c5e0758065fa109a99cd8bac0423744484d2 /drivers/input/misc
parentc4820da1bc470f498fdecc9947226bb7521f7b27 (diff)
input: gpio_input: send input_sync after reporting keys
Signed-off-by: jeffbrown@android.com Change-Id: Ie170960df3c8ab4833ed686135dc8575cb9f2d48
Diffstat (limited to 'drivers/input/misc')
-rw-r--r--drivers/input/misc/gpio_input.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/input/misc/gpio_input.c b/drivers/input/misc/gpio_input.c
index 758df480600b..98d204fda153 100644
--- a/drivers/input/misc/gpio_input.c
+++ b/drivers/input/misc/gpio_input.c
@@ -62,6 +62,7 @@ static enum hrtimer_restart gpio_event_input_timer_func(struct hrtimer *timer)
struct gpio_key_state *key_state;
unsigned long irqflags;
uint8_t debounce;
+ bool sync_needed;
#if 0
key_entry = kp->keys_info->keymap;
@@ -72,6 +73,7 @@ static enum hrtimer_restart gpio_event_input_timer_func(struct hrtimer *timer)
#endif
key_entry = ds->info->keymap;
key_state = ds->key_state;
+ sync_needed = false;
spin_lock_irqsave(&ds->irq_lock, irqflags);
for (i = 0; i < nkeys; i++, key_entry++, key_state++) {
debounce = key_state->debounce;
@@ -129,6 +131,11 @@ static enum hrtimer_restart gpio_event_input_timer_func(struct hrtimer *timer)
key_entry->code, i, key_entry->gpio, pressed);
input_event(ds->input_devs->dev[key_entry->dev], ds->info->type,
key_entry->code, pressed);
+ sync_needed = true;
+ }
+ if (sync_needed) {
+ for (i = 0; i < ds->input_devs->count; i++)
+ input_sync(ds->input_devs->dev[i]);
}
#if 0
@@ -196,6 +203,7 @@ static irqreturn_t gpio_event_input_irq_handler(int irq, void *dev_id)
key_entry->gpio, pressed);
input_event(ds->input_devs->dev[key_entry->dev], ds->info->type,
key_entry->code, pressed);
+ input_sync(ds->input_devs->dev[key_entry->dev]);
}
return IRQ_HANDLED;
}