• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/input/touchscreen/

Lines Matching refs:ucb

50 static inline unsigned int ucb1400_ts_read_pressure(struct ucb1400_ts *ucb)
52 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
57 return ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_TSPY, adcsync);
66 static inline unsigned int ucb1400_ts_read_xpos(struct ucb1400_ts *ucb)
68 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
71 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
74 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
80 return ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_TSPY, adcsync);
89 static inline unsigned int ucb1400_ts_read_ypos(struct ucb1400_ts *ucb)
91 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
94 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
97 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
103 return ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_TSPX, adcsync);
110 static inline unsigned int ucb1400_ts_read_xres(struct ucb1400_ts *ucb)
112 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
115 return ucb1400_adc_read(ucb->ac97, 0, adcsync);
122 static inline unsigned int ucb1400_ts_read_yres(struct ucb1400_ts *ucb)
124 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
127 return ucb1400_adc_read(ucb->ac97, 0, adcsync);
165 static void ucb1400_handle_pending_irq(struct ucb1400_ts *ucb)
169 isr = ucb1400_reg_read(ucb->ac97, UCB_IE_STATUS);
170 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, isr);
171 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0);
174 ucb1400_ts_irq_disable(ucb->ac97);
176 dev_dbg(&ucb->ts_idev->dev, "ucb1400: unexpected IE_STATUS = %#x\n", isr);
177 enable_irq(ucb->irq);
182 struct ucb1400_ts *ucb = _ucb;
194 ucb->ts_restart = 0;
196 if (ucb->irq_pending) {
197 ucb->irq_pending = 0;
198 ucb1400_handle_pending_irq(ucb);
201 ucb1400_adc_enable(ucb->ac97);
202 x = ucb1400_ts_read_xpos(ucb);
203 y = ucb1400_ts_read_ypos(ucb);
204 p = ucb1400_ts_read_pressure(ucb);
205 ucb1400_adc_disable(ucb->ac97);
208 ucb1400_ts_mode_int(ucb->ac97);
212 if (ucb1400_ts_pen_up(ucb->ac97)) {
213 ucb1400_ts_irq_enable(ucb->ac97);
220 ucb1400_ts_event_release(ucb->ts_idev);
227 ucb1400_ts_evt_add(ucb->ts_idev, p, x, y);
231 wait_event_freezable_timeout(ucb->ts_wait,
232 ucb->irq_pending || ucb->ts_restart ||
238 ucb1400_ts_event_release(ucb->ts_idev);
240 ucb->ts_task = NULL;
256 struct ucb1400_ts *ucb = devid;
258 if (irqnr == ucb->irq) {
259 disable_irq_nosync(ucb->irq);
260 ucb->irq_pending = 1;
261 wake_up(&ucb->ts_wait);
269 struct ucb1400_ts *ucb = input_get_drvdata(idev);
272 BUG_ON(ucb->ts_task);
274 ucb->ts_task = kthread_run(ucb1400_ts_thread, ucb, "UCB1400_ts");
275 if (IS_ERR(ucb->ts_task)) {
276 ret = PTR_ERR(ucb->ts_task);
277 ucb->ts_task = NULL;
285 struct ucb1400_ts *ucb = input_get_drvdata(idev);
287 if (ucb->ts_task)
288 kthread_stop(ucb->ts_task);
290 ucb1400_ts_irq_disable(ucb->ac97);
291 ucb1400_reg_write(ucb->ac97, UCB_TS_CR, 0);
302 static int ucb1400_ts_detect_irq(struct ucb1400_ts *ucb)
309 ucb1400_reg_write(ucb->ac97, UCB_IE_RIS, UCB_IE_ADC);
310 ucb1400_reg_write(ucb->ac97, UCB_IE_FAL, UCB_IE_ADC);
311 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0xffff);
312 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0);
315 ucb1400_reg_write(ucb->ac97, UCB_ADC_CR, UCB_ADC_ENA);
316 ucb1400_reg_write(ucb->ac97, UCB_ADC_CR, UCB_ADC_ENA | UCB_ADC_START);
320 while (!(ucb1400_reg_read(ucb->ac97, UCB_ADC_DATA) &
329 ucb1400_reg_write(ucb->ac97, UCB_ADC_CR, 0);
332 ucb1400_reg_write(ucb->ac97, UCB_IE_RIS, 0);
333 ucb1400_reg_write(ucb->ac97, UCB_IE_FAL, 0);
334 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0xffff);
335 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0);
338 ucb->irq = probe_irq_off(mask);
339 if (ucb->irq < 0 || ucb->irq == NO_IRQ)
349 struct ucb1400_ts *ucb = dev->dev.platform_data;
351 ucb->ts_idev = input_allocate_device();
352 if (!ucb->ts_idev) {
358 if (ucb->irq < 0) {
359 error = ucb1400_ts_detect_irq(ucb);
366 init_waitqueue_head(&ucb->ts_wait);
368 error = request_irq(ucb->irq, ucb1400_hard_irq, IRQF_TRIGGER_RISING,
369 "UCB1400", ucb);
372 ucb->irq, error);
375 printk(KERN_DEBUG "UCB1400: found IRQ %d\n", ucb->irq);
377 input_set_drvdata(ucb->ts_idev, ucb);
379 ucb->ts_idev->dev.parent = &dev->dev;
380 ucb->ts_idev->name = "UCB1400 touchscreen interface";
381 ucb->ts_idev->id.vendor = ucb1400_reg_read(ucb->ac97,
383 ucb->ts_idev->id.product = ucb->id;
384 ucb->ts_idev->open = ucb1400_ts_open;
385 ucb->ts_idev->close = ucb1400_ts_close;
386 ucb->ts_idev->evbit[0] = BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY);
387 ucb->ts_idev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
394 fcsr = ucb1400_reg_read(ucb->ac97, UCB_FCSR);
395 ucb1400_reg_write(ucb->ac97, UCB_FCSR, fcsr | UCB_FCSR_AVE);
397 ucb1400_adc_enable(ucb->ac97);
398 x_res = ucb1400_ts_read_xres(ucb);
399 y_res = ucb1400_ts_read_yres(ucb);
400 ucb1400_adc_disable(ucb->ac97);
403 input_set_abs_params(ucb->ts_idev, ABS_X, 0, x_res, 0, 0);
404 input_set_abs_params(ucb->ts_idev, ABS_Y, 0, y_res, 0, 0);
405 input_set_abs_params(ucb->ts_idev, ABS_PRESSURE, 0, 0, 0, 0);
407 error = input_register_device(ucb->ts_idev);
414 free_irq(ucb->irq, ucb);
416 input_free_device(ucb->ts_idev);
424 struct ucb1400_ts *ucb = dev->dev.platform_data;
426 free_irq(ucb->irq, ucb);
427 input_unregister_device(ucb->ts_idev);
434 struct ucb1400_ts *ucb = dev->dev.platform_data;
436 if (ucb->ts_task) {
442 ucb->ts_restart = 1;
443 wake_up(&ucb->ts_wait);