diff options
Diffstat (limited to 'drivers/iio/accel/st_accel_buffer.c')
| -rw-r--r-- | drivers/iio/accel/st_accel_buffer.c | 44 | 
1 files changed, 15 insertions, 29 deletions
diff --git a/drivers/iio/accel/st_accel_buffer.c b/drivers/iio/accel/st_accel_buffer.c index 0205c0167cdd..9f2b40474b8e 100644 --- a/drivers/iio/accel/st_accel_buffer.c +++ b/drivers/iio/accel/st_accel_buffer.c @@ -29,65 +29,51 @@ int st_accel_trig_set_state(struct iio_trigger *trig, bool state)  	return st_sensors_set_dataready_irq(indio_dev, state);  } -static int st_accel_buffer_preenable(struct iio_dev *indio_dev) -{ -	return st_sensors_set_enable(indio_dev, true); -} -  static int st_accel_buffer_postenable(struct iio_dev *indio_dev)  {  	int err; -	struct st_sensor_data *adata = iio_priv(indio_dev); - -	adata->buffer_data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL); -	if (adata->buffer_data == NULL) { -		err = -ENOMEM; -		goto allocate_memory_error; -	}  	err = iio_triggered_buffer_postenable(indio_dev);  	if (err < 0) -		goto st_accel_buffer_postenable_error; +		return err;  	err = st_sensors_set_axis_enable(indio_dev, -					(u8)indio_dev->active_scan_mask[0]); +					 (u8)indio_dev->active_scan_mask[0]);  	if (err < 0) -		goto st_sensors_set_axis_enable_error; +		goto st_accel_buffer_predisable; -	return err; +	err = st_sensors_set_enable(indio_dev, true); +	if (err < 0) +		goto st_accel_buffer_enable_all_axis; -st_sensors_set_axis_enable_error: +	return 0; + +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); -st_accel_buffer_postenable_error: -	kfree(adata->buffer_data); -allocate_memory_error:  	return err;  }  static int st_accel_buffer_predisable(struct iio_dev *indio_dev)  {  	int err, err2; -	struct st_sensor_data *adata = iio_priv(indio_dev); - -	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; +		goto st_accel_buffer_predisable; + +	err = st_sensors_set_axis_enable(indio_dev, ST_SENSORS_ENABLE_ALL_AXIS); -st_accel_buffer_predisable_error: +st_accel_buffer_predisable:  	err2 = iio_triggered_buffer_predisable(indio_dev);  	if (!err)  		err = err2; -	kfree(adata->buffer_data);  	return err;  }  static const struct iio_buffer_setup_ops st_accel_buffer_setup_ops = { -	.preenable = &st_accel_buffer_preenable,  	.postenable = &st_accel_buffer_postenable,  	.predisable = &st_accel_buffer_predisable,  };  |