Commit 705a76d2 authored by Thierry Reding's avatar Thierry Reding Committed by Dmitry Torokhov

Input: tsc2007 - fix locking in hrtimer handler

Now that hrtimers are always running in hard irq context we can't
unconditionally enable interrupts at the end of the timer function.
Signed-off-by: default avatarThierry Reding <thierry.reding@avionic-design.de>
Signed-off-by: default avatarKwangwoo Lee <kwangwoo.lee@gmail.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 9166d0f6
...@@ -200,8 +200,9 @@ static int tsc2007_read_values(struct tsc2007 *tsc) ...@@ -200,8 +200,9 @@ static int tsc2007_read_values(struct tsc2007 *tsc)
static enum hrtimer_restart tsc2007_timer(struct hrtimer *handle) static enum hrtimer_restart tsc2007_timer(struct hrtimer *handle)
{ {
struct tsc2007 *ts = container_of(handle, struct tsc2007, timer); struct tsc2007 *ts = container_of(handle, struct tsc2007, timer);
unsigned long flags;
spin_lock_irq(&ts->lock); spin_lock_irqsave(&ts->lock, flags);
if (unlikely(!ts->get_pendown_state() && ts->pendown)) { if (unlikely(!ts->get_pendown_state() && ts->pendown)) {
struct input_dev *input = ts->input; struct input_dev *input = ts->input;
...@@ -222,7 +223,7 @@ static enum hrtimer_restart tsc2007_timer(struct hrtimer *handle) ...@@ -222,7 +223,7 @@ static enum hrtimer_restart tsc2007_timer(struct hrtimer *handle)
tsc2007_send_event(ts); tsc2007_send_event(ts);
} }
spin_unlock_irq(&ts->lock); spin_unlock_irqrestore(&ts->lock, flags);
return HRTIMER_NORESTART; return HRTIMER_NORESTART;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment