diff options
author | Alexandru M Stan <amstan@chromium.org> | 2017-11-30 19:53:09 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-03-14 04:06:55 -0700 |
commit | 2cc7923423f95949a7e4f769ec8e3c8b02177d93 (patch) | |
tree | 8f5c84e5acd4616243fc098a01b6f7739ff368ef | |
parent | 4a1d2e3daf005766dc523216b8c3639fcd9595a2 (diff) | |
download | chrome-ec-2cc7923423f95949a7e4f769ec8e3c8b02177d93.tar.gz |
scarlet: Hookup the vsync pin and the sync driver
BUG=b:67743747
TEST=With kernel driver, turn on camera and see interrupt here for every
frame.
BRANCH=master
Change-Id: I447f753cb2224bf78442fbd15c5fa2d2c713a9e7
Signed-off-by: Alexandru M Stan <amstan@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/802832
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-by: Gwendal Grignou <gwendal@chromium.org>
-rw-r--r-- | board/scarlet/board.c | 38 | ||||
-rw-r--r-- | board/scarlet/board.h | 6 | ||||
-rw-r--r-- | board/scarlet/gpio.inc | 4 |
3 files changed, 46 insertions, 2 deletions
diff --git a/board/scarlet/board.c b/board/scarlet/board.c index af9b5926cd..5d3dc341ec 100644 --- a/board/scarlet/board.c +++ b/board/scarlet/board.c @@ -16,6 +16,7 @@ #include "ec_commands.h" #include "driver/accelgyro_bmi160.h" #include "driver/charger/rt946x.h" +#include "driver/sync.h" #include "driver/tcpm/fusb302.h" #include "driver/temp_sensor/tmp432.h" #include "extpower.h" @@ -244,6 +245,9 @@ static void board_init(void) /* Enable interrupts from BMI160 sensor. */ gpio_enable_interrupt(GPIO_ACCEL_INT_L); + /* Enable interrupt for the camera vsync. */ + gpio_enable_interrupt(GPIO_SYNC_INT); + /* Set SPI2 pins to high speed */ /* pins D0/D1/D3/D4 */ STM32_GPIO_OSPEEDR(GPIO_D) |= 0x000003cf; @@ -447,6 +451,40 @@ struct motion_sensor_t motion_sensors[] = { }, }, }, + [VSYNC] = { + .name = "Camera vsync", + .active_mask = SENSOR_ACTIVE_S0, + .chip = MOTIONSENSE_CHIP_GPIO, + .type = MOTIONSENSE_TYPE_SYNC, + .location = MOTIONSENSE_LOC_CAMERA, + .drv = &sync_drv, + .default_range = 0, + .min_frequency = 0, + .max_frequency = 1, + .config = { + /* AP: by default shutdown all sensors */ + [SENSOR_CONFIG_AP] = { + .odr = 0, + .ec_rate = 0, + }, + /* EC does not need in S0 */ + [SENSOR_CONFIG_EC_S0] = { + .odr = 0, + .ec_rate = 0, + }, + /* Sensor off in S3/S5 */ + [SENSOR_CONFIG_EC_S3] = { + .odr = 0, + .ec_rate = 0, + }, + /* Sensor off in S3/S5 */ + [SENSOR_CONFIG_EC_S5] = { + .odr = 0, + .ec_rate = 0, + }, + }, + + }, }; const unsigned int motion_sensor_count = ARRAY_SIZE(motion_sensors); #endif /* defined(HAS_TASK_MOTIONSENSE) */ diff --git a/board/scarlet/board.h b/board/scarlet/board.h index 6c030da25a..578f62d8f7 100644 --- a/board/scarlet/board.h +++ b/board/scarlet/board.h @@ -89,6 +89,11 @@ #define CONFIG_ACCEL_INTERRUPTS #define CONFIG_ACCELGYRO_BMI160_INT_EVENT TASK_EVENT_CUSTOM(4) +/* Camera VSYNC */ +#define CONFIG_SYNC +#define CONFIG_SYNC_COMMAND +#define CONFIG_SYNC_INT_EVENT TASK_EVENT_CUSTOM(5) + /* To be able to indicate the device is in tablet mode. */ #define CONFIG_TABLET_MODE_SWITCH @@ -196,6 +201,7 @@ enum power_signal { enum sensor_id { LID_ACCEL = 0, LID_GYRO, + VSYNC, }; #include "gpio_signal.h" diff --git a/board/scarlet/gpio.inc b/board/scarlet/gpio.inc index 8e382b774e..6a84791a4b 100644 --- a/board/scarlet/gpio.inc +++ b/board/scarlet/gpio.inc @@ -32,6 +32,8 @@ GPIO_INT(AP_OVERTEMP, PIN(E, 4), GPIO_INT_RISING | GPIO_PULL_DOWN, overtemp_interrupt) GPIO_INT(ACCEL_INT_L, PIN(D, 14), GPIO_INT_FALLING | GPIO_SEL_1P8V, bmi160_interrupt) +GPIO_INT(SYNC_INT, PIN(A, 12), GPIO_INT_RISING | GPIO_PULL_DOWN, + sync_interrupt) /* Voltage rails control pins */ GPIO(PP1800_S0_EN, PIN(D, 11), GPIO_OUT_LOW) @@ -71,8 +73,6 @@ GPIO(WP_L, PIN(E, 5), GPIO_INPUT) GPIO(CCD_MODE_ODL, PIN(C, 5), GPIO_INPUT | GPIO_PULL_UP) /* TODO(b:63772957): Add an interrupt handler for charger rt946x */ GPIO(CHARGER_INT_L, PIN(E, 6), GPIO_INPUT | GPIO_PULL_UP) -/* TODO(b:63773130): Add an interrupt handler for battery gauge max17055 */ -GPIO(BATTERY_INT_L, PIN(A, 12), GPIO_INPUT | GPIO_PULL_UP) /* Non-INT power signal pin */ GPIO(AP_CORE_PG, PIN(D, 7), GPIO_INPUT | GPIO_PULL_UP) /* Battery ID strap pin */ |