staging:iio:lis3l02dq: Switch to new event config interface
authorLars-Peter Clausen <lars@metafoo.de>
Mon, 7 Oct 2013 14:11:00 +0000 (15:11 +0100)
committerJonathan Cameron <jic23@kernel.org>
Sat, 12 Oct 2013 11:42:39 +0000 (12:42 +0100)
Switch the lis3l02dq driver to the new IIO event config interface as the old one
is going to be removed.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/staging/iio/accel/lis3l02dq_core.c

index bb852dc9c9870c703d261734f5408770758cbb75..78187f136a7d4189e6fdf72bc47a7b283a022a27 100644 (file)
@@ -190,15 +190,26 @@ static u8 lis3l02dq_axis_map[3][3] = {
 };
 
 static int lis3l02dq_read_thresh(struct iio_dev *indio_dev,
-                                u64 e,
-                                int *val)
+                                const struct iio_chan_spec *chan,
+                                enum iio_event_type type,
+                                enum iio_event_direction dir,
+                                enum iio_event_info info,
+                                int *val, int *val2)
 {
-       return lis3l02dq_read_reg_s16(indio_dev, LIS3L02DQ_REG_THS_L_ADDR, val);
+       int ret;
+
+       ret = lis3l02dq_read_reg_s16(indio_dev, LIS3L02DQ_REG_THS_L_ADDR, val);
+       if (ret)
+               return ret;
+       return IIO_VAL_INT;
 }
 
 static int lis3l02dq_write_thresh(struct iio_dev *indio_dev,
-                                 u64 event_code,
-                                 int val)
+                                 const struct iio_chan_spec *chan,
+                                 enum iio_event_type type,
+                                 enum iio_event_direction dir,
+                                 enum iio_event_info info,
+                                 int val, int val2)
 {
        u16 value = val;
        return lis3l02dq_spi_write_reg_s16(indio_dev,
@@ -503,9 +514,19 @@ static irqreturn_t lis3l02dq_event_handler(int irq, void *private)
        return IRQ_HANDLED;
 }
 
-#define LIS3L02DQ_EVENT_MASK                                   \
-       (IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) |    \
-        IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING))
+static const struct iio_event_spec lis3l02dq_event[] = {
+       {
+               .type = IIO_EV_TYPE_THRESH,
+               .dir = IIO_EV_DIR_RISING,
+               .mask_separate = BIT(IIO_EV_INFO_VALUE) |
+                       BIT(IIO_EV_INFO_ENABLE),
+       }, {
+               .type = IIO_EV_TYPE_THRESH,
+               .dir = IIO_EV_DIR_FALLING,
+               .mask_separate = BIT(IIO_EV_INFO_VALUE) |
+                       BIT(IIO_EV_INFO_ENABLE),
+       }
+};
 
 #define LIS3L02DQ_CHAN(index, mod)                             \
        {                                                       \
@@ -523,7 +544,8 @@ static irqreturn_t lis3l02dq_event_handler(int irq, void *private)
                        .realbits = 12,                         \
                        .storagebits = 16,                      \
                },                                              \
-               .event_mask = LIS3L02DQ_EVENT_MASK,             \
+               .event_spec = lis3l02dq_event,                  \
+               .num_event_specs = ARRAY_SIZE(lis3l02dq_event), \
         }
 
 static const struct iio_chan_spec lis3l02dq_channels[] = {
@@ -535,14 +557,14 @@ static const struct iio_chan_spec lis3l02dq_channels[] = {
 
 
 static int lis3l02dq_read_event_config(struct iio_dev *indio_dev,
-                                          u64 event_code)
+                                      const struct iio_chan_spec *chan,
+                                      enum iio_event_type type,
+                                      enum iio_event_direction dir)
 {
 
        u8 val;
        int ret;
-       u8 mask = (1 << (IIO_EVENT_CODE_EXTRACT_MODIFIER(event_code)*2 +
-                        (IIO_EVENT_CODE_EXTRACT_DIR(event_code) ==
-                         IIO_EV_DIR_RISING)));
+       u8 mask = (1 << (chan->channel2*2 + (dir == IIO_EV_DIR_RISING)));
        ret = lis3l02dq_spi_read_reg_8(indio_dev,
                                       LIS3L02DQ_REG_WAKE_UP_CFG_ADDR,
                                       &val);
@@ -587,16 +609,16 @@ error_ret:
 }
 
 static int lis3l02dq_write_event_config(struct iio_dev *indio_dev,
-                                       u64 event_code,
+                                       const struct iio_chan_spec *chan,
+                                       enum iio_event_type type,
+                                       enum iio_event_direction dir,
                                        int state)
 {
        int ret = 0;
        u8 val, control;
        u8 currentlyset;
        bool changed = false;
-       u8 mask = (1 << (IIO_EVENT_CODE_EXTRACT_MODIFIER(event_code)*2 +
-                        (IIO_EVENT_CODE_EXTRACT_DIR(event_code) ==
-                         IIO_EV_DIR_RISING)));
+       u8 mask = (1 << (chan->channel2*2 + (dir == IIO_EV_DIR_RISING)));
 
        mutex_lock(&indio_dev->mlock);
        /* read current control */
@@ -654,10 +676,10 @@ static const struct attribute_group lis3l02dq_attribute_group = {
 static const struct iio_info lis3l02dq_info = {
        .read_raw = &lis3l02dq_read_raw,
        .write_raw = &lis3l02dq_write_raw,
-       .read_event_value = &lis3l02dq_read_thresh,
-       .write_event_value = &lis3l02dq_write_thresh,
-       .write_event_config = &lis3l02dq_write_event_config,
-       .read_event_config = &lis3l02dq_read_event_config,
+       .read_event_value_new = &lis3l02dq_read_thresh,
+       .write_event_value_new = &lis3l02dq_write_thresh,
+       .write_event_config_new = &lis3l02dq_write_event_config,
+       .read_event_config_new = &lis3l02dq_read_event_config,
        .driver_module = THIS_MODULE,
        .attrs = &lis3l02dq_attribute_group,
 };