mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 08:19:28 +00:00
![Lars-Peter Clausen](/assets/img/avatar_default.png)
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>
81 lines
1.9 KiB
C
81 lines
1.9 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* STMicroelectronics accelerometers driver
|
|
*
|
|
* Copyright 2012-2013 STMicroelectronics Inc.
|
|
*
|
|
* Denis Ciocca <denis.ciocca@st.com>
|
|
*/
|
|
|
|
#include <linux/module.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/stat.h>
|
|
#include <linux/interrupt.h>
|
|
#include <linux/i2c.h>
|
|
#include <linux/delay.h>
|
|
#include <linux/iio/iio.h>
|
|
#include <linux/iio/buffer.h>
|
|
#include <linux/iio/trigger_consumer.h>
|
|
#include <linux/iio/triggered_buffer.h>
|
|
|
|
#include <linux/iio/common/st_sensors.h>
|
|
#include "st_accel.h"
|
|
|
|
int st_accel_trig_set_state(struct iio_trigger *trig, bool state)
|
|
{
|
|
struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
|
|
|
|
return st_sensors_set_dataready_irq(indio_dev, state);
|
|
}
|
|
|
|
static int st_accel_buffer_postenable(struct iio_dev *indio_dev)
|
|
{
|
|
int err;
|
|
|
|
err = st_sensors_set_axis_enable(indio_dev, indio_dev->active_scan_mask[0]);
|
|
if (err < 0)
|
|
return err;
|
|
|
|
err = st_sensors_set_enable(indio_dev, true);
|
|
if (err < 0)
|
|
goto st_accel_buffer_enable_all_axis;
|
|
|
|
return 0;
|
|
|
|
st_accel_buffer_enable_all_axis:
|
|
st_sensors_set_axis_enable(indio_dev, ST_SENSORS_ENABLE_ALL_AXIS);
|
|
return err;
|
|
}
|
|
|
|
static int st_accel_buffer_predisable(struct iio_dev *indio_dev)
|
|
{
|
|
int err;
|
|
|
|
err = st_sensors_set_enable(indio_dev, false);
|
|
if (err < 0)
|
|
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 = {
|
|
.postenable = &st_accel_buffer_postenable,
|
|
.predisable = &st_accel_buffer_predisable,
|
|
};
|
|
|
|
int st_accel_allocate_ring(struct iio_dev *indio_dev)
|
|
{
|
|
return iio_triggered_buffer_setup(indio_dev, NULL,
|
|
&st_sensors_trigger_handler, &st_accel_buffer_setup_ops);
|
|
}
|
|
|
|
void st_accel_deallocate_ring(struct iio_dev *indio_dev)
|
|
{
|
|
iio_triggered_buffer_cleanup(indio_dev);
|
|
}
|
|
|
|
MODULE_AUTHOR("Denis Ciocca <denis.ciocca@st.com>");
|
|
MODULE_DESCRIPTION("STMicroelectronics accelerometers buffer");
|
|
MODULE_LICENSE("GPL v2");
|