Re: [PATCH v7 6/6] iio: adc: ad7606: add gain calibration support
From: David Lechner <dlechner@baylibre.com>
Date: 2025-05-30 17:19:56
Also in:
linux-iio, lkml
On 5/26/25 5:03 AM, Angelo Dureghello wrote:
From: Angelo Dureghello <adureghello@baylibre.com> Add gain calibration support, using resistor values set on devicetree, values to be set accordingly with ADC external RFilter, as explained in the ad7606c-16 datasheet, rev0, page 37. Usage example in the fdt yaml documentation. Tested-by: David Lechner <dlechner@baylibre.com> Reviewed-by: Nuno Sá <nuno.sa@analog.com> Signed-off-by: Angelo Dureghello <adureghello@baylibre.com> ---
...
+static int ad7606_chan_calib_gain_setup(struct iio_dev *indio_dev)
+{
+ struct ad7606_state *st = iio_priv(indio_dev);
+ unsigned int num_channels = st->chip_info->num_adc_channels;
+ struct device *dev = st->dev;
+ int ret;
+
+ device_for_each_child_node_scoped(dev, child) {
+ u32 reg, r_gain;
+
+ ret = fwnode_property_read_u32(child, "reg", ®);
+ if (ret)
+ return ret;
+
+ /* Chan reg is a 1-based index. */
+ if (reg < 1 || reg > num_channels)
+ return ret;Shouldn't this return -EINVAL? Otherwise, it will return success for an out of range reg number and skip any addition child nodes.
+ + r_gain = 0; + ret = fwnode_property_read_u32(child, "adi,rfilter-ohms", + &r_gain); + if (r_gain > AD7606_CALIB_GAIN_MAX) + return -EINVAL; + + ret = st->bops->reg_write(st, AD7606_CALIB_GAIN(reg - 1), + DIV_ROUND_CLOSEST(r_gain, AD7606_CALIB_GAIN_STEP)); + if (ret) + return ret; + } + + return 0; +} +