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: Thierry Reding <thierry.reding@avionic-design.de> Signed-off-by: Kwangwoo Lee <kwangwoo.lee@gmail.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
parent
9166d0f620
commit
705a76d2d2
1 changed files with 3 additions and 2 deletions
|
@ -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)
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue