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-23 23:03:14 +0000
commit5dba972ba39d75bfcb20f2dd473be55c0a76d33e (patch)
tree5798c825f7d9da744cc6b5d2842f412786599c3c
parent3b2e7e38b68e2bedf843e938747d2456c2ed4529 (diff)
downloadchrome-ec-5dba972ba39d75bfcb20f2dd473be55c0a76d33e.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/+/2247975 Reviewed-by: Inno.Park <ih.yoo.park@samsung.corp-partner.google.com> Tested-by: Inno.Park <ih.yoo.park@samsung.corp-partner.google.com> 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 9dd869c7cd..388f9cb36e 100644
--- a/driver/accelgyro_bmi160.h
+++ b/driver/accelgyro_bmi160.h
@@ -186,7 +186,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))