Re: [PATCH] iio: adxl372: fix iio_triggered_buffer_{pre,post}enable positions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 29 May 2019 16:01:08 +0300
Alexandru Ardelean <alexandru.ardelean@xxxxxxxxxx> wrote:

> The iio_triggered_buffer_{predisable,postenable} functions attach/detach
> the poll functions.
> 
> For the predisable hook, the disable code should occur before detaching
> the poll func, and for the postenable hook, the poll func should be
> attached before the enable code.
> 
> Signed-off-by: Alexandru Ardelean <alexandru.ardelean@xxxxxxxxxx>
Looks good to me.

Applied to the togreg branch of iio.git and pushed out as testing for the
autobuilders to play with it.

Thanks,

Jonathan

> ---
>  drivers/iio/accel/adxl372.c | 27 ++++++++++++++++-----------
>  1 file changed, 16 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/iio/accel/adxl372.c b/drivers/iio/accel/adxl372.c
> index 3b84cb243a87..055227cb3d43 100644
> --- a/drivers/iio/accel/adxl372.c
> +++ b/drivers/iio/accel/adxl372.c
> @@ -782,10 +782,14 @@ static int adxl372_buffer_postenable(struct iio_dev *indio_dev)
>  	unsigned int mask;
>  	int i, ret;
>  
> -	ret = adxl372_set_interrupts(st, ADXL372_INT1_MAP_FIFO_FULL_MSK, 0);
> +	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;
> +
>  	mask = *indio_dev->active_scan_mask;
>  
>  	for (i = 0; i < ARRAY_SIZE(adxl372_axis_lookup_table); i++) {
> @@ -793,8 +797,10 @@ static int adxl372_buffer_postenable(struct iio_dev *indio_dev)
>  			break;
>  	}
>  
> -	if (i == ARRAY_SIZE(adxl372_axis_lookup_table))
> -		return -EINVAL;
> +	if (i == ARRAY_SIZE(adxl372_axis_lookup_table)) {
> +		ret = -EINVAL;
> +		goto err;
> +	}
>  
>  	st->fifo_format = adxl372_axis_lookup_table[i].fifo_format;
>  	st->fifo_set_size = bitmap_weight(indio_dev->active_scan_mask,
> @@ -814,26 +820,25 @@ 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);
> -		return ret;
> +		goto err;
>  	}
>  
> -	return iio_triggered_buffer_postenable(indio_dev);
> +	return 0;
> +
> +err:
> +	iio_triggered_buffer_predisable(indio_dev);
> +	return ret;
>  }
>  
>  static int adxl372_buffer_predisable(struct iio_dev *indio_dev)
>  {
>  	struct adxl372_state *st = iio_priv(indio_dev);
> -	int ret;
> -
> -	ret = iio_triggered_buffer_predisable(indio_dev);
> -	if (ret < 0)
> -		return ret;
>  
>  	adxl372_set_interrupts(st, 0, 0);
>  	st->fifo_mode = ADXL372_FIFO_BYPASSED;
>  	adxl372_configure_fifo(st);
>  
> -	return 0;
> +	return iio_triggered_buffer_predisable(indio_dev);
>  }
>  
>  static const struct iio_buffer_setup_ops adxl372_buffer_ops = {




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux