summaryrefslogtreecommitdiff
path: root/zephyr/program/corsola/tentacruel/src/sensor.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/program/corsola/tentacruel/src/sensor.c')
-rw-r--r--zephyr/program/corsola/tentacruel/src/sensor.c83
1 files changed, 68 insertions, 15 deletions
diff --git a/zephyr/program/corsola/tentacruel/src/sensor.c b/zephyr/program/corsola/tentacruel/src/sensor.c
index 16c2ac9fef..d0b89ac77a 100644
--- a/zephyr/program/corsola/tentacruel/src/sensor.c
+++ b/zephyr/program/corsola/tentacruel/src/sensor.c
@@ -5,36 +5,89 @@
#include "accelgyro.h"
#include "cros_cbi.h"
+#include "driver/accel_bma422.h"
+#include "driver/accel_lis2dw12.h"
#include "driver/accelgyro_bmi323.h"
#include "driver/accelgyro_icm42607.h"
+#include "gpio/gpio_int.h"
#include "hooks.h"
+#include "motion_sense.h"
#include "motionsense_sensors.h"
+#include "tablet_mode.h"
-void motion_interrupt(enum gpio_signal signal)
+static bool base_is_none;
+static bool lid_is_none;
+
+void base_sensor_interrupt(enum gpio_signal signal)
{
uint32_t val;
- cros_cbi_get_fw_config(FW_BASE_GYRO, &val);
- if (val == FW_BASE_ICM42607) {
+ cros_cbi_get_fw_config(BASE_SENSOR, &val);
+ if (val == BASE_ICM42607) {
icm42607_interrupt(signal);
- } else if (val == FW_BASE_BMI323) {
+ } else if (val == BASE_BMI323) {
bmi3xx_interrupt(signal);
+ } else if (val == BASE_NONE) {
+ base_is_none = true;
}
}
-static void motionsense_init(void)
+void lid_sensor_interrupt(enum gpio_signal signal)
{
uint32_t val;
- cros_cbi_get_fw_config(FW_BASE_GYRO, &val);
- if (val == FW_BASE_ICM42607) {
- ccprints("BASE ACCEL is ICM42607");
- } else if (val == FW_BASE_BMI323) {
- MOTIONSENSE_ENABLE_ALTERNATE(alt_base_accel);
- MOTIONSENSE_ENABLE_ALTERNATE(alt_base_gyro);
- ccprints("BASE ACCEL IS BMI323");
- } else {
- ccprints("no motionsense");
+ cros_cbi_get_fw_config(LID_SENSOR, &val);
+ if (val == LID_LIS2DWLTR) {
+ lis2dw12_interrupt(signal);
+ } else if (val == LID_BMA422) {
+ bma4xx_interrupt(signal);
+ } else if (val == LID_NONE) {
+ lid_is_none = true;
+ }
+}
+
+static void disable_base_lid_irq(void)
+{
+ if (base_is_none && lid_is_none) {
+ gpio_disable_dt_interrupt(
+ GPIO_INT_FROM_NODELABEL(int_base_imu));
+ gpio_pin_configure_dt(GPIO_DT_FROM_NODELABEL(base_imu_int_l),
+ GPIO_INPUT | GPIO_PULL_UP);
+ gpio_disable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_lid_imu));
+ gpio_pin_configure_dt(GPIO_DT_FROM_NODELABEL(lid_accel_int_l),
+ GPIO_INPUT | GPIO_PULL_UP);
+ }
+}
+DECLARE_HOOK(HOOK_INIT, disable_base_lid_irq, HOOK_PRIO_POST_DEFAULT);
+
+static void board_sensor_init(void)
+{
+ uint32_t val;
+
+ cros_cbi_get_fw_config(FORM_FACTOR, &val);
+ if (val == CLAMSHELL) {
+ motion_sensor_count = 0;
+ gmr_tablet_switch_disable();
+ ccprints("Board is Clamshell");
+ } else if (val == CONVERTIBLE) {
+ ccprints("Board is Convertible");
+
+ cros_cbi_get_fw_config(BASE_SENSOR, &val);
+ if (val == BASE_ICM42607) {
+ ccprints("Base sensor is ICM42607");
+ } else if (val == BASE_BMI323) {
+ MOTIONSENSE_ENABLE_ALTERNATE(alt_base_accel);
+ MOTIONSENSE_ENABLE_ALTERNATE(alt_base_gyro);
+ ccprints("Base sensor is BMI323");
+ }
+
+ cros_cbi_get_fw_config(LID_SENSOR, &val);
+ if (val == LID_LIS2DWLTR) {
+ ccprints("Lid sensnor is LIS2DWLTR");
+ } else if (val == LID_BMA422) {
+ MOTIONSENSE_ENABLE_ALTERNATE(alt_lid_accel);
+ ccprints("Lid sensnor is BMA422");
+ }
}
}
-DECLARE_HOOK(HOOK_INIT, motionsense_init, HOOK_PRIO_DEFAULT);
+DECLARE_HOOK(HOOK_INIT, board_sensor_init, HOOK_PRIO_DEFAULT);