staging: iio: sca3000 move to new event code scheme and add combined orientations
authorJonathan Cameron <jic23@cam.ac.uk>
Fri, 8 Oct 2010 11:14:03 +0000 (12:14 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 8 Oct 2010 14:17:52 +0000 (07:17 -0700)
The combined orientations allow handling of typical motion and free fall
detectors to be handled as threshold events just applied to a number of
axes via boolean operations.  So freefall is when x, y and z magnitudes
are all below a threshold for a particular period.  Motion detectors
are typically whether x or y or z are above a particular value.

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/iio/accel/sca3000_core.c
drivers/staging/iio/sysfs.h

index 0eb2c4c..b5fa51f 100644 (file)
@@ -865,22 +865,38 @@ static void sca3000_interrupt_handler_bh(struct work_struct *work_s)
 
        if (rx[1] & SCA3000_INT_STATUS_FREE_FALL)
                iio_push_event(st->indio_dev, 0,
-                              IIO_EVENT_CODE_FREE_FALL,
+                              IIO_MOD_EVENT_CODE(IIO_EV_CLASS_ACCEL,
+                                                 0,
+                                                 IIO_EV_MOD_X_AND_Y_AND_Z,
+                                                 IIO_EV_TYPE_MAG,
+                                                 IIO_EV_DIR_FALLING),
                               st->last_timestamp);
 
        if (rx[1] & SCA3000_INT_STATUS_Y_TRIGGER)
                iio_push_event(st->indio_dev, 0,
-                              IIO_EVENT_CODE_ACCEL_Y_HIGH,
+                              IIO_MOD_EVENT_CODE(IIO_EV_CLASS_ACCEL,
+                                                 0,
+                                                 IIO_EV_MOD_Y,
+                                                 IIO_EV_TYPE_MAG,
+                                                 IIO_EV_DIR_RISING),
                               st->last_timestamp);
 
        if (rx[1] & SCA3000_INT_STATUS_X_TRIGGER)
                iio_push_event(st->indio_dev, 0,
-                              IIO_EVENT_CODE_ACCEL_X_HIGH,
+                              IIO_MOD_EVENT_CODE(IIO_EV_CLASS_ACCEL,
+                                                 0,
+                                                 IIO_EV_MOD_X,
+                                                 IIO_EV_TYPE_MAG,
+                                                 IIO_EV_DIR_RISING),
                               st->last_timestamp);
 
        if (rx[1] & SCA3000_INT_STATUS_Z_TRIGGER)
                iio_push_event(st->indio_dev, 0,
-                              IIO_EVENT_CODE_ACCEL_Z_HIGH,
+                              IIO_MOD_EVENT_CODE(IIO_EV_CLASS_ACCEL,
+                                                 0,
+                                                 IIO_EV_MOD_Z,
+                                                 IIO_EV_TYPE_MAG,
+                                                 IIO_EV_DIR_RISING),
                               st->last_timestamp);
 
 done:
index 491c904..2064009 100644 (file)
@@ -260,6 +260,14 @@ struct iio_const_attr {
 #define IIO_EV_MOD_X                   0
 #define IIO_EV_MOD_Y                   1
 #define IIO_EV_MOD_Z                   2
+#define IIO_EV_MOD_X_AND_Y             3
+#define IIO_EV_MOD_X_ANX_Z             4
+#define IIO_EV_MOD_Y_AND_Z             5
+#define IIO_EV_MOD_X_AND_Y_AND_Z       6
+#define IIO_EV_MOD_X_OR_Y              7
+#define IIO_EV_MOD_X_OR_Z              8
+#define IIO_EV_MOD_Y_OR_Z              9
+#define IIO_EV_MOD_X_OR_Y_OR_Z         10
 
 #define IIO_EV_TYPE_THRESH             0
 #define IIO_EV_TYPE_MAG                        1