Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp3323022ybg; Mon, 28 Oct 2019 11:01:26 -0700 (PDT) X-Google-Smtp-Source: APXvYqwNL4dPB9fkq4fExr7q2xLZwuPfn4TTvw8pjmMrAgsRKrGx2OkWePgkFpsvGpOEuW4U61lm X-Received: by 2002:a17:906:780d:: with SMTP id u13mr7996841ejm.151.1572285686373; Mon, 28 Oct 2019 11:01:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572285686; cv=none; d=google.com; s=arc-20160816; b=Obq6TwiE/XcZynQO1KHRgakHK72AEdJ4TwMe99wfm6ENvMy8z96pYbWIF6b/XrSenq 78b8frs+Ytir3CpL1eAoZElMk+PFxU/nKi7BrqkApi/z86kUWcRM5RZxbN0aa6uTADNK U/mh6xBSWOODk8bR04KhV4oZ0ljSnMoVjcqCPd1dwtHKYQ27XumNqjNei+33DsP+S68g Ez/+/e6QNfgaqx6bQEDTZNB/0RWpWIaUD0mYBoDR4sHRiFwiNYXqrIS2yX3M9RbjSzWF 4iSVx/xpK3RANsg8/VSKep49p/LH/FtOTF44XZ+4EH6UmVGk/HUNHt561ysOjqeVAkEE H0Qw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=HKtGe92TapQ2KIwqzwkswK8RAIuyaGxBvNdNmUU4dN4=; b=SHu/MhsN9paVXZMLwJ3CkJBrnwwBQa2VCBVvbagV8gon31a2h3pceHak2qRvqI9aLK G1cerTTBpAzt0P8cGxlSwOPLL/zJYVnTHnyCRt22eMAxMu5ThrsiL2/NUEtFuvm5lwin owB42OJjlTsK89BZa71f8BcIMBfIhTZPQG1fP/T12dC9601LROV2Fze8ImvYCZu/gkHW /dJwItVd9L5UZaspqxqZG+ULAKLovL7DBcNLgHF+pC81bDtAzdrMmbe+mRZvfZxyfZjE DC9p5KaFLNYXpNudL0sZ7CLwhN/5HHOVoak+ETZfLHBmZQn8HCV/rvQDk52PUkG6oD/l CLkw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=v6uDInPr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v2si3770961ede.61.2019.10.28.11.01.02; Mon, 28 Oct 2019 11:01:26 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=v6uDInPr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732660AbfJ1HUN (ORCPT + 99 others); Mon, 28 Oct 2019 03:20:13 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:43469 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732644AbfJ1HUL (ORCPT ); Mon, 28 Oct 2019 03:20:11 -0400 Received: by mail-pf1-f194.google.com with SMTP id 3so6273167pfb.10 for ; Mon, 28 Oct 2019 00:20:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=HKtGe92TapQ2KIwqzwkswK8RAIuyaGxBvNdNmUU4dN4=; b=v6uDInPrs2q1qq4SFLLdTjpdDc3eS25cnyOgpZtsm/H1e6dUBVUjCnRTrIW9Je4DLe XqJz6uv+N5YdTtXGCsY5Nwk+YABBQWVqJRGdRpgtWscX0dTeHgTPJbLMsxO2Nn6Hjz3S dbBAmtfdRa2obhR4Db360QfEdyh2kQKCBrXYwvs4DQUeecLSmuAgCNg+8vDcZ+byWbxq kvfNWHa1AXgqxiYlqzAl/rAe0f36GBnVfL8P29Oh6h2SM/31I+Xd91PIcC63SXDmcHIo jZzak31XqYgXmaToPXOP0+62BYK/AyoRWAgahLk4g/uE6jWTpMz8/SETq2QRPAsWDrvB +2AQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=HKtGe92TapQ2KIwqzwkswK8RAIuyaGxBvNdNmUU4dN4=; b=La12nVslncBgmq65eESlTCKtn4B/lFiIz2PGmN9oGHavgv41Pbt5LmrDfv8escM9xd Oyxsxv8cLVS4H0ncqXcz7KjJ7woVmCMwJQ+fsqs+SSLspMfnYqxANQmj+Ipl+Q4lE8B9 +FQaR2Tx+rTOiiT++D6pzVvS0FPztF5FlhXmntUCo6OmcrRE9jrW1pgKqmAywnt9/l2F y3ZzmfhnOEYxtVtnHoRqILFvPEISYLQ1E304ZPU6I4ZA811HsRIBwKMnw5FYZaaFg3A1 Cptg9snSYeWUFtO9VPSGbzMIIrV5fp6J81nus6Qef0sQxfs6dv+h3c2+blC2jHKVIIhI WRRg== X-Gm-Message-State: APjAAAV1n2UdYBO4RmeosCsujW9a2G1BttrZsIwPfK3QbsU2gE1nqP4P 0r+bRSReAsrWyJIUXAaEtG9Xeg== X-Received: by 2002:a62:108:: with SMTP id 8mr9220601pfb.53.1572247209947; Mon, 28 Oct 2019 00:20:09 -0700 (PDT) Received: from baolinwangubtpc.spreadtrum.com ([117.18.48.82]) by smtp.gmail.com with ESMTPSA id 13sm11504703pgq.72.2019.10.28.00.20.06 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 28 Oct 2019 00:20:09 -0700 (PDT) From: Baolin Wang To: sre@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com Cc: linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, yuanjiang.yu@unisoc.com, baolin.wang@linaro.org, baolin.wang7@gmail.com, zhang.lyra@gmail.com, orsonzhai@gmail.com Subject: [PATCH 5/5] power: supply: sc27xx: Calibrate the resistance of coulomb counter Date: Mon, 28 Oct 2019 15:19:01 +0800 Message-Id: <9c25e3ab9bdba2914b22cfe7495818740437ef27.1572245011.git.baolin.wang@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There are some deviations between the real resistance and the ideal resistance of coulomb counter, which will affect the accuracy of the coulomb counter, thus calibrate the real resistance of coulomb counter to improve the accuracy. Signed-off-by: Baolin Wang --- drivers/power/supply/sc27xx_fuel_gauge.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/power/supply/sc27xx_fuel_gauge.c b/drivers/power/supply/sc27xx_fuel_gauge.c index 221b6fb..f363fa7 100644 --- a/drivers/power/supply/sc27xx_fuel_gauge.c +++ b/drivers/power/supply/sc27xx_fuel_gauge.c @@ -62,6 +62,8 @@ #define SC27XX_FGU_CUR_BASIC_ADC 8192 #define SC27XX_FGU_SAMPLE_HZ 2 +/* micro Ohms */ +#define SC27XX_FGU_IDEAL_RESISTANCE 20000 /* * struct sc27xx_fgu_data: describe the FGU device @@ -84,6 +86,7 @@ * @resist_table_len: the resistance table length * @cur_1000ma_adc: ADC value corresponding to 1000 mA * @vol_1000mv_adc: ADC value corresponding to 1000 mV + * @calib_resist: the real resistance of coulomb counter chip in mOhm * @cap_table: capacity table with corresponding ocv * @resist_table: resistance percent table with corresponding temperature */ @@ -108,6 +111,7 @@ struct sc27xx_fgu_data { int resist_table_len; int cur_1000ma_adc; int vol_1000mv_adc; + int calib_resist; struct power_supply_battery_ocv_table *cap_table; struct power_supply_resistance_temp_table *resist_table; }; @@ -900,7 +904,9 @@ static int sc27xx_fgu_calibration(struct sc27xx_fgu_data *data) */ cal_4200mv = (calib_data & 0x1ff) + 6963 - 4096 - 256; data->vol_1000mv_adc = DIV_ROUND_CLOSEST(cal_4200mv * 10, 42); - data->cur_1000ma_adc = data->vol_1000mv_adc * 4; + data->cur_1000ma_adc = + DIV_ROUND_CLOSEST(data->vol_1000mv_adc * 4 * data->calib_resist, + SC27XX_FGU_IDEAL_RESISTANCE); kfree(buf); return 0; @@ -1079,6 +1085,15 @@ static int sc27xx_fgu_probe(struct platform_device *pdev) return ret; } + ret = device_property_read_u32(&pdev->dev, + "sprd,calib-resistance", + &data->calib_resist); + if (ret) { + dev_err(&pdev->dev, + "failed to get fgu calibration resistance\n"); + return ret; + } + data->channel = devm_iio_channel_get(dev, "bat-temp"); if (IS_ERR(data->channel)) { dev_err(dev, "failed to get IIO channel\n"); -- 1.7.9.5