summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwendal Grignou <gwendal@chromium.org>2020-03-09 10:22:58 -0700
committerCommit Bot <commit-bot@chromium.org>2020-06-29 23:31:11 +0000
commit5bac2f457cb61f077459c20e0052c737a264ae60 (patch)
treeae8a94a7df8ba09136419608f753b161682cbe90
parent7ab708f8db4300e4877915dd6bcc8fce3f3004b8 (diff)
downloadchrome-ec-5bac2f457cb61f077459c20e0052c737a264ae60.tar.gz
driver: bmi160: Fix ODR to REG when rate is less than 100Hz properly
When the ODr was the exact frequency, the calculation was not correct. For instance, 50Hz would return register 6 when 7 was expected. Fixes: 0e99e9763 ("bmi160: Fix ODR to REG when rate is less than 100Hz") BUG=b:120942904 BRANCH=none TEST=use: for (int i = 1600000 ; i > 1000 ; i >>= 1) { printf("%d mHZ : reg %d\n", i + 1, BMI160_ODR_TO_REG(i + 1)); printf("%d mHZ : reg %d\n", i, BMI160_ODR_TO_REG(i)); printf("%d mHZ : reg %d\n", i -1 , BMI160_ODR_TO_REG(i -1)); } To verify the code is correct: 1600001 mHZ : reg 12 1600000 mHZ : reg 12 1599999 mHZ : reg 11 800001 mHZ : reg 11 800000 mHZ : reg 11 799999 mHZ : reg 10 400001 mHZ : reg 10 400000 mHZ : reg 10 399999 mHZ : reg 9 200001 mHZ : reg 9 200000 mHZ : reg 9 199999 mHZ : reg 8 100001 mHZ : reg 8 100000 mHZ : reg 8 99999 mHZ : reg 7 50001 mHZ : reg 7 50000 mHZ : reg 7 49999 mHZ : reg 6 25001 mHZ : reg 6 25000 mHZ : reg 6 24999 mHZ : reg 5 12501 mHZ : reg 5 12500 mHZ : reg 5 12499 mHZ : reg 4 6251 mHZ : reg 4 6250 mHZ : reg 4 6249 mHZ : reg 3 3126 mHZ : reg 3 3125 mHZ : reg 3 3124 mHZ : reg 2 1563 mHZ : reg 2 1562 mHZ : reg 2 1561 mHZ : reg 1 Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Change-Id: Iefd0e0c732b52fef02f5b048c083ea67a2da247c Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2093289 Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org> (cherry picked from commit c3dcd2826896e2f2f9b585dcd42ea98d38ae17cc) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2262107 Tested-by: Inno.Park <ih.yoo.park@samsung.corp-partner.google.com> Reviewed-by: Inno.Park <ih.yoo.park@samsung.corp-partner.google.com> Reviewed-by: Bob Moragues <moragues@chromium.org> Commit-Queue: Bob Moragues <moragues@chromium.org>
-rw-r--r--driver/accelgyro_bmi160.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/driver/accelgyro_bmi160.h b/driver/accelgyro_bmi160.h
index 626da83217..78f167b305 100644
--- a/driver/accelgyro_bmi160.h
+++ b/driver/accelgyro_bmi160.h
@@ -178,7 +178,7 @@ enum fifo_header {
((_regval) < BMI160_ODR_100HZ ? 100000 / (1 << (8 - (_regval))) : \
100000 * (1 << ((_regval) - 8)))
#define BMI160_ODR_TO_REG(_odr) \
- ((_odr) < 100000 ? (__builtin_clz(100000 / (_odr)) - 24) : \
+ ((_odr) < 100000 ? (__builtin_clz(100000 / ((_odr) + 1)) - 24) : \
(39 - __builtin_clz((_odr) / 100000)))
#define BMI160_CONF_REG(_sensor) (0x40 + 2 * (_sensor))