diff options
author | jimmy.wu <jimmy.wu@lcfc.corp-partner.google.com> | 2022-09-08 19:53:44 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-09-19 06:51:03 +0000 |
commit | 213df43e8d52cdb29eab4f82b5afce73a5053e6b (patch) | |
tree | 06f0f1360d9efc1bb5863c3803bf86805e1db3da | |
parent | b434bfc2dbaf86d5bf4c922da800b5ea9fb3a6b5 (diff) | |
download | chrome-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.txt | 1 | ||||
-rw-r--r-- | zephyr/projects/nissa/pujjo/cbi.dts | 24 | ||||
-rw-r--r-- | zephyr/projects/nissa/pujjo/motionsense.dts | 55 | ||||
-rw-r--r-- | zephyr/projects/nissa/pujjo/overlay.dts | 2 | ||||
-rw-r--r-- | zephyr/projects/nissa/pujjo/prj.conf | 1 | ||||
-rw-r--r-- | zephyr/projects/nissa/pujjo/src/form_factor.c | 39 |
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); |