diff options
author | Edward Hill <ecgh@chromium.org> | 2018-12-04 12:28:16 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2018-12-07 18:05:27 +0000 |
commit | d24066f9db7f903f81405f8f78c323b7d1e716ff (patch) | |
tree | c2c97767cd9294d7823778b453e976834947398a /board | |
parent | aa08bf00dfdf60f7882f4bc8bcd76b568c86057b (diff) | |
download | chrome-ec-d24066f9db7f903f81405f8f78c323b7d1e716ff.tar.gz |
aleena/kasumi: Add support for motion sensors
Adjust Grunt baseboard to allow for per-sku support for motion sensors.
Use this to enable motion sensors for SKU 82 (Kasumi360).
Only enable the interrupt if the sensor is present.
BUG=b:119795894
BRANCH=grunt
TEST=Kasumi360 `ectool motionsense lid_angle` shows correct angles.
Change-Id: Icb34359d7ac4cd894776e134c2c1fb7032741f03
Signed-off-by: Edward Hill <ecgh@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/1362634
Reviewed-by: Ryan Zhang <ryan.zhang@quanta.corp-partner.google.com>
Reviewed-by: Jett Rink <jettrink@chromium.org>
Commit-Queue: Ryan Zhang <ryan.zhang@quanta.corp-partner.google.com>
Tested-by: Ryan Zhang <ryan.zhang@quanta.corp-partner.google.com>
Diffstat (limited to 'board')
-rw-r--r-- | board/aleena/board.c | 13 | ||||
-rw-r--r-- | board/aleena/board.h | 18 | ||||
-rw-r--r-- | board/aleena/ec.tasklist | 1 | ||||
-rw-r--r-- | board/aleena/gpio.inc | 1 | ||||
-rw-r--r-- | board/careena/board.c | 5 | ||||
-rw-r--r-- | board/delan/board.c | 5 | ||||
-rw-r--r-- | board/grunt/board.c | 3 | ||||
-rw-r--r-- | board/liara/board.c | 5 |
8 files changed, 32 insertions, 19 deletions
diff --git a/board/aleena/board.c b/board/aleena/board.c index e10d0da223..5ba79d81fa 100644 --- a/board/aleena/board.c +++ b/board/aleena/board.c @@ -14,6 +14,7 @@ #include "common.h" #include "compile_time_macros.h" #include "console.h" +#include "driver/accelgyro_bmi160.h" #include "driver/led/lm3630a.h" #include "driver/ppc/sn5s330.h" #include "driver/tcpm/anx74xx.h" @@ -102,10 +103,18 @@ const struct pwm_t pwm_channels[] = { }; BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); -static void board_init(void) +void board_update_sensor_config_from_sku(void) { + if (board_is_convertible()) { + /* Enable Gyro interrupts */ + gpio_enable_interrupt(GPIO_6AXIS_INT_L); + } else { + motion_sensor_count = 0; + /* Gyro is not present, don't allow line to float */ + gpio_set_flags(GPIO_6AXIS_INT_L, + GPIO_INPUT | GPIO_PULL_DOWN); + } } -DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); void board_overcurrent_event(int port) { diff --git a/board/aleena/board.h b/board/aleena/board.h index a32ec2ffd2..aeb75404a6 100644 --- a/board/aleena/board.h +++ b/board/aleena/board.h @@ -29,6 +29,24 @@ /* KB backlight driver */ #define CONFIG_LED_DRIVER_LM3630A +/* Motion sensing drivers */ +#define CONFIG_ACCELGYRO_BMI160 +#define CONFIG_ACCELGYRO_BMI160_INT_EVENT TASK_EVENT_CUSTOM(4) +#define CONFIG_ACCEL_INTERRUPTS +#define CONFIG_ACCEL_KX022 +#define CONFIG_CMD_ACCELS +#define CONFIG_CMD_ACCEL_INFO +#define CONFIG_TABLET_MODE +#define CONFIG_LID_ANGLE +#define CONFIG_LID_ANGLE_UPDATE +#define CONFIG_LID_ANGLE_SENSOR_BASE BASE_ACCEL +#define CONFIG_LID_ANGLE_SENSOR_LID LID_ACCEL +/* + * Slew rate on the PP1800_SENSOR load switch requires a short delay on startup. + */ +#undef CONFIG_MOTION_SENSE_RESUME_DELAY_US +#define CONFIG_MOTION_SENSE_RESUME_DELAY_US (10 * MSEC) + #ifndef __ASSEMBLER__ enum pwm_channel { diff --git a/board/aleena/ec.tasklist b/board/aleena/ec.tasklist index 67453cd670..97711213a1 100644 --- a/board/aleena/ec.tasklist +++ b/board/aleena/ec.tasklist @@ -25,6 +25,7 @@ TASK_ALWAYS(USB_CHG_P0, usb_charger_task, 0, TASK_STACK_SIZE) \ TASK_ALWAYS(USB_CHG_P1, usb_charger_task, 1, TASK_STACK_SIZE) \ TASK_ALWAYS(CHARGER, charger_task, NULL, VENTI_TASK_STACK_SIZE) \ + TASK_ALWAYS(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \ TASK_NOTEST(CHIPSET, chipset_task, NULL, VENTI_TASK_STACK_SIZE) \ TASK_NOTEST(KEYPROTO, keyboard_protocol_task, NULL, TASK_STACK_SIZE) \ TASK_NOTEST(PDCMD, pd_command_task, NULL, LARGER_TASK_STACK_SIZE) \ diff --git a/board/aleena/gpio.inc b/board/aleena/gpio.inc index 085aa9a1d6..1256ecb6cb 100644 --- a/board/aleena/gpio.inc +++ b/board/aleena/gpio.inc @@ -23,6 +23,7 @@ GPIO_INT(WP_L, PIN(A, 1), GPIO_INT_BOTH, switch_interrupt) GPIO_INT(VOLUME_DOWN_L, PIN(7, 0), GPIO_INT_BOTH | GPIO_PULL_UP, button_interrupt) GPIO_INT(VOLUME_UP_L, PIN(7, 5), GPIO_INT_BOTH | GPIO_PULL_UP, button_interrupt) GPIO_INT(USB_C0_CABLE_DET, PIN(3, 7), GPIO_INT_RISING, anx74xx_cable_det_interrupt) +GPIO_INT(6AXIS_INT_L, PIN(8, 6), GPIO_INT_FALLING | GPIO_SEL_1P8V, bmi160_interrupt) GPIO(EN_PWR_A, PIN(E, 2), GPIO_OUT_LOW) /* Enable Power */ GPIO(EN_PP1800_SENSOR, PIN(6, 7), GPIO_OUT_LOW) /* Enable Power */ diff --git a/board/careena/board.c b/board/careena/board.c index 495b4a9cae..380a936fd1 100644 --- a/board/careena/board.c +++ b/board/careena/board.c @@ -101,11 +101,6 @@ const struct pwm_t pwm_channels[] = { }; BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); -static void board_init(void) -{ -} -DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); - void board_overcurrent_event(int port) { enum gpio_signal signal = (port == 0) ? GPIO_USB_C0_OC_L diff --git a/board/delan/board.c b/board/delan/board.c index 0c0924e8bd..f5b5f5b2dd 100644 --- a/board/delan/board.c +++ b/board/delan/board.c @@ -114,11 +114,6 @@ const struct pwm_t pwm_channels[] = { }; BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); -static void board_init(void) -{ -} -DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); - void board_overcurrent_event(int port) { enum gpio_signal signal = (port == 0) ? GPIO_USB_C0_OC_L diff --git a/board/grunt/board.c b/board/grunt/board.c index 3477666679..f60e3be18a 100644 --- a/board/grunt/board.c +++ b/board/grunt/board.c @@ -118,12 +118,11 @@ const struct pwm_t pwm_channels[] = { }; BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); -static void board_init(void) +void board_update_sensor_config_from_sku(void) { /* Enable Gyro interrupts */ gpio_enable_interrupt(GPIO_6AXIS_INT_L); } -DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); void board_overcurrent_event(int port) { diff --git a/board/liara/board.c b/board/liara/board.c index 5a7cbdf23e..0e8a9abb5e 100644 --- a/board/liara/board.c +++ b/board/liara/board.c @@ -114,11 +114,6 @@ const struct pwm_t pwm_channels[] = { }; BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); -static void board_init(void) -{ -} -DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); - void board_overcurrent_event(int port) { enum gpio_signal signal = (port == 0) ? GPIO_USB_C0_OC_L |