summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zephyr/program/skyrim/winterhold/project.overlay18
-rw-r--r--zephyr/program/skyrim/winterhold/src/sensor.c20
2 files changed, 37 insertions, 1 deletions
diff --git a/zephyr/program/skyrim/winterhold/project.overlay b/zephyr/program/skyrim/winterhold/project.overlay
index 9a4733a790..07958c4660 100644
--- a/zephyr/program/skyrim/winterhold/project.overlay
+++ b/zephyr/program/skyrim/winterhold/project.overlay
@@ -119,6 +119,24 @@
value = <1>;
};
};
+
+ base-sensor {
+ enum-name = "FW_BASE_SENSOR";
+ start = <3>;
+ size = <1>;
+
+ bmi323 {
+ compatible = "cros-ec,cbi-fw-config-value";
+ enum-name = "FW_BASE_BMI323";
+ value = <0>;
+ default;
+ };
+ lis2dw12 {
+ compatible = "cros-ec,cbi-fw-config-value";
+ enum-name = "FW_BASE_LIS2DW12";
+ value = <1>;
+ };
+ };
};
/* Rotation matrices for motion sensors. */
diff --git a/zephyr/program/skyrim/winterhold/src/sensor.c b/zephyr/program/skyrim/winterhold/src/sensor.c
index 52cd201705..a0d89e56ce 100644
--- a/zephyr/program/skyrim/winterhold/src/sensor.c
+++ b/zephyr/program/skyrim/winterhold/src/sensor.c
@@ -5,6 +5,7 @@
#include "common.h"
#include "cros_board_info.h"
+#include "cros_cbi.h"
#include "driver/accel_lis2dw12.h"
#include "driver/accelgyro_bmi3xx.h"
#include "hooks.h"
@@ -14,24 +15,41 @@ void base_accel_interrupt(enum gpio_signal signal)
{
int ret;
uint32_t val;
+ uint32_t fw_val;
ret = cbi_get_board_version(&val);
+ cros_cbi_get_fw_config(FW_BASE_SENSOR, &fw_val);
if (ret == EC_SUCCESS && val < 1)
bmi3xx_interrupt(signal);
- else
+ else if (val == 1)
lis2dw12_interrupt(signal);
+ else if (val == 2) {
+ if (fw_val == FW_BASE_BMI323)
+ bmi3xx_interrupt(signal);
+ else if (fw_val == FW_BASE_LIS2DW12)
+ lis2dw12_interrupt(signal);
+ }
}
static void motionsense_init(void)
{
int ret;
uint32_t val;
+ uint32_t fw_val;
ret = cbi_get_board_version(&val);
+ cros_cbi_get_fw_config(FW_BASE_SENSOR, &fw_val);
if (ret == EC_SUCCESS && val < 1) {
MOTIONSENSE_ENABLE_ALTERNATE(alt_base_accel);
+ } else if (val == 2) {
+ if (fw_val == FW_BASE_BMI323) {
+ MOTIONSENSE_ENABLE_ALTERNATE(alt_base_accel);
+ ccprints("BASE ACCEL is BMI323");
+ } else if (fw_val == FW_BASE_LIS2DW12) {
+ ccprints("BASE ACCEL IS LIS2DW12");
+ }
}
}
DECLARE_HOOK(HOOK_INIT, motionsense_init, HOOK_PRIO_DEFAULT);