On Mon, 17 Jun 2019 22:12:02 +0000 Denis CIOCCA <denis.ciocca@xxxxxx> wrote: > Hi Alexandru, > > Looks good to me. > > Acked-by: Denis Ciocca <denis.ciocca@xxxxxx> Applied to the togreg branch of iio.git and pushed out as testing for the autobuilders to play with it. Thanks, Jonathan > > Thanks, > Denis > > > -----Original Message----- > From: linux-iio-owner@xxxxxxxxxxxxxxx <linux-iio-owner@xxxxxxxxxxxxxxx> On Behalf Of Alexandru Ardelean > Sent: Friday, June 14, 2019 3:47 AM > To: linux-iio@xxxxxxxxxxxxxxx > Cc: Alexandru Ardelean <alexandru.ardelean@xxxxxxxxxx> > Subject: [PATCH][V3] iio: st_accel: fix iio_triggered_buffer_{pre,post}enable positions > > 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> > --- > > Changelog v1 -> v2: > * record the first error in st_accel_buffer_predisable() and return that > > Changelog v2 -> v3: > * move iio_triggered_buffer_postenable() after the allocation, but before > `st_sensors_set_axis_enable()` based on comment from > `Denis Ciocca <denis.ciocca@xxxxxx>` > > drivers/iio/accel/st_accel_buffer.c | 22 +++++++++++++--------- > 1 file changed, 13 insertions(+), 9 deletions(-) > > diff --git a/drivers/iio/accel/st_accel_buffer.c b/drivers/iio/accel/st_accel_buffer.c > index 7fddc137e91e..802ab7d2d93f 100644 > --- a/drivers/iio/accel/st_accel_buffer.c > +++ b/drivers/iio/accel/st_accel_buffer.c > @@ -46,17 +46,19 @@ static int st_accel_buffer_postenable(struct iio_dev *indio_dev) > goto allocate_memory_error; > } > > - err = st_sensors_set_axis_enable(indio_dev, > - (u8)indio_dev->active_scan_mask[0]); > + err = iio_triggered_buffer_postenable(indio_dev); > if (err < 0) > goto st_accel_buffer_postenable_error; > > - err = iio_triggered_buffer_postenable(indio_dev); > + err = st_sensors_set_axis_enable(indio_dev, > + (u8)indio_dev->active_scan_mask[0]); > if (err < 0) > - goto st_accel_buffer_postenable_error; > + goto st_sensors_set_axis_enable_error; > > return err; > > +st_sensors_set_axis_enable_error: > + iio_triggered_buffer_predisable(indio_dev); > st_accel_buffer_postenable_error: > kfree(adata->buffer_data); > allocate_memory_error: > @@ -65,20 +67,22 @@ static int st_accel_buffer_postenable(struct iio_dev *indio_dev) > > static int st_accel_buffer_predisable(struct iio_dev *indio_dev) { > - int err; > + int err, err2; > struct st_sensor_data *adata = iio_priv(indio_dev); > > - err = iio_triggered_buffer_predisable(indio_dev); > - if (err < 0) > - goto st_accel_buffer_predisable_error; > - > err = st_sensors_set_axis_enable(indio_dev, ST_SENSORS_ENABLE_ALL_AXIS); > if (err < 0) > goto st_accel_buffer_predisable_error; > > err = st_sensors_set_enable(indio_dev, false); > + if (err < 0) > + goto st_accel_buffer_predisable_error; > > st_accel_buffer_predisable_error: > + err2 = iio_triggered_buffer_predisable(indio_dev); > + if (!err) > + err = err2; > + > kfree(adata->buffer_data); > return err; > } > -- > 2.20.1 >