Lines Matching refs:ts

57 static inline void ucb1x00_ts_evt_add(struct ucb1x00_ts *ts, u16 pressure, u16 x, u16 y)  in ucb1x00_ts_evt_add()  argument
59 struct input_dev *idev = ts->idev; in ucb1x00_ts_evt_add()
68 static inline void ucb1x00_ts_event_release(struct ucb1x00_ts *ts) in ucb1x00_ts_event_release() argument
70 struct input_dev *idev = ts->idev; in ucb1x00_ts_event_release()
80 static inline void ucb1x00_ts_mode_int(struct ucb1x00_ts *ts) in ucb1x00_ts_mode_int() argument
82 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, in ucb1x00_ts_mode_int()
92 static inline unsigned int ucb1x00_ts_read_pressure(struct ucb1x00_ts *ts) in ucb1x00_ts_read_pressure() argument
95 ucb1x00_io_write(ts->ucb, COLLIE_TC35143_GPIO_TBL_CHK, 0); in ucb1x00_ts_read_pressure()
96 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, in ucb1x00_ts_read_pressure()
102 return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_AD2, ts->adcsync); in ucb1x00_ts_read_pressure()
104 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, in ucb1x00_ts_read_pressure()
109 return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync); in ucb1x00_ts_read_pressure()
119 static inline unsigned int ucb1x00_ts_read_xpos(struct ucb1x00_ts *ts) in ucb1x00_ts_read_xpos() argument
122 ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK); in ucb1x00_ts_read_xpos()
124 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, in ucb1x00_ts_read_xpos()
127 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, in ucb1x00_ts_read_xpos()
131 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, in ucb1x00_ts_read_xpos()
137 return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync); in ucb1x00_ts_read_xpos()
146 static inline unsigned int ucb1x00_ts_read_ypos(struct ucb1x00_ts *ts) in ucb1x00_ts_read_ypos() argument
149 ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK); in ucb1x00_ts_read_ypos()
151 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, in ucb1x00_ts_read_ypos()
154 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, in ucb1x00_ts_read_ypos()
159 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, in ucb1x00_ts_read_ypos()
165 return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPX, ts->adcsync); in ucb1x00_ts_read_ypos()
172 static inline unsigned int ucb1x00_ts_read_xres(struct ucb1x00_ts *ts) in ucb1x00_ts_read_xres() argument
174 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, in ucb1x00_ts_read_xres()
177 return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync); in ucb1x00_ts_read_xres()
184 static inline unsigned int ucb1x00_ts_read_yres(struct ucb1x00_ts *ts) in ucb1x00_ts_read_yres() argument
186 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, in ucb1x00_ts_read_yres()
189 return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync); in ucb1x00_ts_read_yres()
192 static inline int ucb1x00_ts_pen_down(struct ucb1x00_ts *ts) in ucb1x00_ts_pen_down() argument
194 unsigned int val = ucb1x00_reg_read(ts->ucb, UCB_TS_CR); in ucb1x00_ts_pen_down()
209 struct ucb1x00_ts *ts = _ts; in ucb1x00_thread() local
215 add_wait_queue(&ts->irq_wait, &wait); in ucb1x00_thread()
223 ucb1x00_adc_enable(ts->ucb); in ucb1x00_thread()
225 x = ucb1x00_ts_read_xpos(ts); in ucb1x00_thread()
226 y = ucb1x00_ts_read_ypos(ts); in ucb1x00_thread()
227 p = ucb1x00_ts_read_pressure(ts); in ucb1x00_thread()
232 ucb1x00_ts_mode_int(ts); in ucb1x00_thread()
233 ucb1x00_adc_disable(ts->ucb); in ucb1x00_thread()
237 ucb1x00_enable(ts->ucb); in ucb1x00_thread()
240 if (ucb1x00_ts_pen_down(ts)) { in ucb1x00_thread()
243 spin_lock_irq(&ts->irq_lock); in ucb1x00_thread()
244 if (ts->irq_disabled) { in ucb1x00_thread()
245 ts->irq_disabled = 0; in ucb1x00_thread()
246 enable_irq(ts->ucb->irq_base + UCB_IRQ_TSPX); in ucb1x00_thread()
248 spin_unlock_irq(&ts->irq_lock); in ucb1x00_thread()
249 ucb1x00_disable(ts->ucb); in ucb1x00_thread()
256 ucb1x00_ts_event_release(ts); in ucb1x00_thread()
262 ucb1x00_disable(ts->ucb); in ucb1x00_thread()
270 ucb1x00_ts_evt_add(ts, p, x, y); in ucb1x00_thread()
281 remove_wait_queue(&ts->irq_wait, &wait); in ucb1x00_thread()
283 ts->rtask = NULL; in ucb1x00_thread()
293 struct ucb1x00_ts *ts = id; in ucb1x00_ts_irq() local
295 spin_lock(&ts->irq_lock); in ucb1x00_ts_irq()
296 ts->irq_disabled = 1; in ucb1x00_ts_irq()
297 disable_irq_nosync(ts->ucb->irq_base + UCB_IRQ_TSPX); in ucb1x00_ts_irq()
298 spin_unlock(&ts->irq_lock); in ucb1x00_ts_irq()
299 wake_up(&ts->irq_wait); in ucb1x00_ts_irq()
306 struct ucb1x00_ts *ts = input_get_drvdata(idev); in ucb1x00_ts_open() local
310 BUG_ON(ts->rtask); in ucb1x00_ts_open()
317 ts->irq_disabled = 0; in ucb1x00_ts_open()
319 init_waitqueue_head(&ts->irq_wait); in ucb1x00_ts_open()
320 ret = request_irq(ts->ucb->irq_base + UCB_IRQ_TSPX, ucb1x00_ts_irq, in ucb1x00_ts_open()
321 flags, "ucb1x00-ts", ts); in ucb1x00_ts_open()
329 ucb1x00_adc_enable(ts->ucb); in ucb1x00_ts_open()
330 ts->x_res = ucb1x00_ts_read_xres(ts); in ucb1x00_ts_open()
331 ts->y_res = ucb1x00_ts_read_yres(ts); in ucb1x00_ts_open()
332 ucb1x00_adc_disable(ts->ucb); in ucb1x00_ts_open()
334 ts->rtask = kthread_run(ucb1x00_thread, ts, "ktsd"); in ucb1x00_ts_open()
335 if (!IS_ERR(ts->rtask)) { in ucb1x00_ts_open()
338 free_irq(ts->ucb->irq_base + UCB_IRQ_TSPX, ts); in ucb1x00_ts_open()
339 ts->rtask = NULL; in ucb1x00_ts_open()
352 struct ucb1x00_ts *ts = input_get_drvdata(idev); in ucb1x00_ts_close() local
354 if (ts->rtask) in ucb1x00_ts_close()
355 kthread_stop(ts->rtask); in ucb1x00_ts_close()
357 ucb1x00_enable(ts->ucb); in ucb1x00_ts_close()
358 free_irq(ts->ucb->irq_base + UCB_IRQ_TSPX, ts); in ucb1x00_ts_close()
359 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, 0); in ucb1x00_ts_close()
360 ucb1x00_disable(ts->ucb); in ucb1x00_ts_close()
369 struct ucb1x00_ts *ts; in ucb1x00_ts_add() local
373 ts = kzalloc(sizeof(struct ucb1x00_ts), GFP_KERNEL); in ucb1x00_ts_add()
375 if (!ts || !idev) { in ucb1x00_ts_add()
380 ts->ucb = dev->ucb; in ucb1x00_ts_add()
381 ts->idev = idev; in ucb1x00_ts_add()
382 ts->adcsync = adcsync ? UCB_SYNC : UCB_NOSYNC; in ucb1x00_ts_add()
383 spin_lock_init(&ts->irq_lock); in ucb1x00_ts_add()
386 idev->id.product = ts->ucb->id; in ucb1x00_ts_add()
389 idev->dev.parent = &ts->ucb->dev; in ucb1x00_ts_add()
394 input_set_drvdata(idev, ts); in ucb1x00_ts_add()
396 ucb1x00_adc_enable(ts->ucb); in ucb1x00_ts_add()
397 ts->x_res = ucb1x00_ts_read_xres(ts); in ucb1x00_ts_add()
398 ts->y_res = ucb1x00_ts_read_yres(ts); in ucb1x00_ts_add()
399 ucb1x00_adc_disable(ts->ucb); in ucb1x00_ts_add()
401 input_set_abs_params(idev, ABS_X, 0, ts->x_res, 0, 0); in ucb1x00_ts_add()
402 input_set_abs_params(idev, ABS_Y, 0, ts->y_res, 0, 0); in ucb1x00_ts_add()
409 dev->priv = ts; in ucb1x00_ts_add()
415 kfree(ts); in ucb1x00_ts_add()
421 struct ucb1x00_ts *ts = dev->priv; in ucb1x00_ts_remove() local
423 input_unregister_device(ts->idev); in ucb1x00_ts_remove()
424 kfree(ts); in ucb1x00_ts_remove()