1 // SPDX-License-Identifier: GPL-2.0
3 * Texas Instruments ADS7950 SPI ADC driver
5 * Copyright 2016 David Lechner <david@lechnology.com>
7 * Based on iio/ad7923.c:
8 * Copyright 2011 Analog Devices Inc
9 * Copyright 2012 CS Systemes d'Information
11 * And also on hwmon/ads79xx.c
12 * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
16 #include <linux/acpi.h>
17 #include <linux/bitops.h>
18 #include <linux/device.h>
19 #include <linux/err.h>
20 #include <linux/gpio/driver.h>
21 #include <linux/interrupt.h>
22 #include <linux/kernel.h>
23 #include <linux/module.h>
24 #include <linux/regulator/consumer.h>
25 #include <linux/slab.h>
26 #include <linux/spi/spi.h>
28 #include <linux/iio/buffer.h>
29 #include <linux/iio/iio.h>
30 #include <linux/iio/sysfs.h>
31 #include <linux/iio/trigger_consumer.h>
32 #include <linux/iio/triggered_buffer.h>
35 * In case of ACPI, we use the 5000 mV as default for the reference pin.
36 * Device tree users encode that via the vref-supply regulator.
38 #define TI_ADS7950_VA_MV_ACPI_DEFAULT 5000
40 #define TI_ADS7950_CR_GPIO BIT(14)
41 #define TI_ADS7950_CR_MANUAL BIT(12)
42 #define TI_ADS7950_CR_WRITE BIT(11)
43 #define TI_ADS7950_CR_CHAN(ch) ((ch) << 7)
44 #define TI_ADS7950_CR_RANGE_5V BIT(6)
45 #define TI_ADS7950_CR_GPIO_DATA BIT(4)
47 #define TI_ADS7950_MAX_CHAN 16
48 #define TI_ADS7950_NUM_GPIOS 4
50 #define TI_ADS7950_TIMESTAMP_SIZE (sizeof(int64_t) / sizeof(__be16))
52 /* val = value, dec = left shift, bits = number of bits of the mask */
53 #define TI_ADS7950_EXTRACT(val, dec, bits) \
54 (((val) >> (dec)) & ((1 << (bits)) - 1))
56 #define TI_ADS7950_MAN_CMD(cmd) (TI_ADS7950_CR_MANUAL | (cmd))
57 #define TI_ADS7950_GPIO_CMD(cmd) (TI_ADS7950_CR_GPIO | (cmd))
59 /* Manual mode configuration */
60 #define TI_ADS7950_MAN_CMD_SETTINGS(st) \
61 (TI_ADS7950_MAN_CMD(TI_ADS7950_CR_WRITE | st->cmd_settings_bitmask))
62 /* GPIO mode configuration */
63 #define TI_ADS7950_GPIO_CMD_SETTINGS(st) \
64 (TI_ADS7950_GPIO_CMD(st->gpio_cmd_settings_bitmask))
66 struct ti_ads7950_state
{
67 struct spi_device
*spi
;
68 struct spi_transfer ring_xfer
;
69 struct spi_transfer scan_single_xfer
[3];
70 struct spi_message ring_msg
;
71 struct spi_message scan_single_msg
;
73 /* Lock to protect the spi xfer buffers */
75 struct gpio_chip chip
;
77 struct regulator
*reg
;
81 * Bitmask of lower 7 bits used for configuration
82 * These bits only can be written when TI_ADS7950_CR_WRITE
83 * is set, otherwise it retains its original state.
85 * [4] Set following frame to return GPIO signal values
86 * [5] Powers down device
87 * [6] Sets Vref range1(2.5v) or range2(5v)
89 * Bits present on Manual/Auto1/Auto2 commands
91 unsigned int cmd_settings_bitmask
;
94 * Bitmask of GPIO command
95 * [0-3] GPIO direction
96 * [4-6] Different GPIO alarm mode configurations
97 * [7] GPIO 2 as device range input
98 * [8] GPIO 3 as device power down input
99 * [9] Reset all registers
102 unsigned int gpio_cmd_settings_bitmask
;
105 * DMA (thus cache coherency maintenance) requires the
106 * transfer buffers to live in their own cache lines.
108 u16 rx_buf
[TI_ADS7950_MAX_CHAN
+ 2 + TI_ADS7950_TIMESTAMP_SIZE
]
109 ____cacheline_aligned
;
110 u16 tx_buf
[TI_ADS7950_MAX_CHAN
+ 2];
116 struct ti_ads7950_chip_info
{
117 const struct iio_chan_spec
*channels
;
118 unsigned int num_channels
;
136 #define TI_ADS7950_V_CHAN(index, bits) \
138 .type = IIO_VOLTAGE, \
141 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
142 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
144 .datasheet_name = "CH##index", \
145 .scan_index = index, \
150 .shift = 12 - (bits), \
151 .endianness = IIO_CPU, \
155 #define DECLARE_TI_ADS7950_4_CHANNELS(name, bits) \
156 const struct iio_chan_spec name ## _channels[] = { \
157 TI_ADS7950_V_CHAN(0, bits), \
158 TI_ADS7950_V_CHAN(1, bits), \
159 TI_ADS7950_V_CHAN(2, bits), \
160 TI_ADS7950_V_CHAN(3, bits), \
161 IIO_CHAN_SOFT_TIMESTAMP(4), \
164 #define DECLARE_TI_ADS7950_8_CHANNELS(name, bits) \
165 const struct iio_chan_spec name ## _channels[] = { \
166 TI_ADS7950_V_CHAN(0, bits), \
167 TI_ADS7950_V_CHAN(1, bits), \
168 TI_ADS7950_V_CHAN(2, bits), \
169 TI_ADS7950_V_CHAN(3, bits), \
170 TI_ADS7950_V_CHAN(4, bits), \
171 TI_ADS7950_V_CHAN(5, bits), \
172 TI_ADS7950_V_CHAN(6, bits), \
173 TI_ADS7950_V_CHAN(7, bits), \
174 IIO_CHAN_SOFT_TIMESTAMP(8), \
177 #define DECLARE_TI_ADS7950_12_CHANNELS(name, bits) \
178 const struct iio_chan_spec name ## _channels[] = { \
179 TI_ADS7950_V_CHAN(0, bits), \
180 TI_ADS7950_V_CHAN(1, bits), \
181 TI_ADS7950_V_CHAN(2, bits), \
182 TI_ADS7950_V_CHAN(3, bits), \
183 TI_ADS7950_V_CHAN(4, bits), \
184 TI_ADS7950_V_CHAN(5, bits), \
185 TI_ADS7950_V_CHAN(6, bits), \
186 TI_ADS7950_V_CHAN(7, bits), \
187 TI_ADS7950_V_CHAN(8, bits), \
188 TI_ADS7950_V_CHAN(9, bits), \
189 TI_ADS7950_V_CHAN(10, bits), \
190 TI_ADS7950_V_CHAN(11, bits), \
191 IIO_CHAN_SOFT_TIMESTAMP(12), \
194 #define DECLARE_TI_ADS7950_16_CHANNELS(name, bits) \
195 const struct iio_chan_spec name ## _channels[] = { \
196 TI_ADS7950_V_CHAN(0, bits), \
197 TI_ADS7950_V_CHAN(1, bits), \
198 TI_ADS7950_V_CHAN(2, bits), \
199 TI_ADS7950_V_CHAN(3, bits), \
200 TI_ADS7950_V_CHAN(4, bits), \
201 TI_ADS7950_V_CHAN(5, bits), \
202 TI_ADS7950_V_CHAN(6, bits), \
203 TI_ADS7950_V_CHAN(7, bits), \
204 TI_ADS7950_V_CHAN(8, bits), \
205 TI_ADS7950_V_CHAN(9, bits), \
206 TI_ADS7950_V_CHAN(10, bits), \
207 TI_ADS7950_V_CHAN(11, bits), \
208 TI_ADS7950_V_CHAN(12, bits), \
209 TI_ADS7950_V_CHAN(13, bits), \
210 TI_ADS7950_V_CHAN(14, bits), \
211 TI_ADS7950_V_CHAN(15, bits), \
212 IIO_CHAN_SOFT_TIMESTAMP(16), \
215 static DECLARE_TI_ADS7950_4_CHANNELS(ti_ads7950
, 12);
216 static DECLARE_TI_ADS7950_8_CHANNELS(ti_ads7951
, 12);
217 static DECLARE_TI_ADS7950_12_CHANNELS(ti_ads7952
, 12);
218 static DECLARE_TI_ADS7950_16_CHANNELS(ti_ads7953
, 12);
219 static DECLARE_TI_ADS7950_4_CHANNELS(ti_ads7954
, 10);
220 static DECLARE_TI_ADS7950_8_CHANNELS(ti_ads7955
, 10);
221 static DECLARE_TI_ADS7950_12_CHANNELS(ti_ads7956
, 10);
222 static DECLARE_TI_ADS7950_16_CHANNELS(ti_ads7957
, 10);
223 static DECLARE_TI_ADS7950_4_CHANNELS(ti_ads7958
, 8);
224 static DECLARE_TI_ADS7950_8_CHANNELS(ti_ads7959
, 8);
225 static DECLARE_TI_ADS7950_12_CHANNELS(ti_ads7960
, 8);
226 static DECLARE_TI_ADS7950_16_CHANNELS(ti_ads7961
, 8);
228 static const struct ti_ads7950_chip_info ti_ads7950_chip_info
[] = {
230 .channels
= ti_ads7950_channels
,
231 .num_channels
= ARRAY_SIZE(ti_ads7950_channels
),
234 .channels
= ti_ads7951_channels
,
235 .num_channels
= ARRAY_SIZE(ti_ads7951_channels
),
238 .channels
= ti_ads7952_channels
,
239 .num_channels
= ARRAY_SIZE(ti_ads7952_channels
),
242 .channels
= ti_ads7953_channels
,
243 .num_channels
= ARRAY_SIZE(ti_ads7953_channels
),
246 .channels
= ti_ads7954_channels
,
247 .num_channels
= ARRAY_SIZE(ti_ads7954_channels
),
250 .channels
= ti_ads7955_channels
,
251 .num_channels
= ARRAY_SIZE(ti_ads7955_channels
),
254 .channels
= ti_ads7956_channels
,
255 .num_channels
= ARRAY_SIZE(ti_ads7956_channels
),
258 .channels
= ti_ads7957_channels
,
259 .num_channels
= ARRAY_SIZE(ti_ads7957_channels
),
262 .channels
= ti_ads7958_channels
,
263 .num_channels
= ARRAY_SIZE(ti_ads7958_channels
),
266 .channels
= ti_ads7959_channels
,
267 .num_channels
= ARRAY_SIZE(ti_ads7959_channels
),
270 .channels
= ti_ads7960_channels
,
271 .num_channels
= ARRAY_SIZE(ti_ads7960_channels
),
274 .channels
= ti_ads7961_channels
,
275 .num_channels
= ARRAY_SIZE(ti_ads7961_channels
),
280 * ti_ads7950_update_scan_mode() setup the spi transfer buffer for the new
283 static int ti_ads7950_update_scan_mode(struct iio_dev
*indio_dev
,
284 const unsigned long *active_scan_mask
)
286 struct ti_ads7950_state
*st
= iio_priv(indio_dev
);
290 for_each_set_bit(i
, active_scan_mask
, indio_dev
->num_channels
) {
291 cmd
= TI_ADS7950_MAN_CMD(TI_ADS7950_CR_CHAN(i
));
292 st
->tx_buf
[len
++] = cmd
;
295 /* Data for the 1st channel is not returned until the 3rd transfer */
296 st
->tx_buf
[len
++] = 0;
297 st
->tx_buf
[len
++] = 0;
299 st
->ring_xfer
.len
= len
* 2;
304 static irqreturn_t
ti_ads7950_trigger_handler(int irq
, void *p
)
306 struct iio_poll_func
*pf
= p
;
307 struct iio_dev
*indio_dev
= pf
->indio_dev
;
308 struct ti_ads7950_state
*st
= iio_priv(indio_dev
);
311 mutex_lock(&st
->slock
);
312 ret
= spi_sync(st
->spi
, &st
->ring_msg
);
316 iio_push_to_buffers_with_timestamp(indio_dev
, &st
->rx_buf
[2],
317 iio_get_time_ns(indio_dev
));
320 mutex_unlock(&st
->slock
);
321 iio_trigger_notify_done(indio_dev
->trig
);
326 static int ti_ads7950_scan_direct(struct iio_dev
*indio_dev
, unsigned int ch
)
328 struct ti_ads7950_state
*st
= iio_priv(indio_dev
);
331 mutex_lock(&st
->slock
);
332 cmd
= TI_ADS7950_MAN_CMD(TI_ADS7950_CR_CHAN(ch
));
335 ret
= spi_sync(st
->spi
, &st
->scan_single_msg
);
342 mutex_unlock(&st
->slock
);
347 static int ti_ads7950_get_range(struct ti_ads7950_state
*st
)
354 vref
= regulator_get_voltage(st
->reg
);
361 if (st
->cmd_settings_bitmask
& TI_ADS7950_CR_RANGE_5V
)
367 static int ti_ads7950_read_raw(struct iio_dev
*indio_dev
,
368 struct iio_chan_spec
const *chan
,
369 int *val
, int *val2
, long m
)
371 struct ti_ads7950_state
*st
= iio_priv(indio_dev
);
375 case IIO_CHAN_INFO_RAW
:
376 ret
= ti_ads7950_scan_direct(indio_dev
, chan
->address
);
380 if (chan
->address
!= TI_ADS7950_EXTRACT(ret
, 12, 4))
383 *val
= TI_ADS7950_EXTRACT(ret
, chan
->scan_type
.shift
,
384 chan
->scan_type
.realbits
);
387 case IIO_CHAN_INFO_SCALE
:
388 ret
= ti_ads7950_get_range(st
);
393 *val2
= (1 << chan
->scan_type
.realbits
) - 1;
395 return IIO_VAL_FRACTIONAL
;
401 static const struct iio_info ti_ads7950_info
= {
402 .read_raw
= &ti_ads7950_read_raw
,
403 .update_scan_mode
= ti_ads7950_update_scan_mode
,
406 static void ti_ads7950_set(struct gpio_chip
*chip
, unsigned int offset
,
409 struct ti_ads7950_state
*st
= gpiochip_get_data(chip
);
411 mutex_lock(&st
->slock
);
414 st
->cmd_settings_bitmask
|= BIT(offset
);
416 st
->cmd_settings_bitmask
&= ~BIT(offset
);
418 st
->single_tx
= TI_ADS7950_MAN_CMD_SETTINGS(st
);
419 spi_sync(st
->spi
, &st
->scan_single_msg
);
421 mutex_unlock(&st
->slock
);
424 static int ti_ads7950_get(struct gpio_chip
*chip
, unsigned int offset
)
426 struct ti_ads7950_state
*st
= gpiochip_get_data(chip
);
429 mutex_lock(&st
->slock
);
431 /* If set as output, return the output */
432 if (st
->gpio_cmd_settings_bitmask
& BIT(offset
)) {
433 ret
= st
->cmd_settings_bitmask
& BIT(offset
);
437 /* GPIO data bit sets SDO bits 12-15 to GPIO input */
438 st
->cmd_settings_bitmask
|= TI_ADS7950_CR_GPIO_DATA
;
439 st
->single_tx
= TI_ADS7950_MAN_CMD_SETTINGS(st
);
440 ret
= spi_sync(st
->spi
, &st
->scan_single_msg
);
444 ret
= ((st
->single_rx
>> 12) & BIT(offset
)) ? 1 : 0;
446 /* Revert back to original settings */
447 st
->cmd_settings_bitmask
&= ~TI_ADS7950_CR_GPIO_DATA
;
448 st
->single_tx
= TI_ADS7950_MAN_CMD_SETTINGS(st
);
449 ret
= spi_sync(st
->spi
, &st
->scan_single_msg
);
454 mutex_unlock(&st
->slock
);
459 static int ti_ads7950_get_direction(struct gpio_chip
*chip
,
462 struct ti_ads7950_state
*st
= gpiochip_get_data(chip
);
464 /* Bitmask is inverted from GPIO framework 0=input/1=output */
465 return !(st
->gpio_cmd_settings_bitmask
& BIT(offset
));
468 static int _ti_ads7950_set_direction(struct gpio_chip
*chip
, int offset
,
471 struct ti_ads7950_state
*st
= gpiochip_get_data(chip
);
474 mutex_lock(&st
->slock
);
476 /* Only change direction if needed */
477 if (input
&& (st
->gpio_cmd_settings_bitmask
& BIT(offset
)))
478 st
->gpio_cmd_settings_bitmask
&= ~BIT(offset
);
479 else if (!input
&& !(st
->gpio_cmd_settings_bitmask
& BIT(offset
)))
480 st
->gpio_cmd_settings_bitmask
|= BIT(offset
);
484 st
->single_tx
= TI_ADS7950_GPIO_CMD_SETTINGS(st
);
485 ret
= spi_sync(st
->spi
, &st
->scan_single_msg
);
488 mutex_unlock(&st
->slock
);
493 static int ti_ads7950_direction_input(struct gpio_chip
*chip
,
496 return _ti_ads7950_set_direction(chip
, offset
, 1);
499 static int ti_ads7950_direction_output(struct gpio_chip
*chip
,
500 unsigned int offset
, int value
)
502 ti_ads7950_set(chip
, offset
, value
);
504 return _ti_ads7950_set_direction(chip
, offset
, 0);
507 static int ti_ads7950_init_hw(struct ti_ads7950_state
*st
)
511 mutex_lock(&st
->slock
);
513 /* Settings for Manual/Auto1/Auto2 commands */
514 /* Default to 5v ref */
515 st
->cmd_settings_bitmask
= TI_ADS7950_CR_RANGE_5V
;
516 st
->single_tx
= TI_ADS7950_MAN_CMD_SETTINGS(st
);
517 ret
= spi_sync(st
->spi
, &st
->scan_single_msg
);
521 /* Settings for GPIO command */
522 st
->gpio_cmd_settings_bitmask
= 0x0;
523 st
->single_tx
= TI_ADS7950_GPIO_CMD_SETTINGS(st
);
524 ret
= spi_sync(st
->spi
, &st
->scan_single_msg
);
527 mutex_unlock(&st
->slock
);
532 static int ti_ads7950_probe(struct spi_device
*spi
)
534 struct ti_ads7950_state
*st
;
535 struct iio_dev
*indio_dev
;
536 const struct ti_ads7950_chip_info
*info
;
539 spi
->bits_per_word
= 16;
540 spi
->mode
|= SPI_CS_WORD
;
541 ret
= spi_setup(spi
);
543 dev_err(&spi
->dev
, "Error in spi setup\n");
547 indio_dev
= devm_iio_device_alloc(&spi
->dev
, sizeof(*st
));
551 st
= iio_priv(indio_dev
);
553 spi_set_drvdata(spi
, indio_dev
);
557 info
= &ti_ads7950_chip_info
[spi_get_device_id(spi
)->driver_data
];
559 indio_dev
->name
= spi_get_device_id(spi
)->name
;
560 indio_dev
->modes
= INDIO_DIRECT_MODE
;
561 indio_dev
->channels
= info
->channels
;
562 indio_dev
->num_channels
= info
->num_channels
;
563 indio_dev
->info
= &ti_ads7950_info
;
565 /* build spi ring message */
566 spi_message_init(&st
->ring_msg
);
568 st
->ring_xfer
.tx_buf
= &st
->tx_buf
[0];
569 st
->ring_xfer
.rx_buf
= &st
->rx_buf
[0];
570 /* len will be set later */
571 st
->ring_xfer
.cs_change
= true;
573 spi_message_add_tail(&st
->ring_xfer
, &st
->ring_msg
);
576 * Setup default message. The sample is read at the end of the first
577 * transfer, then it takes one full cycle to convert the sample and one
578 * more cycle to send the value. The conversion process is driven by
579 * the SPI clock, which is why we have 3 transfers. The middle one is
580 * just dummy data sent while the chip is converting the sample that
581 * was read at the end of the first transfer.
584 st
->scan_single_xfer
[0].tx_buf
= &st
->single_tx
;
585 st
->scan_single_xfer
[0].len
= 2;
586 st
->scan_single_xfer
[0].cs_change
= 1;
587 st
->scan_single_xfer
[1].tx_buf
= &st
->single_tx
;
588 st
->scan_single_xfer
[1].len
= 2;
589 st
->scan_single_xfer
[1].cs_change
= 1;
590 st
->scan_single_xfer
[2].rx_buf
= &st
->single_rx
;
591 st
->scan_single_xfer
[2].len
= 2;
593 spi_message_init_with_transfers(&st
->scan_single_msg
,
594 st
->scan_single_xfer
, 3);
596 /* Use hard coded value for reference voltage in ACPI case */
597 if (ACPI_COMPANION(&spi
->dev
))
598 st
->vref_mv
= TI_ADS7950_VA_MV_ACPI_DEFAULT
;
600 mutex_init(&st
->slock
);
602 st
->reg
= devm_regulator_get(&spi
->dev
, "vref");
603 if (IS_ERR(st
->reg
)) {
604 dev_err(&spi
->dev
, "Failed to get regulator \"vref\"\n");
605 ret
= PTR_ERR(st
->reg
);
606 goto error_destroy_mutex
;
609 ret
= regulator_enable(st
->reg
);
611 dev_err(&spi
->dev
, "Failed to enable regulator \"vref\"\n");
612 goto error_destroy_mutex
;
615 ret
= iio_triggered_buffer_setup(indio_dev
, NULL
,
616 &ti_ads7950_trigger_handler
, NULL
);
618 dev_err(&spi
->dev
, "Failed to setup triggered buffer\n");
619 goto error_disable_reg
;
622 ret
= ti_ads7950_init_hw(st
);
624 dev_err(&spi
->dev
, "Failed to init adc chip\n");
625 goto error_cleanup_ring
;
628 ret
= iio_device_register(indio_dev
);
630 dev_err(&spi
->dev
, "Failed to register iio device\n");
631 goto error_cleanup_ring
;
635 st
->chip
.label
= dev_name(&st
->spi
->dev
);
636 st
->chip
.parent
= &st
->spi
->dev
;
637 st
->chip
.owner
= THIS_MODULE
;
639 st
->chip
.ngpio
= TI_ADS7950_NUM_GPIOS
;
640 st
->chip
.get_direction
= ti_ads7950_get_direction
;
641 st
->chip
.direction_input
= ti_ads7950_direction_input
;
642 st
->chip
.direction_output
= ti_ads7950_direction_output
;
643 st
->chip
.get
= ti_ads7950_get
;
644 st
->chip
.set
= ti_ads7950_set
;
646 ret
= gpiochip_add_data(&st
->chip
, st
);
648 dev_err(&spi
->dev
, "Failed to init GPIOs\n");
649 goto error_iio_device
;
655 iio_device_unregister(indio_dev
);
657 iio_triggered_buffer_cleanup(indio_dev
);
659 regulator_disable(st
->reg
);
661 mutex_destroy(&st
->slock
);
666 static int ti_ads7950_remove(struct spi_device
*spi
)
668 struct iio_dev
*indio_dev
= spi_get_drvdata(spi
);
669 struct ti_ads7950_state
*st
= iio_priv(indio_dev
);
671 gpiochip_remove(&st
->chip
);
672 iio_device_unregister(indio_dev
);
673 iio_triggered_buffer_cleanup(indio_dev
);
674 regulator_disable(st
->reg
);
675 mutex_destroy(&st
->slock
);
680 static const struct spi_device_id ti_ads7950_id
[] = {
681 { "ads7950", TI_ADS7950
},
682 { "ads7951", TI_ADS7951
},
683 { "ads7952", TI_ADS7952
},
684 { "ads7953", TI_ADS7953
},
685 { "ads7954", TI_ADS7954
},
686 { "ads7955", TI_ADS7955
},
687 { "ads7956", TI_ADS7956
},
688 { "ads7957", TI_ADS7957
},
689 { "ads7958", TI_ADS7958
},
690 { "ads7959", TI_ADS7959
},
691 { "ads7960", TI_ADS7960
},
692 { "ads7961", TI_ADS7961
},
695 MODULE_DEVICE_TABLE(spi
, ti_ads7950_id
);
697 static const struct of_device_id ads7950_of_table
[] = {
698 { .compatible
= "ti,ads7950", .data
= &ti_ads7950_chip_info
[TI_ADS7950
] },
699 { .compatible
= "ti,ads7951", .data
= &ti_ads7950_chip_info
[TI_ADS7951
] },
700 { .compatible
= "ti,ads7952", .data
= &ti_ads7950_chip_info
[TI_ADS7952
] },
701 { .compatible
= "ti,ads7953", .data
= &ti_ads7950_chip_info
[TI_ADS7953
] },
702 { .compatible
= "ti,ads7954", .data
= &ti_ads7950_chip_info
[TI_ADS7954
] },
703 { .compatible
= "ti,ads7955", .data
= &ti_ads7950_chip_info
[TI_ADS7955
] },
704 { .compatible
= "ti,ads7956", .data
= &ti_ads7950_chip_info
[TI_ADS7956
] },
705 { .compatible
= "ti,ads7957", .data
= &ti_ads7950_chip_info
[TI_ADS7957
] },
706 { .compatible
= "ti,ads7958", .data
= &ti_ads7950_chip_info
[TI_ADS7958
] },
707 { .compatible
= "ti,ads7959", .data
= &ti_ads7950_chip_info
[TI_ADS7959
] },
708 { .compatible
= "ti,ads7960", .data
= &ti_ads7950_chip_info
[TI_ADS7960
] },
709 { .compatible
= "ti,ads7961", .data
= &ti_ads7950_chip_info
[TI_ADS7961
] },
712 MODULE_DEVICE_TABLE(of
, ads7950_of_table
);
714 static struct spi_driver ti_ads7950_driver
= {
717 .of_match_table
= ads7950_of_table
,
719 .probe
= ti_ads7950_probe
,
720 .remove
= ti_ads7950_remove
,
721 .id_table
= ti_ads7950_id
,
723 module_spi_driver(ti_ads7950_driver
);
725 MODULE_AUTHOR("David Lechner <david@lechnology.com>");
726 MODULE_DESCRIPTION("TI TI_ADS7950 ADC");
727 MODULE_LICENSE("GPL v2");