Skip to content

Commit

Permalink
iio: st_magn: Add irq trigger handling
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Giuseppe Barba authored and Jonathan Cameron committed Jul 23, 2015
1 parent bb602f8 commit 74f5683
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 1 deletion.
2 changes: 2 additions & 0 deletions drivers/iio/magnetometer/st_magn.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
7 changes: 7 additions & 0 deletions drivers/iio/magnetometer/st_magn_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
13 changes: 12 additions & 1 deletion drivers/iio/magnetometer/st_magn_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 74f5683

Please sign in to comment.