diff options
author | Hyungwoo Yang <hyungwoo.yang@intel.corp-partner.google.com> | 2021-03-19 18:20:27 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-03-23 23:13:19 +0000 |
commit | f8f4e0c36a674963c725f8876728d23ece8cc3ff (patch) | |
tree | 797c2c693d43b7a2d10a3aaae74aa00ba563c65f /zephyr/shim/src/motionsense_driver/drvdata-accelgyro.h | |
parent | 52c66f7e5f5faf5d96625fe95c53a88b1f5c801c (diff) | |
download | chrome-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.h | 127 |
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 */ |