From 27836f5fa97eee3479c56ddca6892a5ed0c887bd Mon Sep 17 00:00:00 2001 From: Alexandru M Stan Date: Thu, 7 Feb 2019 17:42:38 -0800 Subject: cheza: Add ALS sensor Added definitions for the OPT3001 sensor on our board. TEST=In S0, "> accelread 2" should yield an illuminance number on the "Last calib." line. Shine a light near the camera to modify the value. TEST=On the AP console: localhost /sys/bus/iio/devices/iio:device4 # watch -n 0.1 cat in_illuminance_input BUG=b/112658076 BRANCH=master Change-Id: I0c4890c83c889429b4908821d6157f3809308d7f Signed-off-by: Alexandru M Stan Reviewed-on: https://chromium-review.googlesource.com/1460092 Reviewed-by: Wai-Hong Tam --- board/cheza/board.c | 27 +++++++++++++++++++++++++++ board/cheza/board.h | 8 ++++++++ 2 files changed, 35 insertions(+) (limited to 'board/cheza') diff --git a/board/cheza/board.c b/board/cheza/board.c index 8939296dc2..460708e566 100644 --- a/board/cheza/board.c +++ b/board/cheza/board.c @@ -6,12 +6,14 @@ /* Cheza board-specific configuration */ #include "adc_chip.h" +#include "als.h" #include "button.h" #include "charge_manager.h" #include "charge_state.h" #include "chipset.h" #include "extpower.h" #include "driver/accelgyro_bmi160.h" +#include "driver/als_opt3001.h" #include "driver/ppc/sn5s330.h" #include "driver/tcpm/anx74xx.h" #include "driver/tcpm/ps8xxx.h" @@ -604,6 +606,11 @@ uint16_t tcpc_get_alert_status(void) static struct mutex g_lid_mutex; static struct bmi160_drv_data_t g_bmi160_data; +static struct opt3001_drv_data_t g_opt3001_data = { + .scale = 1, + .uscale = 0, + .offset = 0, +}; /* Matrix to rotate accelerometer into standard reference frame */ const mat33_fp_t base_standard_ref = { @@ -655,5 +662,25 @@ struct motion_sensor_t motion_sensors[] = { .min_frequency = BMI160_GYRO_MIN_FREQ, .max_frequency = BMI160_GYRO_MAX_FREQ, }, + [LID_ALS] = { + .name = "Light", + .active_mask = SENSOR_ACTIVE_S0, + .chip = MOTIONSENSE_CHIP_OPT3001, + .type = MOTIONSENSE_TYPE_LIGHT, + .location = MOTIONSENSE_LOC_LID, + .drv = &opt3001_drv, + .drv_data = &g_opt3001_data, + .port = I2C_PORT_SENSOR, + .addr = OPT3001_I2C_ADDR, + .rot_standard_ref = NULL, + .default_range = 0x10000, /* scale = 1; uscale = 0 */ + .min_frequency = OPT3001_LIGHT_MIN_FREQ, + .max_frequency = OPT3001_LIGHT_MAX_FREQ, + .config = { + [SENSOR_CONFIG_EC_S0] = { + .odr = 1000, + }, + }, + }, }; const unsigned int motion_sensor_count = ARRAY_SIZE(motion_sensors); diff --git a/board/cheza/board.h b/board/cheza/board.h index a243de34f3..d005f624d1 100644 --- a/board/cheza/board.h +++ b/board/cheza/board.h @@ -133,6 +133,10 @@ #define CONFIG_ACCEL_FIFO_THRES (CONFIG_ACCEL_FIFO / 3) #define CONFIG_CMD_ACCELS #define CONFIG_CMD_ACCEL_INFO +#define CONFIG_ALS +#define CONFIG_ALS_OPT3001 +#define ALS_COUNT 1 +#define OPT3001_I2C_ADDR OPT3001_I2C_ADDR1 /* PD */ #define PD_POWER_SUPPLY_TURN_ON_DELAY 30000 /* us */ @@ -190,6 +194,7 @@ enum adc_channel { enum sensor_id { LID_ACCEL = 0, LID_GYRO, + LID_ALS, }; enum pwm_channel { @@ -206,6 +211,9 @@ void board_reset_pd_mcu(void); /* Base detection interrupt handler */ void base_detect_interrupt(enum gpio_signal signal); +/* Sensors without hardware FIFO are in forced mode */ +#define CONFIG_ACCEL_FORCE_MODE_MASK (1 << LID_ALS) + #endif /* !defined(__ASSEMBLER__) */ #endif /* __CROS_EC_BOARD_H */ -- cgit v1.2.1