Lines Matching refs:ts

54 static inline void ucb1x00_ts_evt_add(struct ucb1x00_ts *ts, u16 pressure, u16 x, u16 y)
56 struct input_dev *idev = ts->idev;
65 static inline void ucb1x00_ts_event_release(struct ucb1x00_ts *ts)
67 struct input_dev *idev = ts->idev;
77 static inline void ucb1x00_ts_mode_int(struct ucb1x00_ts *ts)
79 ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
89 static inline unsigned int ucb1x00_ts_read_pressure(struct ucb1x00_ts *ts)
92 ucb1x00_io_write(ts->ucb, COLLIE_TC35143_GPIO_TBL_CHK, 0);
93 ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
99 return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_AD2, ts->adcsync);
101 ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
106 return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync);
116 static inline unsigned int ucb1x00_ts_read_xpos(struct ucb1x00_ts *ts)
119 ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
121 ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
124 ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
128 ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
134 return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync);
143 static inline unsigned int ucb1x00_ts_read_ypos(struct ucb1x00_ts *ts)
146 ucb1x00_io_write(ts->ucb, 0, COLLIE_TC35143_GPIO_TBL_CHK);
148 ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
151 ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
156 ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
162 return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPX, ts->adcsync);
169 static inline unsigned int ucb1x00_ts_read_xres(struct ucb1x00_ts *ts)
171 ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
174 return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
181 static inline unsigned int ucb1x00_ts_read_yres(struct ucb1x00_ts *ts)
183 ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
186 return ucb1x00_adc_read(ts->ucb, 0, ts->adcsync);
189 static inline int ucb1x00_ts_pen_down(struct ucb1x00_ts *ts)
191 unsigned int val = ucb1x00_reg_read(ts->ucb, UCB_TS_CR);
206 struct ucb1x00_ts *ts = _ts;
212 add_wait_queue(&ts->irq_wait, &wait);
220 ucb1x00_adc_enable(ts->ucb);
222 x = ucb1x00_ts_read_xpos(ts);
223 y = ucb1x00_ts_read_ypos(ts);
224 p = ucb1x00_ts_read_pressure(ts);
229 ucb1x00_ts_mode_int(ts);
230 ucb1x00_adc_disable(ts->ucb);
234 ucb1x00_enable(ts->ucb);
237 if (ucb1x00_ts_pen_down(ts)) {
240 spin_lock_irq(&ts->irq_lock);
241 if (ts->irq_disabled) {
242 ts->irq_disabled = 0;
243 enable_irq(ts->ucb->irq_base + UCB_IRQ_TSPX);
245 spin_unlock_irq(&ts->irq_lock);
246 ucb1x00_disable(ts->ucb);
253 ucb1x00_ts_event_release(ts);
259 ucb1x00_disable(ts->ucb);
267 ucb1x00_ts_evt_add(ts, p, x, y);
278 remove_wait_queue(&ts->irq_wait, &wait);
280 ts->rtask = NULL;
290 struct ucb1x00_ts *ts = id;
292 spin_lock(&ts->irq_lock);
293 ts->irq_disabled = 1;
294 disable_irq_nosync(ts->ucb->irq_base + UCB_IRQ_TSPX);
295 spin_unlock(&ts->irq_lock);
296 wake_up(&ts->irq_wait);
303 struct ucb1x00_ts *ts = input_get_drvdata(idev);
307 BUG_ON(ts->rtask);
314 ts->irq_disabled = 0;
316 init_waitqueue_head(&ts->irq_wait);
317 ret = request_irq(ts->ucb->irq_base + UCB_IRQ_TSPX, ucb1x00_ts_irq,
318 flags, "ucb1x00-ts", ts);
326 ucb1x00_adc_enable(ts->ucb);
327 ts->x_res = ucb1x00_ts_read_xres(ts);
328 ts->y_res = ucb1x00_ts_read_yres(ts);
329 ucb1x00_adc_disable(ts->ucb);
331 ts->rtask = kthread_run(ucb1x00_thread, ts, "ktsd");
332 if (!IS_ERR(ts->rtask)) {
335 free_irq(ts->ucb->irq_base + UCB_IRQ_TSPX, ts);
336 ts->rtask = NULL;
349 struct ucb1x00_ts *ts = input_get_drvdata(idev);
351 if (ts->rtask)
352 kthread_stop(ts->rtask);
354 ucb1x00_enable(ts->ucb);
355 free_irq(ts->ucb->irq_base + UCB_IRQ_TSPX, ts);
356 ucb1x00_reg_write(ts->ucb, UCB_TS_CR, 0);
357 ucb1x00_disable(ts->ucb);
366 struct ucb1x00_ts *ts;
370 ts = kzalloc(sizeof(struct ucb1x00_ts), GFP_KERNEL);
372 if (!ts || !idev) {
377 ts->ucb = dev->ucb;
378 ts->idev = idev;
379 ts->adcsync = adcsync ? UCB_SYNC : UCB_NOSYNC;
380 spin_lock_init(&ts->irq_lock);
383 idev->id.product = ts->ucb->id;
386 idev->dev.parent = &ts->ucb->dev;
391 input_set_drvdata(idev, ts);
393 ucb1x00_adc_enable(ts->ucb);
394 ts->x_res = ucb1x00_ts_read_xres(ts);
395 ts->y_res = ucb1x00_ts_read_yres(ts);
396 ucb1x00_adc_disable(ts->ucb);
398 input_set_abs_params(idev, ABS_X, 0, ts->x_res, 0, 0);
399 input_set_abs_params(idev, ABS_Y, 0, ts->y_res, 0, 0);
406 dev->priv = ts;
412 kfree(ts);
418 struct ucb1x00_ts *ts = dev->priv;
420 input_unregister_device(ts->idev);
421 kfree(ts);