Commit 1a21a984 authored by Jonathan Cameron's avatar Jonathan Cameron
Browse files

iio: adc: Switch to sparse friendly iio_device_claim/release_direct()



Single patch for all the relatively simple cases.

These new functions allow sparse to find failures to release
direct mode reducing chances of bugs over the claim_direct_mode()
functions that are deprecated.

Cc: Olivier Moysan <olivier.moysan@foss.st.com>
Cc: Phil Reid <preid@electromag.com.au>
Reviewed-by: default avatarMike Looijmans <mike.looijmans@topic.nl>
Reviewed-by: default avatarNuno Sá <nuno.sa@analog.com>
Link: https://patch.msgid.link/20250217141630.897334-30-jic23@kernel.org


Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 01528347
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -1157,11 +1157,10 @@ static int ad7173_write_raw(struct iio_dev *indio_dev,
	struct ad7173_state *st = iio_priv(indio_dev);
	struct ad7173_channel_config *cfg;
	unsigned int freq, i;
	int ret;
	int ret = 0;

	ret = iio_device_claim_direct_mode(indio_dev);
	if (ret)
		return ret;
	if (!iio_device_claim_direct(indio_dev))
		return -EBUSY;

	switch (info) {
	/*
@@ -1195,7 +1194,7 @@ static int ad7173_write_raw(struct iio_dev *indio_dev,
		break;
	}

	iio_device_release_direct_mode(indio_dev);
	iio_device_release_direct(indio_dev);
	return ret;
}

+3 −4
Original line number Diff line number Diff line
@@ -153,11 +153,10 @@ static int ad7266_read_raw(struct iio_dev *indio_dev,

	switch (m) {
	case IIO_CHAN_INFO_RAW:
		ret = iio_device_claim_direct_mode(indio_dev);
		if (ret)
			return ret;
		if (!iio_device_claim_direct(indio_dev))
			return -EBUSY;
		ret = ad7266_read_single(st, val, chan->address);
		iio_device_release_direct_mode(indio_dev);
		iio_device_release_direct(indio_dev);

		if (ret < 0)
			return ret;
+3 −4
Original line number Diff line number Diff line
@@ -232,16 +232,15 @@ static int ad7298_read_raw(struct iio_dev *indio_dev,

	switch (m) {
	case IIO_CHAN_INFO_RAW:
		ret = iio_device_claim_direct_mode(indio_dev);
		if (ret)
			return ret;
		if (!iio_device_claim_direct(indio_dev))
			return -EBUSY;

		if (chan->address == AD7298_CH_TEMP)
			ret = ad7298_scan_temp(st, val);
		else
			ret = ad7298_scan_direct(st, chan->address);

		iio_device_release_direct_mode(indio_dev);
		iio_device_release_direct(indio_dev);

		if (ret < 0)
			return ret;
+24 −32
Original line number Diff line number Diff line
@@ -716,16 +716,15 @@ static int ad7380_debugfs_reg_access(struct iio_dev *indio_dev, u32 reg,
	struct ad7380_state *st = iio_priv(indio_dev);
	int ret;

	ret = iio_device_claim_direct_mode(indio_dev);
	if (ret)
		return ret;
	if (!iio_device_claim_direct(indio_dev))
		return -EBUSY;

	if (readval)
		ret = regmap_read(st->regmap, reg, readval);
	else
		ret = regmap_write(st->regmap, reg, writeval);

	iio_device_release_direct_mode(indio_dev);
	iio_device_release_direct(indio_dev);

	return ret;
}
@@ -1018,14 +1017,13 @@ static int ad7380_read_raw(struct iio_dev *indio_dev,

	switch (info) {
	case IIO_CHAN_INFO_RAW:
		ret = iio_device_claim_direct_mode(indio_dev);
		if (ret)
			return ret;
		if (!iio_device_claim_direct(indio_dev))
			return -EBUSY;

		ret = ad7380_read_direct(st, chan->scan_index,
					 scan_type, val);

		iio_device_release_direct_mode(indio_dev);
		iio_device_release_direct(indio_dev);

		return ret;
	case IIO_CHAN_INFO_SCALE:
@@ -1056,13 +1054,12 @@ static int ad7380_read_raw(struct iio_dev *indio_dev,

		return IIO_VAL_INT;
	case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
		ret = iio_device_claim_direct_mode(indio_dev);
		if (ret)
			return ret;
		if (!iio_device_claim_direct(indio_dev))
			return -EBUSY;

		ret = ad7380_get_osr(st, val);

		iio_device_release_direct_mode(indio_dev);
		iio_device_release_direct(indio_dev);

		if (ret)
			return ret;
@@ -1155,13 +1152,12 @@ static int ad7380_write_raw(struct iio_dev *indio_dev,

	switch (mask) {
	case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
		ret = iio_device_claim_direct_mode(indio_dev);
		if (ret)
			return ret;
		if (!iio_device_claim_direct(indio_dev))
			return -EBUSY;

		ret = ad7380_set_oversampling_ratio(st, val);

		iio_device_release_direct_mode(indio_dev);
		iio_device_release_direct(indio_dev);

		return ret;
	default:
@@ -1186,13 +1182,12 @@ static int ad7380_read_event_config(struct iio_dev *indio_dev,
	struct ad7380_state *st = iio_priv(indio_dev);
	int tmp, ret;

	ret = iio_device_claim_direct_mode(indio_dev);
	if (ret)
		return ret;
	if (!iio_device_claim_direct(indio_dev))
		return -EBUSY;

	ret = regmap_read(st->regmap, AD7380_REG_ADDR_CONFIG1, &tmp);

	iio_device_release_direct_mode(indio_dev);
	iio_device_release_direct(indio_dev);

	if (ret)
		return ret;
@@ -1209,16 +1204,15 @@ static int ad7380_write_event_config(struct iio_dev *indio_dev,
	struct ad7380_state *st = iio_priv(indio_dev);
	int ret;

	ret = iio_device_claim_direct_mode(indio_dev);
	if (ret)
		return ret;
	if (!iio_device_claim_direct(indio_dev))
		return -EBUSY;

	ret = regmap_update_bits(st->regmap,
				 AD7380_REG_ADDR_CONFIG1,
				 AD7380_CONFIG1_ALERTEN,
				 FIELD_PREP(AD7380_CONFIG1_ALERTEN, state));

	iio_device_release_direct_mode(indio_dev);
	iio_device_release_direct(indio_dev);

	return ret;
}
@@ -1265,13 +1259,12 @@ static int ad7380_read_event_value(struct iio_dev *indio_dev,

	switch (info) {
	case IIO_EV_INFO_VALUE:
		ret = iio_device_claim_direct_mode(indio_dev);
		if (ret)
			return ret;
		if (!iio_device_claim_direct(indio_dev))
			return -EBUSY;

		ret = ad7380_get_alert_th(st, dir, val);

		iio_device_release_direct_mode(indio_dev);
		iio_device_release_direct(indio_dev);
		return ret;
	default:
		return -EINVAL;
@@ -1332,13 +1325,12 @@ static int ad7380_write_event_value(struct iio_dev *indio_dev,

	switch (info) {
	case IIO_EV_INFO_VALUE:
		ret = iio_device_claim_direct_mode(indio_dev);
		if (ret)
			return ret;
		if (!iio_device_claim_direct(indio_dev))
			return -EBUSY;

		ret = ad7380_set_alert_th(indio_dev, chan, dir, val);

		iio_device_release_direct_mode(indio_dev);
		iio_device_release_direct(indio_dev);
		return ret;
	default:
		return -EINVAL;
+3 −4
Original line number Diff line number Diff line
@@ -138,11 +138,10 @@ static int ad7476_read_raw(struct iio_dev *indio_dev,

	switch (m) {
	case IIO_CHAN_INFO_RAW:
		ret = iio_device_claim_direct_mode(indio_dev);
		if (ret)
			return ret;
		if (!iio_device_claim_direct(indio_dev))
			return -EBUSY;
		ret = ad7476_scan_direct(st);
		iio_device_release_direct_mode(indio_dev);
		iio_device_release_direct(indio_dev);

		if (ret < 0)
			return ret;
Loading