Message ID | 20240527-ad4111-v3-4-7e9eddbbd3eb@analog.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add support for AD411x | expand |
On Mon, 2024-05-27 at 20:02 +0300, Dumitru Ceclan via B4 Relay wrote: > From: Dumitru Ceclan <dumitru.ceclan@analog.com> > > 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> > drivers/iio/adc/ad7173.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/drivers/iio/adc/ad7173.c b/drivers/iio/adc/ad7173.c > index 8a53821c8e58..106a50dbabd4 100644 > --- a/drivers/iio/adc/ad7173.c > +++ b/drivers/iio/adc/ad7173.c > @@ -65,6 +65,10 @@ > FIELD_PREP(AD7173_CH_SETUP_AINNEG_MASK, neg)) > #define AD7173_AIN_TEMP_POS 17 > #define AD7173_AIN_TEMP_NEG 18 > +#define AD7173_AIN_COM_IN_POS 19 > +#define AD7173_AIN_COM_IN_NEG 20 > +#define AD7173_AIN_REF_POS 21 > +#define AD7173_AIN_REF_NEG 22 > > #define AD7172_2_ID 0x00d0 > #define AD7175_ID 0x0cd0 > @@ -145,6 +149,8 @@ struct ad7173_device_info { > unsigned int id; > char *name; > bool has_temp; > + /* ((AVDD1 − AVSS)/5) */ > + bool has_common_input; > bool has_input_buf; > bool has_int_ref; > bool has_ref2; > @@ -215,6 +221,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { > .has_temp = true, > .has_input_buf = true, > .has_int_ref = true, > + .has_common_input = true, > .clock = 2 * HZ_PER_MHZ, > .sinc5_data_rates = ad7173_sinc5_data_rates, > .num_sinc5_data_rates = ARRAY_SIZE(ad7173_sinc5_data_rates), > @@ -229,6 +236,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { > .has_temp = false, > .has_input_buf = true, > .has_ref2 = true, > + .has_common_input = true, > .clock = 2 * HZ_PER_MHZ, > .sinc5_data_rates = ad7173_sinc5_data_rates, > .num_sinc5_data_rates = ARRAY_SIZE(ad7173_sinc5_data_rates), > @@ -244,6 +252,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { > .has_input_buf = true, > .has_int_ref = true, > .has_ref2 = true, > + .has_common_input = false, > .clock = 2 * HZ_PER_MHZ, > .sinc5_data_rates = ad7173_sinc5_data_rates, > .num_sinc5_data_rates = ARRAY_SIZE(ad7173_sinc5_data_rates), > @@ -258,6 +267,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { > .has_temp = true, > .has_input_buf = true, > .has_int_ref = true, > + .has_common_input = true, > .clock = 16 * HZ_PER_MHZ, > .sinc5_data_rates = ad7175_sinc5_data_rates, > .num_sinc5_data_rates = ARRAY_SIZE(ad7175_sinc5_data_rates), > @@ -273,6 +283,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { > .has_input_buf = true, > .has_int_ref = true, > .has_ref2 = true, > + .has_common_input = true, > .clock = 16 * HZ_PER_MHZ, > .sinc5_data_rates = ad7175_sinc5_data_rates, > .num_sinc5_data_rates = ARRAY_SIZE(ad7175_sinc5_data_rates), > @@ -287,6 +298,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { > .has_temp = false, > .has_input_buf = false, > .has_int_ref = true, > + .has_common_input = false, > .clock = 16 * HZ_PER_MHZ, > .sinc5_data_rates = ad7175_sinc5_data_rates, > .num_sinc5_data_rates = ARRAY_SIZE(ad7175_sinc5_data_rates), > @@ -301,6 +313,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { > .has_temp = true, > .has_input_buf = true, > .has_int_ref = true, > + .has_common_input = true, > .clock = 16 * HZ_PER_MHZ, > .odr_start_value = AD7177_ODR_START_VALUE, > .sinc5_data_rates = ad7175_sinc5_data_rates, > @@ -915,6 +928,14 @@ static int ad7173_validate_voltage_ain_inputs(struct > ad7173_state *st, > if (ain[i] < st->info->num_inputs) > continue; > > + if (ain[i] == AD7173_AIN_REF_POS || ain[i] == AD7173_AIN_REF_NEG) > + continue; > + > + if ((ain[i] == AD7173_AIN_COM_IN_POS || > + ain[i] == AD7173_AIN_COM_IN_NEG) && > + st->info->has_common_input) > + continue; > + > return dev_err_probe(dev, -EINVAL, > "Input pin number out of range for pair (%d %d).\n", > ain[0], ain[1]); >
diff --git a/drivers/iio/adc/ad7173.c b/drivers/iio/adc/ad7173.c index 8a53821c8e58..106a50dbabd4 100644 --- a/drivers/iio/adc/ad7173.c +++ b/drivers/iio/adc/ad7173.c @@ -65,6 +65,10 @@ FIELD_PREP(AD7173_CH_SETUP_AINNEG_MASK, neg)) #define AD7173_AIN_TEMP_POS 17 #define AD7173_AIN_TEMP_NEG 18 +#define AD7173_AIN_COM_IN_POS 19 +#define AD7173_AIN_COM_IN_NEG 20 +#define AD7173_AIN_REF_POS 21 +#define AD7173_AIN_REF_NEG 22 #define AD7172_2_ID 0x00d0 #define AD7175_ID 0x0cd0 @@ -145,6 +149,8 @@ struct ad7173_device_info { unsigned int id; char *name; bool has_temp; + /* ((AVDD1 − AVSS)/5) */ + bool has_common_input; bool has_input_buf; bool has_int_ref; bool has_ref2; @@ -215,6 +221,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { .has_temp = true, .has_input_buf = true, .has_int_ref = true, + .has_common_input = true, .clock = 2 * HZ_PER_MHZ, .sinc5_data_rates = ad7173_sinc5_data_rates, .num_sinc5_data_rates = ARRAY_SIZE(ad7173_sinc5_data_rates), @@ -229,6 +236,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { .has_temp = false, .has_input_buf = true, .has_ref2 = true, + .has_common_input = true, .clock = 2 * HZ_PER_MHZ, .sinc5_data_rates = ad7173_sinc5_data_rates, .num_sinc5_data_rates = ARRAY_SIZE(ad7173_sinc5_data_rates), @@ -244,6 +252,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { .has_input_buf = true, .has_int_ref = true, .has_ref2 = true, + .has_common_input = false, .clock = 2 * HZ_PER_MHZ, .sinc5_data_rates = ad7173_sinc5_data_rates, .num_sinc5_data_rates = ARRAY_SIZE(ad7173_sinc5_data_rates), @@ -258,6 +267,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { .has_temp = true, .has_input_buf = true, .has_int_ref = true, + .has_common_input = true, .clock = 16 * HZ_PER_MHZ, .sinc5_data_rates = ad7175_sinc5_data_rates, .num_sinc5_data_rates = ARRAY_SIZE(ad7175_sinc5_data_rates), @@ -273,6 +283,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { .has_input_buf = true, .has_int_ref = true, .has_ref2 = true, + .has_common_input = true, .clock = 16 * HZ_PER_MHZ, .sinc5_data_rates = ad7175_sinc5_data_rates, .num_sinc5_data_rates = ARRAY_SIZE(ad7175_sinc5_data_rates), @@ -287,6 +298,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { .has_temp = false, .has_input_buf = false, .has_int_ref = true, + .has_common_input = false, .clock = 16 * HZ_PER_MHZ, .sinc5_data_rates = ad7175_sinc5_data_rates, .num_sinc5_data_rates = ARRAY_SIZE(ad7175_sinc5_data_rates), @@ -301,6 +313,7 @@ static const struct ad7173_device_info ad7173_device_info[] = { .has_temp = true, .has_input_buf = true, .has_int_ref = true, + .has_common_input = true, .clock = 16 * HZ_PER_MHZ, .odr_start_value = AD7177_ODR_START_VALUE, .sinc5_data_rates = ad7175_sinc5_data_rates, @@ -915,6 +928,14 @@ static int ad7173_validate_voltage_ain_inputs(struct ad7173_state *st, if (ain[i] < st->info->num_inputs) continue; + if (ain[i] == AD7173_AIN_REF_POS || ain[i] == AD7173_AIN_REF_NEG) + continue; + + if ((ain[i] == AD7173_AIN_COM_IN_POS || + ain[i] == AD7173_AIN_COM_IN_NEG) && + st->info->has_common_input) + continue; + return dev_err_probe(dev, -EINVAL, "Input pin number out of range for pair (%d %d).\n", ain[0], ain[1]);