1
2
3
4
5
6
7
8#include <linux/bitfield.h>
9#include <linux/delay.h>
10#include <linux/module.h>
11#include <linux/spi/spi.h>
12
13#include <asm/unaligned.h>
14
15#include <linux/iio/buffer.h>
16#include <linux/iio/trigger_consumer.h>
17#include <linux/iio/triggered_buffer.h>
18#include <linux/iio/trigger.h>
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34#define TI_TSC2046_NAME "tsc2046"
35
36
37#define TI_TSC2046_MAX_SAMPLE_RATE 125000
38#define TI_TSC2046_SAMPLE_BITS \
39 BITS_PER_TYPE(struct tsc2046_adc_atom)
40#define TI_TSC2046_MAX_CLK_FREQ \
41 (TI_TSC2046_MAX_SAMPLE_RATE * TI_TSC2046_SAMPLE_BITS)
42
43#define TI_TSC2046_SAMPLE_INTERVAL_US 10000
44
45#define TI_TSC2046_START BIT(7)
46#define TI_TSC2046_ADDR GENMASK(6, 4)
47#define TI_TSC2046_ADDR_TEMP1 7
48#define TI_TSC2046_ADDR_AUX 6
49#define TI_TSC2046_ADDR_X 5
50#define TI_TSC2046_ADDR_Z2 4
51#define TI_TSC2046_ADDR_Z1 3
52#define TI_TSC2046_ADDR_VBAT 2
53#define TI_TSC2046_ADDR_Y 1
54#define TI_TSC2046_ADDR_TEMP0 0
55
56
57
58
59
60
61
62#define TI_TSC2046_8BIT_MODE BIT(3)
63
64
65
66
67
68#define TI_TSC2046_SER BIT(2)
69
70
71
72
73
74#define TI_TSC2046_PD1_VREF_ON BIT(1)
75#define TI_TSC2046_PD0_ADC_ON BIT(0)
76
77
78
79
80
81
82#define TI_TSC2046_DATA_12BIT GENMASK(14, 3)
83
84#define TI_TSC2046_MAX_CHAN 8
85#define TI_TSC2046_MIN_POLL_CNT 3
86#define TI_TSC2046_EXT_POLL_CNT 3
87#define TI_TSC2046_POLL_CNT \
88 (TI_TSC2046_MIN_POLL_CNT + TI_TSC2046_EXT_POLL_CNT)
89#define TI_TSC2046_INT_VREF 2500
90
91
92struct tsc2046_adc_atom {
93
94
95
96
97 u8 cmd;
98
99
100
101
102 __be16 data;
103} __packed;
104
105
106struct tsc2046_adc_group_layout {
107
108 unsigned int offset;
109
110
111
112
113 unsigned int count;
114
115
116
117
118 unsigned int skip;
119};
120
121struct tsc2046_adc_dcfg {
122 const struct iio_chan_spec *channels;
123 unsigned int num_channels;
124};
125
126struct tsc2046_adc_ch_cfg {
127 unsigned int settling_time_us;
128 unsigned int oversampling_ratio;
129};
130
131enum tsc2046_state {
132 TSC2046_STATE_SHUTDOWN,
133 TSC2046_STATE_STANDBY,
134 TSC2046_STATE_POLL,
135 TSC2046_STATE_POLL_IRQ_DISABLE,
136 TSC2046_STATE_ENABLE_IRQ,
137};
138
139struct tsc2046_adc_priv {
140 struct spi_device *spi;
141 const struct tsc2046_adc_dcfg *dcfg;
142
143 struct iio_trigger *trig;
144 struct hrtimer trig_timer;
145 enum tsc2046_state state;
146 int poll_cnt;
147 spinlock_t state_lock;
148
149 struct spi_transfer xfer;
150 struct spi_message msg;
151
152 struct {
153
154 u16 data[TI_TSC2046_MAX_CHAN];
155
156 s64 ts __aligned(8);
157 } scan_buf;
158
159
160
161
162
163
164
165 struct mutex slock;
166 struct tsc2046_adc_group_layout l[TI_TSC2046_MAX_CHAN];
167 struct tsc2046_adc_atom *rx;
168 struct tsc2046_adc_atom *tx;
169
170 unsigned int count;
171 unsigned int groups;
172 u32 effective_speed_hz;
173 u32 scan_interval_us;
174 u32 time_per_scan_us;
175 u32 time_per_bit_ns;
176
177 struct tsc2046_adc_ch_cfg ch_cfg[TI_TSC2046_MAX_CHAN];
178};
179
180#define TI_TSC2046_V_CHAN(index, bits, name) \
181{ \
182 .type = IIO_VOLTAGE, \
183 .indexed = 1, \
184 .channel = index, \
185 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
186 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
187 .datasheet_name = "#name", \
188 .scan_index = index, \
189 .scan_type = { \
190 .sign = 'u', \
191 .realbits = bits, \
192 .storagebits = 16, \
193 .endianness = IIO_CPU, \
194 }, \
195}
196
197#define DECLARE_TI_TSC2046_8_CHANNELS(name, bits) \
198const struct iio_chan_spec name ## _channels[] = { \
199 TI_TSC2046_V_CHAN(0, bits, TEMP0), \
200 TI_TSC2046_V_CHAN(1, bits, Y), \
201 TI_TSC2046_V_CHAN(2, bits, VBAT), \
202 TI_TSC2046_V_CHAN(3, bits, Z1), \
203 TI_TSC2046_V_CHAN(4, bits, Z2), \
204 TI_TSC2046_V_CHAN(5, bits, X), \
205 TI_TSC2046_V_CHAN(6, bits, AUX), \
206 TI_TSC2046_V_CHAN(7, bits, TEMP1), \
207 IIO_CHAN_SOFT_TIMESTAMP(8), \
208}
209
210static DECLARE_TI_TSC2046_8_CHANNELS(tsc2046_adc, 12);
211
212static const struct tsc2046_adc_dcfg tsc2046_adc_dcfg_tsc2046e = {
213 .channels = tsc2046_adc_channels,
214 .num_channels = ARRAY_SIZE(tsc2046_adc_channels),
215};
216
217
218
219
220
221static unsigned int tsc2046_adc_time_to_count(struct tsc2046_adc_priv *priv,
222 unsigned long time)
223{
224 unsigned int bit_count, sample_count;
225
226 bit_count = DIV_ROUND_UP(time * NSEC_PER_USEC, priv->time_per_bit_ns);
227 sample_count = DIV_ROUND_UP(bit_count, TI_TSC2046_SAMPLE_BITS);
228
229 dev_dbg(&priv->spi->dev, "Effective speed %u, time per bit: %u, count bits: %u, count samples: %u\n",
230 priv->effective_speed_hz, priv->time_per_bit_ns,
231 bit_count, sample_count);
232
233 return sample_count;
234}
235
236static u8 tsc2046_adc_get_cmd(struct tsc2046_adc_priv *priv, int ch_idx,
237 bool keep_power)
238{
239 u32 pd;
240
241
242
243
244
245 if (keep_power)
246 pd = TI_TSC2046_PD0_ADC_ON;
247 else
248 pd = 0;
249
250 switch (ch_idx) {
251 case TI_TSC2046_ADDR_TEMP1:
252 case TI_TSC2046_ADDR_AUX:
253 case TI_TSC2046_ADDR_VBAT:
254 case TI_TSC2046_ADDR_TEMP0:
255 pd |= TI_TSC2046_SER | TI_TSC2046_PD1_VREF_ON;
256 }
257
258 return TI_TSC2046_START | FIELD_PREP(TI_TSC2046_ADDR, ch_idx) | pd;
259}
260
261static u16 tsc2046_adc_get_value(struct tsc2046_adc_atom *buf)
262{
263 return FIELD_GET(TI_TSC2046_DATA_12BIT, get_unaligned_be16(&buf->data));
264}
265
266static int tsc2046_adc_read_one(struct tsc2046_adc_priv *priv, int ch_idx,
267 u32 *effective_speed_hz)
268{
269 struct tsc2046_adc_ch_cfg *ch = &priv->ch_cfg[ch_idx];
270 struct tsc2046_adc_atom *rx_buf, *tx_buf;
271 unsigned int val, val_normalized = 0;
272 int ret, i, count_skip = 0, max_count;
273 struct spi_transfer xfer;
274 struct spi_message msg;
275 u8 cmd;
276
277 if (!effective_speed_hz) {
278 count_skip = tsc2046_adc_time_to_count(priv, ch->settling_time_us);
279 max_count = count_skip + ch->oversampling_ratio;
280 } else {
281 max_count = 1;
282 }
283
284 if (sizeof(*tx_buf) * max_count > PAGE_SIZE)
285 return -ENOSPC;
286
287 tx_buf = kcalloc(max_count, sizeof(*tx_buf), GFP_KERNEL);
288 if (!tx_buf)
289 return -ENOMEM;
290
291 rx_buf = kcalloc(max_count, sizeof(*rx_buf), GFP_KERNEL);
292 if (!rx_buf) {
293 ret = -ENOMEM;
294 goto free_tx;
295 }
296
297
298
299
300
301 cmd = tsc2046_adc_get_cmd(priv, ch_idx, true);
302
303 for (i = 0; i < max_count - 1; i++)
304 tx_buf[i].cmd = cmd;
305
306
307 tx_buf[i].cmd = tsc2046_adc_get_cmd(priv, ch_idx, false);
308
309 memset(&xfer, 0, sizeof(xfer));
310 xfer.tx_buf = tx_buf;
311 xfer.rx_buf = rx_buf;
312 xfer.len = sizeof(*tx_buf) * max_count;
313 spi_message_init_with_transfers(&msg, &xfer, 1);
314
315
316
317
318
319 ret = spi_sync(priv->spi, &msg);
320 if (ret) {
321 dev_err_ratelimited(&priv->spi->dev, "SPI transfer failed %pe\n",
322 ERR_PTR(ret));
323 goto free_bufs;
324 }
325
326 if (effective_speed_hz)
327 *effective_speed_hz = xfer.effective_speed_hz;
328
329 for (i = 0; i < max_count - count_skip; i++) {
330 val = tsc2046_adc_get_value(&rx_buf[count_skip + i]);
331 val_normalized += val;
332 }
333
334 ret = DIV_ROUND_UP(val_normalized, max_count - count_skip);
335
336free_bufs:
337 kfree(rx_buf);
338free_tx:
339 kfree(tx_buf);
340
341 return ret;
342}
343
344static size_t tsc2046_adc_group_set_layout(struct tsc2046_adc_priv *priv,
345 unsigned int group,
346 unsigned int ch_idx)
347{
348 struct tsc2046_adc_ch_cfg *ch = &priv->ch_cfg[ch_idx];
349 struct tsc2046_adc_group_layout *cur;
350 unsigned int max_count, count_skip;
351 unsigned int offset = 0;
352
353 if (group)
354 offset = priv->l[group - 1].offset + priv->l[group - 1].count;
355
356 count_skip = tsc2046_adc_time_to_count(priv, ch->settling_time_us);
357 max_count = count_skip + ch->oversampling_ratio;
358
359 cur = &priv->l[group];
360 cur->offset = offset;
361 cur->count = max_count;
362 cur->skip = count_skip;
363
364 return sizeof(*priv->tx) * max_count;
365}
366
367static void tsc2046_adc_group_set_cmd(struct tsc2046_adc_priv *priv,
368 unsigned int group, int ch_idx)
369{
370 struct tsc2046_adc_group_layout *l = &priv->l[group];
371 unsigned int i;
372 u8 cmd;
373
374
375
376
377
378 cmd = tsc2046_adc_get_cmd(priv, ch_idx, true);
379
380 for (i = 0; i < l->count - 1; i++)
381 priv->tx[l->offset + i].cmd = cmd;
382
383
384 priv->tx[l->offset + i].cmd = tsc2046_adc_get_cmd(priv, ch_idx, false);
385}
386
387static u16 tsc2046_adc_get_val(struct tsc2046_adc_priv *priv, int group)
388{
389 struct tsc2046_adc_group_layout *l;
390 unsigned int val, val_normalized = 0;
391 int valid_count, i;
392
393 l = &priv->l[group];
394 valid_count = l->count - l->skip;
395
396 for (i = 0; i < valid_count; i++) {
397 val = tsc2046_adc_get_value(&priv->rx[l->offset + l->skip + i]);
398 val_normalized += val;
399 }
400
401 return DIV_ROUND_UP(val_normalized, valid_count);
402}
403
404static int tsc2046_adc_scan(struct iio_dev *indio_dev)
405{
406 struct tsc2046_adc_priv *priv = iio_priv(indio_dev);
407 struct device *dev = &priv->spi->dev;
408 int group;
409 int ret;
410
411 ret = spi_sync(priv->spi, &priv->msg);
412 if (ret < 0) {
413 dev_err_ratelimited(dev, "SPI transfer failed: %pe\n", ERR_PTR(ret));
414 return ret;
415 }
416
417 for (group = 0; group < priv->groups; group++)
418 priv->scan_buf.data[group] = tsc2046_adc_get_val(priv, group);
419
420 ret = iio_push_to_buffers_with_timestamp(indio_dev, &priv->scan_buf,
421 iio_get_time_ns(indio_dev));
422
423 if (ret < 0 && ret != -EBUSY) {
424 dev_err_ratelimited(dev, "Failed to push scan buffer %pe\n",
425 ERR_PTR(ret));
426
427 return ret;
428 }
429
430 return 0;
431}
432
433static irqreturn_t tsc2046_adc_trigger_handler(int irq, void *p)
434{
435 struct iio_poll_func *pf = p;
436 struct iio_dev *indio_dev = pf->indio_dev;
437 struct tsc2046_adc_priv *priv = iio_priv(indio_dev);
438
439 mutex_lock(&priv->slock);
440 tsc2046_adc_scan(indio_dev);
441 mutex_unlock(&priv->slock);
442
443 iio_trigger_notify_done(indio_dev->trig);
444
445 return IRQ_HANDLED;
446}
447
448static int tsc2046_adc_read_raw(struct iio_dev *indio_dev,
449 struct iio_chan_spec const *chan,
450 int *val, int *val2, long m)
451{
452 struct tsc2046_adc_priv *priv = iio_priv(indio_dev);
453 int ret;
454
455 switch (m) {
456 case IIO_CHAN_INFO_RAW:
457 ret = tsc2046_adc_read_one(priv, chan->channel, NULL);
458 if (ret < 0)
459 return ret;
460
461 *val = ret;
462
463 return IIO_VAL_INT;
464 case IIO_CHAN_INFO_SCALE:
465
466
467
468
469
470
471 *val = TI_TSC2046_INT_VREF;
472 *val2 = chan->scan_type.realbits;
473 return IIO_VAL_FRACTIONAL_LOG2;
474 }
475
476 return -EINVAL;
477}
478
479static int tsc2046_adc_update_scan_mode(struct iio_dev *indio_dev,
480 const unsigned long *active_scan_mask)
481{
482 struct tsc2046_adc_priv *priv = iio_priv(indio_dev);
483 unsigned int ch_idx, group = 0;
484 size_t size;
485
486 mutex_lock(&priv->slock);
487
488 size = 0;
489 for_each_set_bit(ch_idx, active_scan_mask, ARRAY_SIZE(priv->l)) {
490 size += tsc2046_adc_group_set_layout(priv, group, ch_idx);
491 tsc2046_adc_group_set_cmd(priv, group, ch_idx);
492 group++;
493 }
494
495 priv->groups = group;
496 priv->xfer.len = size;
497 priv->time_per_scan_us = size * 8 * priv->time_per_bit_ns / NSEC_PER_USEC;
498
499 if (priv->scan_interval_us < priv->time_per_scan_us)
500 dev_warn(&priv->spi->dev, "The scan interval (%d) is less then calculated scan time (%d)\n",
501 priv->scan_interval_us, priv->time_per_scan_us);
502
503 mutex_unlock(&priv->slock);
504
505 return 0;
506}
507
508static const struct iio_info tsc2046_adc_info = {
509 .read_raw = tsc2046_adc_read_raw,
510 .update_scan_mode = tsc2046_adc_update_scan_mode,
511};
512
513static enum hrtimer_restart tsc2046_adc_timer(struct hrtimer *hrtimer)
514{
515 struct tsc2046_adc_priv *priv = container_of(hrtimer,
516 struct tsc2046_adc_priv,
517 trig_timer);
518 unsigned long flags;
519
520
521
522
523
524
525
526
527
528
529
530
531 spin_lock_irqsave(&priv->state_lock, flags);
532 switch (priv->state) {
533 case TSC2046_STATE_ENABLE_IRQ:
534 if (priv->poll_cnt < TI_TSC2046_POLL_CNT) {
535 priv->poll_cnt++;
536 hrtimer_start(&priv->trig_timer,
537 ns_to_ktime(priv->scan_interval_us *
538 NSEC_PER_USEC),
539 HRTIMER_MODE_REL_SOFT);
540
541 if (priv->poll_cnt >= TI_TSC2046_MIN_POLL_CNT) {
542 priv->state = TSC2046_STATE_POLL_IRQ_DISABLE;
543 enable_irq(priv->spi->irq);
544 } else {
545 priv->state = TSC2046_STATE_POLL;
546 }
547 } else {
548 priv->state = TSC2046_STATE_STANDBY;
549 enable_irq(priv->spi->irq);
550 }
551 break;
552 case TSC2046_STATE_POLL_IRQ_DISABLE:
553 disable_irq_nosync(priv->spi->irq);
554 fallthrough;
555 case TSC2046_STATE_POLL:
556 priv->state = TSC2046_STATE_ENABLE_IRQ;
557
558 iio_trigger_poll(priv->trig);
559 break;
560 case TSC2046_STATE_SHUTDOWN:
561 break;
562 case TSC2046_STATE_STANDBY:
563 fallthrough;
564 default:
565 dev_warn(&priv->spi->dev, "Got unexpected state: %i\n",
566 priv->state);
567 break;
568 }
569 spin_unlock_irqrestore(&priv->state_lock, flags);
570
571 return HRTIMER_NORESTART;
572}
573
574static irqreturn_t tsc2046_adc_irq(int irq, void *dev_id)
575{
576 struct iio_dev *indio_dev = dev_id;
577 struct tsc2046_adc_priv *priv = iio_priv(indio_dev);
578 unsigned long flags;
579
580 hrtimer_try_to_cancel(&priv->trig_timer);
581
582 spin_lock_irqsave(&priv->state_lock, flags);
583 if (priv->state != TSC2046_STATE_SHUTDOWN) {
584 priv->state = TSC2046_STATE_ENABLE_IRQ;
585 priv->poll_cnt = 0;
586
587
588 disable_irq_nosync(priv->spi->irq);
589 iio_trigger_poll(priv->trig);
590 }
591 spin_unlock_irqrestore(&priv->state_lock, flags);
592
593 return IRQ_HANDLED;
594}
595
596static void tsc2046_adc_reenable_trigger(struct iio_trigger *trig)
597{
598 struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
599 struct tsc2046_adc_priv *priv = iio_priv(indio_dev);
600 ktime_t tim;
601
602
603
604
605
606
607 tim = ns_to_ktime((priv->scan_interval_us - priv->time_per_scan_us) *
608 NSEC_PER_USEC);
609 hrtimer_start(&priv->trig_timer, tim, HRTIMER_MODE_REL_SOFT);
610}
611
612static int tsc2046_adc_set_trigger_state(struct iio_trigger *trig, bool enable)
613{
614 struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
615 struct tsc2046_adc_priv *priv = iio_priv(indio_dev);
616 unsigned long flags;
617
618 if (enable) {
619 spin_lock_irqsave(&priv->state_lock, flags);
620 if (priv->state == TSC2046_STATE_SHUTDOWN) {
621 priv->state = TSC2046_STATE_STANDBY;
622 enable_irq(priv->spi->irq);
623 }
624 spin_unlock_irqrestore(&priv->state_lock, flags);
625 } else {
626 spin_lock_irqsave(&priv->state_lock, flags);
627
628 if (priv->state == TSC2046_STATE_STANDBY ||
629 priv->state == TSC2046_STATE_POLL_IRQ_DISABLE)
630 disable_irq_nosync(priv->spi->irq);
631
632 priv->state = TSC2046_STATE_SHUTDOWN;
633 spin_unlock_irqrestore(&priv->state_lock, flags);
634
635 hrtimer_cancel(&priv->trig_timer);
636 }
637
638 return 0;
639}
640
641static const struct iio_trigger_ops tsc2046_adc_trigger_ops = {
642 .set_trigger_state = tsc2046_adc_set_trigger_state,
643 .reenable = tsc2046_adc_reenable_trigger,
644};
645
646static int tsc2046_adc_setup_spi_msg(struct tsc2046_adc_priv *priv)
647{
648 unsigned int ch_idx;
649 size_t size;
650 int ret;
651
652
653
654
655
656
657 ret = tsc2046_adc_read_one(priv, TI_TSC2046_ADDR_TEMP0,
658 &priv->effective_speed_hz);
659 if (ret < 0)
660 return ret;
661
662
663
664
665
666 if (!priv->effective_speed_hz)
667 priv->effective_speed_hz = priv->spi->max_speed_hz;
668
669
670 priv->scan_interval_us = TI_TSC2046_SAMPLE_INTERVAL_US;
671 priv->time_per_bit_ns = DIV_ROUND_UP(NSEC_PER_SEC,
672 priv->effective_speed_hz);
673
674
675
676
677
678 size = 0;
679 for (ch_idx = 0; ch_idx < ARRAY_SIZE(priv->l); ch_idx++)
680 size += tsc2046_adc_group_set_layout(priv, ch_idx, ch_idx);
681
682 if (size > PAGE_SIZE) {
683 dev_err(&priv->spi->dev,
684 "Calculated scan buffer is too big. Try to reduce spi-max-frequency, settling-time-us or oversampling-ratio\n");
685 return -ENOSPC;
686 }
687
688 priv->tx = devm_kzalloc(&priv->spi->dev, size, GFP_KERNEL);
689 if (!priv->tx)
690 return -ENOMEM;
691
692 priv->rx = devm_kzalloc(&priv->spi->dev, size, GFP_KERNEL);
693 if (!priv->rx)
694 return -ENOMEM;
695
696 priv->xfer.tx_buf = priv->tx;
697 priv->xfer.rx_buf = priv->rx;
698 priv->xfer.len = size;
699 spi_message_init_with_transfers(&priv->msg, &priv->xfer, 1);
700
701 return 0;
702}
703
704static void tsc2046_adc_parse_fwnode(struct tsc2046_adc_priv *priv)
705{
706 struct fwnode_handle *child;
707 struct device *dev = &priv->spi->dev;
708 unsigned int i;
709
710 for (i = 0; i < ARRAY_SIZE(priv->ch_cfg); i++) {
711 priv->ch_cfg[i].settling_time_us = 1;
712 priv->ch_cfg[i].oversampling_ratio = 1;
713 }
714
715 device_for_each_child_node(dev, child) {
716 u32 stl, overs, reg;
717 int ret;
718
719 ret = fwnode_property_read_u32(child, "reg", ®);
720 if (ret) {
721 dev_err(dev, "invalid reg on %pfw, err: %pe\n", child,
722 ERR_PTR(ret));
723 continue;
724 }
725
726 if (reg >= ARRAY_SIZE(priv->ch_cfg)) {
727 dev_err(dev, "%pfw: Unsupported reg value: %i, max supported is: %zu.\n",
728 child, reg, ARRAY_SIZE(priv->ch_cfg));
729 continue;
730 }
731
732 ret = fwnode_property_read_u32(child, "settling-time-us", &stl);
733 if (!ret)
734 priv->ch_cfg[reg].settling_time_us = stl;
735
736 ret = fwnode_property_read_u32(child, "oversampling-ratio",
737 &overs);
738 if (!ret)
739 priv->ch_cfg[reg].oversampling_ratio = overs;
740 }
741}
742
743static int tsc2046_adc_probe(struct spi_device *spi)
744{
745 const struct tsc2046_adc_dcfg *dcfg;
746 struct device *dev = &spi->dev;
747 struct tsc2046_adc_priv *priv;
748 struct iio_dev *indio_dev;
749 struct iio_trigger *trig;
750 int ret;
751
752 if (spi->max_speed_hz > TI_TSC2046_MAX_CLK_FREQ) {
753 dev_err(dev, "SPI max_speed_hz is too high: %d Hz. Max supported freq is %zu Hz\n",
754 spi->max_speed_hz, TI_TSC2046_MAX_CLK_FREQ);
755 return -EINVAL;
756 }
757
758 dcfg = device_get_match_data(dev);
759 if (!dcfg)
760 return -EINVAL;
761
762 spi->bits_per_word = 8;
763 spi->mode &= ~SPI_MODE_X_MASK;
764 spi->mode |= SPI_MODE_0;
765 ret = spi_setup(spi);
766 if (ret < 0)
767 return dev_err_probe(dev, ret, "Error in SPI setup\n");
768
769 indio_dev = devm_iio_device_alloc(dev, sizeof(*priv));
770 if (!indio_dev)
771 return -ENOMEM;
772
773 priv = iio_priv(indio_dev);
774 priv->dcfg = dcfg;
775
776 priv->spi = spi;
777
778 indio_dev->name = TI_TSC2046_NAME;
779 indio_dev->modes = INDIO_DIRECT_MODE | INDIO_BUFFER_TRIGGERED;
780 indio_dev->channels = dcfg->channels;
781 indio_dev->num_channels = dcfg->num_channels;
782 indio_dev->info = &tsc2046_adc_info;
783
784 tsc2046_adc_parse_fwnode(priv);
785
786 ret = tsc2046_adc_setup_spi_msg(priv);
787 if (ret)
788 return ret;
789
790 mutex_init(&priv->slock);
791
792 ret = devm_request_irq(dev, spi->irq, &tsc2046_adc_irq,
793 IRQF_NO_AUTOEN, indio_dev->name, indio_dev);
794 if (ret)
795 return ret;
796
797 trig = devm_iio_trigger_alloc(dev, "touchscreen-%s", indio_dev->name);
798 if (!trig)
799 return -ENOMEM;
800
801 priv->trig = trig;
802 iio_trigger_set_drvdata(trig, indio_dev);
803 trig->ops = &tsc2046_adc_trigger_ops;
804
805 spin_lock_init(&priv->state_lock);
806 priv->state = TSC2046_STATE_SHUTDOWN;
807 hrtimer_init(&priv->trig_timer, CLOCK_MONOTONIC,
808 HRTIMER_MODE_REL_SOFT);
809 priv->trig_timer.function = tsc2046_adc_timer;
810
811 ret = devm_iio_trigger_register(dev, trig);
812 if (ret) {
813 dev_err(dev, "failed to register trigger\n");
814 return ret;
815 }
816
817 ret = devm_iio_triggered_buffer_setup(dev, indio_dev, NULL,
818 &tsc2046_adc_trigger_handler, NULL);
819 if (ret) {
820 dev_err(dev, "Failed to setup triggered buffer\n");
821 return ret;
822 }
823
824
825 indio_dev->trig = iio_trigger_get(priv->trig);
826
827 return devm_iio_device_register(dev, indio_dev);
828}
829
830static const struct of_device_id ads7950_of_table[] = {
831 { .compatible = "ti,tsc2046e-adc", .data = &tsc2046_adc_dcfg_tsc2046e },
832 { }
833};
834MODULE_DEVICE_TABLE(of, ads7950_of_table);
835
836static struct spi_driver tsc2046_adc_driver = {
837 .driver = {
838 .name = "tsc2046",
839 .of_match_table = ads7950_of_table,
840 },
841 .probe = tsc2046_adc_probe,
842};
843module_spi_driver(tsc2046_adc_driver);
844
845MODULE_AUTHOR("Oleksij Rempel <kernel@pengutronix.de>");
846MODULE_DESCRIPTION("TI TSC2046 ADC");
847MODULE_LICENSE("GPL v2");
848