summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Marheine <pmarheine@chromium.org>2022-11-07 11:24:11 +1100
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-11-09 01:08:19 +0000
commit2fbedc6447dd18e7e9062dcb6818f5ae7e013857 (patch)
treeabb880f61aabc3d750efd7645ca6e7bc07a971e9
parent05dee9db4e4d863665925dfa374f37b9641af036 (diff)
downloadchrome-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.dtsi5
-rw-r--r--zephyr/program/nissa/craask/overlay.dtsi5
-rw-r--r--zephyr/program/nissa/craask/src/form_factor.c15
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();