summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjimmy.wu <jimmy.wu@lcfc.corp-partner.google.com>2022-09-08 19:53:44 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-09-19 06:51:03 +0000
commit213df43e8d52cdb29eab4f82b5afce73a5053e6b (patch)
tree06f0f1360d9efc1bb5863c3803bf86805e1db3da
parentb434bfc2dbaf86d5bf4c922da800b5ea9fb3a6b5 (diff)
downloadchrome-ec-213df43e8d52cdb29eab4f82b5afce73a5053e6b.tar.gz
pujjo: Use SSFC bit 0-1 value to identify base sensor.
0: bmi323 1: lsm6dsm BUG=b:235866642 BRANCH=none TEST=zmake build pujjo TEST=can read raw data from bmi323 after setting ssfc=0x00 TEST=can read raw data from lsm6dsm after setting ssfc=0x01 Signed-off-by: jimmy.wu <jimmy.wu@lcfc.corp-partner.google.com> Change-Id: I668317cde8b0431ae4b454ca28e3f0d644bb8d8c Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3881429 Reviewed-by: Andrew McRae <amcrae@google.com> Reviewed-by: Peter Marheine <pmarheine@chromium.org> Code-Coverage: Andrew McRae <amcrae@google.com>
-rw-r--r--zephyr/projects/nissa/CMakeLists.txt1
-rw-r--r--zephyr/projects/nissa/pujjo/cbi.dts24
-rw-r--r--zephyr/projects/nissa/pujjo/motionsense.dts55
-rw-r--r--zephyr/projects/nissa/pujjo/overlay.dts2
-rw-r--r--zephyr/projects/nissa/pujjo/prj.conf1
-rw-r--r--zephyr/projects/nissa/pujjo/src/form_factor.c39
6 files changed, 120 insertions, 2 deletions
diff --git a/zephyr/projects/nissa/CMakeLists.txt b/zephyr/projects/nissa/CMakeLists.txt
index 2907d969b3..30d574096b 100644
--- a/zephyr/projects/nissa/CMakeLists.txt
+++ b/zephyr/projects/nissa/CMakeLists.txt
@@ -48,6 +48,7 @@ if(DEFINED CONFIG_BOARD_PUJJO)
"pujjo/src/led.c"
"pujjo/src/keyboard.c"
"pujjo/src/hdmi.c"
+ "pujjo/src/form_factor.c"
)
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_FAN "pujjo/src/fan.c")
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_USBC "pujjo/src/usbc.c")
diff --git a/zephyr/projects/nissa/pujjo/cbi.dts b/zephyr/projects/nissa/pujjo/cbi.dts
index 8ababf7a9c..cbb2a592b3 100644
--- a/zephyr/projects/nissa/pujjo/cbi.dts
+++ b/zephyr/projects/nissa/pujjo/cbi.dts
@@ -143,4 +143,28 @@
* size = <2>;
*/
};
+
+ /* Pujjo-specific ssfc fields. */
+ cbi-ssfc {
+ compatible = "named-cbi-ssfc";
+ /*
+ * SSFC field to identify BASE motion sensor.
+ */
+ base-sensor {
+ enum-name = "BASE_SENSOR";
+ size = <2>;
+
+ base_sensor_0: bmi323 {
+ compatible = "named-cbi-ssfc-value";
+ status = "okay";
+ value = <0>;
+ default;
+ };
+ base_sensor_1: lsm6dsm {
+ compatible = "named-cbi-ssfc-value";
+ status = "okay";
+ value = <1>;
+ };
+ };
+ };
};
diff --git a/zephyr/projects/nissa/pujjo/motionsense.dts b/zephyr/projects/nissa/pujjo/motionsense.dts
index 3a560d512a..2fb579d63f 100644
--- a/zephyr/projects/nissa/pujjo/motionsense.dts
+++ b/zephyr/projects/nissa/pujjo/motionsense.dts
@@ -1,4 +1,4 @@
-/* Copyright 2022 The ChromiumOS Authors
+/* 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.
*/
@@ -12,6 +12,7 @@
* Interrupt bindings for sensor devices.
*/
bmi3xx-int = &base_accel;
+ lsm6dsm-int = &base_accel;
};
/*
@@ -61,6 +62,16 @@
status = "okay";
};
+ lsm6dsm_data_accel: lsm6dsm-accel-drv-data {
+ compatible = "cros-ec,drvdata-lsm6dsm";
+ status = "okay";
+ };
+
+ lsm6dsm_data_gyro: lsm6dsm-gyro-drv-data {
+ compatible = "cros-ec,drvdata-lsm6dsm";
+ status = "okay";
+ };
+
bma422_data: bma422-drv-data {
compatible = "cros-ec,drvdata-bma4xx";
status = "okay";
@@ -134,6 +145,48 @@
};
};
+ motionsense-sensor-alt {
+ alt_base_accel: alt-base-accel {
+ compatible = "cros-ec,lsm6dsm-accel";
+ status = "okay";
+
+ active-mask = "SENSOR_ACTIVE_S0_S3";
+ location = "MOTIONSENSE_LOC_BASE";
+ mutex = <&base_mutex>;
+ port = <&i2c_ec_i2c_sensor>;
+ rot-standard-ref = <&base_rot_ref>;
+ drv-data = <&lsm6dsm_data_accel>;
+ alternate-for = <&base_accel>;
+ alternate-ssfc-indicator = <&base_sensor_1>;
+ configs {
+ compatible =
+ "cros-ec,motionsense-sensor-config";
+ ec-s0 {
+ odr = <(10000 | ROUND_UP_FLAG)>;
+ ec-rate = <(100 * USEC_PER_MSEC)>;
+ };
+ ec-s3 {
+ odr = <(10000 | ROUND_UP_FLAG)>;
+ ec-rate = <0>;
+ };
+ };
+ };
+
+ alt_base_gyro: alt-base-gyro {
+ compatible = "cros-ec,lsm6dsm-gyro";
+ status = "okay";
+
+ active-mask = "SENSOR_ACTIVE_S0_S3";
+ location = "MOTIONSENSE_LOC_BASE";
+ mutex = <&base_mutex>;
+ port = <&i2c_ec_i2c_sensor>;
+ rot-standard-ref = <&base_rot_ref>;
+ drv-data = <&lsm6dsm_data_gyro>;
+ alternate-for = <&base_gyro>;
+ alternate-ssfc-indicator = <&base_sensor_1>;
+ };
+ };
+
motionsense-sensor-info {
compatible = "cros-ec,motionsense-sensor-info";
diff --git a/zephyr/projects/nissa/pujjo/overlay.dts b/zephyr/projects/nissa/pujjo/overlay.dts
index 27b386d910..943da4128d 100644
--- a/zephyr/projects/nissa/pujjo/overlay.dts
+++ b/zephyr/projects/nissa/pujjo/overlay.dts
@@ -70,7 +70,7 @@
int_imu: ec_imu {
irq-pin = <&gpio_imu_int_l>;
flags = <GPIO_INT_EDGE_FALLING>;
- handler = "bmi3xx_interrupt";
+ handler = "motion_interrupt";
};
int_vol_down: vol_down {
irq-pin = <&gpio_voldn_btn_odl>;
diff --git a/zephyr/projects/nissa/pujjo/prj.conf b/zephyr/projects/nissa/pujjo/prj.conf
index f9db19d51d..f93568b6b5 100644
--- a/zephyr/projects/nissa/pujjo/prj.conf
+++ b/zephyr/projects/nissa/pujjo/prj.conf
@@ -15,6 +15,7 @@ CONFIG_SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE=256
# Sensor drivers
CONFIG_PLATFORM_EC_ACCELGYRO_BMI_COMM_I2C=y
CONFIG_PLATFORM_EC_ACCELGYRO_BMI3XX=y
+CONFIG_PLATFORM_EC_ACCELGYRO_LSM6DSM=y
CONFIG_PLATFORM_EC_ACCEL_BMA4XX=y
# Keyboard
diff --git a/zephyr/projects/nissa/pujjo/src/form_factor.c b/zephyr/projects/nissa/pujjo/src/form_factor.c
new file mode 100644
index 0000000000..ff3d64fe3e
--- /dev/null
+++ b/zephyr/projects/nissa/pujjo/src/form_factor.c
@@ -0,0 +1,39 @@
+/* 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 "accelgyro.h"
+#include "cros_board_info.h"
+#include "cros_cbi.h"
+#include "driver/accelgyro_bmi323.h"
+#include "driver/accelgyro_lsm6dsm.h"
+#include "hooks.h"
+#include "motionsense_sensors.h"
+
+#include "nissa_common.h"
+
+LOG_MODULE_DECLARE(nissa, CONFIG_NISSA_LOG_LEVEL);
+
+static bool use_alt_sensor;
+
+void motion_interrupt(enum gpio_signal signal)
+{
+ if (use_alt_sensor)
+ lsm6dsm_interrupt(signal);
+ else
+ bmi3xx_interrupt(signal);
+}
+
+static void sensor_init(void)
+{
+ /* check which base sensor is used for motion_interrupt */
+ use_alt_sensor = cros_cbi_ssfc_check_match(
+ CBI_SSFC_VALUE_ID(DT_NODELABEL(base_sensor_1)));
+
+ motion_sensors_check_ssfc();
+}
+DECLARE_HOOK(HOOK_INIT, sensor_init, HOOK_PRIO_POST_I2C);