Commit 6a3fe0fc authored by Kurt Borja's avatar Kurt Borja Committed by Jonathan Cameron
Browse files

iio: light: vcnl4000: Use IIO cleanup helpers



Use IIO_DEV_ACQUIRE_DIRECT_MODE() helper to automatically release direct
mode.

Reviewed-by: default avatarDavid Lechner <dlechner@baylibre.com>
Reviewed-by: default avatarNuno Sá <nuno.sa@analog.com>
Signed-off-by: default avatarKurt Borja <kuurtb@gmail.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 7a38b75d
Loading
Loading
Loading
Loading
+18 −31
Original line number Diff line number Diff line
@@ -1078,20 +1078,17 @@ static int vcnl4010_read_raw(struct iio_dev *indio_dev,

	switch (mask) {
	case IIO_CHAN_INFO_RAW:
	case IIO_CHAN_INFO_SCALE:
		if (!iio_device_claim_direct(indio_dev))
	case IIO_CHAN_INFO_SCALE: {
		IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim);
		if (IIO_DEV_ACQUIRE_FAILED(claim))
			return -EBUSY;

		/* Protect against event capture. */
		if (vcnl4010_is_in_periodic_mode(data)) {
			ret = -EBUSY;
		} else {
			ret = vcnl4000_read_raw(indio_dev, chan, val, val2,
						mask);
		}
		if (vcnl4010_is_in_periodic_mode(data))
			return -EBUSY;

		iio_device_release_direct(indio_dev);
		return ret;
		return vcnl4000_read_raw(indio_dev, chan, val, val2, mask);
	}
	case IIO_CHAN_INFO_SAMP_FREQ:
		switch (chan->type) {
		case IIO_PROXIMITY:
@@ -1148,36 +1145,27 @@ static int vcnl4010_write_raw(struct iio_dev *indio_dev,
			      struct iio_chan_spec const *chan,
			      int val, int val2, long mask)
{
	int ret;
	struct vcnl4000_data *data = iio_priv(indio_dev);

	if (!iio_device_claim_direct(indio_dev))
	IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim);
	if (IIO_DEV_ACQUIRE_FAILED(claim))
		return -EBUSY;

	/* Protect against event capture. */
	if (vcnl4010_is_in_periodic_mode(data)) {
		ret = -EBUSY;
		goto end;
	}
	if (vcnl4010_is_in_periodic_mode(data))
		return -EBUSY;

	switch (mask) {
	case IIO_CHAN_INFO_SAMP_FREQ:
		switch (chan->type) {
		case IIO_PROXIMITY:
			ret = vcnl4010_write_proxy_samp_freq(data, val, val2);
			goto end;
			return vcnl4010_write_proxy_samp_freq(data, val, val2);
		default:
			ret = -EINVAL;
			goto end;
			return -EINVAL;
		}
	default:
		ret = -EINVAL;
		goto end;
		return -EINVAL;
	}

end:
	iio_device_release_direct(indio_dev);
	return ret;
}

static int vcnl4010_read_event(struct iio_dev *indio_dev,
@@ -1438,14 +1426,13 @@ static int vcnl4010_config_threshold_disable(struct vcnl4000_data *data)
static int vcnl4010_config_threshold(struct iio_dev *indio_dev, bool state)
{
	struct vcnl4000_data *data = iio_priv(indio_dev);
	int ret;

	if (state) {
		if (!iio_device_claim_direct(indio_dev))
		IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim);
		if (IIO_DEV_ACQUIRE_FAILED(claim))
			return -EBUSY;
		ret = vcnl4010_config_threshold_enable(data);
		iio_device_release_direct(indio_dev);
		return ret;

		return vcnl4010_config_threshold_enable(data);
	} else {
		return vcnl4010_config_threshold_disable(data);
	}