diff options
Diffstat (limited to 'drivers/mfd/ucb1x00-ts.c')
-rw-r--r-- | drivers/mfd/ucb1x00-ts.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/mfd/ucb1x00-ts.c b/drivers/mfd/ucb1x00-ts.c index 000cb414a78a..38ffbd50a0d2 100644 --- a/drivers/mfd/ucb1x00-ts.c +++ b/drivers/mfd/ucb1x00-ts.c | |||
@@ -60,6 +60,7 @@ static inline void ucb1x00_ts_evt_add(struct ucb1x00_ts *ts, u16 pressure, u16 x | |||
60 | input_report_abs(idev, ABS_X, x); | 60 | input_report_abs(idev, ABS_X, x); |
61 | input_report_abs(idev, ABS_Y, y); | 61 | input_report_abs(idev, ABS_Y, y); |
62 | input_report_abs(idev, ABS_PRESSURE, pressure); | 62 | input_report_abs(idev, ABS_PRESSURE, pressure); |
63 | input_report_key(idev, BTN_TOUCH, 1); | ||
63 | input_sync(idev); | 64 | input_sync(idev); |
64 | } | 65 | } |
65 | 66 | ||
@@ -68,6 +69,7 @@ static inline void ucb1x00_ts_event_release(struct ucb1x00_ts *ts) | |||
68 | struct input_dev *idev = ts->idev; | 69 | struct input_dev *idev = ts->idev; |
69 | 70 | ||
70 | input_report_abs(idev, ABS_PRESSURE, 0); | 71 | input_report_abs(idev, ABS_PRESSURE, 0); |
72 | input_report_key(idev, BTN_TOUCH, 0); | ||
71 | input_sync(idev); | 73 | input_sync(idev); |
72 | } | 74 | } |
73 | 75 | ||
@@ -384,13 +386,20 @@ static int ucb1x00_ts_add(struct ucb1x00_dev *dev) | |||
384 | idev->open = ucb1x00_ts_open; | 386 | idev->open = ucb1x00_ts_open; |
385 | idev->close = ucb1x00_ts_close; | 387 | idev->close = ucb1x00_ts_close; |
386 | 388 | ||
387 | __set_bit(EV_ABS, idev->evbit); | 389 | idev->evbit[0] = BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY); |
388 | __set_bit(ABS_X, idev->absbit); | 390 | idev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
389 | __set_bit(ABS_Y, idev->absbit); | ||
390 | __set_bit(ABS_PRESSURE, idev->absbit); | ||
391 | 391 | ||
392 | input_set_drvdata(idev, ts); | 392 | input_set_drvdata(idev, ts); |
393 | 393 | ||
394 | ucb1x00_adc_enable(ts->ucb); | ||
395 | ts->x_res = ucb1x00_ts_read_xres(ts); | ||
396 | ts->y_res = ucb1x00_ts_read_yres(ts); | ||
397 | ucb1x00_adc_disable(ts->ucb); | ||
398 | |||
399 | input_set_abs_params(idev, ABS_X, 0, ts->x_res, 0, 0); | ||
400 | input_set_abs_params(idev, ABS_Y, 0, ts->y_res, 0, 0); | ||
401 | input_set_abs_params(idev, ABS_PRESSURE, 0, 0, 0, 0); | ||
402 | |||
394 | err = input_register_device(idev); | 403 | err = input_register_device(idev); |
395 | if (err) | 404 | if (err) |
396 | goto fail; | 405 | goto fail; |