Commit 77c5a7f5 authored by Ricardo Ribalda Delgado's avatar Ricardo Ribalda Delgado Committed by Jonathan Cameron

iio: adc: ad7476: Add support for TI ADS786X ADCs

Add support for Texas Instruments ADS7866, ADS7867 and ADS7868
8/10/12 bit Single channel ADC.

Datasheet: http://www.ti.com/lit/ds/symlink/ads7868.pdfSigned-off-by: default avatarRicardo Ribalda Delgado <ricardo@ribalda.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent e9517dff
...@@ -57,14 +57,17 @@ config AD7298 ...@@ -57,14 +57,17 @@ config AD7298
module will be called ad7298. module will be called ad7298.
config AD7476 config AD7476
tristate "Analog Devices AD7476 and similar 1-channel ADCs driver" tristate "Analog Devices AD7476 1-channel ADCs driver and other similar devices from AD an TI"
depends on SPI depends on SPI
select IIO_BUFFER select IIO_BUFFER
select IIO_TRIGGERED_BUFFER select IIO_TRIGGERED_BUFFER
help help
Say yes here to build support for Analog Devices AD7273, AD7274, AD7276, Say yes here to build support for the following SPI analog to
AD7277, AD7278, AD7475, AD7476, AD7477, AD7478, AD7466, AD7467, AD7468, digital converters (ADCs):
AD7495, AD7910, AD7920, AD7920 SPI analog to digital converters (ADC). Analog Devices: AD7273, AD7274, AD7276, AD7277, AD7278, AD7475,
AD7476, AD7477, AD7478, AD7466, AD7467, AD7468, AD7495, AD7910,
AD7920.
Texas Instruments: ADS7866, ADS7867, ADS7868.
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called ad7476. module will be called ad7476.
......
...@@ -59,6 +59,9 @@ enum ad7476_supported_device_ids { ...@@ -59,6 +59,9 @@ enum ad7476_supported_device_ids {
ID_ADC081S, ID_ADC081S,
ID_ADC101S, ID_ADC101S,
ID_ADC121S, ID_ADC121S,
ID_ADS7866,
ID_ADS7867,
ID_ADS7868,
}; };
static irqreturn_t ad7476_trigger_handler(int irq, void *p) static irqreturn_t ad7476_trigger_handler(int irq, void *p)
...@@ -157,6 +160,8 @@ static int ad7476_read_raw(struct iio_dev *indio_dev, ...@@ -157,6 +160,8 @@ static int ad7476_read_raw(struct iio_dev *indio_dev,
#define AD7940_CHAN(bits) _AD7476_CHAN((bits), 15 - (bits), \ #define AD7940_CHAN(bits) _AD7476_CHAN((bits), 15 - (bits), \
BIT(IIO_CHAN_INFO_RAW)) BIT(IIO_CHAN_INFO_RAW))
#define AD7091R_CHAN(bits) _AD7476_CHAN((bits), 16 - (bits), 0) #define AD7091R_CHAN(bits) _AD7476_CHAN((bits), 16 - (bits), 0)
#define ADS786X_CHAN(bits) _AD7476_CHAN((bits), 12 - (bits), \
BIT(IIO_CHAN_INFO_RAW))
static const struct ad7476_chip_info ad7476_chip_info_tbl[] = { static const struct ad7476_chip_info ad7476_chip_info_tbl[] = {
[ID_AD7091R] = { [ID_AD7091R] = {
...@@ -209,6 +214,18 @@ static const struct ad7476_chip_info ad7476_chip_info_tbl[] = { ...@@ -209,6 +214,18 @@ static const struct ad7476_chip_info ad7476_chip_info_tbl[] = {
.channel[0] = ADC081S_CHAN(12), .channel[0] = ADC081S_CHAN(12),
.channel[1] = IIO_CHAN_SOFT_TIMESTAMP(1), .channel[1] = IIO_CHAN_SOFT_TIMESTAMP(1),
}, },
[ID_ADS7866] = {
.channel[0] = ADS786X_CHAN(12),
.channel[1] = IIO_CHAN_SOFT_TIMESTAMP(1),
},
[ID_ADS7867] = {
.channel[0] = ADS786X_CHAN(10),
.channel[1] = IIO_CHAN_SOFT_TIMESTAMP(1),
},
[ID_ADS7868] = {
.channel[0] = ADS786X_CHAN(8),
.channel[1] = IIO_CHAN_SOFT_TIMESTAMP(1),
},
}; };
static const struct iio_info ad7476_info = { static const struct iio_info ad7476_info = {
...@@ -314,6 +331,9 @@ static const struct spi_device_id ad7476_id[] = { ...@@ -314,6 +331,9 @@ static const struct spi_device_id ad7476_id[] = {
{"adc081s", ID_ADC081S}, {"adc081s", ID_ADC081S},
{"adc101s", ID_ADC101S}, {"adc101s", ID_ADC101S},
{"adc121s", ID_ADC121S}, {"adc121s", ID_ADC121S},
{"ads7866", ID_ADS7866},
{"ads7867", ID_ADS7867},
{"ads7868", ID_ADS7868},
{} {}
}; };
MODULE_DEVICE_TABLE(spi, ad7476_id); MODULE_DEVICE_TABLE(spi, ad7476_id);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment