diff options
author | Jonathan Cameron <jic23@cam.ac.uk> | 2011-05-18 14:42:15 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-05-19 16:15:01 -0700 |
commit | b206c3bbb4eda4f82c3396c0cc3a4443ffc166c5 (patch) | |
tree | 0729b3db757d5e615b971272cd611dbb6324a06b | |
parent | 0bb8be643161ae1dc5c5a0255cf5ca20f7de7b5a (diff) |
staging:iio:adc:ad7291 remove abuse of buffer events and replace with something almost sane
This device has separate events for a sort of decaying average and for
the raw value. We don't have a way of specifying this as yet.
For now I have both resulting in the same event code.
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/iio/adc/ad7291.c | 58 |
1 files changed, 42 insertions, 16 deletions
diff --git a/drivers/staging/iio/adc/ad7291.c b/drivers/staging/iio/adc/ad7291.c index 527311c1d3bf..0e4c7283bb07 100644 --- a/drivers/staging/iio/adc/ad7291.c +++ b/drivers/staging/iio/adc/ad7291.c @@ -454,12 +454,6 @@ static const struct attribute_group ad7291_attribute_group = { * temperature bound events */ -#define IIO_EVENT_CODE_AD7291_T_SENSE_HIGH IIO_BUFFER_EVENT_CODE(0) -#define IIO_EVENT_CODE_AD7291_T_SENSE_LOW IIO_BUFFER_EVENT_CODE(1) -#define IIO_EVENT_CODE_AD7291_T_AVG_HIGH IIO_BUFFER_EVENT_CODE(2) -#define IIO_EVENT_CODE_AD7291_T_AVG_LOW IIO_BUFFER_EVENT_CODE(3) -#define IIO_EVENT_CODE_AD7291_VOLTAGE_BASE IIO_BUFFER_EVENT_CODE(4) - static irqreturn_t ad7291_event_handler(int irq, void *private) { struct iio_dev *indio_dev = private; @@ -484,18 +478,50 @@ static irqreturn_t ad7291_event_handler(int irq, void *private) command = chip->command & ~AD7291_ALART_CLEAR; ad7291_i2c_write(chip, AD7291_COMMAND, command); - for (i = 0; i < 4; i++) { - if (t_status & (1 << i)) - iio_push_event(indio_dev, 0, - IIO_EVENT_CODE_AD7291_T_SENSE_HIGH + i, - timestamp); - } - - for (i = 0; i < AD7291_VOLTAGE_LIMIT_COUNT*2; i++) { + if (t_status & (1 << 0)) + iio_push_event(indio_dev, 0, + IIO_UNMOD_EVENT_CODE(IIO_TEMP, + 0, + IIO_EV_TYPE_THRESH, + IIO_EV_DIR_FALLING), + timestamp); + if (t_status & (1 << 1)) + iio_push_event(indio_dev, 0, + IIO_UNMOD_EVENT_CODE(IIO_TEMP, + 0, + IIO_EV_TYPE_THRESH, + IIO_EV_DIR_RISING), + timestamp); + if (t_status & (1 << 2)) + iio_push_event(indio_dev, 0, + IIO_UNMOD_EVENT_CODE(IIO_TEMP, + 0, + IIO_EV_TYPE_THRESH, + IIO_EV_DIR_FALLING), + timestamp); + if (t_status & (1 << 3)) + iio_push_event(indio_dev, 0, + IIO_UNMOD_EVENT_CODE(IIO_TEMP, + 0, + IIO_EV_TYPE_THRESH, + IIO_EV_DIR_RISING), + timestamp); + + for (i = 0; i < AD7291_VOLTAGE_LIMIT_COUNT*2; i += 2) { if (v_status & (1 << i)) iio_push_event(indio_dev, 0, - IIO_EVENT_CODE_AD7291_VOLTAGE_BASE + i, - timestamp); + IIO_UNMOD_EVENT_CODE(IIO_IN, + i/2, + IIO_EV_TYPE_THRESH, + IIO_EV_DIR_FALLING), + timestamp); + if (v_status & (1 << (i + 1))) + iio_push_event(indio_dev, 0, + IIO_UNMOD_EVENT_CODE(IIO_IN, + i/2, + IIO_EV_TYPE_THRESH, + IIO_EV_DIR_RISING), + timestamp); } return IRQ_HANDLED; |