summaryrefslogtreecommitdiff
path: root/include/motion_sense.h
diff options
context:
space:
mode:
authorGwendal Grignou <gwendal@chromium.org>2018-09-04 10:10:04 -0700
committerchrome-bot <chrome-bot@chromium.org>2019-03-20 19:51:25 -0700
commit4b9a3c0cc9cee9ed85ba18dd2f9c23e90ca051fc (patch)
tree3f8db048371f529ac0ffff71553c8c8bd378cfe0 /include/motion_sense.h
parent8fb1c6c52510438f77378f08d2b6d881da48dd3f (diff)
downloadchrome-ec-4b9a3c0cc9cee9ed85ba18dd2f9c23e90ca051fc.tar.gz
motion: Define macros for custom events
Define macros to define custom events used by sensor interrupt handlers. Remove CONFIG_ for activity events. BUG=none BRANCH=none TEST=compile, sensors work on eve. Change-Id: I08ef6ed2a004466ebc5f7650d6952a150b9de713 Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1272189 Reviewed-by: Jett Rink <jettrink@chromium.org>
Diffstat (limited to 'include/motion_sense.h')
-rw-r--r--include/motion_sense.h39
1 files changed, 34 insertions, 5 deletions
diff --git a/include/motion_sense.h b/include/motion_sense.h
index 2291784c1c..0e6f7aa342 100644
--- a/include/motion_sense.h
+++ b/include/motion_sense.h
@@ -36,11 +36,39 @@ enum sensor_config {
#define SENSOR_ACTIVE_S0_S3 (SENSOR_ACTIVE_S3 | SENSOR_ACTIVE_S0)
#define SENSOR_ACTIVE_S0_S3_S5 (SENSOR_ACTIVE_S0_S3 | SENSOR_ACTIVE_S5)
-/* Events the motion sense task may have to process.*/
-#define TASK_EVENT_MOTION_FLUSH_PENDING TASK_EVENT_CUSTOM(1)
-#define TASK_EVENT_MOTION_ODR_CHANGE TASK_EVENT_CUSTOM(2)
-/* Next 8 events for sensor interrupt lines */
-#define TASK_EVENT_MOTION_INTERRUPT_MASK (0xff << 2)
+
+/*
+ * Events layout:
+ * 0 8 10
+ * +-----------------------+---------------+----------------------------
+ * | hardware interrupts | internal ints | activity interrupts
+ * +-----------------------+---------------+----------------------------
+ */
+
+/* First 8 events for sensor interrupt lines */
+#define TASK_EVENT_MOTION_INTERRUPT_NUM 8
+#define TASK_EVENT_MOTION_INTERRUPT_MASK \
+ ((1 << TASK_EVENT_MOTION_INTERRUPT_NUM) - 1)
+#define TASK_EVENT_MOTION_SENSOR_INTERRUPT(_sensor_id) \
+ BUILD_CHECK_INLINE( \
+ TASK_EVENT_CUSTOM(1 << (_sensor_id)), \
+ _sensor_id < TASK_EVENT_MOTION_INTERRUPT_NUM)
+
+/* Internal events to motion sense task.*/
+#define TASK_EVENT_MOTION_FIRST_INTERNAL_EVENT TASK_EVENT_MOTION_INTERRUPT_NUM
+#define TASK_EVENT_MOTION_INTERNAL_EVENT_NUM 2
+#define TASK_EVENT_MOTION_FLUSH_PENDING \
+ TASK_EVENT_CUSTOM(1 << TASK_EVENT_MOTION_FIRST_INTERNAL_EVENT)
+#define TASK_EVENT_MOTION_ODR_CHANGE \
+ TASK_EVENT_CUSTOM(1 << (TASK_EVENT_MOTION_FIRST_INTERNAL_EVENT + 1))
+
+/* Activity events */
+#define TASK_EVENT_MOTION_FIRST_SW_EVENT \
+ (TASK_EVENT_MOTION_INTERRUPT_NUM + TASK_EVENT_MOTION_INTERNAL_EVENT_NUM)
+#define TASK_EVENT_MOTION_ACTIVITY_INTERRUPT(_activity_id) \
+ (TASK_EVENT_CUSTOM( \
+ 1 << (TASK_EVENT_MOTION_FIRST_SW_EVENT + (_activity_id))))
+
#define ROUND_UP_FLAG (1 << 31)
#define BASE_ODR(_odr) ((_odr) & ~ROUND_UP_FLAG)
@@ -168,6 +196,7 @@ struct motion_sensor_t {
/* Defined at board level. */
extern struct motion_sensor_t motion_sensors[];
+
#ifdef CONFIG_DYNAMIC_MOTION_SENSOR_COUNT
extern unsigned motion_sensor_count;
#else