staging: iio: lis3l02dq add a thresh_timestamp field to state for no ring case
authorJonathan Cameron <jic23@cam.ac.uk>
Thu, 29 Jul 2010 16:50:47 +0000 (17:50 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 3 Aug 2010 00:06:03 +0000 (17:06 -0700)
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/iio/accel/lis3l02dq.h
drivers/staging/iio/accel/lis3l02dq_core.c

index 44669ee..6e73055 100644 (file)
@@ -151,6 +151,7 @@ Form of high byte dependant on justification set in ctrl reg */
  * @helper:            data and func pointer allowing generic functions
  * @us:                        actual spi_device
  * @work_thresh:       bh for threshold events
+ * @thresh_timestamp:  timestamp for threshold interrupts.
  * @inter:             used to check if new interrupt has been triggered
  * @trig:              data ready trigger registered with iio
  * @tx:                        transmit buffer
@@ -161,6 +162,7 @@ struct lis3l02dq_state {
        struct iio_sw_ring_helper_state help;
        struct spi_device               *us;
        struct work_struct              work_thresh;
+       s64                             thresh_timestamp;
        bool                            inter;
        struct iio_trigger              *trig;
        u8                              *tx;
index b04f498..0ee9337 100644 (file)
@@ -615,7 +615,7 @@ static int lis3l02dq_thresh_handler_th(struct iio_dev *indio_dev,
        struct lis3l02dq_state *st = lis3l02dq_h_to_s(h);
 
        /* Stash the timestamp somewhere convenient for the bh */
-       h->last_timestamp = timestamp;
+       st->thresh_timestamp = timestamp;
        schedule_work(&st->work_thresh);
 
        return 0;
@@ -640,32 +640,32 @@ static void lis3l02dq_thresh_handler_bh_no_check(struct work_struct *work_s)
        if (t & LIS3L02DQ_REG_WAKE_UP_SRC_INTERRUPT_Z_HIGH)
                iio_push_event(st->help.indio_dev, 0,
                               IIO_EVENT_CODE_ACCEL_Z_HIGH,
-                              st->help.last_timestamp);
+                              st->thresh_timestamp);
 
        if (t & LIS3L02DQ_REG_WAKE_UP_SRC_INTERRUPT_Z_LOW)
                iio_push_event(st->help.indio_dev, 0,
                               IIO_EVENT_CODE_ACCEL_Z_LOW,
-                              st->help.last_timestamp);
+                              st->thresh_timestamp);
 
        if (t & LIS3L02DQ_REG_WAKE_UP_SRC_INTERRUPT_Y_HIGH)
                iio_push_event(st->help.indio_dev, 0,
                               IIO_EVENT_CODE_ACCEL_Y_HIGH,
-                              st->help.last_timestamp);
+                              st->thresh_timestamp);
 
        if (t & LIS3L02DQ_REG_WAKE_UP_SRC_INTERRUPT_Y_LOW)
                iio_push_event(st->help.indio_dev, 0,
                               IIO_EVENT_CODE_ACCEL_Y_LOW,
-                              st->help.last_timestamp);
+                              st->thresh_timestamp);
 
        if (t & LIS3L02DQ_REG_WAKE_UP_SRC_INTERRUPT_X_HIGH)
                iio_push_event(st->help.indio_dev, 0,
                               IIO_EVENT_CODE_ACCEL_X_HIGH,
-                              st->help.last_timestamp);
+                              st->thresh_timestamp);
 
        if (t & LIS3L02DQ_REG_WAKE_UP_SRC_INTERRUPT_X_LOW)
                iio_push_event(st->help.indio_dev, 0,
                               IIO_EVENT_CODE_ACCEL_X_LOW,
-                              st->help.last_timestamp);
+                              st->thresh_timestamp);
        /* reenable the irq */
        enable_irq(st->us->irq);
        /* Ack and allow for new interrupts */