summaryrefslogtreecommitdiff
path: root/zephyr/shim/src/motionsense_driver/drvdata-accelgyro.h
diff options
context:
space:
mode:
authorHyungwoo Yang <hyungwoo.yang@intel.corp-partner.google.com>2021-03-19 18:20:27 -0700
committerCommit Bot <commit-bot@chromium.org>2021-03-23 23:13:19 +0000
commitf8f4e0c36a674963c725f8876728d23ece8cc3ff (patch)
tree797c2c693d43b7a2d10a3aaae74aa00ba563c65f /zephyr/shim/src/motionsense_driver/drvdata-accelgyro.h
parent52c66f7e5f5faf5d96625fe95c53a88b1f5c801c (diff)
downloadchrome-ec-f8f4e0c36a674963c725f8876728d23ece8cc3ff.tar.gz
zephyr: DT: support sensor driver data
This has basic support to create instances of sensor-specific driver data using the information from device tree. 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: I196d7595e8bd880e2314290660f08274ad99e172 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2778815 Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'zephyr/shim/src/motionsense_driver/drvdata-accelgyro.h')
-rw-r--r--zephyr/shim/src/motionsense_driver/drvdata-accelgyro.h127
1 files changed, 127 insertions, 0 deletions
diff --git a/zephyr/shim/src/motionsense_driver/drvdata-accelgyro.h b/zephyr/shim/src/motionsense_driver/drvdata-accelgyro.h
new file mode 100644
index 0000000000..069587f90f
--- /dev/null
+++ b/zephyr/shim/src/motionsense_driver/drvdata-accelgyro.h
@@ -0,0 +1,127 @@
+/* Copyright 2021 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/*
+ * Macros are to help creating driver data. A driver data that uses
+ * any data structures defined in accelgyro.h should use the macros here
+ * to utilize the information in device tree.
+ *
+ */
+#ifndef __ZEPHYR_SHIM_SRC_MOTIONSENSE_DRIVER_DRVDATA_ACCELGYRO_H
+#define __ZEPHYR_SHIM_SRC_MOTIONSENSE_DRIVER_DRVDATA_ACCELGYRO_H
+
+/*
+ * compatible = "cros-ec,accelgyro-als-channel-scale"
+ * als_channel_scale_t in accelgyro.h
+ *
+ * e.g) The following is the example in DT for als_channel_scale_t
+ * als-channel-scale {
+ * compatible = "cros-ec,accelgyro-als-channel-scale";
+ * k-channel-scale = <1>;
+ * cover-scale = <1>;
+ * };
+ */
+#define ACCELGYRO_ALS_CHANNEL_SCALE(id) \
+ { \
+ .k_channel_scale = \
+ ALS_CHANNEL_SCALE(DT_PROP(id, k_channel_scale)),\
+ .cover_scale = \
+ ALS_CHANNEL_SCALE(DT_PROP(id, cover_scale)), \
+ }
+
+#define ALS_CALIBRATION_CHANNEL_SCALE(id) \
+ .als_cal.channel_scale = ACCELGYRO_ALS_CHANNEL_SCALE(id),
+
+#define ALS_CALIBRATION_SET(id) \
+ .als_cal.scale = DT_PROP(id, scale), \
+ .als_cal.uscale = DT_PROP(id, uscale), \
+ .als_cal.offset = DT_PROP(id, offset), \
+ ALS_CALIBRATION_CHANNEL_SCALE(DT_CHILD(id, als_channel_scale))
+
+/*
+ * compatible = "cros-ec,accelgyro-als-drv-data"
+ * als_drv_data_t in accelgyro.h
+ *
+ * e.g) The following is the example in DT for als_drv_data_t
+ * als-drv-data {
+ * compatible = "cros-ec,accelgyro-als-drv-data";
+ * als-cal {
+ * scale = <1>;
+ * uscale = <0>;
+ * offset = <0>;
+ * als-channel-scale {
+ * compatible = "cros-ec,accelgyro-als-channel-scale";
+ * k-channel-scale = <1>;
+ * cover-scale = <1>;
+ * };
+ * };
+ * };
+ */
+#define ACCELGYRO_ALS_DRV_DATA(id) \
+ { \
+ ALS_CALIBRATION_SET(DT_CHILD(id, als_cal)) \
+ }
+
+#define RGB_CAL_RGB_SET_SCALE(id) \
+ .scale = ACCELGYRO_ALS_CHANNEL_SCALE(id),
+
+#define RGB_CAL_RGB_SET_ONE(id, suffix) \
+ .rgb_cal[suffix] = { \
+ .offset = DT_PROP(id, offset), \
+ .coeff[0] = FLOAT_TO_FP(DT_PROP_BY_IDX(id, coeff, 0)), \
+ .coeff[1] = FLOAT_TO_FP(DT_PROP_BY_IDX(id, coeff, 1)), \
+ .coeff[2] = FLOAT_TO_FP(DT_PROP_BY_IDX(id, coeff, 2)), \
+ .coeff[3] = FLOAT_TO_FP(DT_PROP_BY_IDX(id, coeff, 3)), \
+ RGB_CAL_RGB_SET_SCALE(DT_CHILD(id, als_channel_scale)) \
+ },
+
+/*
+ * compatible = "cros-ec,accelgyro-rgb-calibration"
+ * rgb_calibration_t in accelgyro.h
+ *
+ * e.g) The following is the example in DT for rgb_calibration_t
+ * rgb_calibration {
+ * compatible = "cros-ec,accelgyro-rgb-calibration";
+ *
+ * irt = <1>;
+ *
+ * rgb-cal-x {
+ * offset = <0>;
+ * coeff = <0 0 0 0>;
+ * als-channel-scale {
+ * compatible = "cros-ec,accelgyro-als-channel-scale";
+ * k-channel-scale = <1>;
+ * cover-scale = <1>;
+ * };
+ * };
+ * rgb-cal-y {
+ * offset = <0>;
+ * coeff = <0 0 0 0>;
+ * als-channel-scale {
+ * compatible = "cros-ec,accelgyro-als-channel-scale";
+ * k-channel-scale = <1>;
+ * cover-scale = <1>;
+ * };
+ * };
+ * rgb-cal-z {
+ * offset = <0>;
+ * coeff = <0 0 0 0>;
+ * als-channel-scale {
+ * compatible = "cros-ec,accelgyro-als-channel-scale";
+ * k-channel-scale = <1>;
+ * cover-scale = <1>;
+ * };
+ * };
+ * };
+ */
+#define ACCELGYRO_RGB_CALIBRATION(id) \
+ { \
+ RGB_CAL_RGB_SET_ONE(DT_CHILD(id, rgb_cal_x), X) \
+ RGB_CAL_RGB_SET_ONE(DT_CHILD(id, rgb_cal_y), Y) \
+ RGB_CAL_RGB_SET_ONE(DT_CHILD(id, rgb_cal_z), Z) \
+ .irt = INT_TO_FP(DT_PROP(id, irt)), \
+ }
+
+#endif /* __ZEPHYR_SHIM_SRC_MOTIONSENSE_DRIVER_DRVDATA_ACCELGYRO_H */