1 // SPDX-License-Identifier: GPL-2.0-only
3 * Texas Instruments ADS1119 ADC driver.
5 * Copyright 2024 Toradex
8 #include <linux/bits.h>
9 #include <linux/bitfield.h>
10 #include <linux/completion.h>
11 #include <linux/delay.h>
12 #include <linux/dev_printk.h>
13 #include <linux/err.h>
14 #include <linux/gpio/consumer.h>
15 #include <linux/interrupt.h>
16 #include <linux/iopoll.h>
17 #include <linux/i2c.h>
18 #include <linux/kernel.h>
19 #include <linux/math.h>
20 #include <linux/module.h>
21 #include <linux/pm_runtime.h>
22 #include <linux/regulator/consumer.h>
23 #include <linux/units.h>
25 #include <linux/iio/iio.h>
26 #include <linux/iio/buffer.h>
27 #include <linux/iio/trigger.h>
28 #include <linux/iio/triggered_buffer.h>
29 #include <linux/iio/trigger_consumer.h>
31 #define ADS1119_CMD_RESET 0x06
32 #define ADS1119_CMD_POWERDOWN 0x02
33 #define ADS1119_CMD_START_SYNC 0x08
34 #define ADS1119_CMD_RDATA 0x10
35 #define ADS1119_CMD_RREG_CONFIG 0x20
36 #define ADS1119_CMD_RREG_STATUS 0x24
37 #define ADS1119_CMD_WREG 0x40
39 #define ADS1119_CMD_RREG(reg) (0x20 | (reg) << 2)
42 #define ADS1119_REG_CONFIG 0x00
43 #define ADS1119_CONFIG_VREF_FIELD BIT(0)
44 #define ADS1119_CONFIG_CM_FIELD BIT(1)
45 #define ADS1119_CONFIG_DR_FIELD GENMASK(3, 2)
46 #define ADS1119_CONFIG_GAIN_FIELD BIT(4)
47 #define ADS1119_CONFIG_MUX_FIELD GENMASK(7, 5)
49 #define ADS1119_VREF_INTERNAL 0
50 #define ADS1119_VREF_EXTERNAL 1
51 #define ADS1119_VREF_INTERNAL_VAL 2048000
53 #define ADS1119_CM_SINGLE 0
54 #define ADS1119_CM_CONTINUOUS 1
56 #define ADS1119_DR_20_SPS 0
57 #define ADS1119_DR_90_SPS 1
58 #define ADS1119_DR_330_SPS 2
59 #define ADS1119_DR_1000_SPS 3
61 #define ADS1119_GAIN_1 0
62 #define ADS1119_GAIN_4 1
64 #define ADS1119_MUX_AIN0_AIN1 0
65 #define ADS1119_MUX_AIN2_AIN3 1
66 #define ADS1119_MUX_AIN1_AIN2 2
67 #define ADS1119_MUX_AIN0 3
68 #define ADS1119_MUX_AIN1 4
69 #define ADS1119_MUX_AIN2 5
70 #define ADS1119_MUX_AIN3 6
71 #define ADS1119_MUX_SHORTED 7
74 #define ADS1119_REG_STATUS 0x01
75 #define ADS1119_STATUS_DRDY_FIELD BIT(7)
77 #define ADS1119_DEFAULT_GAIN 1
78 #define ADS1119_DEFAULT_DATARATE 20
80 #define ADS1119_SUSPEND_DELAY 2000
82 /* Timeout based on the minimum sample rate of 20 SPS (50000us) */
83 #define ADS1119_MAX_DRDY_TIMEOUT 85000
85 #define ADS1119_MAX_CHANNELS 7
86 #define ADS1119_MAX_SINGLE_CHANNELS 4
88 struct ads1119_channel_config
{
94 struct ads1119_state
{
95 struct completion completion
;
96 struct i2c_client
*client
;
97 struct gpio_desc
*reset_gpio
;
98 struct iio_trigger
*trig
;
99 struct ads1119_channel_config
*channels_cfg
;
100 unsigned int num_channels_cfg
;
101 unsigned int cached_config
;
105 static const char * const ads1119_power_supplies
[] = {
109 static const int ads1119_available_datarates
[] = {
113 static const int ads1119_available_gains
[] = {
118 static int ads1119_upd_cfg_reg(struct ads1119_state
*st
, unsigned int fields
,
121 unsigned int config
= st
->cached_config
;
127 ret
= i2c_smbus_write_byte_data(st
->client
, ADS1119_CMD_WREG
, config
);
131 st
->cached_config
= config
;
136 static bool ads1119_data_ready(struct ads1119_state
*st
)
140 status
= i2c_smbus_read_byte_data(st
->client
, ADS1119_CMD_RREG_STATUS
);
144 return FIELD_GET(ADS1119_STATUS_DRDY_FIELD
, status
);
147 static int ads1119_reset(struct ads1119_state
*st
)
149 st
->cached_config
= 0;
152 return i2c_smbus_write_byte(st
->client
, ADS1119_CMD_RESET
);
154 gpiod_set_value_cansleep(st
->reset_gpio
, 1);
156 gpiod_set_value_cansleep(st
->reset_gpio
, 0);
162 static int ads1119_set_conv_mode(struct ads1119_state
*st
, bool continuous
)
167 mode
= ADS1119_CM_CONTINUOUS
;
169 mode
= ADS1119_CM_SINGLE
;
171 return ads1119_upd_cfg_reg(st
, ADS1119_CONFIG_CM_FIELD
,
172 FIELD_PREP(ADS1119_CONFIG_CM_FIELD
, mode
));
175 static int ads1119_get_hw_gain(int gain
)
178 return ADS1119_GAIN_4
;
180 return ADS1119_GAIN_1
;
183 static int ads1119_get_hw_datarate(int datarate
)
187 return ADS1119_DR_90_SPS
;
189 return ADS1119_DR_330_SPS
;
191 return ADS1119_DR_1000_SPS
;
194 return ADS1119_DR_20_SPS
;
198 static int ads1119_configure_channel(struct ads1119_state
*st
, int mux
,
199 int gain
, int datarate
)
203 ret
= ads1119_upd_cfg_reg(st
, ADS1119_CONFIG_MUX_FIELD
,
204 FIELD_PREP(ADS1119_CONFIG_MUX_FIELD
, mux
));
208 ret
= ads1119_upd_cfg_reg(st
, ADS1119_CONFIG_GAIN_FIELD
,
209 FIELD_PREP(ADS1119_CONFIG_GAIN_FIELD
,
210 ads1119_get_hw_gain(gain
)));
214 return ads1119_upd_cfg_reg(st
, ADS1119_CONFIG_DR_FIELD
,
215 FIELD_PREP(ADS1119_CONFIG_DR_FIELD
,
216 ads1119_get_hw_datarate(datarate
)));
219 static int ads1119_poll_data_ready(struct ads1119_state
*st
,
220 struct iio_chan_spec
const *chan
)
222 unsigned int datarate
= st
->channels_cfg
[chan
->address
].datarate
;
223 unsigned long wait_time
;
226 /* Poll 5 times more than the data rate */
227 wait_time
= DIV_ROUND_CLOSEST(MICRO
, 5 * datarate
);
229 return read_poll_timeout(ads1119_data_ready
, data_ready
,
230 data_ready
, wait_time
,
231 ADS1119_MAX_DRDY_TIMEOUT
, false, st
);
234 static int ads1119_read_data(struct ads1119_state
*st
,
235 struct iio_chan_spec
const *chan
,
238 unsigned int timeout
;
241 timeout
= msecs_to_jiffies(ADS1119_MAX_DRDY_TIMEOUT
);
243 if (!st
->client
->irq
) {
244 ret
= ads1119_poll_data_ready(st
, chan
);
247 } else if (!wait_for_completion_timeout(&st
->completion
, timeout
)) {
251 ret
= i2c_smbus_read_word_swapped(st
->client
, ADS1119_CMD_RDATA
);
260 static int ads1119_single_conversion(struct ads1119_state
*st
,
261 struct iio_chan_spec
const *chan
,
265 struct device
*dev
= &st
->client
->dev
;
266 int mux
= st
->channels_cfg
[chan
->address
].mux
;
267 int gain
= st
->channels_cfg
[chan
->address
].gain
;
268 int datarate
= st
->channels_cfg
[chan
->address
].datarate
;
273 mux
= ADS1119_MUX_SHORTED
;
275 ret
= pm_runtime_resume_and_get(dev
);
279 ret
= ads1119_configure_channel(st
, mux
, gain
, datarate
);
283 ret
= i2c_smbus_write_byte(st
->client
, ADS1119_CMD_START_SYNC
);
287 ret
= ads1119_read_data(st
, chan
, &sample
);
291 *val
= sign_extend32(sample
, chan
->scan_type
.realbits
- 1);
294 pm_runtime_mark_last_busy(dev
);
295 pm_runtime_put_autosuspend(dev
);
299 static int ads1119_validate_datarate(struct ads1119_state
*st
, int datarate
)
312 static int ads1119_read_avail(struct iio_dev
*indio_dev
,
313 struct iio_chan_spec
const *chan
,
314 const int **vals
, int *type
, int *length
,
318 case IIO_CHAN_INFO_SCALE
:
319 *type
= IIO_VAL_FRACTIONAL
;
320 *vals
= ads1119_available_gains
;
321 *length
= ARRAY_SIZE(ads1119_available_gains
);
322 return IIO_AVAIL_LIST
;
323 case IIO_CHAN_INFO_SAMP_FREQ
:
325 *vals
= ads1119_available_datarates
;
326 *length
= ARRAY_SIZE(ads1119_available_datarates
);
327 return IIO_AVAIL_LIST
;
333 static int ads1119_read_raw(struct iio_dev
*indio_dev
,
334 struct iio_chan_spec
const *chan
, int *val
,
335 int *val2
, long mask
)
337 struct ads1119_state
*st
= iio_priv(indio_dev
);
338 unsigned int index
= chan
->address
;
340 if (index
>= st
->num_channels_cfg
)
344 case IIO_CHAN_INFO_RAW
:
345 iio_device_claim_direct_scoped(return -EBUSY
, indio_dev
)
346 return ads1119_single_conversion(st
, chan
, val
, false);
348 case IIO_CHAN_INFO_OFFSET
:
349 iio_device_claim_direct_scoped(return -EBUSY
, indio_dev
)
350 return ads1119_single_conversion(st
, chan
, val
, true);
352 case IIO_CHAN_INFO_SCALE
:
353 *val
= st
->vref_uV
/ 1000;
354 *val
/= st
->channels_cfg
[index
].gain
;
355 *val2
= chan
->scan_type
.realbits
- 1;
356 return IIO_VAL_FRACTIONAL_LOG2
;
357 case IIO_CHAN_INFO_SAMP_FREQ
:
358 *val
= st
->channels_cfg
[index
].datarate
;
365 static int ads1119_write_raw(struct iio_dev
*indio_dev
,
366 struct iio_chan_spec
const *chan
, int val
,
369 struct ads1119_state
*st
= iio_priv(indio_dev
);
370 unsigned int index
= chan
->address
;
373 if (index
>= st
->num_channels_cfg
)
377 case IIO_CHAN_INFO_SCALE
:
378 ret
= MICRO
/ ((val
* MICRO
) + val2
);
379 if (ret
!= 1 && ret
!= 4)
382 st
->channels_cfg
[index
].gain
= ret
;
384 case IIO_CHAN_INFO_SAMP_FREQ
:
385 ret
= ads1119_validate_datarate(st
, val
);
389 st
->channels_cfg
[index
].datarate
= ret
;
396 static int ads1119_debugfs_reg_access(struct iio_dev
*indio_dev
,
397 unsigned int reg
, unsigned int writeval
,
398 unsigned int *readval
)
400 struct ads1119_state
*st
= iio_priv(indio_dev
);
403 if (reg
> ADS1119_REG_STATUS
)
407 ret
= i2c_smbus_read_byte_data(st
->client
,
408 ADS1119_CMD_RREG(reg
));
416 if (reg
> ADS1119_REG_CONFIG
)
419 return i2c_smbus_write_byte_data(st
->client
, ADS1119_CMD_WREG
,
423 static const struct iio_info ads1119_info
= {
424 .read_avail
= ads1119_read_avail
,
425 .read_raw
= ads1119_read_raw
,
426 .write_raw
= ads1119_write_raw
,
427 .debugfs_reg_access
= ads1119_debugfs_reg_access
,
430 static int ads1119_triggered_buffer_preenable(struct iio_dev
*indio_dev
)
432 struct ads1119_state
*st
= iio_priv(indio_dev
);
433 struct device
*dev
= &st
->client
->dev
;
437 index
= find_first_bit(indio_dev
->active_scan_mask
,
438 iio_get_masklength(indio_dev
));
440 ret
= ads1119_set_conv_mode(st
, true);
444 ret
= ads1119_configure_channel(st
,
445 st
->channels_cfg
[index
].mux
,
446 st
->channels_cfg
[index
].gain
,
447 st
->channels_cfg
[index
].datarate
);
451 ret
= pm_runtime_resume_and_get(dev
);
455 return i2c_smbus_write_byte(st
->client
, ADS1119_CMD_START_SYNC
);
458 static int ads1119_triggered_buffer_postdisable(struct iio_dev
*indio_dev
)
460 struct ads1119_state
*st
= iio_priv(indio_dev
);
461 struct device
*dev
= &st
->client
->dev
;
464 ret
= ads1119_set_conv_mode(st
, false);
468 pm_runtime_mark_last_busy(dev
);
469 pm_runtime_put_autosuspend(dev
);
474 static const struct iio_buffer_setup_ops ads1119_buffer_setup_ops
= {
475 .preenable
= ads1119_triggered_buffer_preenable
,
476 .postdisable
= ads1119_triggered_buffer_postdisable
,
477 .validate_scan_mask
= &iio_validate_scan_mask_onehot
,
480 static const struct iio_trigger_ops ads1119_trigger_ops
= {
481 .validate_device
= &iio_trigger_validate_own_device
,
484 static irqreturn_t
ads1119_irq_handler(int irq
, void *dev_id
)
486 struct iio_dev
*indio_dev
= dev_id
;
487 struct ads1119_state
*st
= iio_priv(indio_dev
);
489 if (iio_buffer_enabled(indio_dev
) && iio_trigger_using_own(indio_dev
))
490 iio_trigger_poll(indio_dev
->trig
);
492 complete(&st
->completion
);
497 static irqreturn_t
ads1119_trigger_handler(int irq
, void *private)
499 struct iio_poll_func
*pf
= private;
500 struct iio_dev
*indio_dev
= pf
->indio_dev
;
501 struct ads1119_state
*st
= iio_priv(indio_dev
);
504 s64 timestamp
__aligned(8);
509 if (!iio_trigger_using_own(indio_dev
)) {
510 index
= find_first_bit(indio_dev
->active_scan_mask
,
511 iio_get_masklength(indio_dev
));
513 ret
= ads1119_poll_data_ready(st
, &indio_dev
->channels
[index
]);
515 dev_err(&st
->client
->dev
,
516 "Failed to poll data on trigger (%d)\n", ret
);
521 ret
= i2c_smbus_read_word_swapped(st
->client
, ADS1119_CMD_RDATA
);
523 dev_err(&st
->client
->dev
,
524 "Failed to read data on trigger (%d)\n", ret
);
530 iio_push_to_buffers_with_timestamp(indio_dev
, &scan
,
531 iio_get_time_ns(indio_dev
));
533 iio_trigger_notify_done(indio_dev
->trig
);
537 static int ads1119_init(struct ads1119_state
*st
, bool vref_external
)
541 ret
= ads1119_reset(st
);
546 return ads1119_upd_cfg_reg(st
,
547 ADS1119_CONFIG_VREF_FIELD
,
548 FIELD_PREP(ADS1119_CONFIG_VREF_FIELD
,
549 ADS1119_VREF_EXTERNAL
));
553 static int ads1119_map_analog_inputs_mux(int ain_pos
, int ain_neg
,
556 if (ain_pos
>= ADS1119_MAX_SINGLE_CHANNELS
)
560 return ADS1119_MUX_AIN0
+ ain_pos
;
562 if (ain_pos
== 0 && ain_neg
== 1)
563 return ADS1119_MUX_AIN0_AIN1
;
564 else if (ain_pos
== 1 && ain_neg
== 2)
565 return ADS1119_MUX_AIN1_AIN2
;
566 else if (ain_pos
== 2 && ain_neg
== 3)
567 return ADS1119_MUX_AIN2_AIN3
;
572 static int ads1119_alloc_and_config_channels(struct iio_dev
*indio_dev
)
574 const struct iio_chan_spec ads1119_channel
=
575 (const struct iio_chan_spec
) {
578 .info_mask_separate
= BIT(IIO_CHAN_INFO_RAW
) |
579 BIT(IIO_CHAN_INFO_SCALE
) |
580 BIT(IIO_CHAN_INFO_OFFSET
) |
581 BIT(IIO_CHAN_INFO_SAMP_FREQ
),
582 .info_mask_shared_by_all_available
=
583 BIT(IIO_CHAN_INFO_SCALE
) |
584 BIT(IIO_CHAN_INFO_SAMP_FREQ
),
589 .endianness
= IIO_CPU
,
592 const struct iio_chan_spec ads1119_ts
= IIO_CHAN_SOFT_TIMESTAMP(0);
593 struct ads1119_state
*st
= iio_priv(indio_dev
);
594 struct iio_chan_spec
*iio_channels
, *chan
;
595 struct device
*dev
= &st
->client
->dev
;
596 unsigned int num_channels
, i
;
601 st
->num_channels_cfg
= device_get_child_node_count(dev
);
602 if (st
->num_channels_cfg
> ADS1119_MAX_CHANNELS
)
603 return dev_err_probe(dev
, -EINVAL
,
604 "Too many channels %d, max is %d\n",
605 st
->num_channels_cfg
,
606 ADS1119_MAX_CHANNELS
);
608 st
->channels_cfg
= devm_kcalloc(dev
, st
->num_channels_cfg
,
609 sizeof(*st
->channels_cfg
), GFP_KERNEL
);
610 if (!st
->channels_cfg
)
613 /* Allocate one more iio channel for the timestamp */
614 num_channels
= st
->num_channels_cfg
+ 1;
615 iio_channels
= devm_kcalloc(dev
, num_channels
, sizeof(*iio_channels
),
622 device_for_each_child_node_scoped(dev
, child
) {
623 chan
= &iio_channels
[i
];
625 differential
= fwnode_property_present(child
, "diff-channels");
627 ret
= fwnode_property_read_u32_array(child
,
631 ret
= fwnode_property_read_u32(child
, "single-channel",
635 return dev_err_probe(dev
, ret
,
636 "Failed to get channel property\n");
638 ret
= ads1119_map_analog_inputs_mux(ain
[0], ain
[1],
641 return dev_err_probe(dev
, ret
,
642 "Invalid channel value\n");
644 st
->channels_cfg
[i
].mux
= ret
;
645 st
->channels_cfg
[i
].gain
= ADS1119_DEFAULT_GAIN
;
646 st
->channels_cfg
[i
].datarate
= ADS1119_DEFAULT_DATARATE
;
648 *chan
= ads1119_channel
;
649 chan
->channel
= ain
[0];
651 chan
->scan_index
= i
;
654 chan
->channel2
= ain
[1];
655 chan
->differential
= 1;
658 dev_dbg(dev
, "channel: index %d, mux %d\n", i
,
659 st
->channels_cfg
[i
].mux
);
664 iio_channels
[i
] = ads1119_ts
;
665 iio_channels
[i
].address
= i
;
666 iio_channels
[i
].scan_index
= i
;
668 indio_dev
->channels
= iio_channels
;
669 indio_dev
->num_channels
= num_channels
;
674 static void ads1119_powerdown(void *data
)
676 struct ads1119_state
*st
= data
;
678 i2c_smbus_write_byte(st
->client
, ADS1119_CMD_POWERDOWN
);
681 static int ads1119_probe(struct i2c_client
*client
)
683 struct iio_dev
*indio_dev
;
684 struct ads1119_state
*st
;
685 struct device
*dev
= &client
->dev
;
686 bool vref_external
= true;
689 indio_dev
= devm_iio_device_alloc(dev
, sizeof(*st
));
691 return dev_err_probe(dev
, -ENOMEM
,
692 "Failed to allocate IIO device\n");
694 st
= iio_priv(indio_dev
);
697 indio_dev
->name
= "ads1119";
698 indio_dev
->info
= &ads1119_info
;
699 indio_dev
->modes
= INDIO_DIRECT_MODE
;
701 i2c_set_clientdata(client
, indio_dev
);
703 ret
= devm_regulator_bulk_get_enable(dev
,
704 ARRAY_SIZE(ads1119_power_supplies
),
705 ads1119_power_supplies
);
707 return dev_err_probe(dev
, ret
,
708 "Failed to get and enable supplies\n");
710 st
->vref_uV
= devm_regulator_get_enable_read_voltage(dev
, "vref");
711 if (st
->vref_uV
== -ENODEV
) {
712 vref_external
= false;
713 st
->vref_uV
= ADS1119_VREF_INTERNAL_VAL
;
714 } else if (st
->vref_uV
< 0) {
715 return dev_err_probe(dev
, st
->vref_uV
, "Failed to get vref\n");
718 st
->reset_gpio
= devm_gpiod_get_optional(dev
, "reset", GPIOD_OUT_LOW
);
719 if (IS_ERR(st
->reset_gpio
))
720 return dev_err_probe(dev
, PTR_ERR(st
->reset_gpio
),
721 "Failed to get reset gpio\n");
723 ret
= ads1119_alloc_and_config_channels(indio_dev
);
727 init_completion(&st
->completion
);
729 ret
= devm_iio_triggered_buffer_setup(dev
, indio_dev
, NULL
,
730 ads1119_trigger_handler
,
731 &ads1119_buffer_setup_ops
);
733 return dev_err_probe(dev
, ret
, "Failed to setup IIO buffer\n");
735 if (client
->irq
> 0) {
736 ret
= devm_request_threaded_irq(dev
, client
->irq
,
739 "ads1119", indio_dev
);
741 return dev_err_probe(dev
, ret
,
742 "Failed to allocate irq\n");
744 st
->trig
= devm_iio_trigger_alloc(dev
, "%s-dev%d",
746 iio_device_id(indio_dev
));
748 return dev_err_probe(dev
, -ENOMEM
,
749 "Failed to allocate IIO trigger\n");
751 st
->trig
->ops
= &ads1119_trigger_ops
;
752 iio_trigger_set_drvdata(st
->trig
, indio_dev
);
754 ret
= devm_iio_trigger_register(dev
, st
->trig
);
756 return dev_err_probe(dev
, ret
,
757 "Failed to register IIO trigger\n");
760 ret
= ads1119_init(st
, vref_external
);
762 return dev_err_probe(dev
, ret
,
763 "Failed to initialize device\n");
765 pm_runtime_set_autosuspend_delay(dev
, ADS1119_SUSPEND_DELAY
);
766 pm_runtime_use_autosuspend(dev
);
767 pm_runtime_mark_last_busy(dev
);
768 pm_runtime_set_active(dev
);
770 ret
= devm_pm_runtime_enable(dev
);
772 return dev_err_probe(dev
, ret
, "Failed to enable pm runtime\n");
774 ret
= devm_add_action_or_reset(dev
, ads1119_powerdown
, st
);
776 return dev_err_probe(dev
, ret
,
777 "Failed to add powerdown action\n");
779 return devm_iio_device_register(dev
, indio_dev
);
782 static int ads1119_runtime_suspend(struct device
*dev
)
784 struct iio_dev
*indio_dev
= i2c_get_clientdata(to_i2c_client(dev
));
785 struct ads1119_state
*st
= iio_priv(indio_dev
);
787 return i2c_smbus_write_byte(st
->client
, ADS1119_CMD_POWERDOWN
);
791 * The ADS1119 does not require a resume function because it automatically
792 * powers on after a reset.
793 * After a power down command, the ADS1119 can still communicate but turns off
794 * its analog parts. To resume from power down, the device will power up again
795 * upon receiving a start/sync command.
797 static DEFINE_RUNTIME_DEV_PM_OPS(ads1119_pm_ops
, ads1119_runtime_suspend
,
800 static const struct of_device_id __maybe_unused ads1119_of_match
[] = {
801 { .compatible
= "ti,ads1119" },
804 MODULE_DEVICE_TABLE(of
, ads1119_of_match
);
806 static const struct i2c_device_id ads1119_id
[] = {
810 MODULE_DEVICE_TABLE(i2c
, ads1119_id
);
812 static struct i2c_driver ads1119_driver
= {
815 .of_match_table
= ads1119_of_match
,
816 .pm
= pm_ptr(&ads1119_pm_ops
),
818 .probe
= ads1119_probe
,
819 .id_table
= ads1119_id
,
821 module_i2c_driver(ads1119_driver
);
823 MODULE_AUTHOR("João Paulo Gonçalves <joao.goncalves@toradex.com>");
824 MODULE_DESCRIPTION("Texas Instruments ADS1119 ADC Driver");
825 MODULE_LICENSE("GPL");