summaryrefslogtreecommitdiff
path: root/drivers/input/touchscreen
diff options
context:
space:
mode:
authorVarun Wadekar <vwadekar@nvidia.com>2011-11-25 11:24:28 +0530
committerVarun Wadekar <vwadekar@nvidia.com>2011-12-09 13:59:52 +0530
commita56026d14c2d68497124ddd2bf59a0bb749bf87e (patch)
treecdb991bdc965c25c340b0916c84a295607b8f788 /drivers/input/touchscreen
parent3cd3ada642b7cfe2f2cce92c28685232991da343 (diff)
input: touch: atmel_mxt_ts: sanity check pressure value
The hardware gives you 0 as the pressure even for valid touches. Pass a default value if you get pressure value outside limits from the hardware during a 'press'. Pass pressure as 0, for a 'release'. Change-Id: Id858240464474d3c18e4bae9768f41327c5d4124 Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Diffstat (limited to 'drivers/input/touchscreen')
-rw-r--r--drivers/input/touchscreen/atmel_mxt_ts.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index 742c5131331f..ad9be1a9198e 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -244,6 +244,8 @@
#define RESUME_READS 100
+#define MXT_DEFAULT_PRESSURE 100
+
struct mxt_info {
u8 family_id;
u8 variant_id;
@@ -634,8 +636,7 @@ static void mxt_input_report(struct mxt_data *data, int single_id)
if (status != MXT_RELEASE) {
input_report_abs(input_dev, ABS_X, finger[single_id].x);
input_report_abs(input_dev, ABS_Y, finger[single_id].y);
- input_report_abs(input_dev,
- ABS_PRESSURE, finger[single_id].pressure);
+ input_report_abs(input_dev, ABS_PRESSURE, finger[single_id].pressure);
}
input_sync(input_dev);
@@ -658,6 +659,7 @@ static void mxt_input_touchevent(struct mxt_data *data,
dev_dbg(dev, "[%d] released\n", id);
finger[id].status = MXT_RELEASE;
+ finger[id].pressure = 0;
mxt_input_report(data, id);
}
return;
@@ -677,6 +679,9 @@ static void mxt_input_touchevent(struct mxt_data *data,
area = message->message[4];
pressure = message->message[5];
+ if ((pressure <= 0) || (pressure > 255))
+ pressure = MXT_DEFAULT_PRESSURE;
+
dev_dbg(dev, "[%d] %s x: %d, y: %d, area: %d\n", id,
status & MXT_MOVE ? "moved" : "pressed",
x, y, area);
@@ -1459,8 +1464,6 @@ int mxt_write_block(struct i2c_client *client, u16 addr, u16 length, u8 *value)
u8 data[256];
} i2c_block_transfer;
- struct mxt_data *mxt;
-
if (length > 256)
return -EINVAL;