• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/input/touchscreen/

Lines Matching refs:ucb

103 static inline u16 ucb1400_reg_read(struct ucb1400 *ucb, u16 reg)
105 return ucb->ac97->bus->ops->read(ucb->ac97, reg);
108 static inline void ucb1400_reg_write(struct ucb1400 *ucb, u16 reg, u16 val)
110 ucb->ac97->bus->ops->write(ucb->ac97, reg, val);
113 static inline void ucb1400_adc_enable(struct ucb1400 *ucb)
115 ucb1400_reg_write(ucb, UCB_ADC_CR, UCB_ADC_ENA);
118 static unsigned int ucb1400_adc_read(struct ucb1400 *ucb, u16 adc_channel)
122 if (ucb->adcsync)
125 ucb1400_reg_write(ucb, UCB_ADC_CR, UCB_ADC_ENA | adc_channel);
126 ucb1400_reg_write(ucb, UCB_ADC_CR, UCB_ADC_ENA | adc_channel | UCB_ADC_START);
129 val = ucb1400_reg_read(ucb, UCB_ADC_DATA);
140 static inline void ucb1400_adc_disable(struct ucb1400 *ucb)
142 ucb1400_reg_write(ucb, UCB_ADC_CR, 0);
146 static inline void ucb1400_ts_mode_int(struct ucb1400 *ucb)
148 ucb1400_reg_write(ucb, UCB_TS_CR,
158 static inline unsigned int ucb1400_ts_read_pressure(struct ucb1400 *ucb)
160 ucb1400_reg_write(ucb, UCB_TS_CR,
165 return ucb1400_adc_read(ucb, UCB_ADC_INP_TSPY);
174 static inline unsigned int ucb1400_ts_read_xpos(struct ucb1400 *ucb)
176 ucb1400_reg_write(ucb, UCB_TS_CR,
179 ucb1400_reg_write(ucb, UCB_TS_CR,
182 ucb1400_reg_write(ucb, UCB_TS_CR,
188 return ucb1400_adc_read(ucb, UCB_ADC_INP_TSPY);
197 static inline unsigned int ucb1400_ts_read_ypos(struct ucb1400 *ucb)
199 ucb1400_reg_write(ucb, UCB_TS_CR,
202 ucb1400_reg_write(ucb, UCB_TS_CR,
205 ucb1400_reg_write(ucb, UCB_TS_CR,
211 return ucb1400_adc_read(ucb, UCB_ADC_INP_TSPX);
218 static inline unsigned int ucb1400_ts_read_xres(struct ucb1400 *ucb)
220 ucb1400_reg_write(ucb, UCB_TS_CR,
223 return ucb1400_adc_read(ucb, 0);
230 static inline unsigned int ucb1400_ts_read_yres(struct ucb1400 *ucb)
232 ucb1400_reg_write(ucb, UCB_TS_CR,
235 return ucb1400_adc_read(ucb, 0);
238 static inline int ucb1400_ts_pen_down(struct ucb1400 *ucb)
240 unsigned short val = ucb1400_reg_read(ucb, UCB_TS_CR);
244 static inline void ucb1400_ts_irq_enable(struct ucb1400 *ucb)
246 ucb1400_reg_write(ucb, UCB_IE_CLEAR, UCB_IE_TSPX);
247 ucb1400_reg_write(ucb, UCB_IE_CLEAR, 0);
248 ucb1400_reg_write(ucb, UCB_IE_FAL, UCB_IE_TSPX);
251 static inline void ucb1400_ts_irq_disable(struct ucb1400 *ucb)
253 ucb1400_reg_write(ucb, UCB_IE_FAL, 0);
270 static void ucb1400_handle_pending_irq(struct ucb1400 *ucb)
274 isr = ucb1400_reg_read(ucb, UCB_IE_STATUS);
275 ucb1400_reg_write(ucb, UCB_IE_CLEAR, isr);
276 ucb1400_reg_write(ucb, UCB_IE_CLEAR, 0);
279 ucb1400_ts_irq_disable(ucb);
283 enable_irq(ucb->irq);
288 struct ucb1400 *ucb = _ucb;
299 ucb->ts_restart = 0;
301 if (ucb->irq_pending) {
302 ucb->irq_pending = 0;
303 ucb1400_handle_pending_irq(ucb);
306 ucb1400_adc_enable(ucb);
307 x = ucb1400_ts_read_xpos(ucb);
308 y = ucb1400_ts_read_ypos(ucb);
309 p = ucb1400_ts_read_pressure(ucb);
310 ucb1400_adc_disable(ucb);
313 ucb1400_ts_mode_int(ucb);
317 if (ucb1400_ts_pen_down(ucb)) {
318 ucb1400_ts_irq_enable(ucb);
325 ucb1400_ts_event_release(ucb->ts_idev);
332 ucb1400_ts_evt_add(ucb->ts_idev, p, x, y);
336 wait_event_interruptible_timeout(ucb->ts_wait,
337 ucb->irq_pending || ucb->ts_restart || kthread_should_stop(),
344 ucb1400_ts_event_release(ucb->ts_idev);
346 ucb->ts_task = NULL;
362 struct ucb1400 *ucb = devid;
364 if (irqnr == ucb->irq) {
365 disable_irq(ucb->irq);
366 ucb->irq_pending = 1;
367 wake_up(&ucb->ts_wait);
375 struct ucb1400 *ucb = input_get_drvdata(idev);
378 BUG_ON(ucb->ts_task);
380 ucb->ts_task = kthread_run(ucb1400_ts_thread, ucb, "UCB1400_ts");
381 if (IS_ERR(ucb->ts_task)) {
382 ret = PTR_ERR(ucb->ts_task);
383 ucb->ts_task = NULL;
391 struct ucb1400 *ucb = input_get_drvdata(idev);
393 if (ucb->ts_task)
394 kthread_stop(ucb->ts_task);
396 ucb1400_ts_irq_disable(ucb);
397 ucb1400_reg_write(ucb, UCB_TS_CR, 0);
403 struct ucb1400 *ucb = dev_get_drvdata(dev);
405 if (ucb->ts_task) {
411 ucb->ts_restart = 1;
412 wake_up(&ucb->ts_wait);
428 static int ucb1400_detect_irq(struct ucb1400 *ucb)
439 ucb1400_reg_write(ucb, UCB_IE_RIS, UCB_IE_ADC);
440 ucb1400_reg_write(ucb, UCB_IE_FAL, UCB_IE_ADC);
441 ucb1400_reg_write(ucb, UCB_IE_CLEAR, 0xffff);
442 ucb1400_reg_write(ucb, UCB_IE_CLEAR, 0);
445 ucb1400_reg_write(ucb, UCB_ADC_CR, UCB_ADC_ENA);
446 ucb1400_reg_write(ucb, UCB_ADC_CR, UCB_ADC_ENA | UCB_ADC_START);
450 while (!(ucb1400_reg_read(ucb, UCB_ADC_DATA) & UCB_ADC_DAT_VALID)) {
458 ucb1400_reg_write(ucb, UCB_ADC_CR, 0);
461 ucb1400_reg_write(ucb, UCB_IE_RIS, 0);
462 ucb1400_reg_write(ucb, UCB_IE_FAL, 0);
463 ucb1400_reg_write(ucb, UCB_IE_CLEAR, 0xffff);
464 ucb1400_reg_write(ucb, UCB_IE_CLEAR, 0);
467 ucb->irq = probe_irq_off(mask);
468 if (ucb->irq < 0 || ucb->irq == NO_IRQ)
476 struct ucb1400 *ucb;
480 ucb = kzalloc(sizeof(struct ucb1400), GFP_KERNEL);
482 if (!ucb || !idev) {
487 ucb->ts_idev = idev;
488 ucb->adcsync = adcsync;
489 ucb->ac97 = to_ac97_t(dev);
490 init_waitqueue_head(&ucb->ts_wait);
492 id = ucb1400_reg_read(ucb, UCB_ID);
498 error = ucb1400_detect_irq(ucb);
504 error = request_irq(ucb->irq, ucb1400_hard_irq, IRQF_TRIGGER_RISING,
505 "UCB1400", ucb);
508 ucb->irq, error);
511 printk(KERN_DEBUG "UCB1400: found IRQ %d\n", ucb->irq);
513 input_set_drvdata(idev, ucb);
517 idev->id.vendor = ucb1400_reg_read(ucb, AC97_VENDOR_ID1);
523 ucb1400_adc_enable(ucb);
524 x_res = ucb1400_ts_read_xres(ucb);
525 y_res = ucb1400_ts_read_yres(ucb);
526 ucb1400_adc_disable(ucb);
537 dev_set_drvdata(dev, ucb);
541 free_irq(ucb->irq, ucb);
544 kfree(ucb);
550 struct ucb1400 *ucb = dev_get_drvdata(dev);
552 free_irq(ucb->irq, ucb);
553 input_unregister_device(ucb->ts_idev);
555 kfree(ucb);