diff options
Diffstat (limited to 'board')
-rw-r--r-- | board/OWNERS | 2 | ||||
-rw-r--r-- | board/aleena/board.h | 2 | ||||
-rw-r--r-- | board/cheza/board.h | 1 | ||||
-rw-r--r-- | board/elm/board.h | 1 | ||||
-rw-r--r-- | board/jerry/board.h | 1 | ||||
-rw-r--r-- | board/kukui/board.h | 1 | ||||
-rw-r--r-- | board/meowth_fp/board.h | 1 | ||||
-rw-r--r-- | board/nocturne/board.c | 20 | ||||
-rw-r--r-- | board/nocturne/board.h | 1 | ||||
-rw-r--r-- | board/npcx_evb_arm/board.h | 1 | ||||
-rw-r--r-- | board/nucleo-f411re/board.c | 27 | ||||
-rw-r--r-- | board/nucleo-f411re/board.h | 12 | ||||
-rw-r--r-- | board/nucleo-f411re/ec.tasklist | 6 | ||||
-rw-r--r-- | board/nucleo-f411re/gpio.inc | 3 | ||||
-rw-r--r-- | board/oak/board.h | 1 | ||||
-rw-r--r-- | board/rainier/board.h | 1 | ||||
-rw-r--r-- | board/rammus/battery.c | 29 | ||||
-rw-r--r-- | board/rammus/board.c | 115 | ||||
-rw-r--r-- | board/rammus/board.h | 12 | ||||
-rw-r--r-- | board/rammus/build.mk | 2 | ||||
-rw-r--r-- | board/rammus/cbi_ssfc.c | 36 | ||||
-rw-r--r-- | board/rammus/cbi_ssfc.h | 56 | ||||
-rw-r--r-- | board/rammus/gpio.inc | 2 | ||||
-rw-r--r-- | board/rowan/board.h | 1 | ||||
-rw-r--r-- | board/scarlet/board.h | 1 |
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) |\ |