From 1974c841f30ba1bdf335a0ae0afe3515a61501be Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Fri, 23 Jan 2004 22:06:23 -0800 Subject: [PATCH] [PATCH] i8042 timer fix From: Jim Collette There's an exit path in i8042_interrupt() which forgets to rearm the timer. It can make the mouse die when X is started. --- drivers/input/serio/i8042.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c index 1371303c99cb7..1fb178904b13d 100644 --- a/drivers/input/serio/i8042.c +++ b/drivers/input/serio/i8042.c @@ -377,6 +377,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id, struct pt_regs *regs) unsigned long flags; unsigned char str, data; unsigned int dfl; + int ret; spin_lock_irqsave(&i8042_lock, flags); str = i8042_read_status(); @@ -385,7 +386,8 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id, struct pt_regs *regs) if (~str & I8042_STR_OBF) { if (irq) dbg("Interrupt %d, without any data", irq); - return IRQ_RETVAL(0); + ret = 0; + goto out; } dfl = ((str & I8042_STR_PARITY) ? SERIO_PARITY : 0) | @@ -428,9 +430,10 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id, struct pt_regs *regs) serio_interrupt(&i8042_kbd_port, data, dfl, regs); irq_ret: - + ret = 1; +out: mod_timer(&i8042_timer, jiffies + I8042_POLL_PERIOD); - return IRQ_RETVAL(1); + return IRQ_RETVAL(ret); } /* -- 2.53.0