diff options
| -rw-r--r-- | drivers/input/touchscreen/wacom_i2c.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/input/touchscreen/wacom_i2c.c b/drivers/input/touchscreen/wacom_i2c.c index bf0d07620bac..7ccaa1b12b05 100644 --- a/drivers/input/touchscreen/wacom_i2c.c +++ b/drivers/input/touchscreen/wacom_i2c.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Wacom Penabled Driver for I2C | 2 | * Wacom Penabled Driver for I2C |
| 3 | * | 3 | * |
| 4 | * Copyright (c) 2011 Tatsunosuke Tobita, Wacom. | 4 | * Copyright (c) 2011 - 2013 Tatsunosuke Tobita, Wacom. |
| 5 | * <tobita.tatsunosuke@wacom.co.jp> | 5 | * <tobita.tatsunosuke@wacom.co.jp> |
| 6 | * | 6 | * |
| 7 | * This program is free software; you can redistribute it | 7 | * This program is free software; you can redistribute it |
| @@ -27,7 +27,6 @@ | |||
| 27 | #define WACOM_CMD_THROW0 0x05 | 27 | #define WACOM_CMD_THROW0 0x05 |
| 28 | #define WACOM_CMD_THROW1 0x00 | 28 | #define WACOM_CMD_THROW1 0x00 |
| 29 | #define WACOM_QUERY_SIZE 19 | 29 | #define WACOM_QUERY_SIZE 19 |
| 30 | #define WACOM_RETRY_CNT 100 | ||
| 31 | 30 | ||
| 32 | struct wacom_features { | 31 | struct wacom_features { |
| 33 | int x_max; | 32 | int x_max; |
| @@ -40,6 +39,8 @@ struct wacom_i2c { | |||
| 40 | struct i2c_client *client; | 39 | struct i2c_client *client; |
| 41 | struct input_dev *input; | 40 | struct input_dev *input; |
| 42 | u8 data[WACOM_QUERY_SIZE]; | 41 | u8 data[WACOM_QUERY_SIZE]; |
| 42 | bool prox; | ||
| 43 | int tool; | ||
| 43 | }; | 44 | }; |
| 44 | 45 | ||
| 45 | static int wacom_query_device(struct i2c_client *client, | 46 | static int wacom_query_device(struct i2c_client *client, |
| @@ -112,9 +113,14 @@ static irqreturn_t wacom_i2c_irq(int irq, void *dev_id) | |||
| 112 | y = le16_to_cpup((__le16 *)&data[6]); | 113 | y = le16_to_cpup((__le16 *)&data[6]); |
| 113 | pressure = le16_to_cpup((__le16 *)&data[8]); | 114 | pressure = le16_to_cpup((__le16 *)&data[8]); |
| 114 | 115 | ||
| 116 | if (!wac_i2c->prox) | ||
| 117 | wac_i2c->tool = (data[3] & 0x0c) ? | ||
| 118 | BTN_TOOL_RUBBER : BTN_TOOL_PEN; | ||
| 119 | |||
| 120 | wac_i2c->prox = data[3] & 0x20; | ||
| 121 | |||
| 115 | input_report_key(input, BTN_TOUCH, tsw || ers); | 122 | input_report_key(input, BTN_TOUCH, tsw || ers); |
| 116 | input_report_key(input, BTN_TOOL_PEN, tsw); | 123 | input_report_key(input, wac_i2c->tool, wac_i2c->prox); |
| 117 | input_report_key(input, BTN_TOOL_RUBBER, ers); | ||
| 118 | input_report_key(input, BTN_STYLUS, f1); | 124 | input_report_key(input, BTN_STYLUS, f1); |
| 119 | input_report_key(input, BTN_STYLUS2, f2); | 125 | input_report_key(input, BTN_STYLUS2, f2); |
| 120 | input_report_abs(input, ABS_X, x); | 126 | input_report_abs(input, ABS_X, x); |
