ad7877.c (e92c27fb5319d8b12f0c291c827e252f0e17afc4) ad7877.c (47026b25fc6cd2d7ec85d4a83c472bca20946a94)
1/*
2 * Copyright (C) 2006-2008 Michael Hennerich, Analog Devices Inc.
3 *
4 * Description: AD7877 based touchscreen, sensor (ADCs), DAC and GPIO driver
5 * Based on: ads7846.c
6 *
7 * Bugs: Enter bugs at http://blackfin.uclinux.org/
8 *

--- 319 unchanged lines hidden (view full) ---

328 status = spi_sync(spi, &req->msg);
329 sample = req->sample;
330
331 kfree(req);
332
333 return status ? : sample;
334}
335
1/*
2 * Copyright (C) 2006-2008 Michael Hennerich, Analog Devices Inc.
3 *
4 * Description: AD7877 based touchscreen, sensor (ADCs), DAC and GPIO driver
5 * Based on: ads7846.c
6 *
7 * Bugs: Enter bugs at http://blackfin.uclinux.org/
8 *

--- 319 unchanged lines hidden (view full) ---

328 status = spi_sync(spi, &req->msg);
329 sample = req->sample;
330
331 kfree(req);
332
333 return status ? : sample;
334}
335
336static void ad7877_rx(struct ad7877 *ts)
336static int ad7877_rx(struct ad7877 *ts)
337{
338 struct input_dev *input_dev = ts->input;
339 unsigned Rt;
340 u16 x, y, z1, z2;
341
342 x = ts->conversion_data[AD7877_SEQ_XPOS] & MAX_12BIT;
343 y = ts->conversion_data[AD7877_SEQ_YPOS] & MAX_12BIT;
344 z1 = ts->conversion_data[AD7877_SEQ_Z1] & MAX_12BIT;

--- 10 unchanged lines hidden (view full) ---

355 */
356
357 if (likely(x && z1)) {
358 /* compute touch pressure resistance using equation #1 */
359 Rt = (z2 - z1) * x * ts->x_plate_ohms;
360 Rt /= z1;
361 Rt = (Rt + 2047) >> 12;
362
337{
338 struct input_dev *input_dev = ts->input;
339 unsigned Rt;
340 u16 x, y, z1, z2;
341
342 x = ts->conversion_data[AD7877_SEQ_XPOS] & MAX_12BIT;
343 y = ts->conversion_data[AD7877_SEQ_YPOS] & MAX_12BIT;
344 z1 = ts->conversion_data[AD7877_SEQ_Z1] & MAX_12BIT;

--- 10 unchanged lines hidden (view full) ---

355 */
356
357 if (likely(x && z1)) {
358 /* compute touch pressure resistance using equation #1 */
359 Rt = (z2 - z1) * x * ts->x_plate_ohms;
360 Rt /= z1;
361 Rt = (Rt + 2047) >> 12;
362
363 if (!timer_pending(&ts->timer))
364 input_report_key(input_dev, BTN_TOUCH, 1);
365
363 input_report_abs(input_dev, ABS_X, x);
364 input_report_abs(input_dev, ABS_Y, y);
365 input_report_abs(input_dev, ABS_PRESSURE, Rt);
366 input_sync(input_dev);
366 input_report_abs(input_dev, ABS_X, x);
367 input_report_abs(input_dev, ABS_Y, y);
368 input_report_abs(input_dev, ABS_PRESSURE, Rt);
369 input_sync(input_dev);
370 return 0;
367 }
371 }
372
373 return -EINVAL;
368}
369
370static inline void ad7877_ts_event_release(struct ad7877 *ts)
371{
372 struct input_dev *input_dev = ts->input;
373
374 input_report_abs(input_dev, ABS_PRESSURE, 0);
374}
375
376static inline void ad7877_ts_event_release(struct ad7877 *ts)
377{
378 struct input_dev *input_dev = ts->input;
379
380 input_report_abs(input_dev, ABS_PRESSURE, 0);
381 input_report_key(input_dev, BTN_TOUCH, 0);
375 input_sync(input_dev);
376}
377
378static void ad7877_timer(unsigned long handle)
379{
380 struct ad7877 *ts = (void *)handle;
381
382 ad7877_ts_event_release(ts);

--- 25 unchanged lines hidden (view full) ---

408 return IRQ_HANDLED;
409}
410
411static void ad7877_callback(void *_ts)
412{
413 struct ad7877 *ts = _ts;
414
415 spin_lock_irq(&ts->lock);
382 input_sync(input_dev);
383}
384
385static void ad7877_timer(unsigned long handle)
386{
387 struct ad7877 *ts = (void *)handle;
388
389 ad7877_ts_event_release(ts);

--- 25 unchanged lines hidden (view full) ---

415 return IRQ_HANDLED;
416}
417
418static void ad7877_callback(void *_ts)
419{
420 struct ad7877 *ts = _ts;
421
422 spin_lock_irq(&ts->lock);
416
417 ad7877_rx(ts);
423 if (!ad7877_rx(ts))
424 mod_timer(&ts->timer, jiffies + TS_PEN_UP_TIMEOUT);
418 ts->pending = 0;
425 ts->pending = 0;
419 mod_timer(&ts->timer, jiffies + TS_PEN_UP_TIMEOUT);
420
421 spin_unlock_irq(&ts->lock);
422}
423
424static void ad7877_disable(struct ad7877 *ts)
425{
426 mutex_lock(&ts->mutex);
427
428 if (!ts->disabled) {

--- 294 unchanged lines hidden (view full) ---

723 ts->pen_down_acc_interval = pdata->pen_down_acc_interval;
724
725 snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&spi->dev));
726
727 input_dev->name = "AD7877 Touchscreen";
728 input_dev->phys = ts->phys;
729 input_dev->dev.parent = &spi->dev;
730
426 spin_unlock_irq(&ts->lock);
427}
428
429static void ad7877_disable(struct ad7877 *ts)
430{
431 mutex_lock(&ts->mutex);
432
433 if (!ts->disabled) {

--- 294 unchanged lines hidden (view full) ---

728 ts->pen_down_acc_interval = pdata->pen_down_acc_interval;
729
730 snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&spi->dev));
731
732 input_dev->name = "AD7877 Touchscreen";
733 input_dev->phys = ts->phys;
734 input_dev->dev.parent = &spi->dev;
735
736 __set_bit(EV_KEY, input_dev->evbit);
737 __set_bit(BTN_TOUCH, input_dev->keybit);
731 __set_bit(EV_ABS, input_dev->evbit);
732 __set_bit(ABS_X, input_dev->absbit);
733 __set_bit(ABS_Y, input_dev->absbit);
734 __set_bit(ABS_PRESSURE, input_dev->absbit);
735
736 input_set_abs_params(input_dev, ABS_X,
737 pdata->x_min ? : 0,
738 pdata->x_max ? : MAX_12BIT,

--- 133 unchanged lines hidden ---
738 __set_bit(EV_ABS, input_dev->evbit);
739 __set_bit(ABS_X, input_dev->absbit);
740 __set_bit(ABS_Y, input_dev->absbit);
741 __set_bit(ABS_PRESSURE, input_dev->absbit);
742
743 input_set_abs_params(input_dev, ABS_X,
744 pdata->x_min ? : 0,
745 pdata->x_max ? : MAX_12BIT,

--- 133 unchanged lines hidden ---