Lines Matching refs:touch
69 static inline int is_pen_down(struct da9034_touch *touch) in is_pen_down() argument
71 return da903x_query_status(touch->da9034_dev, DA9034_STATUS_PEN_DOWN); in is_pen_down()
74 static inline int detect_pen_down(struct da9034_touch *touch, int on) in detect_pen_down() argument
77 return da903x_set_bits(touch->da9034_dev, in detect_pen_down()
80 return da903x_clr_bits(touch->da9034_dev, in detect_pen_down()
84 static int read_tsi(struct da9034_touch *touch) in read_tsi() argument
89 ret = da903x_read(touch->da9034_dev, DA9034_TSI_X_MSB, &_x); in read_tsi()
93 ret = da903x_read(touch->da9034_dev, DA9034_TSI_Y_MSB, &_y); in read_tsi()
97 ret = da903x_read(touch->da9034_dev, DA9034_TSI_XY_LSB, &_v); in read_tsi()
101 touch->last_x = ((_x << 2) & 0x3fc) | (_v & 0x3); in read_tsi()
102 touch->last_y = ((_y << 2) & 0x3fc) | ((_v & 0xc) >> 2); in read_tsi()
107 static inline int start_tsi(struct da9034_touch *touch) in start_tsi() argument
109 return da903x_set_bits(touch->da9034_dev, in start_tsi()
113 static inline int stop_tsi(struct da9034_touch *touch) in stop_tsi() argument
115 return da903x_clr_bits(touch->da9034_dev, in stop_tsi()
119 static inline void report_pen_down(struct da9034_touch *touch) in report_pen_down() argument
121 int x = touch->last_x; in report_pen_down()
122 int y = touch->last_y; in report_pen_down()
125 if (touch->x_inverted) in report_pen_down()
128 if (touch->y_inverted) in report_pen_down()
131 input_report_abs(touch->input_dev, ABS_X, x); in report_pen_down()
132 input_report_abs(touch->input_dev, ABS_Y, y); in report_pen_down()
133 input_report_key(touch->input_dev, BTN_TOUCH, 1); in report_pen_down()
135 input_sync(touch->input_dev); in report_pen_down()
138 static inline void report_pen_up(struct da9034_touch *touch) in report_pen_up() argument
140 input_report_key(touch->input_dev, BTN_TOUCH, 0); in report_pen_up()
141 input_sync(touch->input_dev); in report_pen_up()
144 static void da9034_event_handler(struct da9034_touch *touch, int event) in da9034_event_handler() argument
148 switch (touch->state) { in da9034_event_handler()
156 err = start_tsi(touch); in da9034_event_handler()
160 touch->state = STATE_BUSY; in da9034_event_handler()
167 err = read_tsi(touch); in da9034_event_handler()
174 err = stop_tsi(touch); in da9034_event_handler()
178 touch->state = STATE_STOP; in da9034_event_handler()
186 da9034_event_handler(touch, in da9034_event_handler()
187 is_pen_down(touch) ? EVENT_PEN_DOWN : in da9034_event_handler()
193 report_pen_down(touch); in da9034_event_handler()
194 schedule_delayed_work(&touch->tsi_work, in da9034_event_handler()
195 msecs_to_jiffies(touch->interval_ms)); in da9034_event_handler()
196 touch->state = STATE_WAIT; in da9034_event_handler()
200 report_pen_up(touch); in da9034_event_handler()
201 touch->state = STATE_IDLE; in da9034_event_handler()
209 if (is_pen_down(touch)) { in da9034_event_handler()
210 start_tsi(touch); in da9034_event_handler()
211 touch->state = STATE_BUSY; in da9034_event_handler()
213 report_pen_up(touch); in da9034_event_handler()
214 touch->state = STATE_IDLE; in da9034_event_handler()
221 touch->state = STATE_IDLE; in da9034_event_handler()
222 stop_tsi(touch); in da9034_event_handler()
223 detect_pen_down(touch, 1); in da9034_event_handler()
228 struct da9034_touch *touch = in da9034_tsi_work() local
231 da9034_event_handler(touch, EVENT_TIMEDOUT); in da9034_tsi_work()
237 struct da9034_touch *touch = in da9034_touch_notifier() local
241 da9034_event_handler(touch, EVENT_TSI_READY); in da9034_touch_notifier()
243 if ((event & DA9034_EVENT_PEN_DOWN) && touch->state == STATE_IDLE) in da9034_touch_notifier()
244 da9034_event_handler(touch, EVENT_PEN_DOWN); in da9034_touch_notifier()
251 struct da9034_touch *touch = input_get_drvdata(dev); in da9034_touch_open() local
254 ret = da903x_register_notifier(touch->da9034_dev, &touch->notifier, in da9034_touch_open()
260 ret = da903x_set_bits(touch->da9034_dev, in da9034_touch_open()
266 ret = da903x_write(touch->da9034_dev, DA9034_TSI_CTRL1, 0x1b); in da9034_touch_open()
270 ret = da903x_write(touch->da9034_dev, DA9034_TSI_CTRL2, 0x00); in da9034_touch_open()
274 touch->state = STATE_IDLE; in da9034_touch_open()
275 detect_pen_down(touch, 1); in da9034_touch_open()
282 struct da9034_touch *touch = input_get_drvdata(dev); in da9034_touch_close() local
284 da903x_unregister_notifier(touch->da9034_dev, &touch->notifier, in da9034_touch_close()
287 cancel_delayed_work_sync(&touch->tsi_work); in da9034_touch_close()
289 touch->state = STATE_IDLE; in da9034_touch_close()
290 stop_tsi(touch); in da9034_touch_close()
291 detect_pen_down(touch, 0); in da9034_touch_close()
294 da903x_clr_bits(touch->da9034_dev, in da9034_touch_close()
302 struct da9034_touch *touch; in da9034_touch_probe() local
306 touch = devm_kzalloc(&pdev->dev, sizeof(struct da9034_touch), in da9034_touch_probe()
308 if (!touch) { in da9034_touch_probe()
313 touch->da9034_dev = pdev->dev.parent; in da9034_touch_probe()
316 touch->interval_ms = pdata->interval_ms; in da9034_touch_probe()
317 touch->x_inverted = pdata->x_inverted; in da9034_touch_probe()
318 touch->y_inverted = pdata->y_inverted; in da9034_touch_probe()
321 touch->interval_ms = 10; in da9034_touch_probe()
324 INIT_DELAYED_WORK(&touch->tsi_work, da9034_tsi_work); in da9034_touch_probe()
325 touch->notifier.notifier_call = da9034_touch_notifier; in da9034_touch_probe()
347 touch->input_dev = input_dev; in da9034_touch_probe()
348 input_set_drvdata(input_dev, touch); in da9034_touch_probe()