mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-27 16:24:08 -05:00
iio: adc: ad7173: add support for special inputs
Add support for selecting REF+ and REF- inputs on all models. Add support for selecting ((AVDD1 − AVSS)/5) inputs on supported models. Signed-off-by: Dumitru Ceclan <dumitru.ceclan@analog.com> Reviewed-by: Nuno Sa <nuno.sa@analog.com> Reviewed-by: David Lechner <dlechner@baylibre.com> Link: https://patch.msgid.link/20240607-ad4111-v7-6-97e3855900a0@analog.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
committed by
Jonathan Cameron
parent
fc5cdff065
commit
ff05b4a86d
@@ -66,6 +66,13 @@
|
||||
FIELD_PREP(AD7173_CH_SETUP_AINNEG_MASK, neg))
|
||||
#define AD7173_AIN_TEMP_POS 17
|
||||
#define AD7173_AIN_TEMP_NEG 18
|
||||
#define AD7173_AIN_POW_MON_POS 19
|
||||
#define AD7173_AIN_POW_MON_NEG 20
|
||||
#define AD7173_AIN_REF_POS 21
|
||||
#define AD7173_AIN_REF_NEG 22
|
||||
|
||||
#define AD7173_IS_REF_INPUT(x) ((x) == AD7173_AIN_REF_POS || \
|
||||
(x) == AD7173_AIN_REF_NEG)
|
||||
|
||||
#define AD7172_2_ID 0x00d0
|
||||
#define AD7175_ID 0x0cd0
|
||||
@@ -146,6 +153,8 @@ struct ad7173_device_info {
|
||||
unsigned int id;
|
||||
char *name;
|
||||
bool has_temp;
|
||||
/* ((AVDD1 − AVSS)/5) */
|
||||
bool has_pow_supply_monitoring;
|
||||
bool has_input_buf;
|
||||
bool has_int_ref;
|
||||
bool has_ref2;
|
||||
@@ -216,6 +225,7 @@ static const struct ad7173_device_info ad7173_device_info[] = {
|
||||
.has_temp = true,
|
||||
.has_input_buf = true,
|
||||
.has_int_ref = true,
|
||||
.has_pow_supply_monitoring = true,
|
||||
.clock = 2 * HZ_PER_MHZ,
|
||||
.sinc5_data_rates = ad7173_sinc5_data_rates,
|
||||
.num_sinc5_data_rates = ARRAY_SIZE(ad7173_sinc5_data_rates),
|
||||
@@ -230,6 +240,7 @@ static const struct ad7173_device_info ad7173_device_info[] = {
|
||||
.has_temp = false,
|
||||
.has_input_buf = true,
|
||||
.has_ref2 = true,
|
||||
.has_pow_supply_monitoring = true,
|
||||
.clock = 2 * HZ_PER_MHZ,
|
||||
.sinc5_data_rates = ad7173_sinc5_data_rates,
|
||||
.num_sinc5_data_rates = ARRAY_SIZE(ad7173_sinc5_data_rates),
|
||||
@@ -259,6 +270,7 @@ static const struct ad7173_device_info ad7173_device_info[] = {
|
||||
.has_temp = true,
|
||||
.has_input_buf = true,
|
||||
.has_int_ref = true,
|
||||
.has_pow_supply_monitoring = true,
|
||||
.clock = 16 * HZ_PER_MHZ,
|
||||
.sinc5_data_rates = ad7175_sinc5_data_rates,
|
||||
.num_sinc5_data_rates = ARRAY_SIZE(ad7175_sinc5_data_rates),
|
||||
@@ -274,6 +286,7 @@ static const struct ad7173_device_info ad7173_device_info[] = {
|
||||
.has_input_buf = true,
|
||||
.has_int_ref = true,
|
||||
.has_ref2 = true,
|
||||
.has_pow_supply_monitoring = true,
|
||||
.clock = 16 * HZ_PER_MHZ,
|
||||
.sinc5_data_rates = ad7175_sinc5_data_rates,
|
||||
.num_sinc5_data_rates = ARRAY_SIZE(ad7175_sinc5_data_rates),
|
||||
@@ -302,6 +315,7 @@ static const struct ad7173_device_info ad7173_device_info[] = {
|
||||
.has_temp = true,
|
||||
.has_input_buf = true,
|
||||
.has_int_ref = true,
|
||||
.has_pow_supply_monitoring = true,
|
||||
.clock = 16 * HZ_PER_MHZ,
|
||||
.odr_start_value = AD7177_ODR_START_VALUE,
|
||||
.sinc5_data_rates = ad7175_sinc5_data_rates,
|
||||
@@ -910,9 +924,18 @@ static int ad7173_validate_voltage_ain_inputs(struct ad7173_state *st,
|
||||
unsigned int ain0, unsigned int ain1)
|
||||
{
|
||||
struct device *dev = &st->sd.spi->dev;
|
||||
bool special_input0, special_input1;
|
||||
|
||||
if (ain0 >= st->info->num_inputs ||
|
||||
ain1 >= st->info->num_inputs)
|
||||
/* (AVDD1-AVSS)/5 power supply monitoring */
|
||||
if (ain0 == AD7173_AIN_POW_MON_POS && ain1 == AD7173_AIN_POW_MON_NEG &&
|
||||
st->info->has_pow_supply_monitoring)
|
||||
return 0;
|
||||
|
||||
special_input0 = AD7173_IS_REF_INPUT(ain0);
|
||||
special_input1 = AD7173_IS_REF_INPUT(ain1);
|
||||
|
||||
if ((ain0 >= st->info->num_inputs && !special_input0) ||
|
||||
(ain1 >= st->info->num_inputs && !special_input1))
|
||||
return dev_err_probe(dev, -EINVAL,
|
||||
"Input pin number out of range for pair (%d %d).\n",
|
||||
ain0, ain1);
|
||||
|
||||
Reference in New Issue
Block a user