diff options
author | Peter Marheine <pmarheine@chromium.org> | 2022-11-07 11:24:11 +1100 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-11-09 01:08:19 +0000 |
commit | 2fbedc6447dd18e7e9062dcb6818f5ae7e013857 (patch) | |
tree | abb880f61aabc3d750efd7645ca6e7bc07a971e9 | |
parent | 05dee9db4e4d863665925dfa374f37b9641af036 (diff) | |
download | chrome-ec-2fbedc6447dd18e7e9062dcb6818f5ae7e013857.tar.gz |
craask: use interrupts for lid accel
The BMA4xx driver now supports interrupts, so use them instead of
polling the lid accelerometer.
BUG=b:254380338
TEST=lid angle still reports correctly on craask with BMA422
BRANCH=none
LOW_COVERAGE_REASON=board-specific code is not tested
Change-Id: I8ec9565b9c160b9a4274610f7b91ab1bc0836620
Signed-off-by: Peter Marheine <pmarheine@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4005617
Reviewed-by: Andrew McRae <amcrae@google.com>
Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com>
-rw-r--r-- | zephyr/program/nissa/craask/motionsense.dtsi | 5 | ||||
-rw-r--r-- | zephyr/program/nissa/craask/overlay.dtsi | 5 | ||||
-rw-r--r-- | zephyr/program/nissa/craask/src/form_factor.c | 15 |
3 files changed, 21 insertions, 4 deletions
diff --git a/zephyr/program/nissa/craask/motionsense.dtsi b/zephyr/program/nissa/craask/motionsense.dtsi index fafdf8fe61..941dfa2240 100644 --- a/zephyr/program/nissa/craask/motionsense.dtsi +++ b/zephyr/program/nissa/craask/motionsense.dtsi @@ -14,6 +14,7 @@ lsm6dso-int = &base_accel; lis2dw12-int = &lid_accel; bmi3xx-int = &base_accel; + bma4xx-int = &lid_accel; }; /* @@ -250,8 +251,6 @@ * list of GPIO interrupts that have to * be enabled at initial stage */ - sensor-irqs = <&int_imu>; - /* list of sensors in force mode */ - accel-force-mode-sensors = <&lid_accel>; + sensor-irqs = <&int_imu &int_lid_accel>; }; }; diff --git a/zephyr/program/nissa/craask/overlay.dtsi b/zephyr/program/nissa/craask/overlay.dtsi index 257dc299e3..3aa95ea7fc 100644 --- a/zephyr/program/nissa/craask/overlay.dtsi +++ b/zephyr/program/nissa/craask/overlay.dtsi @@ -66,6 +66,11 @@ flags = <GPIO_INT_EDGE_FALLING>; handler = "motion_interrupt"; }; + int_lid_accel: ec_lid_accel { + irq-pin = <&gpio_acc_int_l>; + flags = <GPIO_INT_EDGE_FALLING>; + handler = "lid_accel_interrupt"; + }; int_vol_down: vol_down { irq-pin = <&gpio_voldn_btn_odl>; flags = <GPIO_INT_EDGE_BOTH>; diff --git a/zephyr/program/nissa/craask/src/form_factor.c b/zephyr/program/nissa/craask/src/form_factor.c index 59869eaa2f..285901ea42 100644 --- a/zephyr/program/nissa/craask/src/form_factor.c +++ b/zephyr/program/nissa/craask/src/form_factor.c @@ -10,6 +10,8 @@ #include "button.h" #include "cros_board_info.h" #include "cros_cbi.h" +#include "driver/accel_bma4xx.h" +#include "driver/accel_lis2dw12_public.h" #include "driver/accelgyro_bmi323.h" #include "driver/accelgyro_lsm6dso.h" #include "gpio/gpio_int.h" @@ -35,6 +37,7 @@ LOG_MODULE_DECLARE(nissa, CONFIG_NISSA_LOG_LEVEL); #define ALT_LID_S SENSOR_ID(DT_NODELABEL(alt_lid_accel)) static bool use_alt_sensor; +static bool use_alt_lid_accel; void motion_interrupt(enum gpio_signal signal) { @@ -44,6 +47,14 @@ void motion_interrupt(enum gpio_signal signal) lsm6dso_interrupt(signal); } +void lid_accel_interrupt(enum gpio_signal signal) +{ + if (use_alt_lid_accel) + lis2dw12_interrupt(signal); + else + bma4xx_interrupt(signal); +} + static void form_factor_init(void) { int ret; @@ -97,9 +108,11 @@ static void form_factor_init(void) motion_sensors_alt[ALT_LID_S].rot_standard_ref = &BMA_ALT_MAT; } - /* check which base sensor is used for motion_interrupt */ + /* check which motion sensors are used */ use_alt_sensor = cros_cbi_ssfc_check_match( CBI_SSFC_VALUE_ID(DT_NODELABEL(base_sensor_1))); + use_alt_lid_accel = cros_cbi_ssfc_check_match( + CBI_SSFC_VALUE_ID(DT_NODELABEL(lid_sensor_1))); motion_sensors_check_ssfc(); |