summaryrefslogtreecommitdiff
path: root/zephyr/shim/src/motionsense_sensors.c
diff options
context:
space:
mode:
authorHyungwoo Yang <hyungwoo.yang@intel.corp-partner.google.com>2021-03-19 22:58:11 -0700
committerCommit Bot <commit-bot@chromium.org>2021-03-24 02:10:42 +0000
commite94cd9bdd5ffedbe01b2540937cb10e1b6236a0e (patch)
tree4fb77e71ddc233727c119e2b42aae2f62c4e75da /zephyr/shim/src/motionsense_sensors.c
parent6307a8c932d667a40d5955084a28b4ef15391de5 (diff)
downloadchrome-ec-e94cd9bdd5ffedbe01b2540937cb10e1b6236a0e.tar.gz
zephyr: DT: support sensor irq enabling
This change allows motion sensor interrupt to be enabled at initial stage. BUG=b:173507858 BRANCH=none TEST=make buildall -j8 build volteer on zephyr Signed-off-by: Hyungwoo Yang <hyungwoo.yang@intel.corp-partner.google.com> Change-Id: Ib85a1015110ae0a43c62a10c97e0d8f21a86319d Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2778818 Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'zephyr/shim/src/motionsense_sensors.c')
-rw-r--r--zephyr/shim/src/motionsense_sensors.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/zephyr/shim/src/motionsense_sensors.c b/zephyr/shim/src/motionsense_sensors.c
index d2567cb8fe..83c448be48 100644
--- a/zephyr/shim/src/motionsense_sensors.c
+++ b/zephyr/shim/src/motionsense_sensors.c
@@ -5,6 +5,7 @@
#include "common.h"
#include "accelgyro.h"
+#include "hooks.h"
#define SENSOR_MUTEX_NODE DT_PATH(motionsense_mutex)
#define SENSOR_MUTEX_NAME(id) DT_CAT(MUTEX_, id)
@@ -320,3 +321,27 @@ const struct motion_sensor_t *motion_als_sensors[] = {
};
BUILD_ASSERT(ARRAY_SIZE(motion_als_sensors) == ALS_COUNT);
#endif
+
+/*
+ * Enable interrupts for motion sensors
+ *
+ * e.g) list of named-gpio nodes
+ * motionsense-sensor-info {
+ * compatible = "cros-ec,motionsense-sensor-info";
+ *
+ * // list of GPIO interrupts that have to
+ * // be enabled at initial stage
+ * sensor-irqs = <&gpio_ec_imu_int_l &gpio_ec_als_rgb_int_l>;
+ * };
+ */
+#if DT_NODE_HAS_PROP(SENSOR_INFO_NODE, sensor_irqs)
+#define SENSOR_GPIO_ENABLE_INTERRUPT(i, id) \
+ gpio_enable_interrupt( \
+ GPIO_SIGNAL(DT_PHANDLE_BY_IDX(id, sensor_irqs, i)));
+static void sensor_enable_irqs(void)
+{
+ UTIL_LISTIFY(DT_PROP_LEN(SENSOR_INFO_NODE, sensor_irqs),
+ SENSOR_GPIO_ENABLE_INTERRUPT, SENSOR_INFO_NODE)
+}
+DECLARE_HOOK(HOOK_INIT, sensor_enable_irqs, HOOK_PRIO_DEFAULT);
+#endif