Commit 4c337de8 authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Jonathan Cameron

iio:ad7476: Add ad7940 support

The AD7940 is a single channel 14 bit ADC similar to the ADCs already supported
by the ad7476 driver, but it does have a different shift factor.
Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent ac5332b1
...@@ -37,8 +37,8 @@ config AD7476 ...@@ -37,8 +37,8 @@ config AD7476
select IIO_TRIGGERED_BUFFER select IIO_TRIGGERED_BUFFER
help help
Say yes here to build support for Analog Devices AD7475, AD7476, AD7477, Say yes here to build support for Analog Devices AD7475, AD7476, AD7477,
AD7478, AD7466, AD7467, AD7468, AD7495, AD7910, AD7920 SPI analog to AD7478, AD7466, AD7467, AD7468, AD7495, AD7910, AD7920, AD7920 SPI analog
digital converters (ADC). to digital converters (ADC).
If unsure, say N (but it's safe to say "Y"). If unsure, say N (but it's safe to say "Y").
......
...@@ -48,7 +48,8 @@ enum ad7476_supported_device_ids { ...@@ -48,7 +48,8 @@ enum ad7476_supported_device_ids {
ID_AD7466, ID_AD7466,
ID_AD7467, ID_AD7467,
ID_AD7468, ID_AD7468,
ID_AD7495 ID_AD7495,
ID_AD7940,
}; };
static irqreturn_t ad7476_trigger_handler(int irq, void *p) static irqreturn_t ad7476_trigger_handler(int irq, void *p)
...@@ -126,7 +127,7 @@ static int ad7476_read_raw(struct iio_dev *indio_dev, ...@@ -126,7 +127,7 @@ static int ad7476_read_raw(struct iio_dev *indio_dev,
return -EINVAL; return -EINVAL;
} }
#define AD7476_CHAN(bits) \ #define _AD7476_CHAN(bits, _shift) \
{ \ { \
.type = IIO_VOLTAGE, \ .type = IIO_VOLTAGE, \
.indexed = 1, \ .indexed = 1, \
...@@ -134,12 +135,16 @@ static int ad7476_read_raw(struct iio_dev *indio_dev, ...@@ -134,12 +135,16 @@ static int ad7476_read_raw(struct iio_dev *indio_dev,
IIO_CHAN_INFO_SCALE_SHARED_BIT, \ IIO_CHAN_INFO_SCALE_SHARED_BIT, \
.scan_type = { \ .scan_type = { \
.sign = 'u', \ .sign = 'u', \
.realbits = bits, \ .realbits = (bits), \
.storagebits = 16, \ .storagebits = 16, \
.shift = 13 - bits, \ .shift = (_shift), \
.endianness = IIO_BE, \
}, \ }, \
} }
#define AD7476_CHAN(bits) _AD7476_CHAN((bits), 13 - (bits))
#define AD7940_CHAN(bits) _AD7476_CHAN((bits), 15 - (bits))
static const struct ad7476_chip_info ad7476_chip_info_tbl[] = { static const struct ad7476_chip_info ad7476_chip_info_tbl[] = {
[ID_AD7466] = { [ID_AD7466] = {
.channel[0] = AD7476_CHAN(12), .channel[0] = AD7476_CHAN(12),
...@@ -158,6 +163,10 @@ static const struct ad7476_chip_info ad7476_chip_info_tbl[] = { ...@@ -158,6 +163,10 @@ static const struct ad7476_chip_info ad7476_chip_info_tbl[] = {
.channel[1] = IIO_CHAN_SOFT_TIMESTAMP(1), .channel[1] = IIO_CHAN_SOFT_TIMESTAMP(1),
.int_vref_uv = 2500000, .int_vref_uv = 2500000,
}, },
[ID_AD7940] = {
.channel[0] = AD7940_CHAN(14),
.channel[1] = IIO_CHAN_SOFT_TIMESTAMP(1),
},
}; };
static const struct iio_info ad7476_info = { static const struct iio_info ad7476_info = {
...@@ -260,6 +269,7 @@ static const struct spi_device_id ad7476_id[] = { ...@@ -260,6 +269,7 @@ static const struct spi_device_id ad7476_id[] = {
{"ad7495", ID_AD7495}, {"ad7495", ID_AD7495},
{"ad7910", ID_AD7467}, {"ad7910", ID_AD7467},
{"ad7920", ID_AD7466}, {"ad7920", ID_AD7466},
{"ad7940", ID_AD7940},
{} {}
}; };
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