Commit 07a28874 authored by Uwe Kleine-König's avatar Uwe Kleine-König Committed by Jonathan Cameron
Browse files

iio: adc: ad_sigma_delta: Store information about reset sequence length



The various chips can be reset using a sequence of SPI transfers with
MOSI = 1. The length of such a sequence varies from chip to chip. Store
that length in struct ad_sigma_delta_info and replace the respective
parameter to ad_sd_reset() with it.

Note the ad7192 used to pass 48 as length but the documentation
specifies 40 as the required length. Assuming the latter is right.
(Using a too long sequence doesn't hurt apart from using a longer spi
transfer than necessary, so this is no relevant fix.)

The motivation for storing this information is that this is useful to
clear a pending R̅D̅Y̅ signal in the next change.

Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@baylibre.com>
Link: https://patch.msgid.link/9750db62fce638bf140ff48172c23bff7f785e5b.1733504533.git.u.kleine-koenig@baylibre.com


Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent f522589c
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -571,6 +571,7 @@ static const struct ad_sigma_delta_info ad7124_sigma_delta_info = {
	.data_reg = AD7124_DATA,
	.num_slots = 8,
	.irq_flags = IRQF_TRIGGER_FALLING,
	.num_resetclks = 64,
};

static int ad7124_read_raw(struct iio_dev *indio_dev,
@@ -756,7 +757,7 @@ static int ad7124_soft_reset(struct ad7124_state *st)
	unsigned int readval, timeout;
	int ret;

	ret = ad_sd_reset(&st->sd, 64);
	ret = ad_sd_reset(&st->sd);
	if (ret < 0)
		return ret;

+1 −0
Original line number Diff line number Diff line
@@ -763,6 +763,7 @@ static struct ad_sigma_delta_info ad7173_sigma_delta_info = {
	.read_mask = BIT(6),
	.status_ch_mask = GENMASK(3, 0),
	.data_reg = AD7173_REG_DATA,
	.num_resetclks = 64,
};

static int ad7173_setup(struct iio_dev *indio_dev)
+3 −1
Original line number Diff line number Diff line
@@ -361,6 +361,7 @@ static const struct ad_sigma_delta_info ad7192_sigma_delta_info = {
	.status_ch_mask = GENMASK(3, 0),
	.num_slots = 4,
	.irq_flags = IRQF_TRIGGER_FALLING,
	.num_resetclks = 40,
};

static const struct ad_sigma_delta_info ad7194_sigma_delta_info = {
@@ -373,6 +374,7 @@ static const struct ad_sigma_delta_info ad7194_sigma_delta_info = {
	.read_mask = BIT(6),
	.status_ch_mask = GENMASK(3, 0),
	.irq_flags = IRQF_TRIGGER_FALLING,
	.num_resetclks = 40,
};

static const struct ad_sd_calib_data ad7192_calib_arr[8] = {
@@ -565,7 +567,7 @@ static int ad7192_setup(struct iio_dev *indio_dev, struct device *dev)
	int i, ret, id;

	/* reset the serial interface */
	ret = ad_sd_reset(&st->sd, 48);
	ret = ad_sd_reset(&st->sd);
	if (ret < 0)
		return ret;
	usleep_range(500, 1000); /* Wait for at least 500us */
+1 −0
Original line number Diff line number Diff line
@@ -254,6 +254,7 @@ static const struct ad_sigma_delta_info ad7791_sigma_delta_info = {
	.addr_shift = 4,
	.read_mask = BIT(3),
	.irq_flags = IRQF_TRIGGER_FALLING,
	.num_resetclks = 32,
};

static int ad7791_read_raw(struct iio_dev *indio_dev,
+2 −1
Original line number Diff line number Diff line
@@ -206,6 +206,7 @@ static const struct ad_sigma_delta_info ad7793_sigma_delta_info = {
	.addr_shift = 3,
	.read_mask = BIT(6),
	.irq_flags = IRQF_TRIGGER_FALLING,
	.num_resetclks = 32,
};

static const struct ad_sd_calib_data ad7793_calib_arr[6] = {
@@ -265,7 +266,7 @@ static int ad7793_setup(struct iio_dev *indio_dev,
		return ret;

	/* reset the serial interface */
	ret = ad_sd_reset(&st->sd, 32);
	ret = ad_sd_reset(&st->sd);
	if (ret < 0)
		goto out;
	usleep_range(500, 2000); /* Wait for at least 500us */
Loading