diff options
author | Varun Wadekar <vwadekar@nvidia.com> | 2011-11-25 11:24:28 +0530 |
---|---|---|
committer | Varun Wadekar <vwadekar@nvidia.com> | 2011-12-09 13:59:52 +0530 |
commit | a56026d14c2d68497124ddd2bf59a0bb749bf87e (patch) | |
tree | cdb991bdc965c25c340b0916c84a295607b8f788 /drivers/input/touchscreen | |
parent | 3cd3ada642b7cfe2f2cce92c28685232991da343 (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.c | 11 |
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; |