summaryrefslogtreecommitdiff
path: root/driver/accelgyro_lsm6ds0.c
diff options
context:
space:
mode:
authorTom Hughes <tomhughes@chromium.org>2022-09-21 14:08:36 -0700
committerTom Hughes <tomhughes@chromium.org>2022-09-22 12:59:38 -0700
commitc453fd704268ef72de871b0c5ac7a989de662334 (patch)
treefcf6ce5810f9ff9e3c8cce434812dd75492269ed /driver/accelgyro_lsm6ds0.c
parent6c1587ca70f558b4f96b3f0b18ad8b027d3ba99d (diff)
parent28712dae9d7ed1e694f7622cc083afa71090d4d5 (diff)
downloadchrome-ec-c453fd704268ef72de871b0c5ac7a989de662334.tar.gz
Merge remote-tracking branch cros/main into firmware-fpmcu-dartmonkey-releasefirmware-fpmcu-dartmonkey-release
Generated by: ./util/update_release_branch.py --board dartmonkey --relevant_paths_file ./util/fingerprint-relevant-paths.txt firmware-fpmcu-dartmonkey-release Relevant changes: git log --oneline 6c1587ca70..28712dae9d -- board/nocturne_fp board/dartmonkey common/fpsensor docs/fingerprint driver/fingerprint util/getversion.sh ded9307b79 util/getversion.sh: Fix version when not in a git repo 956055e692 board: change Google USB vendor info 71b2ef709d Update license boilerplate text in source code files 33e11afda0 Revert "fpsensor: Build fpsensor source file with C++" c8d0360723 fpsensor: Build fpsensor source file with C++ bc113abd53 fpsensor: Fix g++ compiler error 150a58a0dc fpsensor: Fix fp_set_sensor_mode return type b33b5ce85b fpsensor: Remove nested designators for C++ compatibility 2e864b2539 tree-wide: const-ify argv for console commands 56d8b360f9 test: Add test for get ikm failure when seed not set 3a3d6c3690 test: Add test for fpsensor trivial key failure 233e6bbd08 fpsensor_crypto: Abstract calls to hmac_SHA256 0a041b285b docs/fingerprint: Typo correction c03fab67e2 docs/fingerprint: Fix the path of fputils.py 0b5d4baf5a util/getversion.sh: Fix empty file list handling 6e128fe760 FPMCU dev board environment with Satlab 3eb29b6aa5 builtin: Move ssize_t to sys/types.h 345d62ebd1 docs/fingerprint: Update power numbers for latest dartmonkey release c25ffdb316 common: Conditionally support printf %l and %i modifiers 9a3c514b45 test: Add a test to check if the debugger is connected 54e603413f Move standard library tests to their own file 43fa6b4bf8 docs/fingerprint: Update power numbers for latest bloonchipper release 25536f9a84 driver/fingerprint/fpc/bep/fpc_sensor_spi.c: Format with clang-format 4face99efd driver/fingerprint/fpc/libfp/fpc_sensor_pal.h: Format with clang-format 738de2b575 trng: Rename rand to trng_rand 14b8270edd docs/fingerprint: Update dragonclaw power numbers 0b268f93d1 driver/fingerprint/fpc/libfp/fpc_private.c: Format with clang-format f80da163f2 driver/fingerprint/fpc/libfp/fpc_private.h: Format with clang-format a0751778f4 board/nocturne_fp/ro_workarounds.c: Format with clang-format 5e9c85c9b1 driver/fingerprint/fpc/libfp/fpc_sensor_pal.c: Format with clang-format c1f9dd3cf8 driver/fingerprint/fpc/libfp/fpc_bio_algorithm.h: Format with clang-format eb1e1bed8d driver/fingerprint/fpc/libfp/fpc1145_private.h: Format with clang-format 6e7b611821 driver/fingerprint/fpc/bep/fpc_bio_algorithm.h: Format with clang-format e0589cd5e2 driver/fingerprint/fpc/bep/fpc1035_private.h: Format with clang-format 58f0246dbe board/nocturne_fp/board_ro.c: Format with clang-format 7905e556a0 common/fpsensor/fpsensor_crypto.c: Format with clang-format 21289d170c driver/fingerprint/fpc/bep/fpc1025_private.h: Format with clang-format 98a20f937e common/fpsensor/fpsensor_state.c: Format with clang-format a2d255d8af common/fpsensor/fpsensor.c: Format with clang-format 84e53a65da board/nocturne_fp/board.h: Format with clang-format 73055eeb3f driver/fingerprint/fpc/bep/fpc_private.c: Format with clang-format 0f7b5cb509 common/fpsensor/fpsensor_private.h: Format with clang-format 1ceade6e65 driver/fingerprint/fpc/bep/fpc_private.h: Format with clang-format dca9d74321 Revert "trng: Rename rand to trng_rand" a6b0b3554f trng: Rename rand to trng_rand 28d0b75b70 third_party/boringssl: Remove unused header BRANCH=None BUG=b:244387210 b:242720240 b:215613183 b:242720910 b:236386294 BUG=b:234181908 b:244781166 b:234781655 b:234143158 b:234181908 BUG=b:237344361 b:236025198 b:234181908 b:180945056 chromium:1098010 BUG=b:246424843 b:234181908 b:131913998 TEST=`make -j buildall` TEST=./util/run_device_tests.py --board dartmonkey Test "aes": PASSED Test "cec": PASSED Test "cortexm_fpu": PASSED Test "crc": PASSED Test "flash_physical": PASSED Test "flash_write_protect": PASSED Test "fpsensor_hw": PASSED Test "fpsensor_spi_ro": PASSED Test "fpsensor_spi_rw": PASSED Test "fpsensor_uart_ro": PASSED Test "fpsensor_uart_rw": PASSED Test "mpu_ro": PASSED Test "mpu_rw": PASSED Test "mutex": PASSED Test "pingpong": PASSED Test "printf": PASSED Test "queue": PASSED Test "rollback_region0": PASSED Test "rollback_region1": PASSED Test "rollback_entropy": PASSED Test "rtc": PASSED Test "sha256": PASSED Test "sha256_unrolled": PASSED Test "static_if": PASSED Test "stdlib": PASSED Test "system_is_locked_wp_on": PASSED Test "system_is_locked_wp_off": PASSED Test "timer_dos": PASSED Test "utils": PASSED Test "utils_str": PASSED Test "panic_data_dartmonkey_v2.0.2887": PASSED Test "panic_data_nocturne_fp_v2.2.64": PASSED Test "panic_data_nami_fp_v2.2.144": PASSED Force-Relevant-Builds: all Signed-off-by: Tom Hughes <tomhughes@chromium.org> Change-Id: I2c312583a709fedae8fe11d92c22328c3b634bc7
Diffstat (limited to 'driver/accelgyro_lsm6ds0.c')
-rw-r--r--driver/accelgyro_lsm6ds0.c120
1 files changed, 50 insertions, 70 deletions
diff --git a/driver/accelgyro_lsm6ds0.c b/driver/accelgyro_lsm6ds0.c
index beee41b815..265d89e18c 100644
--- a/driver/accelgyro_lsm6ds0.c
+++ b/driver/accelgyro_lsm6ds0.c
@@ -1,4 +1,4 @@
-/* Copyright 2014 The Chromium OS Authors. All rights reserved.
+/* Copyright 2014 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
@@ -19,8 +19,8 @@
#include "util.h"
#define CPUTS(outstr) cputs(CC_ACCEL, outstr)
-#define CPRINTS(format, args...) cprints(CC_ACCEL, format, ## args)
-#define CPRINTF(format, args...) cprintf(CC_ACCEL, format, ## args)
+#define CPRINTS(format, args...) cprints(CC_ACCEL, format, ##args)
+#define CPRINTF(format, args...) cprintf(CC_ACCEL, format, ##args)
/*
* Struct for pairing an engineering value with the register value for a
@@ -32,25 +32,21 @@ struct accel_param_pair {
};
/* List of range values in +/-G's and their associated register values. */
-static const struct accel_param_pair g_ranges[] = {
- {2, LSM6DS0_GSEL_2G},
- {4, LSM6DS0_GSEL_4G},
- {8, LSM6DS0_GSEL_8G}
-};
+static const struct accel_param_pair g_ranges[] = { { 2, LSM6DS0_GSEL_2G },
+ { 4, LSM6DS0_GSEL_4G },
+ { 8, LSM6DS0_GSEL_8G } };
/*
* List of angular rate range values in +/-dps's
* and their associated register values.
*/
-const struct accel_param_pair dps_ranges[] = {
- {245, LSM6DS0_DPS_SEL_245},
- {500, LSM6DS0_DPS_SEL_500},
- {1000, LSM6DS0_DPS_SEL_1000},
- {2000, LSM6DS0_DPS_SEL_2000}
-};
+const struct accel_param_pair dps_ranges[] = { { 245, LSM6DS0_DPS_SEL_245 },
+ { 500, LSM6DS0_DPS_SEL_500 },
+ { 1000, LSM6DS0_DPS_SEL_1000 },
+ { 2000, LSM6DS0_DPS_SEL_2000 } };
-static inline const struct accel_param_pair *get_range_table(
- enum motionsensor_type type, int *psize)
+static inline const struct accel_param_pair *
+get_range_table(enum motionsensor_type type, int *psize)
{
if (MOTIONSENSE_TYPE_ACCEL == type) {
if (psize)
@@ -65,28 +61,22 @@ static inline const struct accel_param_pair *get_range_table(
/* List of ODR (gyro off) values in mHz and their associated register values.*/
const struct accel_param_pair gyro_on_odr[] = {
- {0, LSM6DS0_ODR_PD},
- {15000, LSM6DS0_ODR_15HZ},
- {59000, LSM6DS0_ODR_59HZ},
- {119000, LSM6DS0_ODR_119HZ},
- {238000, LSM6DS0_ODR_238HZ},
- {476000, LSM6DS0_ODR_476HZ},
- {952000, LSM6DS0_ODR_952HZ}
+ { 0, LSM6DS0_ODR_PD }, { 15000, LSM6DS0_ODR_15HZ },
+ { 59000, LSM6DS0_ODR_59HZ }, { 119000, LSM6DS0_ODR_119HZ },
+ { 238000, LSM6DS0_ODR_238HZ }, { 476000, LSM6DS0_ODR_476HZ },
+ { 952000, LSM6DS0_ODR_952HZ }
};
/* List of ODR (gyro on) values in mHz and their associated register values. */
const struct accel_param_pair gyro_off_odr[] = {
- {0, LSM6DS0_ODR_PD},
- {10000, LSM6DS0_ODR_10HZ},
- {50000, LSM6DS0_ODR_50HZ},
- {119000, LSM6DS0_ODR_119HZ},
- {238000, LSM6DS0_ODR_238HZ},
- {476000, LSM6DS0_ODR_476HZ},
- {952000, LSM6DS0_ODR_952HZ}
+ { 0, LSM6DS0_ODR_PD }, { 10000, LSM6DS0_ODR_10HZ },
+ { 50000, LSM6DS0_ODR_50HZ }, { 119000, LSM6DS0_ODR_119HZ },
+ { 238000, LSM6DS0_ODR_238HZ }, { 476000, LSM6DS0_ODR_476HZ },
+ { 952000, LSM6DS0_ODR_952HZ }
};
-static inline const struct accel_param_pair *get_odr_table(
- enum motionsensor_type type, int *psize)
+static inline const struct accel_param_pair *
+get_odr_table(enum motionsensor_type type, int *psize)
{
if (MOTIONSENSE_TYPE_ACCEL == type) {
if (psize)
@@ -101,14 +91,14 @@ static inline const struct accel_param_pair *get_odr_table(
static inline int get_ctrl_reg(enum motionsensor_type type)
{
- return (MOTIONSENSE_TYPE_ACCEL == type) ?
- LSM6DS0_CTRL_REG6_XL : LSM6DS0_CTRL_REG1_G;
+ return (MOTIONSENSE_TYPE_ACCEL == type) ? LSM6DS0_CTRL_REG6_XL :
+ LSM6DS0_CTRL_REG1_G;
}
static inline int get_xyz_reg(enum motionsensor_type type)
{
- return (MOTIONSENSE_TYPE_ACCEL == type) ?
- LSM6DS0_OUT_X_L_XL : LSM6DS0_OUT_X_L_G;
+ return (MOTIONSENSE_TYPE_ACCEL == type) ? LSM6DS0_OUT_X_L_XL :
+ LSM6DS0_OUT_X_L_G;
}
/**
@@ -118,14 +108,14 @@ static inline int get_xyz_reg(enum motionsensor_type type)
* outside the range of values, it returns the closest valid reg value.
*/
static int get_reg_val(const int eng_val, const int round_up,
- const struct accel_param_pair *pairs, const int size)
+ const struct accel_param_pair *pairs, const int size)
{
int i;
for (i = 0; i < size - 1; i++) {
if (eng_val <= pairs[i].val)
break;
- if (eng_val < pairs[i+1].val) {
+ if (eng_val < pairs[i + 1].val) {
if (round_up)
i += 1;
break;
@@ -138,7 +128,8 @@ static int get_reg_val(const int eng_val, const int round_up,
* @return engineering value that matches the given reg val
*/
static int get_engineering_val(const int reg_val,
- const struct accel_param_pair *pairs, const int size)
+ const struct accel_param_pair *pairs,
+ const int size)
{
int i;
for (i = 0; i < size; i++) {
@@ -166,9 +157,7 @@ static inline int raw_write8(const int port, const uint16_t i2c_addr_flags,
return i2c_write8(port, i2c_addr_flags, reg, data);
}
-static int set_range(struct motion_sensor_t *s,
- int range,
- int rnd)
+static int set_range(struct motion_sensor_t *s, int range, int rnd)
{
int ret, ctrl_val, range_tbl_size;
uint8_t ctrl_reg, reg_val;
@@ -185,19 +174,17 @@ static int set_range(struct motion_sensor_t *s,
*/
mutex_lock(s->mutex);
- ret = raw_read8(s->port, s->i2c_spi_addr_flags,
- ctrl_reg, &ctrl_val);
+ ret = raw_read8(s->port, s->i2c_spi_addr_flags, ctrl_reg, &ctrl_val);
if (ret != EC_SUCCESS)
goto accel_cleanup;
ctrl_val = (ctrl_val & ~LSM6DS0_RANGE_MASK) | reg_val;
- ret = raw_write8(s->port, s->i2c_spi_addr_flags,
- ctrl_reg, ctrl_val);
+ ret = raw_write8(s->port, s->i2c_spi_addr_flags, ctrl_reg, ctrl_val);
/* Now that we have set the range, update the driver's value. */
if (ret == EC_SUCCESS)
- s->current_range = get_engineering_val(reg_val, ranges,
- range_tbl_size);
+ s->current_range =
+ get_engineering_val(reg_val, ranges, range_tbl_size);
accel_cleanup:
mutex_unlock(s->mutex);
@@ -209,9 +196,7 @@ static int get_resolution(const struct motion_sensor_t *s)
return LSM6DS0_RESOLUTION;
}
-static int set_data_rate(const struct motion_sensor_t *s,
- int rate,
- int rnd)
+static int set_data_rate(const struct motion_sensor_t *s, int rate, int rnd)
{
int ret, val, odr_tbl_size;
uint8_t ctrl_reg, reg_val;
@@ -237,8 +222,8 @@ static int set_data_rate(const struct motion_sensor_t *s,
/* Now that we have set the odr, update the driver's value. */
if (ret == EC_SUCCESS)
- data->base.odr = get_engineering_val(reg_val, data_rates,
- odr_tbl_size);
+ data->base.odr =
+ get_engineering_val(reg_val, data_rates, odr_tbl_size);
/* CTRL_REG3_G 12h
* [7] low-power mode = 0;
@@ -254,8 +239,8 @@ static int set_data_rate(const struct motion_sensor_t *s,
goto accel_cleanup;
val &= ~(0x3 << 4); /* clear bit [5:4] */
val = (rate > 119000) ?
- (val | (1<<7)) /* set high-power mode */ :
- (val & ~(1<<7)); /* set low-power mode */
+ (val | (1 << 7)) /* set high-power mode */ :
+ (val & ~(1 << 7)); /* set low-power mode */
ret = raw_write8(s->port, s->i2c_spi_addr_flags,
LSM6DS0_CTRL_REG3_G, val);
}
@@ -272,9 +257,8 @@ static int get_data_rate(const struct motion_sensor_t *s)
return data->base.odr;
}
-static int set_offset(const struct motion_sensor_t *s,
- const int16_t *offset,
- int16_t temp)
+static int set_offset(const struct motion_sensor_t *s, const int16_t *offset,
+ int16_t temp)
{
/* temperature is ignored */
struct lsm6ds0_data *data = s->drv_data;
@@ -284,9 +268,8 @@ static int set_offset(const struct motion_sensor_t *s,
return EC_SUCCESS;
}
-static int get_offset(const struct motion_sensor_t *s,
- int16_t *offset,
- int16_t *temp)
+static int get_offset(const struct motion_sensor_t *s, int16_t *offset,
+ int16_t *temp)
{
struct lsm6ds0_data *data = s->drv_data;
offset[X] = data->offset[X];
@@ -300,8 +283,8 @@ static int is_data_ready(const struct motion_sensor_t *s, int *ready)
{
int ret, tmp;
- ret = raw_read8(s->port, s->i2c_spi_addr_flags,
- LSM6DS0_STATUS_REG, &tmp);
+ ret = raw_read8(s->port, s->i2c_spi_addr_flags, LSM6DS0_STATUS_REG,
+ &tmp);
if (ret != EC_SUCCESS) {
CPRINTS("%s type:0x%X RS Error", s->name, s->type);
@@ -341,12 +324,10 @@ static int read(const struct motion_sensor_t *s, intv3_t v)
xyz_reg = get_xyz_reg(s->type);
/* Read 6 bytes starting at xyz_reg */
- ret = i2c_read_block(s->port, s->i2c_spi_addr_flags,
- xyz_reg, raw, 6);
+ ret = i2c_read_block(s->port, s->i2c_spi_addr_flags, xyz_reg, raw, 6);
if (ret != EC_SUCCESS) {
- CPRINTS("%s type:0x%X RD XYZ Error",
- s->name, s->type);
+ CPRINTS("%s type:0x%X RD XYZ Error", s->name, s->type);
return ret;
}
@@ -366,8 +347,8 @@ static int init(struct motion_sensor_t *s)
{
int ret = 0, tmp;
- ret = raw_read8(s->port, s->i2c_spi_addr_flags,
- LSM6DS0_WHO_AM_I_REG, &tmp);
+ ret = raw_read8(s->port, s->i2c_spi_addr_flags, LSM6DS0_WHO_AM_I_REG,
+ &tmp);
if (ret)
return EC_ERROR_UNKNOWN;
@@ -387,7 +368,6 @@ static int init(struct motion_sensor_t *s)
* SW_RESET is down for accel only!
*/
if (MOTIONSENSE_TYPE_ACCEL == s->type) {
-
mutex_lock(s->mutex);
ret = raw_read8(s->port, s->i2c_spi_addr_flags,
LSM6DS0_CTRL_REG8, &tmp);