| /* Copyright 2021 The ChromiumOS Authors |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| /* Goroh sensors configuration */ |
| |
| #include "driver/accel_bma2x2.h" |
| #include "driver/accelgyro_bmi_common.h" |
| #include "driver/als_tcs3400.h" |
| #include "driver/temp_sensor/thermistor.h" |
| #include "lid_switch.h" |
| #include "motion_sense.h" |
| #include "spi.h" |
| #include "temp_sensor.h" |
| #include "thermal.h" |
| |
| static struct mutex g_base_mutex; |
| static struct mutex g_lid_mutex; |
| |
| static struct bmi_drv_data_t g_bmi160_data; |
| static struct accelgyro_saved_data_t g_bma253_data; |
| |
| struct motion_sensor_t motion_sensors[] = { |
| /* |
| * Note: bmi160: supports accelerometer and gyro sensor |
| * Requirement: accelerometer sensor must init before gyro sensor |
| * DO NOT change the order of the following table. |
| */ |
| [BASE_ACCEL] = { |
| .name = "Base Accel", |
| .active_mask = SENSOR_ACTIVE_S0_S3, |
| .chip = MOTIONSENSE_CHIP_BMI160, |
| .type = MOTIONSENSE_TYPE_ACCEL, |
| .location = MOTIONSENSE_LOC_BASE, |
| .drv = &bmi160_drv, |
| .mutex = &g_base_mutex, |
| .drv_data = &g_bmi160_data, |
| .port = I2C_PORT_ACCEL, |
| .i2c_spi_addr_flags = BMI160_ADDR0_FLAGS, |
| .rot_standard_ref = NULL, /* identity matrix */ |
| .default_range = 4, /* g, to meet CDD 7.3.1/C-1-4 reqs */ |
| .min_frequency = BMI_ACCEL_MIN_FREQ, |
| .max_frequency = BMI_ACCEL_MAX_FREQ, |
| .config = { |
| /* Sensor on for angle detection */ |
| [SENSOR_CONFIG_EC_S0] = { |
| .odr = 10000 | ROUND_UP_FLAG, |
| .ec_rate = 100 * MSEC, |
| }, |
| /* Sensor on for angle detection */ |
| [SENSOR_CONFIG_EC_S3] = { |
| .odr = 10000 | ROUND_UP_FLAG, |
| .ec_rate = 100 * MSEC, |
| }, |
| }, |
| }, |
| [BASE_GYRO] = { |
| .name = "Base Gyro", |
| .active_mask = SENSOR_ACTIVE_S0_S3, |
| .chip = MOTIONSENSE_CHIP_BMI160, |
| .type = MOTIONSENSE_TYPE_GYRO, |
| .location = MOTIONSENSE_LOC_BASE, |
| .drv = &bmi160_drv, |
| .mutex = &g_base_mutex, |
| .drv_data = &g_bmi160_data, |
| .port = I2C_PORT_ACCEL, |
| .i2c_spi_addr_flags = BMI160_ADDR0_FLAGS, |
| .default_range = 1000, /* dps */ |
| .rot_standard_ref = NULL, /* identity matrix */ |
| .min_frequency = BMI_GYRO_MIN_FREQ, |
| .max_frequency = BMI_GYRO_MAX_FREQ, |
| }, |
| [LID_ACCEL] = { |
| .name = "Lid Accel", |
| .active_mask = SENSOR_ACTIVE_S0_S3, |
| .chip = MOTIONSENSE_CHIP_BMA255, |
| .type = MOTIONSENSE_TYPE_ACCEL, |
| .location = MOTIONSENSE_LOC_LID, |
| .drv = &bma2x2_accel_drv, |
| .mutex = &g_lid_mutex, |
| .drv_data = &g_bma253_data, |
| .port = I2C_PORT_ACCEL, |
| .i2c_spi_addr_flags = BMA2x2_I2C_ADDR1_FLAGS, |
| .rot_standard_ref = NULL, /* identity matrix */ |
| .min_frequency = BMI_GYRO_MIN_FREQ, |
| .min_frequency = BMA255_ACCEL_MIN_FREQ, |
| .max_frequency = BMA255_ACCEL_MAX_FREQ, |
| .default_range = 2, /* g, to support tablet mode */ |
| .config = { |
| /* EC use accel for angle detection */ |
| [SENSOR_CONFIG_EC_S0] = { |
| .odr = 10000 | ROUND_UP_FLAG, |
| }, |
| /* Sensor on in S3 */ |
| [SENSOR_CONFIG_EC_S3] = { |
| .odr = 10000 | ROUND_UP_FLAG, |
| }, |
| }, |
| }, |
| }; |
| const unsigned int motion_sensor_count = ARRAY_SIZE(motion_sensors); |
| |
| /* Temperature sensor configuration */ |
| const struct temp_sensor_t temp_sensors[] = { |
| [TEMP_SENSOR_CPU] = { |
| .name = "CPU", |
| .type = TEMP_SENSOR_TYPE_CPU, |
| .read = get_temp_3v3_51k1_47k_4050b, |
| .idx = ADC_TEMP_SENSOR_CPU, |
| }, |
| [TEMP_SENSOR_GPU] = { |
| .name = "GPU", |
| .type = TEMP_SENSOR_TYPE_BOARD, |
| .read = get_temp_3v3_51k1_47k_4050b, |
| .idx = ADC_TEMP_SENSOR_GPU, |
| }, |
| [TEMP_SENSOR_CHARGER] = { |
| .name = "Charger", |
| .type = TEMP_SENSOR_TYPE_BOARD, |
| .read = get_temp_3v3_51k1_47k_4050b, |
| .idx = ADC_TEMP_SENSOR_CHARGER, |
| }, |
| }; |
| BUILD_ASSERT(ARRAY_SIZE(temp_sensors) == TEMP_SENSOR_COUNT); |