diff options
-rw-r--r-- | zephyr/projects/skyrim/CMakeLists.txt | 6 | ||||
-rw-r--r-- | zephyr/projects/skyrim/skyrim.dts | 6 | ||||
-rw-r--r-- | zephyr/projects/skyrim/src/skyrim/form_factor.c | 37 |
3 files changed, 47 insertions, 2 deletions
diff --git a/zephyr/projects/skyrim/CMakeLists.txt b/zephyr/projects/skyrim/CMakeLists.txt index d7a5495c32..8b706417e4 100644 --- a/zephyr/projects/skyrim/CMakeLists.txt +++ b/zephyr/projects/skyrim/CMakeLists.txt @@ -20,10 +20,12 @@ zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_FAN "fan.c") if(DEFINED CONFIG_BOARD_SKYRIM) project(skyrim) cros_ec_library_include_directories_ifdef(CONFIG_BOARD_SKYRIM include) - zephyr_library_sources_ifdef(CONFIG_BOARD_SKYRIM "usbc_config.c") + zephyr_library_sources( + "src/skyrim/form_factor.c" + "usbc_config.c" + ) endif() - if(DEFINED CONFIG_BOARD_WINTERHOLD) project(winterhold) zephyr_library_sources( diff --git a/zephyr/projects/skyrim/skyrim.dts b/zephyr/projects/skyrim/skyrim.dts index fa5b1cc5a5..563876b884 100644 --- a/zephyr/projects/skyrim/skyrim.dts +++ b/zephyr/projects/skyrim/skyrim.dts @@ -213,6 +213,12 @@ 0 0 1>; }; + lid_rot_ref1: lid-rotation-ref1 { + mat33 = <0 1 0 + (-1) 0 0 + 0 0 1>; + }; + base_rot_ref: base-rotation-ref { mat33 = <0 1 0 (-1) 0 0 diff --git a/zephyr/projects/skyrim/src/skyrim/form_factor.c b/zephyr/projects/skyrim/src/skyrim/form_factor.c new file mode 100644 index 0000000000..216a31cd3f --- /dev/null +++ b/zephyr/projects/skyrim/src/skyrim/form_factor.c @@ -0,0 +1,37 @@ +/* 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 "common.h" +#include "accelgyro.h" +#include "cros_board_info.h" +#include "hooks.h" +#include "motionsense_sensors.h" + +LOG_MODULE_DECLARE(skyrim, CONFIG_SKYRIM_LOG_LEVEL); + +/* + * Mainboard orientation support. + */ + +#define ALT_MAT SENSOR_ROT_STD_REF_NAME(DT_NODELABEL(lid_rot_ref1)) +#define LID_ACCEL SENSOR_ID(DT_NODELABEL(lid_accel)) + +static void form_factor_init(void) +{ + int ret; + uint32_t val; + /* + * If the board version >=4 + * use ver1 rotation matrix. + */ + ret = cbi_get_board_version(&val); + if (ret == EC_SUCCESS && val >= 4) { + LOG_INF("Switching to ver1 lid"); + motion_sensors[LID_ACCEL].rot_standard_ref = &ALT_MAT; + } +} +DECLARE_HOOK(HOOK_INIT, form_factor_init, HOOK_PRIO_POST_I2C); |