diff options
-rw-r--r-- | zephyr/projects/nissa/CMakeLists.txt | 1 | ||||
-rw-r--r-- | zephyr/projects/nissa/craask/motionsense.dts | 6 | ||||
-rw-r--r-- | zephyr/projects/nissa/craask/src/form_factor.c | 41 |
3 files changed, 48 insertions, 0 deletions
diff --git a/zephyr/projects/nissa/CMakeLists.txt b/zephyr/projects/nissa/CMakeLists.txt index ee7ec0525e..a76f91b6d2 100644 --- a/zephyr/projects/nissa/CMakeLists.txt +++ b/zephyr/projects/nissa/CMakeLists.txt @@ -33,6 +33,7 @@ if(DEFINED CONFIG_BOARD_NEREID) endif() if(DEFINED CONFIG_BOARD_CRAASK) zephyr_library_sources( + "craask/src/form_factor.c" "craask/src/keyboard.c" "craask/src/led.c" ) diff --git a/zephyr/projects/nissa/craask/motionsense.dts b/zephyr/projects/nissa/craask/motionsense.dts index 276fc14ff2..445de5c9a9 100644 --- a/zephyr/projects/nissa/craask/motionsense.dts +++ b/zephyr/projects/nissa/craask/motionsense.dts @@ -41,6 +41,12 @@ }; base_rot_ref: base-rotation-ref { + mat33 = <1 0 0 + 0 (-1) 0 + 0 0 (-1)>; + }; + + base_rot_ver1: base-rotation-ver1 { mat33 = <(-1) 0 0 0 (-1) 0 0 0 1>; diff --git a/zephyr/projects/nissa/craask/src/form_factor.c b/zephyr/projects/nissa/craask/src/form_factor.c new file mode 100644 index 0000000000..cc0c4bd7f4 --- /dev/null +++ b/zephyr/projects/nissa/craask/src/form_factor.c @@ -0,0 +1,41 @@ +/* Copyright 2022 The ChromiumOS Authors. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include <zephyr/devicetree.h> +#include <zephyr/logging/log.h> + +#include "accelgyro.h" +#include "cros_board_info.h" +#include "hooks.h" +#include "motionsense_sensors.h" + +#include "nissa_common.h" + +LOG_MODULE_DECLARE(nissa, CONFIG_NISSA_LOG_LEVEL); + +/* + * Mainboard orientation support. + */ + +#define ALT_MAT SENSOR_ROT_STD_REF_NAME(DT_NODELABEL(base_rot_ver1)) +#define BASE_SENSOR SENSOR_ID(DT_NODELABEL(base_accel)) +#define BASE_GYRO SENSOR_ID(DT_NODELABEL(base_gyro)) + +static void form_factor_init(void) +{ + int ret; + uint32_t val; + /* + * If the board version is 1 + * use ver1 rotation matrix. + */ + ret = cbi_get_board_version(&val); + if (ret == EC_SUCCESS && val == 1) { + LOG_INF("Switching to ver1 base"); + motion_sensors[BASE_SENSOR].rot_standard_ref = &ALT_MAT; + motion_sensors[BASE_GYRO].rot_standard_ref = &ALT_MAT; + } +} +DECLARE_HOOK(HOOK_INIT, form_factor_init, HOOK_PRIO_POST_I2C); |