diff options
author | Gwendal Grignou <gwendal@chromium.org> | 2015-08-19 14:52:49 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-08-24 19:08:24 +0000 |
commit | f7fa6248bf170d2fffbf3fb067b6ed40f0a4d55f (patch) | |
tree | 90ff771d673fb587bab572181769fa1a529efbb6 | |
parent | 0e01759cedcd25868196508177791388b89450e5 (diff) | |
download | chrome-ec-f7fa6248bf170d2fffbf3fb067b6ed40f0a4d55f.tar.gz |
driver: accel: Apply offsets after rotation
Offsets are in the axis of the device, not the sensor.
Apply the offsets after rotiation
BRANCH=cyan
TEST=compile, test on cyan
BUG=chromium:517675
Change-Id: Iae9282efcbb5889bb0f1f556b7e5ca9fabe31b22
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/294595
Reviewed-by: Sheng-liang Song <ssl@chromium.org>
-rw-r--r-- | driver/accel_kxcj9.c | 11 | ||||
-rw-r--r-- | driver/accelgyro_lsm6ds0.c | 12 |
2 files changed, 14 insertions, 9 deletions
diff --git a/driver/accel_kxcj9.c b/driver/accel_kxcj9.c index 24d98719a1..9df954c3f7 100644 --- a/driver/accel_kxcj9.c +++ b/driver/accel_kxcj9.c @@ -417,16 +417,19 @@ static int read(const struct motion_sensor_t *s, vector_3_t v) * * Add calibration offset before returning the data. */ - get_range(s, &range); get_resolution(s, &resolution); for (i = X; i <= Z; i++) { v[i] = (((int8_t)acc[i * 2 + 1]) << 4) | (acc[i * 2] >> 4); v[i] <<= (16 - resolution); - v[i] += (data->offset[i] << 5) / range; } - if (*s->rot_standard_ref != NULL) - rotate(v, *s->rot_standard_ref, v); + rotate(v, *s->rot_standard_ref, v); + + /* apply offset in the device coordinates */ + get_range(s, &range); + for (i = X; i <= Z; i++) + v[i] += (data->offset[i] << 5) / range; + return EC_SUCCESS; } diff --git a/driver/accelgyro_lsm6ds0.c b/driver/accelgyro_lsm6ds0.c index 357710d56e..9aa6644670 100644 --- a/driver/accelgyro_lsm6ds0.c +++ b/driver/accelgyro_lsm6ds0.c @@ -375,13 +375,15 @@ static int read(const struct motion_sensor_t *s, vector_3_t v) return ret; } - get_range(s, &range); - for (i = X; i <= Z; i++) { + for (i = X; i <= Z; i++) v[i] = ((int16_t)((raw[i * 2 + 1] << 8) | raw[i * 2])); + + rotate(v, *s->rot_standard_ref, v); + + /* apply offset in the device coordinates */ + get_range(s, &range); + for (i = X; i <= Z; i++) v[i] += (data->offset[i] << 5) / range; - } - if (*s->rot_standard_ref != NULL) - rotate(v, *s->rot_standard_ref, v); return EC_SUCCESS; } |