diff options
author | Pi-Hsun Shih <pihsun@chromium.org> | 2020-09-15 17:05:16 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-09-18 10:51:03 +0000 |
commit | f608eba27f67f253661be0cf01eb28889cee2b60 (patch) | |
tree | ff6f9f0ff0189433ef5c02b4b68ee32f9a1a1237 | |
parent | 6d06a136a9185ec7582bdb380d92e911db01a079 (diff) | |
download | chrome-ec-f608eba27f67f253661be0cf01eb28889cee2b60.tar.gz |
mt6360: fix ldo set.
The original calculation is wrong on the case when min_mV is larger than
data->ldo_vosel_table[i]. Fix it.
BUG=b:147789962
TEST=manually with chromium:2409487
BRANCH=none
Change-Id: I038c661922b124aaa6290e43069522c7e6c23772
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2409488
Commit-Queue: Pi-Hsun Shih <pihsun@chromium.org>
Tested-by: Pi-Hsun Shih <pihsun@chromium.org>
Reviewed-by: Eric Yilun Lin <yllin@chromium.org>
-rw-r--r-- | driver/bc12/mt6360.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/driver/bc12/mt6360.c b/driver/bc12/mt6360.c index e4f99d4088..2c47f58825 100644 --- a/driver/bc12/mt6360.c +++ b/driver/bc12/mt6360.c @@ -463,20 +463,18 @@ int mt6360_regulator_set_voltage(enum mt6360_regulator_id id, int min_mv, /* It's a LDO. */ for (i = 0; i < data->ldo_vosel_table_len; i++) { int mv = data->ldo_vosel_table[i]; - int step; + int step = 0; if (!mv) continue; if (mv + MT6360_LDO_VOCAL_STEP_MV * MT6360_LDO_VOCAL_MAX_STEP < min_mv) continue; - mv = DIV_ROUND_UP(mv, MT6360_LDO_VOCAL_STEP_MV) * - MT6360_LDO_VOCAL_STEP_MV; - if (mv > max_mv) + if (mv < min_mv) + step = DIV_ROUND_UP(min_mv - mv, + MT6360_LDO_VOCAL_STEP_MV); + if (mv + step * MT6360_LDO_VOCAL_STEP_MV > max_mv) continue; - step = (mv - data->ldo_vosel_table[i]) / - MT6360_LDO_VOCAL_STEP_MV; - return mt6360_regulator_update_bits( data->addr, data->reg_ctrl3, |