Lines Matching refs:ucb
34 static void ucb1400_ts_mode_int(struct ucb1400_ts *ucb)
36 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
46 static unsigned int ucb1400_ts_read_pressure(struct ucb1400_ts *ucb)
48 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
55 return ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_TSPY, adcsync);
64 static unsigned int ucb1400_ts_read_xpos(struct ucb1400_ts *ucb)
66 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
69 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
72 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
78 return ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_TSPY, adcsync);
87 static int ucb1400_ts_read_ypos(struct ucb1400_ts *ucb)
89 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
92 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
95 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
101 return ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_TSPX, adcsync);
108 static unsigned int ucb1400_ts_read_xres(struct ucb1400_ts *ucb)
110 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
113 return ucb1400_adc_read(ucb->ac97, 0, adcsync);
120 static unsigned int ucb1400_ts_read_yres(struct ucb1400_ts *ucb)
122 ucb1400_reg_write(ucb->ac97, UCB_TS_CR,
125 return ucb1400_adc_read(ucb->ac97, 0, adcsync);
128 static int ucb1400_ts_pen_up(struct ucb1400_ts *ucb)
130 unsigned short val = ucb1400_reg_read(ucb->ac97, UCB_TS_CR);
135 static void ucb1400_ts_irq_enable(struct ucb1400_ts *ucb)
137 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, UCB_IE_TSPX);
138 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0);
139 ucb1400_reg_write(ucb->ac97, UCB_IE_FAL, UCB_IE_TSPX);
142 static void ucb1400_ts_irq_disable(struct ucb1400_ts *ucb)
144 ucb1400_reg_write(ucb->ac97, UCB_IE_FAL, 0);
163 static void ucb1400_clear_pending_irq(struct ucb1400_ts *ucb)
167 isr = ucb1400_reg_read(ucb->ac97, UCB_IE_STATUS);
168 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, isr);
169 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0);
172 ucb1400_ts_irq_disable(ucb);
174 dev_dbg(&ucb->ts_idev->dev,
187 struct ucb1400_ts *ucb = devid;
191 if (unlikely(irqnr != ucb->irq))
194 ucb1400_clear_pending_irq(ucb);
199 while (!ucb->stopped && !(penup = ucb1400_ts_pen_up(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);
207 ucb1400_ts_report_event(ucb->ts_idev, p, x, y);
209 wait_event_timeout(ucb->ts_wait, ucb->stopped,
213 ucb1400_ts_event_release(ucb->ts_idev);
215 if (!ucb->stopped) {
217 ucb1400_ts_mode_int(ucb);
218 ucb1400_ts_irq_enable(ucb);
224 static void ucb1400_ts_stop(struct ucb1400_ts *ucb)
227 ucb->stopped = true;
229 wake_up(&ucb->ts_wait);
230 disable_irq(ucb->irq);
232 ucb1400_ts_irq_disable(ucb);
233 ucb1400_reg_write(ucb->ac97, UCB_TS_CR, 0);
237 static void ucb1400_ts_start(struct ucb1400_ts *ucb)
240 ucb->stopped = false;
243 ucb1400_ts_mode_int(ucb);
244 ucb1400_ts_irq_enable(ucb);
246 enable_irq(ucb->irq);
251 struct ucb1400_ts *ucb = input_get_drvdata(idev);
253 ucb1400_ts_start(ucb);
260 struct ucb1400_ts *ucb = input_get_drvdata(idev);
262 ucb1400_ts_stop(ucb);
273 static int ucb1400_ts_detect_irq(struct ucb1400_ts *ucb,
281 ucb1400_reg_write(ucb->ac97, UCB_IE_RIS, UCB_IE_ADC);
282 ucb1400_reg_write(ucb->ac97, UCB_IE_FAL, UCB_IE_ADC);
283 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0xffff);
284 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0);
287 ucb1400_reg_write(ucb->ac97, UCB_ADC_CR, UCB_ADC_ENA);
288 ucb1400_reg_write(ucb->ac97, UCB_ADC_CR, UCB_ADC_ENA | UCB_ADC_START);
292 while (!(ucb1400_reg_read(ucb->ac97, UCB_ADC_DATA) &
301 ucb1400_reg_write(ucb->ac97, UCB_ADC_CR, 0);
304 ucb1400_reg_write(ucb->ac97, UCB_IE_RIS, 0);
305 ucb1400_reg_write(ucb->ac97, UCB_IE_FAL, 0);
306 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0xffff);
307 ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0);
310 ucb->irq = probe_irq_off(mask);
311 if (ucb->irq < 0 || ucb->irq == NO_IRQ)
319 struct ucb1400_ts *ucb = dev_get_platdata(&pdev->dev);
323 ucb->ts_idev = input_allocate_device();
324 if (!ucb->ts_idev) {
330 if (ucb->irq < 0) {
331 error = ucb1400_ts_detect_irq(ucb, pdev);
337 dev_dbg(&pdev->dev, "found IRQ %d\n", ucb->irq);
339 init_waitqueue_head(&ucb->ts_wait);
341 input_set_drvdata(ucb->ts_idev, ucb);
343 ucb->ts_idev->dev.parent = &pdev->dev;
344 ucb->ts_idev->name = "UCB1400 touchscreen interface";
345 ucb->ts_idev->id.vendor = ucb1400_reg_read(ucb->ac97,
347 ucb->ts_idev->id.product = ucb->id;
348 ucb->ts_idev->open = ucb1400_ts_open;
349 ucb->ts_idev->close = ucb1400_ts_close;
350 ucb->ts_idev->evbit[0] = BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY);
351 ucb->ts_idev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
358 fcsr = ucb1400_reg_read(ucb->ac97, UCB_FCSR);
359 ucb1400_reg_write(ucb->ac97, UCB_FCSR, fcsr | UCB_FCSR_AVE);
361 ucb1400_adc_enable(ucb->ac97);
362 x_res = ucb1400_ts_read_xres(ucb);
363 y_res = ucb1400_ts_read_yres(ucb);
364 ucb1400_adc_disable(ucb->ac97);
367 input_set_abs_params(ucb->ts_idev, ABS_X, 0, x_res, 0, 0);
368 input_set_abs_params(ucb->ts_idev, ABS_Y, 0, y_res, 0, 0);
369 input_set_abs_params(ucb->ts_idev, ABS_PRESSURE, 0, 0, 0, 0);
371 ucb1400_ts_stop(ucb);
373 error = request_threaded_irq(ucb->irq, NULL, ucb1400_irq,
375 "UCB1400", ucb);
378 "unable to grab irq%d: %d\n", ucb->irq, error);
382 error = input_register_device(ucb->ts_idev);
389 free_irq(ucb->irq, ucb);
391 input_free_device(ucb->ts_idev);
398 struct ucb1400_ts *ucb = dev_get_platdata(&pdev->dev);
400 free_irq(ucb->irq, ucb);
401 input_unregister_device(ucb->ts_idev);
408 struct ucb1400_ts *ucb = dev_get_platdata(dev);
409 struct input_dev *idev = ucb->ts_idev;
414 ucb1400_ts_stop(ucb);
422 struct ucb1400_ts *ucb = dev_get_platdata(dev);
423 struct input_dev *idev = ucb->ts_idev;
428 ucb1400_ts_start(ucb);