mirror of
https://github.com/torvalds/linux.git
synced 2024-12-01 00:21:32 +00:00
iio: st_magn: Add irq trigger handling
Add irq trigger handling for magnetometer also Signed-off-by: Giuseppe Barba <giuseppe.barba@st.com> Acked-by: Denis Ciocca <denis.ciocca@st.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
parent
bb602f8c61
commit
74f5683f35
@ -25,6 +25,8 @@ void st_magn_common_remove(struct iio_dev *indio_dev);
|
||||
#ifdef CONFIG_IIO_BUFFER
|
||||
int st_magn_allocate_ring(struct iio_dev *indio_dev);
|
||||
void st_magn_deallocate_ring(struct iio_dev *indio_dev);
|
||||
int st_magn_trig_set_state(struct iio_trigger *trig, bool state);
|
||||
#define ST_MAGN_TRIGGER_SET_STATE (&st_magn_trig_set_state)
|
||||
#else /* CONFIG_IIO_BUFFER */
|
||||
static inline int st_magn_probe_trigger(struct iio_dev *indio_dev, int irq)
|
||||
{
|
||||
|
@ -23,6 +23,13 @@
|
||||
#include <linux/iio/common/st_sensors.h>
|
||||
#include "st_magn.h"
|
||||
|
||||
int st_magn_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_magn_buffer_preenable(struct iio_dev *indio_dev)
|
||||
{
|
||||
return st_sensors_set_enable(indio_dev, true);
|
||||
|
@ -480,6 +480,16 @@ static const struct iio_info magn_info = {
|
||||
.write_raw = &st_magn_write_raw,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_IIO_TRIGGER
|
||||
static const struct iio_trigger_ops st_magn_trigger_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.set_trigger_state = ST_MAGN_TRIGGER_SET_STATE,
|
||||
};
|
||||
#define ST_MAGN_TRIGGER_OPS (&st_magn_trigger_ops)
|
||||
#else
|
||||
#define ST_MAGN_TRIGGER_OPS NULL
|
||||
#endif
|
||||
|
||||
int st_magn_common_probe(struct iio_dev *indio_dev)
|
||||
{
|
||||
struct st_sensor_data *mdata = iio_priv(indio_dev);
|
||||
@ -516,7 +526,8 @@ int st_magn_common_probe(struct iio_dev *indio_dev)
|
||||
return err;
|
||||
|
||||
if (irq > 0) {
|
||||
err = st_sensors_allocate_trigger(indio_dev, NULL);
|
||||
err = st_sensors_allocate_trigger(indio_dev,
|
||||
ST_MAGN_TRIGGER_OPS);
|
||||
if (err < 0)
|
||||
goto st_magn_probe_trigger_error;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user