>From 30b11594207afd8a3075d3115678cd7013d380d8 Mon Sep 17 00:00:00 2001 From: Christian Gmeiner <christian.gmeiner@xxxxxxxxx> Date: Wed, 7 Sep 2011 14:29:10 +0200 Subject: [PATCH 3/3] TSC40: Improve EEPROM error handling It could happen that the internal EEPROM does not contain any calibration data and as a result of this the driver will fail. With this patch we simply ignore an empty EEPROM, as the touch controller runs in 'Coordinate data mode' (raw data). Signed-off-by: Christian Gmeiner <christian.gmeiner@xxxxxxxxx> --- drivers/input/touchscreen/tsc40.c | 21 +++++++++++++++++---- 1 files changed, 17 insertions(+), 4 deletions(-) diff --git a/drivers/input/touchscreen/tsc40.c b/drivers/input/touchscreen/tsc40.c index b73ef2f..d914522 100644 --- a/drivers/input/touchscreen/tsc40.c +++ b/drivers/input/touchscreen/tsc40.c @@ -49,7 +49,6 @@ struct tsc_ser { #define RESPONSE_ACK 0x06 #define RESPONSE_NAK 0x15 -#define NACK_DETAIL_NT (1 << 3) #define ID_EPROM_UNUSED (1 << 7) @@ -96,11 +95,25 @@ static void handle_reset(struct serio *serio, unsigned char data) /* NAK + EEPROM available */ if (ptsc->idx == 1) { - if (!(data & NACK_DETAIL_NT)) { + if (data & (1 << 0)) { + dev_warn(&serio->dev, "EEPROM data empty\n"); + state_after_reset(ptsc, 1); + return; + } else if (data & (1 << 1)) { + dev_warn(&serio->dev, "EEPROM data abnormal\n"); state_after_reset(ptsc, 0); return; - } - state_after_reset(ptsc, 0); + } else if (data & (1 << 2)) { + dev_warn(&serio->dev, "EEPROM write error\n"); + state_after_reset(ptsc, 0); + return; + } else if (data & (1 << 3)) { + dev_warn(&serio->dev, "Touch screen not connected\n"); + state_after_reset(ptsc, 0); + return; + } else + BUG_ON(1); + return; } -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html