diff options
Diffstat (limited to 'driver/sensorhub_lsm6dsm.c')
-rw-r--r-- | driver/sensorhub_lsm6dsm.c | 136 |
1 files changed, 65 insertions, 71 deletions
diff --git a/driver/sensorhub_lsm6dsm.c b/driver/sensorhub_lsm6dsm.c index 7957925bf1..d801eb85f3 100644 --- a/driver/sensorhub_lsm6dsm.c +++ b/driver/sensorhub_lsm6dsm.c @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -13,10 +13,10 @@ #include "driver/sensorhub_lsm6dsm.h" #include "driver/stm_mems_common.h" -#define CPRINTF(format, args...) cprintf(CC_ACCEL, format, ## args) +#define CPRINTF(format, args...) cprintf(CC_ACCEL, format, ##args) -static int set_reg_bit_field(const struct motion_sensor_t *s, - uint8_t reg, uint8_t bit_field) +static int set_reg_bit_field(const struct motion_sensor_t *s, uint8_t reg, + uint8_t bit_field) { int tmp; int ret; @@ -29,8 +29,8 @@ static int set_reg_bit_field(const struct motion_sensor_t *s, return st_raw_write8(s->port, s->i2c_spi_addr_flags, reg, tmp); } -static int clear_reg_bit_field(const struct motion_sensor_t *s, - uint8_t reg, uint8_t bit_field) +static int clear_reg_bit_field(const struct motion_sensor_t *s, uint8_t reg, + uint8_t bit_field) { int tmp; int ret; @@ -45,14 +45,13 @@ static int clear_reg_bit_field(const struct motion_sensor_t *s, static inline int enable_sensorhub_func(const struct motion_sensor_t *s) { - return set_reg_bit_field(s, LSM6DSM_CTRL10_ADDR, - LSM6DSM_EMBED_FUNC_EN); + return set_reg_bit_field(s, LSM6DSM_CTRL10_ADDR, LSM6DSM_EMBED_FUNC_EN); } static inline int disable_sensorhub_func(const struct motion_sensor_t *s) { return clear_reg_bit_field(s, LSM6DSM_CTRL10_ADDR, - LSM6DSM_EMBED_FUNC_EN); + LSM6DSM_EMBED_FUNC_EN); } /* @@ -65,13 +64,13 @@ static inline int disable_sensorhub_func(const struct motion_sensor_t *s) static inline int enable_ereg_bank_acc(const struct motion_sensor_t *s) { return set_reg_bit_field(s, LSM6DSM_FUNC_CFG_ACC_ADDR, - LSM6DSM_FUNC_CFG_EN); + LSM6DSM_FUNC_CFG_EN); } static inline int disable_ereg_bank_acc(const struct motion_sensor_t *s) { return clear_reg_bit_field(s, LSM6DSM_FUNC_CFG_ACC_ADDR, - LSM6DSM_FUNC_CFG_EN); + LSM6DSM_FUNC_CFG_EN); } static inline int enable_aux_i2c_controller(const struct motion_sensor_t *s) @@ -87,22 +86,21 @@ static inline int disable_aux_i2c_controller(const struct motion_sensor_t *s) } static inline int restore_controller_cfg(const struct motion_sensor_t *s, - int cache) + int cache) { return st_raw_write8(s->port, s->i2c_spi_addr_flags, LSM6DSM_CONTROLLER_CFG_ADDR, cache); } -static int enable_i2c_pass_through(const struct motion_sensor_t *s, - int *cache) +static int enable_i2c_pass_through(const struct motion_sensor_t *s, int *cache) { int ret; ret = st_raw_read8(s->port, s->i2c_spi_addr_flags, LSM6DSM_CONTROLLER_CFG_ADDR, cache); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x MCR error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x MCR error ret: %d\n", __func__, + s->name, s->type, ret); return ret; } @@ -115,19 +113,18 @@ static int enable_i2c_pass_through(const struct motion_sensor_t *s, LSM6DSM_CONTROLLER_CFG_ADDR, *cache | LSM6DSM_EXT_TRIGGER_EN); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x MCETEN error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x MCETEN error ret: %d\n", __func__, + s->name, s->type, ret); return ret; } msleep(10); - ret = st_raw_write8(s->port, s->i2c_spi_addr_flags, - LSM6DSM_CONTROLLER_CFG_ADDR, - *cache & ~(LSM6DSM_EXT_TRIGGER_EN - | LSM6DSM_I2C_CONTROLLER_ON)); + ret = st_raw_write8( + s->port, s->i2c_spi_addr_flags, LSM6DSM_CONTROLLER_CFG_ADDR, + *cache & ~(LSM6DSM_EXT_TRIGGER_EN | LSM6DSM_I2C_CONTROLLER_ON)); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x MCC error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x MCC error ret: %d\n", __func__, + s->name, s->type, ret); restore_controller_cfg(s, *cache); return ret; } @@ -137,33 +134,31 @@ static int enable_i2c_pass_through(const struct motion_sensor_t *s, LSM6DSM_I2C_PASS_THRU_MODE); } -static inline int power_down_accel(const struct motion_sensor_t *s, - int *cache) +static inline int power_down_accel(const struct motion_sensor_t *s, int *cache) { int ret; - ret = st_raw_read8(s->port, s->i2c_spi_addr_flags, - LSM6DSM_CTRL1_ADDR, cache); + ret = st_raw_read8(s->port, s->i2c_spi_addr_flags, LSM6DSM_CTRL1_ADDR, + cache); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x CTRL1R error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x CTRL1R error ret: %d\n", __func__, + s->name, s->type, ret); return ret; } - return st_raw_write8(s->port, s->i2c_spi_addr_flags, - LSM6DSM_CTRL1_ADDR, + return st_raw_write8(s->port, s->i2c_spi_addr_flags, LSM6DSM_CTRL1_ADDR, *cache & ~LSM6DSM_XL_ODR_MASK); } static inline int restore_ctrl1(const struct motion_sensor_t *s, int cache) { - return st_raw_write8(s->port, s->i2c_spi_addr_flags, - LSM6DSM_CTRL1_ADDR, cache); + return st_raw_write8(s->port, s->i2c_spi_addr_flags, LSM6DSM_CTRL1_ADDR, + cache); } static int config_slv0_read(const struct motion_sensor_t *s, - const uint16_t slv_addr_flags, - uint16_t reg, uint8_t len) + const uint16_t slv_addr_flags, uint16_t reg, + uint8_t len) { int ret; uint16_t addr_8bit = I2C_STRIP_FLAGS(slv_addr_flags) << 1; @@ -172,16 +167,16 @@ static int config_slv0_read(const struct motion_sensor_t *s, LSM6DSM_SLV0_ADD_ADDR, (addr_8bit | LSM6DSM_SLV0_RD_BIT)); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x SA error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x SA error ret: %d\n", __func__, + s->name, s->type, ret); return ret; } ret = st_raw_write8(s->port, s->i2c_spi_addr_flags, LSM6DSM_SLV0_SUBADD_ADDR, reg); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x RA error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x RA error ret: %d\n", __func__, + s->name, s->type, ret); return ret; } @@ -193,8 +188,8 @@ static int config_slv0_read(const struct motion_sensor_t *s, LSM6DSM_SLV0_CONFIG_ADDR, (len & LSM6DSM_SLV0_NUM_OPS_MASK)); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x CFG error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x CFG error ret: %d\n", __func__, + s->name, s->type, ret); return ret; } @@ -202,16 +197,16 @@ static int config_slv0_read(const struct motion_sensor_t *s, } int sensorhub_config_ext_reg(const struct motion_sensor_t *s, - const uint16_t slv_addr_flags, - uint8_t reg, uint8_t val) + const uint16_t slv_addr_flags, uint8_t reg, + uint8_t val) { int ret; int tmp; ret = enable_i2c_pass_through(s, &tmp); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x ENI2C error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x ENI2C error ret: %d\n", __func__, + s->name, s->type, ret); return ret; } @@ -227,44 +222,44 @@ int sensorhub_config_slv0_read(const struct motion_sensor_t *s, int ret; if (len <= 0 || len > OUT_XYZ_SIZE) { - CPRINTF("%s: %s type:0x%x Invalid length: %d\n", - __func__, s->name, s->type, len); + CPRINTF("%s: %s type:0x%x Invalid length: %d\n", __func__, + s->name, s->type, len); return EC_ERROR_INVAL; } ret = power_down_accel(s, &tmp_xl_cfg); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x PDXL error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x PDXL error ret: %d\n", __func__, + s->name, s->type, ret); return ret; } ret = enable_ereg_bank_acc(s); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x ENERB error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x ENERB error ret: %d\n", __func__, + s->name, s->type, ret); goto out_restore_ctrl1; } ret = config_slv0_read(s, slv_addr_flags, reg, len); disable_ereg_bank_acc(s); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x CS0R error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x CS0R error ret: %d\n", __func__, + s->name, s->type, ret); goto out_restore_ctrl1; } ret = enable_sensorhub_func(s); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x ENSH error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x ENSH error ret: %d\n", __func__, + s->name, s->type, ret); goto out_restore_ctrl1; } ret = enable_aux_i2c_controller(s); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x ENI2CM error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x ENI2CM error ret: %d\n", __func__, + s->name, s->type, ret); disable_sensorhub_func(s); } out_restore_ctrl1: @@ -282,41 +277,40 @@ int sensorhub_slv0_data_read(const struct motion_sensor_t *s, uint8_t *raw) * contents of that register. */ ret = st_raw_read_n_noinc(s->port, s->i2c_spi_addr_flags, - LSM6DSM_SENSORHUB1_REG, - raw, OUT_XYZ_SIZE); + LSM6DSM_SENSORHUB1_REG, raw, OUT_XYZ_SIZE); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x SH1R error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x SH1R error ret: %d\n", __func__, + s->name, s->type, ret); return ret; } return EC_SUCCESS; } int sensorhub_check_and_rst(const struct motion_sensor_t *s, - const uint16_t slv_addr_flags, - uint8_t whoami_reg, uint8_t whoami_val, - uint8_t rst_reg, uint8_t rst_val) + const uint16_t slv_addr_flags, uint8_t whoami_reg, + uint8_t whoami_val, uint8_t rst_reg, + uint8_t rst_val) { int ret, tmp; int tmp_controller_cfg; ret = enable_i2c_pass_through(s, &tmp_controller_cfg); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x ENI2C error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x ENI2C error ret: %d\n", __func__, + s->name, s->type, ret); return ret; } ret = st_raw_read8(s->port, slv_addr_flags, whoami_reg, &tmp); if (ret != EC_SUCCESS) { - CPRINTF("%s: %s type:0x%x WAIR error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x WAIR error ret: %d\n", __func__, + s->name, s->type, ret); goto err_restore_controller_cfg; } if (tmp != whoami_val) { - CPRINTF("%s: %s type:0x%x WAIC error ret: %d\n", - __func__, s->name, s->type, ret); + CPRINTF("%s: %s type:0x%x WAIC error ret: %d\n", __func__, + s->name, s->type, ret); ret = EC_ERROR_UNKNOWN; goto err_restore_controller_cfg; } |