From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751786AbdCQKDP (ORCPT ); Fri, 17 Mar 2017 06:03:15 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41742 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751039AbdCQJ4t (ORCPT ); Fri, 17 Mar 2017 05:56:49 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 75B4E64A5E Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=hdegoede@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 75B4E64A5E From: Hans de Goede To: "Rafael J . Wysocki" , Len Brown , Wolfram Sang , Andy Shevchenko , Lee Jones , Sebastian Reichel , MyungJoo Ham , Chanwoo Choi Cc: Hans de Goede , linux-acpi@vger.kernel.org, Takashi Iwai , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH 05/15] power: supply: bq24190_charger: Limit charging voltage to 4.3V Date: Fri, 17 Mar 2017 10:55:17 +0100 Message-Id: <20170317095527.10487-6-hdegoede@redhat.com> In-Reply-To: <20170317095527.10487-1-hdegoede@redhat.com> References: <20170317095527.10487-1-hdegoede@redhat.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Fri, 17 Mar 2017 09:55:47 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When the platform data asks us to not reset the charger to its default values and instead trust the firmware set values check the charging voltage and clamp it to 4.304V. Some firmwares set really too high voltages, e.g. the GPD-win I've been working on uses 4.384V. New LiHV (High Voltage) batteries may be charged upto 4.35V but that significantly impacts their lifetime, limit charging to 4.304V for safety and lifetime reasons. Signed-off-by: Hans de Goede --- drivers/power/supply/bq24190_charger.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/drivers/power/supply/bq24190_charger.c b/drivers/power/supply/bq24190_charger.c index c92a40e4..7bca8d0 100644 --- a/drivers/power/supply/bq24190_charger.c +++ b/drivers/power/supply/bq24190_charger.c @@ -504,11 +504,32 @@ static int bq24190_set_mode_host(struct bq24190_dev_info *bdi) static int bq24190_register_reset(struct bq24190_dev_info *bdi) { - int ret, limit = 100; + int ret, voltage, limit = 100; u8 v; - if (bdi->pdata && bdi->pdata->no_register_reset) - return 0; + if (bdi->pdata && bdi->pdata->no_register_reset) { + /* + * We've been asked to keep the firmware settings as is, but + * some firmwares set really too high voltages (e.g. 4.384V). + * New LiHV (High Voltage) batteries may be charged upto 4.35V + * but that significantly impacts their lifetime, limit + * charging to 4.304V for safety and lifetime reasons. + */ + ret = bq24190_get_field_val(bdi, BQ24190_REG_CVC, + BQ24190_REG_CVC_VREG_MASK, BQ24190_REG_CVC_VREG_SHIFT, + bq24190_cvc_vreg_values, + ARRAY_SIZE(bq24190_cvc_vreg_values), &voltage); + if (ret < 0) + return ret; + + if (voltage <= 4304000) + return 0; + + return bq24190_set_field_val(bdi, BQ24190_REG_CVC, + BQ24190_REG_CVC_VREG_MASK, BQ24190_REG_CVC_VREG_SHIFT, + bq24190_cvc_vreg_values, + ARRAY_SIZE(bq24190_cvc_vreg_values), 4304000); + } /* Reset the registers */ ret = bq24190_write_mask(bdi, BQ24190_REG_POC, -- 2.9.3