Commit e7b0312c authored by Jonathan Santos's avatar Jonathan Santos Committed by Jonathan Cameron
Browse files

iio: adc: ad7768-1: refactor ad7768_write_raw()



Squash __ad7768_write_raw() back to ad7768_write_raw() to allow the
addition of new attributes without requiring a direct mode claim.

Signed-off-by: default avatarJonathan Santos <Jonathan.Santos@analog.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 404a3b4c
Loading
Loading
Loading
Loading
+26 −24
Original line number Diff line number Diff line
@@ -742,6 +742,19 @@ static int ad7768_get_filter_type_attr(struct iio_dev *dev,
	return ad7768_filter_regval_to_type[FIELD_GET(mask, mode)];
}

static int ad7768_update_dec_rate(struct iio_dev *dev, unsigned int dec_rate)
{
	struct ad7768_state *st = iio_priv(dev);
	int ret;

	ret = ad7768_configure_dig_fil(dev, st->filter_type, dec_rate);
	if (ret)
		return ret;

	/* Update sampling frequency */
	return ad7768_set_freq(st, st->samp_freq);
}

static const struct iio_enum ad7768_filter_type_iio_enum = {
	.items = ad7768_filter_enum,
	.num_items = ARRAY_SIZE(ad7768_filter_enum),
@@ -867,7 +880,7 @@ static int ad7768_read_avail(struct iio_dev *indio_dev,
	}
}

static int __ad7768_write_raw(struct iio_dev *indio_dev,
static int ad7768_write_raw(struct iio_dev *indio_dev,
			    struct iio_chan_spec const *chan,
			    int val, int val2, long info)
{
@@ -876,33 +889,22 @@ static int __ad7768_write_raw(struct iio_dev *indio_dev,

	switch (info) {
	case IIO_CHAN_INFO_SAMP_FREQ:
		return ad7768_set_freq(st, val);
		if (!iio_device_claim_direct(indio_dev))
			return -EBUSY;

	case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
		ret = ad7768_configure_dig_fil(indio_dev, st->filter_type, val);
		if (ret)
		ret = ad7768_set_freq(st, val);
		iio_device_release_direct(indio_dev);
		return ret;

		/* Update sampling frequency */
		return ad7768_set_freq(st, st->samp_freq);
	default:
		return -EINVAL;
	}
}

static int ad7768_write_raw(struct iio_dev *indio_dev,
			    struct iio_chan_spec const *chan,
			    int val, int val2, long info)
{
	int ret;

	case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
		if (!iio_device_claim_direct(indio_dev))
			return -EBUSY;

	ret = __ad7768_write_raw(indio_dev, chan, val, val2, info);
		ret = ad7768_update_dec_rate(indio_dev, val);
		iio_device_release_direct(indio_dev);

		return ret;
	default:
		return -EINVAL;
	}
}

static int ad7768_read_label(struct iio_dev *indio_dev,