Skip to content

Commit

Permalink
iio: Move attach/detach of the poll func to the core
Browse files Browse the repository at this point in the history
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: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
Tested-by: Eugen Hristev <eugen.hristev@microchip.com> #for at91-sama5d2-adc
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
  • Loading branch information
Lars-Peter Clausen authored and Jonathan Cameron committed Jun 20, 2020
1 parent 044d406 commit f11d59d
Show file tree
Hide file tree
Showing 49 changed files with 93 additions and 429 deletions.
20 changes: 5 additions & 15 deletions drivers/iio/accel/adxl372.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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,
Expand All @@ -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)
Expand All @@ -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 = {
Expand Down
4 changes: 2 additions & 2 deletions drivers/iio/accel/bmc150-accel-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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);

Expand Down
2 changes: 0 additions & 2 deletions drivers/iio/accel/kxcjk-1013.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand Down
2 changes: 0 additions & 2 deletions drivers/iio/accel/kxsd9.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};

Expand Down
22 changes: 5 additions & 17 deletions drivers/iio/accel/st_accel_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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 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 = {
Expand Down
2 changes: 0 additions & 2 deletions drivers/iio/accel/stk8312.c
Original file line number Diff line number Diff line change
Expand Up @@ -492,8 +492,6 @@ static int stk8312_buffer_postdisable(struct iio_dev *indio_dev)

static const struct iio_buffer_setup_ops stk8312_buffer_setup_ops = {
.preenable = stk8312_buffer_preenable,
.postenable = iio_triggered_buffer_postenable,
.predisable = iio_triggered_buffer_predisable,
.postdisable = stk8312_buffer_postdisable,
};

Expand Down
2 changes: 0 additions & 2 deletions drivers/iio/accel/stk8ba50.c
Original file line number Diff line number Diff line change
Expand Up @@ -376,8 +376,6 @@ static int stk8ba50_buffer_postdisable(struct iio_dev *indio_dev)

static const struct iio_buffer_setup_ops stk8ba50_buffer_setup_ops = {
.preenable = stk8ba50_buffer_preenable,
.postenable = iio_triggered_buffer_postenable,
.predisable = iio_triggered_buffer_predisable,
.postdisable = stk8ba50_buffer_postdisable,
};

Expand Down
2 changes: 0 additions & 2 deletions drivers/iio/adc/ad7266.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,6 @@ static int ad7266_postdisable(struct iio_dev *indio_dev)

static const struct iio_buffer_setup_ops iio_triggered_buffer_setup_ops = {
.preenable = &ad7266_preenable,
.postenable = &iio_triggered_buffer_postenable,
.predisable = &iio_triggered_buffer_predisable,
.postdisable = &ad7266_postdisable,
};

Expand Down
3 changes: 1 addition & 2 deletions drivers/iio/adc/ad7606.c
Original file line number Diff line number Diff line change
Expand Up @@ -499,7 +499,6 @@ static int ad7606_buffer_postenable(struct iio_dev *indio_dev)
{
struct ad7606_state *st = iio_priv(indio_dev);

iio_triggered_buffer_postenable(indio_dev);
gpiod_set_value(st->gpio_convst, 1);

return 0;
Expand All @@ -511,7 +510,7 @@ static int ad7606_buffer_predisable(struct iio_dev *indio_dev)

gpiod_set_value(st->gpio_convst, 0);

return iio_triggered_buffer_predisable(indio_dev);
return 0;
}

static const struct iio_buffer_setup_ops ad7606_buffer_ops = {
Expand Down
2 changes: 0 additions & 2 deletions drivers/iio/adc/ad7766.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,6 @@ static const struct ad7766_chip_info ad7766_chip_info[] = {

static const struct iio_buffer_setup_ops ad7766_buffer_setup_ops = {
.preenable = &ad7766_preenable,
.postenable = &iio_triggered_buffer_postenable,
.predisable = &iio_triggered_buffer_predisable,
.postdisable = &ad7766_postdisable,
};

Expand Down
8 changes: 1 addition & 7 deletions drivers/iio/adc/ad7768-1.c
Original file line number Diff line number Diff line change
Expand Up @@ -490,7 +490,6 @@ static int ad7768_buffer_postenable(struct iio_dev *indio_dev)
{
struct ad7768_state *st = iio_priv(indio_dev);

iio_triggered_buffer_postenable(indio_dev);
/*
* Write a 1 to the LSB of the INTERFACE_FORMAT register to enter
* continuous read mode. Subsequent data reads do not require an
Expand All @@ -502,17 +501,12 @@ static int ad7768_buffer_postenable(struct iio_dev *indio_dev)
static int ad7768_buffer_predisable(struct iio_dev *indio_dev)
{
struct ad7768_state *st = iio_priv(indio_dev);
int ret;

/*
* To exit continuous read mode, perform a single read of the ADC_DATA
* reg (0x2C), which allows further configuration of the device.
*/
ret = ad7768_spi_reg_read(st, AD7768_REG_ADC_DATA, 3);
if (ret < 0)
return ret;

return iio_triggered_buffer_predisable(indio_dev);
return ad7768_spi_reg_read(st, AD7768_REG_ADC_DATA, 3);
}

static const struct iio_buffer_setup_ops ad7768_buffer_ops = {
Expand Down
2 changes: 0 additions & 2 deletions drivers/iio/adc/ad7887.c
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,6 @@ static irqreturn_t ad7887_trigger_handler(int irq, void *p)

static const struct iio_buffer_setup_ops ad7887_ring_setup_ops = {
.preenable = &ad7887_ring_preenable,
.postenable = &iio_triggered_buffer_postenable,
.predisable = &iio_triggered_buffer_predisable,
.postdisable = &ad7887_ring_postdisable,
};

Expand Down
5 changes: 0 additions & 5 deletions drivers/iio/adc/ad_sigma_delta.c
Original file line number Diff line number Diff line change
Expand Up @@ -345,10 +345,6 @@ static int ad_sd_buffer_postenable(struct iio_dev *indio_dev)
unsigned int channel;
int ret;

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

channel = find_first_bit(indio_dev->active_scan_mask,
indio_dev->masklength);
ret = ad_sigma_delta_set_channel(sigma_delta,
Expand Down Expand Up @@ -441,7 +437,6 @@ static irqreturn_t ad_sd_trigger_handler(int irq, void *p)

static const struct iio_buffer_setup_ops ad_sd_buffer_setup_ops = {
.postenable = &ad_sd_buffer_postenable,
.predisable = &iio_triggered_buffer_predisable,
.postdisable = &ad_sd_buffer_postdisable,
.validate_scan_mask = &iio_validate_scan_mask_onehot,
};
Expand Down
18 changes: 0 additions & 18 deletions drivers/iio/adc/at91-sama5d2_adc.c
Original file line number Diff line number Diff line change
Expand Up @@ -937,14 +937,6 @@ static int at91_adc_buffer_preenable(struct iio_dev *indio_dev)
return 0;
}

static int at91_adc_buffer_postenable(struct iio_dev *indio_dev)
{
if (at91_adc_current_chan_is_touch(indio_dev))
return 0;

return iio_triggered_buffer_postenable(indio_dev);
}

static int at91_adc_buffer_postdisable(struct iio_dev *indio_dev)
{
struct at91_adc_state *st = iio_priv(indio_dev);
Expand Down Expand Up @@ -995,19 +987,9 @@ static int at91_adc_buffer_postdisable(struct iio_dev *indio_dev)
return 0;
}

static int at91_adc_buffer_predisable(struct iio_dev *indio_dev)
{
if (at91_adc_current_chan_is_touch(indio_dev))
return 0;

return iio_triggered_buffer_predisable(indio_dev);
}

static const struct iio_buffer_setup_ops at91_buffer_setup_ops = {
.preenable = &at91_adc_buffer_preenable,
.postdisable = &at91_adc_buffer_postdisable,
.postenable = &at91_adc_buffer_postenable,
.predisable = &at91_adc_buffer_predisable,
};

static struct iio_trigger *at91_adc_allocate_trigger(struct iio_dev *indio,
Expand Down
12 changes: 1 addition & 11 deletions drivers/iio/adc/dln2-adc.c
Original file line number Diff line number Diff line change
Expand Up @@ -524,10 +524,6 @@ static int dln2_adc_triggered_buffer_postenable(struct iio_dev *indio_dev)
u16 conflict;
unsigned int trigger_chan;

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

mutex_lock(&dln2->mutex);

/* Enable ADC */
Expand All @@ -541,7 +537,6 @@ static int dln2_adc_triggered_buffer_postenable(struct iio_dev *indio_dev)
(int)conflict);
ret = -EBUSY;
}
iio_triggered_buffer_predisable(indio_dev);
return ret;
}

Expand All @@ -555,7 +550,6 @@ static int dln2_adc_triggered_buffer_postenable(struct iio_dev *indio_dev)
mutex_unlock(&dln2->mutex);
if (ret < 0) {
dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
iio_triggered_buffer_predisable(indio_dev);
return ret;
}
} else {
Expand All @@ -568,7 +562,7 @@ static int dln2_adc_triggered_buffer_postenable(struct iio_dev *indio_dev)

static int dln2_adc_triggered_buffer_predisable(struct iio_dev *indio_dev)
{
int ret, ret2;
int ret;
struct dln2_adc *dln2 = iio_priv(indio_dev);

mutex_lock(&dln2->mutex);
Expand All @@ -586,10 +580,6 @@ static int dln2_adc_triggered_buffer_predisable(struct iio_dev *indio_dev)
if (ret < 0)
dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);

ret2 = iio_triggered_buffer_predisable(indio_dev);
if (ret == 0)
ret = ret2;

return ret;
}

Expand Down
2 changes: 0 additions & 2 deletions drivers/iio/adc/mxs-lradc-adc.c
Original file line number Diff line number Diff line change
Expand Up @@ -568,8 +568,6 @@ static bool mxs_lradc_adc_validate_scan_mask(struct iio_dev *iio,

static const struct iio_buffer_setup_ops mxs_lradc_adc_buffer_ops = {
.preenable = &mxs_lradc_adc_buffer_preenable,
.postenable = &iio_triggered_buffer_postenable,
.predisable = &iio_triggered_buffer_predisable,
.postdisable = &mxs_lradc_adc_buffer_postdisable,
.validate_scan_mask = &mxs_lradc_adc_validate_scan_mask,
};
Expand Down
Loading

0 comments on commit f11d59d

Please sign in to comment.