Commit f11d59d8 authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Jonathan Cameron
Browse files

iio: Move attach/detach of the poll func to the core



All devices using a triggered buffer need to attach and detach the trigger
to the device in order to properly work. Instead of doing this in each and
every driver by hand move this into the core.

At this point in time, all drivers should have been resolved to
attach/detach the poll-function in the same order.

This patch removes all explicit calls of iio_triggered_buffer_postenable()
& iio_triggered_buffer_predisable() in all drivers, since the core handles
now the pollfunc attach/detach.

The more peculiar change is for the 'at91-sama5d2_adc' driver, since it's
not immediately obvious that removing the hooks doesn't break anything.
Eugen was able to test on at91-sama5d2-adc driver, sama5d2-xplained board.
All seems to be fine.

Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarAlexandru Ardelean <alexandru.ardelean@analog.com>
Tested-by: Eugen Hristev <eugen.hristev@microchip.com> #for at91-sama5d2-adc
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 044d406a
Loading
Loading
Loading
Loading
+5 −15
Original line number Diff line number Diff line
@@ -795,13 +795,9 @@ static int adxl372_buffer_postenable(struct iio_dev *indio_dev)
	unsigned int mask;
	int i, ret;

	ret = iio_triggered_buffer_postenable(indio_dev);
	if (ret < 0)
		return ret;

	ret = adxl372_set_interrupts(st, ADXL372_INT1_MAP_FIFO_FULL_MSK, 0);
	if (ret < 0)
		goto err;
		return ret;

	mask = *indio_dev->active_scan_mask;

@@ -810,10 +806,8 @@ static int adxl372_buffer_postenable(struct iio_dev *indio_dev)
			break;
	}

	if (i == ARRAY_SIZE(adxl372_axis_lookup_table)) {
		ret = -EINVAL;
		goto err;
	}
	if (i == ARRAY_SIZE(adxl372_axis_lookup_table))
		return -EINVAL;

	st->fifo_format = adxl372_axis_lookup_table[i].fifo_format;
	st->fifo_set_size = bitmap_weight(indio_dev->active_scan_mask,
@@ -833,14 +827,10 @@ static int adxl372_buffer_postenable(struct iio_dev *indio_dev)
	if (ret < 0) {
		st->fifo_mode = ADXL372_FIFO_BYPASSED;
		adxl372_set_interrupts(st, 0, 0);
		goto err;
		return ret;
	}

	return 0;

err:
	iio_triggered_buffer_predisable(indio_dev);
	return ret;
}

static int adxl372_buffer_predisable(struct iio_dev *indio_dev)
@@ -851,7 +841,7 @@ static int adxl372_buffer_predisable(struct iio_dev *indio_dev)
	st->fifo_mode = ADXL372_FIFO_BYPASSED;
	adxl372_configure_fifo(st);

	return iio_triggered_buffer_predisable(indio_dev);
	return 0;
}

static const struct iio_buffer_setup_ops adxl372_buffer_ops = {
+2 −2
Original line number Diff line number Diff line
@@ -1411,7 +1411,7 @@ static int bmc150_accel_buffer_postenable(struct iio_dev *indio_dev)
	int ret = 0;

	if (indio_dev->currentmode == INDIO_BUFFER_TRIGGERED)
		return iio_triggered_buffer_postenable(indio_dev);
		return 0;

	mutex_lock(&data->mutex);

@@ -1443,7 +1443,7 @@ static int bmc150_accel_buffer_predisable(struct iio_dev *indio_dev)
	struct bmc150_accel_data *data = iio_priv(indio_dev);

	if (indio_dev->currentmode == INDIO_BUFFER_TRIGGERED)
		return iio_triggered_buffer_predisable(indio_dev);
		return 0;

	mutex_lock(&data->mutex);

+0 −2
Original line number Diff line number Diff line
@@ -1027,9 +1027,7 @@ static const struct iio_chan_spec kxcjk1013_channels[] = {

static const struct iio_buffer_setup_ops kxcjk1013_buffer_setup_ops = {
	.preenable		= kxcjk1013_buffer_preenable,
	.postenable		= iio_triggered_buffer_postenable,
	.postdisable		= kxcjk1013_buffer_postdisable,
	.predisable		= iio_triggered_buffer_predisable,
};

static const struct iio_info kxcjk1013_info = {
+0 −2
Original line number Diff line number Diff line
@@ -252,8 +252,6 @@ static int kxsd9_buffer_postdisable(struct iio_dev *indio_dev)

static const struct iio_buffer_setup_ops kxsd9_buffer_setup_ops = {
	.preenable = kxsd9_buffer_preenable,
	.postenable = iio_triggered_buffer_postenable,
	.predisable = iio_triggered_buffer_predisable,
	.postdisable = kxsd9_buffer_postdisable,
};

+5 −17
Original line number Diff line number Diff line
@@ -33,13 +33,9 @@ static int st_accel_buffer_postenable(struct iio_dev *indio_dev)
{
	int err;

	err = iio_triggered_buffer_postenable(indio_dev);
	if (err < 0)
		return err;

	err = st_sensors_set_axis_enable(indio_dev, indio_dev->active_scan_mask[0]);
	if (err < 0)
		goto st_accel_buffer_predisable;
		return err;

	err = st_sensors_set_enable(indio_dev, true);
	if (err < 0)
@@ -49,27 +45,19 @@ static int st_accel_buffer_postenable(struct iio_dev *indio_dev)

st_accel_buffer_enable_all_axis:
	st_sensors_set_axis_enable(indio_dev, ST_SENSORS_ENABLE_ALL_AXIS);
st_accel_buffer_predisable:
	iio_triggered_buffer_predisable(indio_dev);
	return err;
}

static int st_accel_buffer_predisable(struct iio_dev *indio_dev)
{
	int err, err2;
	int err;

	err = st_sensors_set_enable(indio_dev, false);
	if (err < 0)
		goto st_accel_buffer_predisable;

	err = st_sensors_set_axis_enable(indio_dev, ST_SENSORS_ENABLE_ALL_AXIS);

st_accel_buffer_predisable:
	err2 = iio_triggered_buffer_predisable(indio_dev);
	if (!err)
		err = err2;

		return err;

	return st_sensors_set_axis_enable(indio_dev,
					  ST_SENSORS_ENABLE_ALL_AXIS);
}

static const struct iio_buffer_setup_ops st_accel_buffer_setup_ops = {
Loading