39 #include <linux/device.h>
42 #include <linux/input.h>
45 #include <linux/slab.h>
48 #include <linux/module.h>
51 #define TS_PEN_UP_TIMEOUT msecs_to_jiffies(100)
53 #define MAX_SPI_FREQ_HZ 20000000
54 #define MAX_12BIT ((1<<12)-1)
56 #define AD7877_REG_ZEROS 0
57 #define AD7877_REG_CTRL1 1
58 #define AD7877_REG_CTRL2 2
59 #define AD7877_REG_ALERT 3
60 #define AD7877_REG_AUX1HIGH 4
61 #define AD7877_REG_AUX1LOW 5
62 #define AD7877_REG_BAT1HIGH 6
63 #define AD7877_REG_BAT1LOW 7
64 #define AD7877_REG_BAT2HIGH 8
65 #define AD7877_REG_BAT2LOW 9
66 #define AD7877_REG_TEMP1HIGH 10
67 #define AD7877_REG_TEMP1LOW 11
68 #define AD7877_REG_SEQ0 12
69 #define AD7877_REG_SEQ1 13
70 #define AD7877_REG_DAC 14
71 #define AD7877_REG_NONE1 15
72 #define AD7877_REG_EXTWRITE 15
73 #define AD7877_REG_XPLUS 16
74 #define AD7877_REG_YPLUS 17
75 #define AD7877_REG_Z2 18
76 #define AD7877_REG_aux1 19
77 #define AD7877_REG_aux2 20
78 #define AD7877_REG_aux3 21
79 #define AD7877_REG_bat1 22
80 #define AD7877_REG_bat2 23
81 #define AD7877_REG_temp1 24
82 #define AD7877_REG_temp2 25
83 #define AD7877_REG_Z1 26
84 #define AD7877_REG_GPIOCTRL1 27
85 #define AD7877_REG_GPIOCTRL2 28
86 #define AD7877_REG_GPIODATA 29
87 #define AD7877_REG_NONE2 30
88 #define AD7877_REG_NONE3 31
90 #define AD7877_SEQ_YPLUS_BIT (1<<11)
91 #define AD7877_SEQ_XPLUS_BIT (1<<10)
92 #define AD7877_SEQ_Z2_BIT (1<<9)
93 #define AD7877_SEQ_AUX1_BIT (1<<8)
94 #define AD7877_SEQ_AUX2_BIT (1<<7)
95 #define AD7877_SEQ_AUX3_BIT (1<<6)
96 #define AD7877_SEQ_BAT1_BIT (1<<5)
97 #define AD7877_SEQ_BAT2_BIT (1<<4)
98 #define AD7877_SEQ_TEMP1_BIT (1<<3)
99 #define AD7877_SEQ_TEMP2_BIT (1<<2)
100 #define AD7877_SEQ_Z1_BIT (1<<1)
118 #define AD7877_DAC_CONF 0x1
121 #define AD7877_EXTW_GPIO_3_CONF 0x1C4
122 #define AD7877_EXTW_GPIO_DATA 0x200
125 #define AD7877_TMR(x) ((x & 0x3) << 0)
126 #define AD7877_REF(x) ((x & 0x1) << 2)
127 #define AD7877_POL(x) ((x & 0x1) << 3)
128 #define AD7877_FCD(x) ((x & 0x3) << 4)
129 #define AD7877_PM(x) ((x & 0x3) << 6)
130 #define AD7877_ACQ(x) ((x & 0x3) << 8)
131 #define AD7877_AVG(x) ((x & 0x3) << 10)
134 #define AD7877_SER (1 << 11)
135 #define AD7877_DFR (0 << 11)
137 #define AD7877_MODE_NOC (0)
138 #define AD7877_MODE_SCC (1)
139 #define AD7877_MODE_SEQ0 (2)
140 #define AD7877_MODE_SEQ1 (3)
142 #define AD7877_CHANADD(x) ((x&0xF)<<7)
143 #define AD7877_READADD(x) ((x)<<2)
144 #define AD7877_WRITEADD(x) ((x)<<12)
146 #define AD7877_READ_CHAN(x) (AD7877_WRITEADD(AD7877_REG_CTRL1) | AD7877_SER | \
147 AD7877_MODE_SCC | AD7877_CHANADD(AD7877_REG_ ## x) | \
148 AD7877_READADD(AD7877_REG_ ## x))
150 #define AD7877_MM_SEQUENCE (AD7877_SEQ_YPLUS_BIT | AD7877_SEQ_XPLUS_BIT | \
151 AD7877_SEQ_Z2_BIT | AD7877_SEQ_Z1_BIT)
228 spi_message_init(&req->
msg);
233 req->
xfer[0].len = 2;
234 req->
xfer[0].cs_change = 1;
236 req->
xfer[1].rx_buf = &req->sample;
237 req->
xfer[1].len = 2;
239 spi_message_add_tail(&req->
xfer[0], &req->
msg);
240 spi_message_add_tail(&req->
xfer[1], &req->
msg);
243 ret = status ? : req->sample;
259 spi_message_init(&req->
msg);
263 req->
xfer[0].len = 2;
265 spi_message_add_tail(&req->
xfer[0], &req->
msg);
286 spi_message_init(&req->
msg);
299 req->
xfer[0].len = 2;
300 req->
xfer[0].cs_change = 1;
303 req->
xfer[1].len = 2;
305 req->
xfer[1].cs_change = 1;
308 req->
xfer[2].len = 2;
310 req->
xfer[2].cs_change = 1;
312 req->
xfer[3].rx_buf = &req->sample;
313 req->
xfer[3].len = 2;
314 req->
xfer[3].cs_change = 1;
317 req->
xfer[4].len = 2;
318 req->
xfer[4].cs_change = 1;
321 req->
xfer[5].len = 2;
326 for (i = 0; i < 6; i++)
327 spi_message_add_tail(&req->
xfer[i], &req->
msg);
330 sample = req->sample;
334 return status ? : sample;
337 static int ad7877_process_data(
struct ad7877 *ts)
339 struct input_dev *input_dev = ts->
input;
362 Rt = (Rt + 2047) >> 12;
371 if (!timer_pending(&ts->
timer))
372 input_report_key(input_dev,
BTN_TOUCH, 1);
374 input_report_abs(input_dev,
ABS_X, x);
375 input_report_abs(input_dev,
ABS_Y, y);
377 input_sync(input_dev);
385 static inline void ad7877_ts_event_release(
struct ad7877 *ts)
387 struct input_dev *input_dev = ts->
input;
390 input_report_key(input_dev,
BTN_TOUCH, 0);
391 input_sync(input_dev);
394 static void ad7877_timer(
unsigned long handle)
396 struct ad7877 *ts = (
void *)handle;
400 ad7877_ts_event_release(ts);
401 spin_unlock_irqrestore(&ts->
lock, flags);
412 dev_err(&ts->
spi->dev,
"spi_sync --> %d\n", error);
417 error = ad7877_process_data(ts);
420 spin_unlock_irqrestore(&ts->
lock, flags);
426 static void ad7877_disable(
struct ad7877 *ts)
435 ad7877_ts_event_release(ts);
446 static void ad7877_enable(
struct ad7877 *ts)
458 #define SHOW(name) static ssize_t \
459 name ## _show(struct device *dev, struct device_attribute *attr, char *buf) \
461 struct ad7877 *ts = dev_get_drvdata(dev); \
462 ssize_t v = ad7877_read_adc(ts->spi, \
463 AD7877_READ_CHAN(name)); \
466 return sprintf(buf, "%u\n", (unsigned) v); \
468 static DEVICE_ATTR(name, S_IRUGO, name ## _show, NULL);
518 const char *buf,
size_t count)
529 ts->
dac = val & 0xFF;
548 const char *buf,
size_t count)
579 const char *buf,
size_t count)
600 static struct attribute *ad7877_attributes[] = {
601 &dev_attr_temp1.attr,
602 &dev_attr_temp2.attr,
608 &dev_attr_disable.attr,
610 &dev_attr_gpio3.attr,
611 &dev_attr_gpio4.attr,
620 if (attr == &dev_attr_aux3.attr) {
623 }
else if (attr == &dev_attr_gpio3.attr) {
632 .is_visible = ad7877_attr_is_visible,
633 .attrs = ad7877_attributes,
636 static void ad7877_setup_ts_def_msg(
struct spi_device *spi,
struct ad7877 *ts)
666 ts->
xfer[0].cs_change = 1;
668 spi_message_add_tail(&ts->
xfer[0], m);
672 ts->
xfer[1].cs_change = 1;
674 spi_message_add_tail(&ts->
xfer[1], m);
678 ts->
xfer[i + 2].len = 2;
679 if (i < (AD7877_NR_SENSE - 1))
680 ts->
xfer[i + 2].cs_change = 1;
681 spi_message_add_tail(&ts->
xfer[i + 2], m);
688 struct input_dev *input_dev;
712 dev_dbg(&spi->
dev,
"spi master doesn't support 16 bits/word\n");
717 input_dev = input_allocate_device();
718 if (!ts || !input_dev) {
725 ts->
input = input_dev;
744 input_dev->name =
"AD7877 Touchscreen";
745 input_dev->phys = ts->
phys;
746 input_dev->dev.parent = &spi->
dev;
755 input_set_abs_params(input_dev,
ABS_X,
759 input_set_abs_params(input_dev,
ABS_Y,
771 dev_err(&spi->
dev,
"%s: Failed to probe %s\n",
772 dev_name(&spi->
dev), input_dev->name);
780 ad7877_setup_ts_def_msg(spi, ts);
786 spi->
dev.driver->name, ts);
796 err = input_register_device(input_dev);
798 goto err_remove_attr_group;
802 err_remove_attr_group:
807 input_free_device(input_dev);
822 input_unregister_device(ts->
input);
825 dev_dbg(&spi->
dev,
"unregistered touchscreen\n");
831 #ifdef CONFIG_PM_SLEEP
832 static int ad7877_suspend(
struct device *dev)
841 static int ad7877_resume(
struct device *dev)
859 .probe = ad7877_probe,