diff options
Diffstat (limited to 'drivers/input/touchscreen/ad7879.c')
| -rw-r--r-- | drivers/input/touchscreen/ad7879.c | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c index ba6f0bd1e762..bc3b5187f3a3 100644 --- a/drivers/input/touchscreen/ad7879.c +++ b/drivers/input/touchscreen/ad7879.c | |||
| @@ -129,6 +129,9 @@ struct ad7879 { | |||
| 129 | u16 cmd_crtl1; | 129 | u16 cmd_crtl1; |
| 130 | u16 cmd_crtl2; | 130 | u16 cmd_crtl2; |
| 131 | u16 cmd_crtl3; | 131 | u16 cmd_crtl3; |
| 132 | int x; | ||
| 133 | int y; | ||
| 134 | int Rt; | ||
| 132 | }; | 135 | }; |
| 133 | 136 | ||
| 134 | static int ad7879_read(struct ad7879 *ts, u8 reg) | 137 | static int ad7879_read(struct ad7879 *ts, u8 reg) |
| @@ -175,13 +178,32 @@ static int ad7879_report(struct ad7879 *ts) | |||
| 175 | Rt /= z1; | 178 | Rt /= z1; |
| 176 | Rt = (Rt + 2047) >> 12; | 179 | Rt = (Rt + 2047) >> 12; |
| 177 | 180 | ||
| 178 | if (!timer_pending(&ts->timer)) | 181 | /* |
| 182 | * Sample found inconsistent, pressure is beyond | ||
| 183 | * the maximum. Don't report it to user space. | ||
| 184 | */ | ||
| 185 | if (Rt > ts->pressure_max) | ||
| 186 | return -EINVAL; | ||
| 187 | |||
| 188 | /* | ||
| 189 | * Note that we delay reporting events by one sample. | ||
| 190 | * This is done to avoid reporting last sample of the | ||
| 191 | * touch sequence, which may be incomplete if finger | ||
| 192 | * leaves the surface before last reading is taken. | ||
| 193 | */ | ||
| 194 | if (timer_pending(&ts->timer)) { | ||
| 195 | /* Touch continues */ | ||
| 179 | input_report_key(input_dev, BTN_TOUCH, 1); | 196 | input_report_key(input_dev, BTN_TOUCH, 1); |
| 197 | input_report_abs(input_dev, ABS_X, ts->x); | ||
| 198 | input_report_abs(input_dev, ABS_Y, ts->y); | ||
| 199 | input_report_abs(input_dev, ABS_PRESSURE, ts->Rt); | ||
| 200 | input_sync(input_dev); | ||
| 201 | } | ||
| 202 | |||
| 203 | ts->x = x; | ||
| 204 | ts->y = y; | ||
| 205 | ts->Rt = Rt; | ||
| 180 | 206 | ||
| 181 | input_report_abs(input_dev, ABS_X, x); | ||
| 182 | input_report_abs(input_dev, ABS_Y, y); | ||
| 183 | input_report_abs(input_dev, ABS_PRESSURE, Rt); | ||
| 184 | input_sync(input_dev); | ||
| 185 | return 0; | 207 | return 0; |
| 186 | } | 208 | } |
| 187 | 209 | ||
