From 4a7e15fd51dac214d22567ffa080a447e5051d63 Mon Sep 17 00:00:00 2001 From: Yuval Peress Date: Fri, 15 Nov 2019 10:14:18 -0700 Subject: driver: lsm6dsm: Implement temperature reading Implement reading the internal chip temperature BUG=b:138303429,chromium:1023858 TEST=None BRANCH=None Change-Id: Ia077d5d439d5557333aae5325140ab1958da993e Signed-off-by: Yuval Peress Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1922293 Reviewed-by: Jack Rosenthal Reviewed-by: Gwendal Grignou --- driver/accelgyro_lsm6dsm.c | 16 ++++++++++++++++ driver/accelgyro_lsm6dsm.h | 2 ++ 2 files changed, 18 insertions(+) diff --git a/driver/accelgyro_lsm6dsm.c b/driver/accelgyro_lsm6dsm.c index 3d0c717a9b..64a1d22517 100644 --- a/driver/accelgyro_lsm6dsm.c +++ b/driver/accelgyro_lsm6dsm.c @@ -836,6 +836,21 @@ err_unlock: return ret; } +static int read_temp(const struct motion_sensor_t *s, int *temp) +{ + int ret; + uint8_t raw[2]; + + ret = st_raw_read_n_noinc(s->port, s->i2c_spi_addr_flags, + LSM6DSM_OUT_TEMP_L_ADDR, raw, 2); + if (ret != EC_SUCCESS) + return ret; + + *temp = C_TO_K(25 + (int)raw[1]); + + return EC_SUCCESS; +} + const struct accelgyro_drv lsm6dsm_drv = { .init = init, .read = read, @@ -844,6 +859,7 @@ const struct accelgyro_drv lsm6dsm_drv = { .get_resolution = st_get_resolution, .set_data_rate = lsm6dsm_set_data_rate, .get_data_rate = st_get_data_rate, + .read_temp = read_temp, .set_offset = st_set_offset, .get_offset = st_get_offset, #ifdef CONFIG_ACCEL_INTERRUPTS diff --git a/driver/accelgyro_lsm6dsm.h b/driver/accelgyro_lsm6dsm.h index f63f6af4a0..7be2219be0 100644 --- a/driver/accelgyro_lsm6dsm.h +++ b/driver/accelgyro_lsm6dsm.h @@ -109,6 +109,8 @@ #define LSM6DSM_STATUS_REG 0x1e +#define LSM6DSM_OUT_TEMP_L_ADDR 0x20 + #define LSM6DSM_GYRO_OUT_X_L_ADDR 0x22 #define LSM6DSM_ACCEL_OUT_X_L_ADDR 0x28 -- cgit v1.2.1