diff options
author | Gwendal Grignou <gwendal@chromium.org> | 2020-03-09 10:22:58 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-06-23 23:03:14 +0000 |
commit | 5dba972ba39d75bfcb20f2dd473be55c0a76d33e (patch) | |
tree | 5798c825f7d9da744cc6b5d2842f412786599c3c | |
parent | 3b2e7e38b68e2bedf843e938747d2456c2ed4529 (diff) | |
download | chrome-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.h | 2 |
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)) |