summaryrefslogtreecommitdiff
path: root/driver/charger/isl9241.c
diff options
context:
space:
mode:
authorTerry Chen <terry_chen@wistron.corp-partner.google.com>2020-11-12 15:29:48 +0800
committerCommit Bot <commit-bot@chromium.org>2020-12-03 21:39:06 +0000
commit99dba155820737065fc83749bc0e15f79b785546 (patch)
tree268884fb397e2502d84c77fd9e1fb12fda351069 /driver/charger/isl9241.c
parent5103f885bb9d37d94073cd32aec8fcb7945f2f7e (diff)
downloadchrome-ec-99dba155820737065fc83749bc0e15f79b785546.tar.gz
eldrid: modify charger configuration
BUG=b:166728543 BRANCH=firmware-volteer-13521.B-master TEST=make buildall Signed-off-by: Terry Chen <terry_chen@wistron.corp-partner.google.com> Change-Id: I1a918326a625f294fe6cd9a2ec8e2c5b2af43569 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2534231 Tested-by: Scott Chao <scott_chao@wistron.corp-partner.google.com> Reviewed-by: Keith Short <keithshort@chromium.org> Commit-Queue: Abe Levkoy <alevkoy@chromium.org>
Diffstat (limited to 'driver/charger/isl9241.c')
-rw-r--r--driver/charger/isl9241.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/driver/charger/isl9241.c b/driver/charger/isl9241.c
index 626c84fe07..4fd92e6c08 100644
--- a/driver/charger/isl9241.c
+++ b/driver/charger/isl9241.c
@@ -323,7 +323,19 @@ static enum ec_error_list isl9241_discharge_on_ac(int chgnum, int enable)
int isl9241_set_ac_prochot(int chgnum, int ma)
{
int rv;
- uint16_t reg = AC_CURRENT_TO_REG(ma);
+ uint16_t reg;
+
+ /*
+ * The register reserves bits [6:0] and bits [15:13].
+ * This routine should ensure these bits are not set
+ * before writing the register.
+ */
+ if (ma > AC_REG_TO_CURRENT(ISL9241_AC_PROCHOT_CURRENT_MAX))
+ reg = ISL9241_AC_PROCHOT_CURRENT_MAX;
+ else if (ma < AC_REG_TO_CURRENT(ISL9241_AC_PROCHOT_CURRENT_MIN))
+ reg = ISL9241_AC_PROCHOT_CURRENT_MIN;
+ else
+ reg = AC_CURRENT_TO_REG(ma);
rv = isl9241_write(chgnum, ISL9241_REG_AC_PROCHOT, reg);
if (rv)
@@ -332,6 +344,27 @@ int isl9241_set_ac_prochot(int chgnum, int ma)
return rv;
}
+int isl9241_set_dc_prochot(int chgnum, int ma)
+{
+ int rv;
+
+ /*
+ * The register reserves bits [7:0] and bits [15:14].
+ * This routine should ensure these bits are not set
+ * before writing the register.
+ */
+ if (ma > ISL9241_DC_PROCHOT_CURRENT_MAX)
+ ma = ISL9241_DC_PROCHOT_CURRENT_MAX;
+ else if (ma < ISL9241_DC_PROCHOT_CURRENT_MIN)
+ ma = ISL9241_DC_PROCHOT_CURRENT_MIN;
+
+ rv = isl9241_write(chgnum, ISL9241_REG_DC_PROCHOT, ma);
+ if (rv)
+ CPRINTF("set_dc_prochot failed (%d)\n", rv);
+
+ return rv;
+}
+
/*****************************************************************************/
/* ISL-9241 initialization */
static void isl9241_init(int chgnum)