summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwendal Grignou <gwendal@chromium.org>2015-08-19 14:52:49 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2016-08-01 16:37:47 +0000
commitaab095c75a8fd99d46c537af881852487620dad0 (patch)
tree1d587df9a55014af7bb94a2032e179e4e16af81f
parent291abe354749ae0251d4e63fa3f9782a32ed552e (diff)
downloadchrome-ec-aab095c75a8fd99d46c537af881852487620dad0.tar.gz
UPSTREAM: 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:51767, b:27849483 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> (cherry picked from commit f7fa6248bf170d2fffbf3fb067b6ed40f0a4d55f) Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/359360
-rw-r--r--driver/accel_kxcj9.c11
-rw-r--r--driver/accelgyro_lsm6ds0.c12
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;
}