summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
Diffstat (limited to 'board')
-rw-r--r--board/OWNERS2
-rw-r--r--board/aleena/board.h2
-rw-r--r--board/cheza/board.h1
-rw-r--r--board/elm/board.h1
-rw-r--r--board/jerry/board.h1
-rw-r--r--board/kukui/board.h1
-rw-r--r--board/meowth_fp/board.h1
-rw-r--r--board/nocturne/board.c20
-rw-r--r--board/nocturne/board.h1
-rw-r--r--board/npcx_evb_arm/board.h1
-rw-r--r--board/nucleo-f411re/board.c27
-rw-r--r--board/nucleo-f411re/board.h12
-rw-r--r--board/nucleo-f411re/ec.tasklist6
-rw-r--r--board/nucleo-f411re/gpio.inc3
-rw-r--r--board/oak/board.h1
-rw-r--r--board/rainier/board.h1
-rw-r--r--board/rammus/battery.c29
-rw-r--r--board/rammus/board.c115
-rw-r--r--board/rammus/board.h12
-rw-r--r--board/rammus/build.mk2
-rw-r--r--board/rammus/cbi_ssfc.c36
-rw-r--r--board/rammus/cbi_ssfc.h56
-rw-r--r--board/rammus/gpio.inc2
-rw-r--r--board/rowan/board.h1
-rw-r--r--board/scarlet/board.h1
25 files changed, 292 insertions, 43 deletions
diff --git a/board/OWNERS b/board/OWNERS
deleted file mode 100644
index 5a0a0348b0..0000000000
--- a/board/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# Additional owners for board directory
-dparker@chromium.org
diff --git a/board/aleena/board.h b/board/aleena/board.h
index 12e6869821..7756d5b181 100644
--- a/board/aleena/board.h
+++ b/board/aleena/board.h
@@ -29,6 +29,8 @@
/* KB backlight driver */
#define CONFIG_LED_DRIVER_LM3630A
+#define CONFIG_MKBP_USE_GPIO
+
#ifndef __ASSEMBLER__
enum pwm_channel {
diff --git a/board/cheza/board.h b/board/cheza/board.h
index 4fce7868fe..cb1bd0a068 100644
--- a/board/cheza/board.h
+++ b/board/cheza/board.h
@@ -55,6 +55,7 @@
#define CONFIG_HOSTCMD_SECTION_SORTED /* Host commands are sorted. */
#define CONFIG_MKBP_EVENT
#define CONFIG_KEYBOARD_PROTOCOL_MKBP
+#define CONFIG_MKBP_USE_GPIO
#define CONFIG_BOARD_VERSION_GPIO
#define CONFIG_POWER_BUTTON
diff --git a/board/elm/board.h b/board/elm/board.h
index b2036896e4..8d1283244c 100644
--- a/board/elm/board.h
+++ b/board/elm/board.h
@@ -65,6 +65,7 @@
#define CONFIG_LID_SWITCH
#define CONFIG_LOW_POWER_IDLE
#define CONFIG_MKBP_EVENT
+#define CONFIG_MKBP_USE_GPIO
#define CONFIG_POWER_BUTTON
#define CONFIG_POWER_COMMON
#define CONFIG_USB_CHARGER
diff --git a/board/jerry/board.h b/board/jerry/board.h
index ad8fdceeb8..da5de695df 100644
--- a/board/jerry/board.h
+++ b/board/jerry/board.h
@@ -37,6 +37,7 @@
#define CONFIG_LED_POWER_ACTIVE_LOW
#define CONFIG_LOW_POWER_IDLE
#define CONFIG_LOW_POWER_S0
+#define CONFIG_MKBP_USE_GPIO
#define CONFIG_POWER_BUTTON
#define CONFIG_POWER_BUTTON_ACTIVE_STATE 1
#define CONFIG_POWER_COMMON
diff --git a/board/kukui/board.h b/board/kukui/board.h
index 276bb0f1ea..2dc8daa64d 100644
--- a/board/kukui/board.h
+++ b/board/kukui/board.h
@@ -191,6 +191,7 @@
#define CONFIG_KEYBOARD_PROTOCOL_MKBP
#define CONFIG_MKBP_EVENT
+#define CONFIG_MKBP_USE_GPIO
/* Define the MKBP events which are allowed to wakeup AP in S3. */
#define CONFIG_MKBP_WAKEUP_MASK \
(EC_HOST_EVENT_MASK(EC_HOST_EVENT_POWER_BUTTON) |\
diff --git a/board/meowth_fp/board.h b/board/meowth_fp/board.h
index 5d3807c709..82fa7805b7 100644
--- a/board/meowth_fp/board.h
+++ b/board/meowth_fp/board.h
@@ -87,6 +87,7 @@
#undef CONFIG_LID_SWITCH
#define CONFIG_LOW_POWER_IDLE
#define CONFIG_MKBP_EVENT
+#define CONFIG_MKBP_USE_GPIO
#define CONFIG_PRINTF_LEGACY_LI_FORMAT
#define CONFIG_SHA256
#define CONFIG_SHA256_UNROLLED
diff --git a/board/nocturne/board.c b/board/nocturne/board.c
index ffa8c65920..31ebebd4e8 100644
--- a/board/nocturne/board.c
+++ b/board/nocturne/board.c
@@ -402,26 +402,6 @@ void board_hibernate(void)
;
}
-static int mkbp_uses_gpio(void)
-{
- return board_get_version() >= 2;
-}
-
-void mkbp_set_host_active(int active)
-{
- if (mkbp_uses_gpio())
- mkbp_set_host_active_via_gpio(active);
-
- /*
- * Always send the host event for compatibility.
- * On board versions 2 and newer, the firmware is configured
- * to not actually trigger an SCI on MKBP events. This means that
- * the EC can send host event notifications without concern for the
- * board version and expect the right thing to happen.
- */
- mkbp_set_host_active_via_event(active);
-}
-
static void board_init(void)
{
/* Enable USB Type-C interrupts. */
diff --git a/board/nocturne/board.h b/board/nocturne/board.h
index 63c409678b..83770875bb 100644
--- a/board/nocturne/board.h
+++ b/board/nocturne/board.h
@@ -86,6 +86,7 @@
/* MKBP */
#define CONFIG_MKBP_EVENT
#define CONFIG_KEYBOARD_PROTOCOL_MKBP
+#define CONFIG_MKBP_USE_GPIO
/* Sensors */
#define CONFIG_ALS
diff --git a/board/npcx_evb_arm/board.h b/board/npcx_evb_arm/board.h
index c6c09b1c58..0b3ab503e9 100644
--- a/board/npcx_evb_arm/board.h
+++ b/board/npcx_evb_arm/board.h
@@ -22,6 +22,7 @@
#define CONFIG_I2C_MASTER
#define CONFIG_KEYBOARD_BOARD_CONFIG
#define CONFIG_KEYBOARD_PROTOCOL_MKBP /* Instead of 8042 protocol of keyboard */
+#define CONFIG_MKBP_USE_GPIO
#define CONFIG_POWER_BUTTON
#define CONFIG_VBOOT_HASH
#define CONFIG_PWM_KBLIGHT
diff --git a/board/nucleo-f411re/board.c b/board/nucleo-f411re/board.c
index 0f7c57f1e3..d0a84638fd 100644
--- a/board/nucleo-f411re/board.c
+++ b/board/nucleo-f411re/board.c
@@ -8,7 +8,8 @@
#include "adc_chip.h"
#include "common.h"
#include "console.h"
-#include "driver/accelgyro_bmi160.h"
+#include "driver/accelgyro_icm_common.h"
+#include "driver/accelgyro_icm426xx.h"
#include "ec_version.h"
#include "gpio.h"
#include "hooks.h"
@@ -31,6 +32,7 @@ void user_button_evt(enum gpio_signal signal)
static void board_init(void)
{
gpio_enable_interrupt(GPIO_USER_BUTTON_L);
+ gpio_enable_interrupt(GPIO_ICM426XX_INT1_L);
/* No power control yet */
/* Go to S3 state */
@@ -39,7 +41,7 @@ static void board_init(void)
/* Go to S0 state */
hook_notify(HOOK_CHIPSET_RESUME);
}
-DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT);
+DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_LAST);
/* ADC channels */
const struct adc_t adc_channels[] = {
@@ -53,29 +55,28 @@ BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT);
/* I2C ports */
const struct i2c_port_t i2c_ports[] = {
- {"master", I2C_PORT_MASTER, 100,
+ {"master", I2C_PORT_MASTER, 400,
GPIO_MASTER_I2C_SCL, GPIO_MASTER_I2C_SDA},
};
-
const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports);
/* Base Sensor mutex */
static struct mutex g_base_mutex;
-static struct bmi160_drv_data_t g_bmi160_data;
+static struct icm_drv_data_t g_icm426xx_data;
struct motion_sensor_t motion_sensors[] = {
[BASE_ACCEL] = {
.name = "Base Accel",
.active_mask = SENSOR_ACTIVE_S0_S3,
- .chip = MOTIONSENSE_CHIP_BMI160,
+ .chip = MOTIONSENSE_CHIP_ICM426XX,
.type = MOTIONSENSE_TYPE_ACCEL,
.location = MOTIONSENSE_LOC_BASE,
- .drv = &bmi160_drv,
+ .drv = &icm426xx_drv,
.mutex = &g_base_mutex,
- .drv_data = &g_bmi160_data,
+ .drv_data = &g_icm426xx_data,
.port = I2C_PORT_ACCEL,
- .addr = BMI160_ADDR0,
+ .addr = ICM426XX_ADDR0_FLAGS,
.rot_standard_ref = NULL,
.default_range = 2, /* g, enough for laptop. */
.config = {
@@ -95,14 +96,14 @@ struct motion_sensor_t motion_sensors[] = {
[BASE_GYRO] = {
.name = "Base Gyro",
.active_mask = SENSOR_ACTIVE_S0_S3,
- .chip = MOTIONSENSE_CHIP_BMI160,
+ .chip = MOTIONSENSE_CHIP_ICM426XX,
.type = MOTIONSENSE_TYPE_GYRO,
.location = MOTIONSENSE_LOC_BASE,
- .drv = &bmi160_drv,
+ .drv = &icm426xx_drv,
.mutex = &g_base_mutex,
- .drv_data = &g_bmi160_data,
+ .drv_data = &g_icm426xx_data,
.port = I2C_PORT_ACCEL,
- .addr = BMI160_ADDR0,
+ .addr = ICM426XX_ADDR0_FLAGS,
.default_range = 1000, /* dps */
.rot_standard_ref = NULL,
},
diff --git a/board/nucleo-f411re/board.h b/board/nucleo-f411re/board.h
index 7ffa0b0f07..9c2380948b 100644
--- a/board/nucleo-f411re/board.h
+++ b/board/nucleo-f411re/board.h
@@ -34,7 +34,17 @@
#define CONFIG_UART_TX_REQ_CH STM32_REQ_USART2_TX
#define CONFIG_UART_RX_REQ_CH STM32_REQ_USART2_RX
-#define CONFIG_ACCELGYRO_BMI160
+#define CONFIG_ACCELGYRO_ICM426XX
+#define CONFIG_ACCEL_INTERRUPTS
+#define CONFIG_ACCELGYRO_ICM426XX_INT_EVENT TASK_EVENT_CUSTOM(4)
+
+#define CONFIG_MKBP_EVENT
+/* Enable sensor fifo, must also define the _SIZE and _THRES */
+/* FIFO size is in power of 2. */
+#define CONFIG_ACCEL_FIFO 512
+/* Depends on how fast the AP boots and typical ODRs */
+#define CONFIG_ACCEL_FIFO_THRES (CONFIG_ACCEL_FIFO / 3)
+
#define CONFIG_CMD_ACCELS
#define CONFIG_CMD_ACCEL_INFO
#define CONFIG_CMD_FLASH
diff --git a/board/nucleo-f411re/ec.tasklist b/board/nucleo-f411re/ec.tasklist
index 52135d97f8..847b82695c 100644
--- a/board/nucleo-f411re/ec.tasklist
+++ b/board/nucleo-f411re/ec.tasklist
@@ -17,7 +17,7 @@
* 's' is the stack size in bytes; must be a multiple of 8
*/
#define CONFIG_TASK_LIST \
- TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \
- TASK_NOTEST(HOSTCMD, host_command_task, NULL, TASK_STACK_SIZE) \
- TASK_NOTEST(MOTIONSENSE, motion_sense_task, NULL, TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_NOTEST(HOSTCMD, host_command_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_NOTEST(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_ALWAYS(CONSOLE, console_task, NULL, LARGER_TASK_STACK_SIZE)
diff --git a/board/nucleo-f411re/gpio.inc b/board/nucleo-f411re/gpio.inc
index 83a9e51a08..3ad0a0ff69 100644
--- a/board/nucleo-f411re/gpio.inc
+++ b/board/nucleo-f411re/gpio.inc
@@ -7,11 +7,12 @@
/* Interrupts */
GPIO_INT(USER_BUTTON_L, PIN(C, 13), GPIO_INT_BOTH, user_button_evt)
+GPIO_INT(ICM426XX_INT1_L, PIN(C, 10), GPIO_INT_FALLING, icm426xx_interrupt)
/* User LED */
GPIO(USER_LED, PIN(A, 5), GPIO_OUT_LOW)
+GPIO(EC_INT_L, PIN(A, 1), GPIO_OUT_HIGH)
-GPIO(BMI160_INT2_L, PIN(C, 10), GPIO_OUT_LOW)
/*
* I2C pins should be configured as inputs until I2C module is
* initialized. This will avoid driving the lines unintentionally.
diff --git a/board/oak/board.h b/board/oak/board.h
index 3e8dbd0698..b84b852679 100644
--- a/board/oak/board.h
+++ b/board/oak/board.h
@@ -83,6 +83,7 @@
#define CONFIG_LID_SWITCH
#define CONFIG_LOW_POWER_IDLE
#define CONFIG_MKBP_EVENT
+#define CONFIG_MKBP_USE_GPIO
#define CONFIG_POWER_BUTTON
#define CONFIG_POWER_COMMON
#define CONFIG_USB_CHARGER
diff --git a/board/rainier/board.h b/board/rainier/board.h
index 1c5e9b6a03..957c679a75 100644
--- a/board/rainier/board.h
+++ b/board/rainier/board.h
@@ -128,6 +128,7 @@
#define CONFIG_KEYBOARD_PROTOCOL_MKBP
#define CONFIG_MKBP_EVENT
+#define CONFIG_MKBP_USE_GPIO
/* Define the MKBP events which are allowed to wakeup AP in S3. */
#define CONFIG_MKBP_WAKEUP_MASK \
(EC_HOST_EVENT_MASK(EC_HOST_EVENT_POWER_BUTTON) |\
diff --git a/board/rammus/battery.c b/board/rammus/battery.c
index 916aac5fd3..d0cc2f13d2 100644
--- a/board/rammus/battery.c
+++ b/board/rammus/battery.c
@@ -7,11 +7,15 @@
#include "battery.h"
#include "battery_smart.h"
+#include "charge_manager.h"
#include "charge_state.h"
+#include "chipset.h"
#include "console.h"
#include "ec_commands.h"
#include "extpower.h"
+#include "hooks.h"
#include "gpio.h"
+#include "usb_pd.h"
#include "util.h"
static enum battery_present batt_pres_prev = BP_NOT_SURE;
@@ -128,3 +132,28 @@ enum battery_present battery_is_present(void)
return batt_pres;
}
+static void reduce_input_voltage_when_full(void)
+{
+ struct batt_params batt;
+ int max_pd_voltage_mv;
+ int active_chg_port;
+
+ active_chg_port = charge_manager_get_active_charge_port();
+ if (active_chg_port == CHARGE_PORT_NONE)
+ return;
+
+ battery_get_params(&batt);
+ if (!(batt.flags & BATT_FLAG_BAD_STATUS)) {
+ /* Lower our input voltage to 9V when battery is full. */
+ if ((batt.status & STATUS_FULLY_CHARGED) &&
+ chipset_in_state(CHIPSET_STATE_ANY_OFF))
+ max_pd_voltage_mv = 9000;
+ else
+ max_pd_voltage_mv = PD_MAX_VOLTAGE_MV;
+
+ if (pd_get_max_voltage() != max_pd_voltage_mv)
+ pd_set_external_voltage_limit(active_chg_port,
+ max_pd_voltage_mv);
+ }
+}
+DECLARE_HOOK(HOOK_SECOND, reduce_input_voltage_when_full, HOOK_PRIO_DEFAULT);
diff --git a/board/rammus/board.c b/board/rammus/board.c
index 4fc874a2f9..7577819fb8 100644
--- a/board/rammus/board.c
+++ b/board/rammus/board.c
@@ -11,6 +11,7 @@
#include "bd99992gw.h"
#include "board_config.h"
#include "button.h"
+#include "cbi_ssfc.h"
#include "charge_manager.h"
#include "charge_state.h"
#include "charge_ramp.h"
@@ -19,7 +20,11 @@
#include "console.h"
#include "cros_board_info.h"
#include "driver/accelgyro_bmi160.h"
+#include "driver/accelgyro_icm_common.h"
+#include "driver/accelgyro_icm426xx.h"
#include "driver/accel_bma2x2.h"
+#include "driver/accel_kionix.h"
+#include "driver/accel_kx022.h"
#include "driver/tcpm/ps8xxx.h"
#include "driver/tcpm/tcpci.h"
#include "driver/tcpm/tcpm.h"
@@ -600,9 +605,11 @@ static struct mutex g_lid_mutex;
static struct mutex g_base_mutex;
static struct bmi160_drv_data_t g_bmi160_data;
+static struct icm_drv_data_t g_icm426xx_data;
-/* BMA255 private data */
+/* private data */
static struct accelgyro_saved_data_t g_bma255_data;
+static struct kionix_accel_data g_kx022_data;
/* Matrix to rotate accelrator into standard reference frame */
const mat33_fp_t base_standard_ref = {
@@ -611,12 +618,93 @@ const mat33_fp_t base_standard_ref = {
{ 0, 0, FLOAT_TO_FP(-1) }
};
+const mat33_fp_t base_standard_ref_icm = {
+ { 0, FLOAT_TO_FP(1), 0 },
+ { FLOAT_TO_FP(1), 0, 0 },
+ { 0, 0, FLOAT_TO_FP(-1) }
+};
+
const mat33_fp_t lid_standard_ref = {
{ FLOAT_TO_FP(-1), 0, 0 },
{ 0, FLOAT_TO_FP(1), 0 },
{ 0, 0, FLOAT_TO_FP(-1) }
};
+struct motion_sensor_t base_accel_icm = {
+ .name = "Base Accel",
+ .active_mask = SENSOR_ACTIVE_S0_S3,
+ .chip = MOTIONSENSE_CHIP_ICM426XX,
+ .type = MOTIONSENSE_TYPE_ACCEL,
+ .location = MOTIONSENSE_LOC_BASE,
+ .drv = &icm426xx_drv,
+ .mutex = &g_base_mutex,
+ .drv_data = &g_icm426xx_data,
+ .port = I2C_PORT_ACCEL,
+ .addr = ICM426XX_ADDR0_FLAGS,
+ .rot_standard_ref = &base_standard_ref_icm,
+ .min_frequency = ICM426XX_ACCEL_MIN_FREQ,
+ .max_frequency = ICM426XX_ACCEL_MAX_FREQ,
+ .default_range = 4, /* g, to meet CDD 7.3.1/C-1-4 reqs */
+ .config = {
+ /* EC use accel for angle detection */
+ [SENSOR_CONFIG_EC_S0] = {
+ .odr = 10000 | ROUND_UP_FLAG,
+ .ec_rate = 100 * MSEC,
+ },
+ /* Sensor on in S3 */
+ [SENSOR_CONFIG_EC_S3] = {
+ .odr = 10000 | ROUND_UP_FLAG,
+ .ec_rate = 0,
+ },
+ },
+};
+
+struct motion_sensor_t base_gyro_icm = {
+ .name = "Base Gyro",
+ .active_mask = SENSOR_ACTIVE_S0_S3,
+ .chip = MOTIONSENSE_CHIP_ICM426XX,
+ .type = MOTIONSENSE_TYPE_GYRO,
+ .location = MOTIONSENSE_LOC_BASE,
+ .drv = &icm426xx_drv,
+ .mutex = &g_base_mutex,
+ .drv_data = &g_icm426xx_data,
+ .port = I2C_PORT_ACCEL,
+ .addr = ICM426XX_ADDR0_FLAGS,
+ .default_range = 1000, /* dps */
+ .rot_standard_ref = &base_standard_ref_icm,
+ .min_frequency = ICM426XX_GYRO_MIN_FREQ,
+ .max_frequency = ICM426XX_GYRO_MAX_FREQ,
+};
+
+struct motion_sensor_t lid_accel_kx022 = {
+ .name = "Lid Accel",
+ .active_mask = SENSOR_ACTIVE_S0_S3,
+ .chip = MOTIONSENSE_CHIP_KX022,
+ .type = MOTIONSENSE_TYPE_ACCEL,
+ .location = MOTIONSENSE_LOC_LID,
+ .drv = &kionix_accel_drv,
+ .mutex = &g_lid_mutex,
+ .drv_data = &g_kx022_data,
+ .port = I2C_PORT_ACCEL,
+ .addr = KX022_ADDR1,
+ .rot_standard_ref = &lid_standard_ref,
+ .min_frequency = KX022_ACCEL_MIN_FREQ,
+ .max_frequency = KX022_ACCEL_MAX_FREQ,
+ .default_range = 2, /* g, to support lid angle calculation. */
+ .config = {
+ /* EC use accel for angle detection */
+ [SENSOR_CONFIG_EC_S0] = {
+ .odr = 10000 | ROUND_UP_FLAG,
+ .ec_rate = 0,
+ },
+ /* Sensor on in S3 */
+ [SENSOR_CONFIG_EC_S3] = {
+ .odr = 10000 | ROUND_UP_FLAG,
+ .ec_rate = 0,
+ },
+ },
+};
+
struct motion_sensor_t motion_sensors[] = {
[LID_ACCEL] = {
.name = "Lid Accel",
@@ -693,6 +781,31 @@ struct motion_sensor_t motion_sensors[] = {
};
unsigned int motion_sensor_count = ARRAY_SIZE(motion_sensors);
+void motion_interrupt(enum gpio_signal signal)
+{
+ if (get_cbi_ssfc_base_sensor() == SSFC_SENSOR_BASE_ICM426XX)
+ icm426xx_interrupt(signal);
+ else
+ bmi160_interrupt(signal);
+}
+
+static void board_detect_motionsense(void)
+{
+ if (get_cbi_ssfc_lid_sensor() == SSFC_SENSOR_LID_KX022) {
+ motion_sensors[LID_ACCEL] = lid_accel_kx022;
+ ccprints("LID_ACCEL is KX022");
+ } else
+ ccprints("LID_ACCEL is BMA253");
+
+ if (get_cbi_ssfc_base_sensor() == SSFC_SENSOR_BASE_ICM426XX) {
+ motion_sensors[BASE_ACCEL] = base_accel_icm;
+ motion_sensors[BASE_GYRO] = base_gyro_icm;
+ ccprints("BASE_ACCEL is ICM426XX");
+ } else
+ ccprints("BASE_ACCEL is BMI160");
+}
+DECLARE_HOOK(HOOK_INIT, board_detect_motionsense, HOOK_PRIO_DEFAULT);
+
/* Enable or disable input devices, based on chipset state and tablet mode */
#ifndef TEST_BUILD
void lid_angle_peripheral_enable(int enable)
diff --git a/board/rammus/board.h b/board/rammus/board.h
index acd15753cb..ddd5320e41 100644
--- a/board/rammus/board.h
+++ b/board/rammus/board.h
@@ -8,6 +8,14 @@
#ifndef __CROS_EC_BOARD_H
#define __CROS_EC_BOARD_H
+/*
+ * By default, enable all console messages excepted HC, ACPI and event:
+ * The sensor stack is generating a lot of activity.
+ */
+#define CC_DEFAULT (CC_ALL & ~(CC_MASK(CC_EVENTS) | CC_MASK(CC_LPC)))
+#undef CONFIG_HOSTCMD_DEBUG_MODE
+#define CONFIG_HOSTCMD_DEBUG_MODE HCDEBUG_OFF
+
/* EC */
#define CONFIG_ADC
#define CONFIG_BACKLIGHT_LID
@@ -112,8 +120,11 @@
#define CONFIG_MKBP_USE_HOST_EVENT
#define CONFIG_ACCELGYRO_BMI160
#define CONFIG_ACCELGYRO_BMI160_INT_EVENT TASK_EVENT_CUSTOM(4)
+#define CONFIG_ACCELGYRO_ICM426XX
+#define CONFIG_ACCELGYRO_ICM426XX_INT_EVENT TASK_EVENT_CUSTOM(4)
#define CONFIG_ACCELGYRO_BMI160_INT2_OUTPUT
#define CONFIG_ACCEL_BMA255
+#define CONFIG_ACCEL_KX022
#define CONFIG_ACCEL_INTERRUPTS
#define CONFIG_LID_ANGLE
#define CONFIG_LID_ANGLE_SENSOR_BASE BASE_ACCEL
@@ -282,6 +293,7 @@ enum pwm_channel {
/* Board specific handlers */
void board_reset_pd_mcu(void);
void board_set_tcpc_power_mode(int port, int mode);
+void motion_interrupt(enum gpio_signal signal);
/* Sensors without hardware FIFO are in forced mode */
#define CONFIG_ACCEL_FORCE_MODE_MASK (1 << LID_ACCEL)
diff --git a/board/rammus/build.mk b/board/rammus/build.mk
index 21f6e4c99e..5a9cabdcae 100644
--- a/board/rammus/build.mk
+++ b/board/rammus/build.mk
@@ -9,7 +9,7 @@
CHIP:=npcx
CHIP_VARIANT:=npcx5m6g
-board-y=board.o
+board-y=board.o cbi_ssfc.o
board-$(CONFIG_BATTERY_SMART)+=battery.o
board-$(CONFIG_LED_COMMON)+=led.o
board-$(CONFIG_USB_POWER_DELIVERY)+=usb_pd_policy.o
diff --git a/board/rammus/cbi_ssfc.c b/board/rammus/cbi_ssfc.c
new file mode 100644
index 0000000000..e1f6fa4bd2
--- /dev/null
+++ b/board/rammus/cbi_ssfc.c
@@ -0,0 +1,36 @@
+/* Copyright 2021 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "cbi_ssfc.h"
+#include "common.h"
+#include "console.h"
+#include "cros_board_info.h"
+#include "hooks.h"
+
+#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ##args)
+
+/* Cache SSFC on init since we don't expect it to change in runtime */
+static union rammus_cbi_ssfc cached_ssfc;
+BUILD_ASSERT(sizeof(cached_ssfc) == sizeof(uint32_t));
+
+static void cbi_ssfc_init(void)
+{
+ if (cbi_get_ssfc(&cached_ssfc.raw_value) != EC_SUCCESS)
+ /* Default to 0 when CBI isn't populated */
+ cached_ssfc.raw_value = 0;
+
+ CPRINTS("Read CBI SSFC : 0x%04X", cached_ssfc.raw_value);
+}
+DECLARE_HOOK(HOOK_INIT, cbi_ssfc_init, HOOK_PRIO_INIT_I2C+1);
+
+enum ec_ssfc_lid_sensor get_cbi_ssfc_lid_sensor(void)
+{
+ return cached_ssfc.lid_sensor;
+}
+
+enum ec_ssfc_base_sensor get_cbi_ssfc_base_sensor(void)
+{
+ return cached_ssfc.base_sensor;
+}
diff --git a/board/rammus/cbi_ssfc.h b/board/rammus/cbi_ssfc.h
new file mode 100644
index 0000000000..2ca20f2376
--- /dev/null
+++ b/board/rammus/cbi_ssfc.h
@@ -0,0 +1,56 @@
+/* Copyright 2021 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef _RAMMUS_CBI_SSFC__H_
+#define _RAMMUS_CBI_SSFC__H_
+
+#include "stdint.h"
+
+/****************************************************************************
+ * Rammus CBI Second Source Factory Cache
+ */
+
+/*
+ * Lid Sensor (Bits 2-0)
+ */
+enum ec_ssfc_lid_sensor {
+ SSFC_SENSOR_LID_DEFAULT = 0,
+ SSFC_SENSOR_LID_BMA255 = 1,
+ SSFC_SENSOR_LID_KX022 = 2
+};
+
+/*
+ * Base Sensor (Bits 5-3)
+ */
+enum ec_ssfc_base_sensor {
+ SSFC_SENSOR_BASE_DEFAULT = 0,
+ SSFC_SENSOR_BASE_BMI160 = 1,
+ SSFC_SENSOR_BASE_ICM426XX = 2,
+};
+
+union rammus_cbi_ssfc {
+ struct {
+ enum ec_ssfc_lid_sensor lid_sensor : 3;
+ enum ec_ssfc_base_sensor base_sensor : 3;
+ uint32_t reserved_2 : 26;
+ };
+ uint32_t raw_value;
+};
+
+/**
+ * Get the Lid sensor type from SSFC_CONFIG.
+ *
+ * @return the Lid sensor board type.
+ */
+enum ec_ssfc_lid_sensor get_cbi_ssfc_lid_sensor(void);
+
+/**
+ * Get the base sensor type form SSFC_CONFIG.
+ *
+ * @return the base sensor board type.
+ */
+enum ec_ssfc_base_sensor get_cbi_ssfc_base_sensor(void);
+
+#endif /* _RAMMUS_CBI_SSFC__H_ */
diff --git a/board/rammus/gpio.inc b/board/rammus/gpio.inc
index 1a8f076aba..40cee5dfc5 100644
--- a/board/rammus/gpio.inc
+++ b/board/rammus/gpio.inc
@@ -26,7 +26,7 @@ GPIO_INT(USB_C0_VBUS_DET_L, PIN(9, 3), GPIO_INT_BOTH | GPIO_PULL_UP, vbus0_
GPIO_INT(USB_C1_VBUS_DET_L, PIN(9, 7), GPIO_INT_BOTH | GPIO_PULL_UP, vbus1_evt)
GPIO_INT(USB_C0_BC12_INT_L, PIN(D, 3), GPIO_INT_FALLING, usb0_evt)
GPIO_INT(USB_C1_BC12_INT_L, PIN(3, 3), GPIO_INT_FALLING, usb1_evt)
-GPIO_INT(BASE_SIXAXIS_INT_L, PIN(7, 3), GPIO_INT_FALLING | GPIO_SEL_1P8V, bmi160_interrupt)
+GPIO_INT(BASE_SIXAXIS_INT_L, PIN(7, 3), GPIO_INT_FALLING | GPIO_SEL_1P8V, motion_interrupt)
GPIO_INT(TABLET_MODE, PIN(C, 6), GPIO_INT_BOTH, hall_sensor_isr)
GPIO(EN_PP3300_TRACKPAD, PIN(4, 5), GPIO_OUT_LOW) /* Enable TouchPad */
diff --git a/board/rowan/board.h b/board/rowan/board.h
index 839dbdf262..95f34d9e3d 100644
--- a/board/rowan/board.h
+++ b/board/rowan/board.h
@@ -70,6 +70,7 @@
#define CONFIG_LID_SWITCH
#define CONFIG_LOW_POWER_IDLE
#define CONFIG_MKBP_EVENT
+#define CONFIG_MKBP_USE_GPIO
#define CONFIG_POWER_BUTTON
#define CONFIG_POWER_COMMON
#define CONFIG_USB_CHARGER
diff --git a/board/scarlet/board.h b/board/scarlet/board.h
index d6110c5ba3..74fc1ae2b2 100644
--- a/board/scarlet/board.h
+++ b/board/scarlet/board.h
@@ -180,6 +180,7 @@
#define CONFIG_KEYBOARD_PROTOCOL_MKBP
#define CONFIG_MKBP_EVENT
+#define CONFIG_MKBP_USE_GPIO
/* Define the MKBP events which are allowed to wakeup AP in S3. */
#define CONFIG_MKBP_WAKEUP_MASK \
(EC_HOST_EVENT_MASK(EC_HOST_EVENT_POWER_BUTTON) |\