Commit 2956979d authored by Guillaume Stols's avatar Guillaume Stols Committed by Jonathan Cameron
Browse files

iio: adc: ad7606: switch mutexes to guard



Switching to guard simplifies the code and avoids to take care to
unlock the mutex in case of premature return.

Signed-off-by: default avatarGuillaume Stols <gstols@baylibre.com>
Reviewed-by: default avatarNuno Sa <nuno.sa@analog.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 059fe4f8
Loading
Loading
Loading
Loading
+15 −24
Original line number Diff line number Diff line
@@ -69,19 +69,17 @@ static int ad7606_reg_access(struct iio_dev *indio_dev,
	struct ad7606_state *st = iio_priv(indio_dev);
	int ret;

	mutex_lock(&st->lock);
	guard(mutex)(&st->lock);

	if (readval) {
		ret = st->bops->reg_read(st, reg);
		if (ret < 0)
			goto err_unlock;
			return ret;
		*readval = ret;
		ret = 0;
		return 0;
	} else {
		ret = st->bops->reg_write(st, reg, writeval);
		return st->bops->reg_write(st, reg, writeval);
	}
err_unlock:
	mutex_unlock(&st->lock);
	return ret;
}

static int ad7606_read_samples(struct ad7606_state *st)
@@ -124,19 +122,19 @@ static irqreturn_t ad7606_trigger_handler(int irq, void *p)
	struct ad7606_state *st = iio_priv(indio_dev);
	int ret;

	mutex_lock(&st->lock);
	guard(mutex)(&st->lock);

	ret = ad7606_read_samples(st);
	if (ret == 0)
	if (ret)
		goto error_ret;

	iio_push_to_buffers_with_timestamp(indio_dev, st->data,
					   iio_get_time_ns(indio_dev));

error_ret:
	iio_trigger_notify_done(indio_dev->trig);
	/* The rising edge of the CONVST signal starts a new conversion. */
	gpiod_set_value(st->gpio_convst, 1);

	mutex_unlock(&st->lock);

	return IRQ_HANDLED;
}

@@ -257,19 +255,17 @@ static int ad7606_write_raw(struct iio_dev *indio_dev,
	struct ad7606_state *st = iio_priv(indio_dev);
	int i, ret, ch = 0;

	guard(mutex)(&st->lock);

	switch (mask) {
	case IIO_CHAN_INFO_SCALE:
		mutex_lock(&st->lock);
		i = find_closest(val2, st->scale_avail, st->num_scales);
		if (st->sw_mode_en)
			ch = chan->address;
		ret = st->write_scale(indio_dev, ch, i);
		if (ret < 0) {
			mutex_unlock(&st->lock);
		if (ret < 0)
			return ret;
		}
		st->range[ch] = i;
		mutex_unlock(&st->lock);

		return 0;
	case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
@@ -277,14 +273,9 @@ static int ad7606_write_raw(struct iio_dev *indio_dev,
			return -EINVAL;
		i = find_closest(val, st->oversampling_avail,
				 st->num_os_ratios);
		mutex_lock(&st->lock);
		ret = st->write_os(indio_dev, i);
		if (ret < 0) {
			mutex_unlock(&st->lock);
		if (ret < 0)
			return ret;
		}
		st->oversampling = st->oversampling_avail[i];
		mutex_unlock(&st->lock);

		return 0;
	default: