]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
tsc2301 - fix keyboard stuck problem
authorKlaus Pedersen <klaus.k.pedersen@nokia.com>
Fri, 15 Feb 2008 21:31:42 +0000 (23:31 +0200)
committerTony Lindgren <tony@atomide.com>
Thu, 21 Feb 2008 00:20:29 +0000 (16:20 -0800)
The following steps could provoke a lock-up in the tsc2301:

cd /sys/devices/platform/omap2_mcspi.1/spi1.0

echo 1 > disable_kp
echo 0 > disable_kp
echo 1 > disable_ts

Signed-off-by: Klaus Pedersen <klaus.k.pedersen@nokia.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
drivers/input/keyboard/tsc2301_kp.c
drivers/input/touchscreen/tsc2301_ts.c

index 473c0f2d9a47e08aab4333098d53a2f0b2a1e107..3703cd5489beeb081eb4134cb6028e4d9a3c9d9e 100644 (file)
@@ -270,14 +270,9 @@ out:
  */
 void tsc2301_kp_restart(struct tsc2301 *tsc)
 {
-       struct tsc2301_kp *kp = tsc->kp;
-
-       mutex_lock(&kp->mutex);
-       if (!kp->user_disabled) {
-               tsc2301_kp_disable(tsc, 0);
-               tsc2301_kp_enable(tsc);
+       if (!tsc2301_kp_disabled(tsc)) {
+               tsc2301_kp_start_scan(tsc);
        }
-       mutex_unlock(&kp->mutex);
 }
 
 static ssize_t tsc2301_kp_disable_show(struct device *dev,
index a01aa58c2cea722bd77aa55c3874b11f107bf31a..03c1317ccd0a95f56078e3e166b73b841f326408 100644 (file)
@@ -275,11 +275,13 @@ static int tsc2301_ts_configure(struct tsc2301 *tsc, int flags)
 static void tsc2301_ts_start_scan(struct tsc2301 *tsc)
 {
        tsc2301_ts_configure(tsc, tsc->ts->hw_flags);
+       tsc2301_kp_restart(tsc);
 }
 
 static void tsc2301_ts_stop_scan(struct tsc2301 *tsc)
 {
        tsc2301_write_reg(tsc, TSC2301_REG_ADC, TSC2301_ADCREG_STOP_CONVERSION);
+       tsc2301_kp_restart(tsc);
 }
 
 static void update_pen_state(struct tsc2301_ts *ts, int x, int y, int pressure)
@@ -439,10 +441,6 @@ static void tsc2301_ts_disable(struct tsc2301 *tsc)
        } while (ts->event_sent);
 
        tsc2301_ts_stop_scan(tsc);
-       /* Workaround a bug where turning on / off touchscreen scanner
-        * can get the keypad scanner stuck.
-        */
-       tsc2301_kp_restart(tsc);
 }
 
 static void tsc2301_ts_enable(struct tsc2301 *tsc)
@@ -455,8 +453,6 @@ static void tsc2301_ts_enable(struct tsc2301 *tsc)
        enable_irq(ts->irq);
 
        tsc2301_ts_start_scan(tsc);
-       /* Same workaround as above. */
-       tsc2301_kp_restart(tsc);
 }
 
 #ifdef CONFIG_PM