diff --git a/driver/accelgyro_bmi160.c b/driver/accelgyro_bmi160.c index 4be19e9266..359d8bddfd 100644 --- a/driver/accelgyro_bmi160.c +++ b/driver/accelgyro_bmi160.c @@ -1261,3 +1261,19 @@ struct i2c_stress_test_dev bmi160_i2c_stress_test_dev = { .i2c_write = &raw_write8, }; #endif /* CONFIG_CMD_I2C_STRESS_TEST_ACCEL */ + +int bmi160_get_sensor_temp(int idx, int *temp_ptr) +{ + struct motion_sensor_t *s = &motion_sensors[idx]; + int16_t temp; + int ret; + + ret = raw_read_n(s->port, s->addr, BMI160_TEMPERATURE_0, + (uint8_t *)&temp, sizeof(temp)); + + if (ret || temp == BMI160_INVALID_TEMP) + return EC_ERROR_NOT_POWERED; + + *temp_ptr = C_TO_K(23 + ((temp + 256) >> 9)); + return 0; +} diff --git a/driver/accelgyro_bmi160.h b/driver/accelgyro_bmi160.h index ec43fb4a9d..b498503b3a 100644 --- a/driver/accelgyro_bmi160.h +++ b/driver/accelgyro_bmi160.h @@ -127,6 +127,8 @@ #define BMI160_TEMPERATURE_0 0x20 #define BMI160_TEMPERATURE_1 0x21 +#define BMI160_INVALID_TEMP 0x8000 + #define BMI160_FIFO_LENGTH_0 0x22 #define BMI160_FIFO_LENGTH_1 0x23 @@ -463,4 +465,5 @@ int raw_mag_write8(const int port, const int addr, const uint8_t reg, int data); extern struct i2c_stress_test_dev bmi160_i2c_stress_test_dev; #endif +int bmi160_get_sensor_temp(int idx, int *temp_ptr); #endif /* __CROS_EC_ACCELGYRO_BMI160_H */