mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-06 05:13:18 +00:00
iio: adc: ad7173: add support for ad4113
This commit adds support for the AD4113 ADC. The AD4113 is a low power, low noise, 16-bit, Σ-Δ analog-to-digital converter (ADC) that integrates an analog front end (AFE) for four fully differential or eight single-ended inputs. Reviewed-by: Nuno Sa <nuno.sa@analog.com> Signed-off-by: Dumitru Ceclan <dumitru.ceclan@analog.com> Link: https://patch.msgid.link/20240812-ad4113-v3-3-046e785dd253@analog.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
8a9687b30a
commit
819b69abb1
@ -3,7 +3,7 @@
|
||||
* AD717x and AD411x family SPI ADC driver
|
||||
*
|
||||
* Supported devices:
|
||||
* AD4111/AD4112/AD4114/AD4115/AD4116
|
||||
* AD4111/AD4112/AD4113/AD4114/AD4115/AD4116
|
||||
* AD7172-2/AD7172-4/AD7173-8/AD7175-2
|
||||
* AD7175-8/AD7176-2/AD7177-2
|
||||
*
|
||||
@ -84,6 +84,7 @@
|
||||
#define AD4111_ID AD7173_ID
|
||||
#define AD4112_ID AD7173_ID
|
||||
#define AD4114_ID AD7173_ID
|
||||
#define AD4113_ID 0x31d0
|
||||
#define AD4116_ID 0x34d0
|
||||
#define AD4115_ID 0x38d0
|
||||
#define AD7175_8_ID 0x3cd0
|
||||
@ -170,6 +171,7 @@ struct ad7173_device_info {
|
||||
bool has_temp;
|
||||
/* ((AVDD1 − AVSS)/5) */
|
||||
bool has_pow_supply_monitoring;
|
||||
bool data_reg_only_16bit;
|
||||
bool has_input_buf;
|
||||
bool has_int_ref;
|
||||
bool has_ref2;
|
||||
@ -294,6 +296,24 @@ static const struct ad7173_device_info ad4112_device_info = {
|
||||
.num_sinc5_data_rates = ARRAY_SIZE(ad7173_sinc5_data_rates),
|
||||
};
|
||||
|
||||
static const struct ad7173_device_info ad4113_device_info = {
|
||||
.name = "ad4113",
|
||||
.id = AD4113_ID,
|
||||
.num_voltage_in_div = 8,
|
||||
.num_channels = 16,
|
||||
.num_configs = 8,
|
||||
.num_voltage_in = 8,
|
||||
.num_gpios = 2,
|
||||
.data_reg_only_16bit = true,
|
||||
.higher_gpio_bits = true,
|
||||
.has_vincom_input = true,
|
||||
.has_input_buf = true,
|
||||
.has_int_ref = true,
|
||||
.clock = 2 * HZ_PER_MHZ,
|
||||
.sinc5_data_rates = ad7173_sinc5_data_rates,
|
||||
.num_sinc5_data_rates = ARRAY_SIZE(ad7173_sinc5_data_rates),
|
||||
};
|
||||
|
||||
static const struct ad7173_device_info ad4114_device_info = {
|
||||
.name = "ad4114",
|
||||
.id = AD4114_ID,
|
||||
@ -985,6 +1005,13 @@ static const struct iio_info ad7173_info = {
|
||||
.update_scan_mode = ad7173_update_scan_mode,
|
||||
};
|
||||
|
||||
static const struct iio_scan_type ad4113_scan_type = {
|
||||
.sign = 'u',
|
||||
.realbits = 16,
|
||||
.storagebits = 16,
|
||||
.endianness = IIO_BE,
|
||||
};
|
||||
|
||||
static const struct iio_chan_spec ad7173_channel_template = {
|
||||
.type = IIO_VOLTAGE,
|
||||
.indexed = 1,
|
||||
@ -1226,6 +1253,8 @@ static int ad7173_fw_parse_channel_config(struct iio_dev *indio_dev)
|
||||
chan_st_priv->cfg.input_buf = st->info->has_input_buf;
|
||||
chan_st_priv->cfg.ref_sel = AD7173_SETUP_REF_SEL_INT_REF;
|
||||
st->adc_mode |= AD7173_ADC_MODE_REF_EN;
|
||||
if (st->info->data_reg_only_16bit)
|
||||
chan_arr[chan_index].scan_type = ad4113_scan_type;
|
||||
|
||||
chan_index++;
|
||||
}
|
||||
@ -1306,6 +1335,9 @@ static int ad7173_fw_parse_channel_config(struct iio_dev *indio_dev)
|
||||
chan_st_priv->ain = AD7173_CH_ADDRESS(ain[0], ain[1]);
|
||||
}
|
||||
|
||||
if (st->info->data_reg_only_16bit)
|
||||
chan_arr[chan_index].scan_type = ad4113_scan_type;
|
||||
|
||||
chan_index++;
|
||||
}
|
||||
return 0;
|
||||
@ -1434,6 +1466,7 @@ static int ad7173_probe(struct spi_device *spi)
|
||||
static const struct of_device_id ad7173_of_match[] = {
|
||||
{ .compatible = "adi,ad4111", .data = &ad4111_device_info },
|
||||
{ .compatible = "adi,ad4112", .data = &ad4112_device_info },
|
||||
{ .compatible = "adi,ad4113", .data = &ad4113_device_info },
|
||||
{ .compatible = "adi,ad4114", .data = &ad4114_device_info },
|
||||
{ .compatible = "adi,ad4115", .data = &ad4115_device_info },
|
||||
{ .compatible = "adi,ad4116", .data = &ad4116_device_info },
|
||||
@ -1451,6 +1484,7 @@ MODULE_DEVICE_TABLE(of, ad7173_of_match);
|
||||
static const struct spi_device_id ad7173_id_table[] = {
|
||||
{ "ad4111", (kernel_ulong_t)&ad4111_device_info },
|
||||
{ "ad4112", (kernel_ulong_t)&ad4112_device_info },
|
||||
{ "ad4113", (kernel_ulong_t)&ad4113_device_info },
|
||||
{ "ad4114", (kernel_ulong_t)&ad4114_device_info },
|
||||
{ "ad4115", (kernel_ulong_t)&ad4115_device_info },
|
||||
{ "ad4116", (kernel_ulong_t)&ad4116_device_info },
|
||||
|
Loading…
Reference in New Issue
Block a user