From nobody Tue Apr 7 17:15:08 2026 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 090383FFAC2 for ; Mon, 2 Mar 2026 13:32:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772458346; cv=none; b=rhDfHdA41Ug1NGvoi+/+S0j36oInMZ/YAKDZzudyEcXutpfrbyuWhUw6eqBcNpxNMCAygSBbwwXcXIfM0jchV9ij/n+i9fjRAQxn3u8Y16PnPx2nODqEsCrJlOnQ67O+DcIDHTNDE8pZQeRVjeuQgN4bn+daHqLjHE23TbfeoFU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772458346; c=relaxed/simple; bh=RljhWrFUV2Vr3KF+ktWVi6/U6PhZYUjyI1YmlGYnvwc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LrE67v3PtcsUGYPZ1tiEO+x9OPG/Z5oUH6iAXOB/WwOCXyXydyyTowiM40zU2jzjOR6oZtz/oF0HJSpfmMgp3Jml8YawCDAdKtH2rgq/ElLsdOz1zZnTA4hsultlhWdnr8dnZn37zuCPsr0KeYJeYPfDbzId3GylJlnndEwx9eA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=iOn9HMwb; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="iOn9HMwb" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-b8fa449e618so634393366b.0 for ; Mon, 02 Mar 2026 05:32:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1772458342; x=1773063142; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Sgo1gAmw/LJ8DgBY5wJQL6t/OWotxqWFL7Li6v+WLyI=; b=iOn9HMwbiBqMcjLKeKTH8XqkpIF8B6LQLG8j/YgdaExakJxoWnhq67MstNSEVZtzrQ syuvaVn8LVQa5fAqu4Ly7Evn6MXGlmv3XxUVj3iIQTijacmiBQ7sjDzuZbJMRo2cTzKR tSZ1+Xkkp94eUMpzhdlqP8JXjjzAlN3CkPDB6vOf2hM3aA8p2GbJ65vYxOb+sjWi3fkR 9dBSzC3s1Q40nj1rEPXDInI/DkfdnK7a4IK522kOAKo3aJYlDphuFsmrGLQBy8eZTA54 NergyIngFkSEXjggqZACURvH+ToBADl6+RlOy2C3OtQSvpnQ+pmCB8+Hod4dElV8EB6L jPMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772458342; x=1773063142; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Sgo1gAmw/LJ8DgBY5wJQL6t/OWotxqWFL7Li6v+WLyI=; b=bnXsYQpW12/GWoVg4MCS58oLYhU5CtfLYmGajMxJZmdYmLOYZu/nSvjHsh4aUMeY2q ZBcNtJySTs11oA/JmIKwGgGO7G4Cw50cJs1nEDdiKSoeBznR8SW85PH5e0fj15daof7M WS9J7NvF/y/2WMpRwn00PWEki+6uftQP1b/k4EWB+MtYHGEOBNGvlUV6MkV7llP5016q z2ZRUN2sTrWiGDSpxma1v2SBZyz8Y9Intz8qMWcOO6IymvDsFw34Lq+Lkjz3lbcJnHBD fA2Omlnyrq2nKLDZzNu7UqK6OT0VGNI6GBV0Bh3JS9vp9wT86gPeVAMrs3HlCCdnCKYN FHew== X-Forwarded-Encrypted: i=1; AJvYcCW3BgOdI+33VsKOPAMUM+UWP6nc3jbma2FV04jB4VpTjHrkNTg6n0gOun8W0Kzk+Ob+nTXQhXWfMfdyS0g=@vger.kernel.org X-Gm-Message-State: AOJu0Yzx5Vr2Ot76oK+9xgayuI/9yg+xNgc1iNcJFIWhUyYe6URvnnqf qantS2hcTREPNQZBWtl6oE4FhXUwaBe+7Q8d5A5zd4hr/oFgUXIAdaQABND1xj7pEqY= X-Gm-Gg: ATEYQzx2sHgOQSLIfz4XqgyfqgbV6cNUdlnlKM+2hOzFQPRA33iD6q2AN4EYEIca1gL P87hTM//GuS5eefIcZkj25VKN/oZD93YLUm+CeVyKkps0C7J4I/I5Fjq5jhbTQHeh00+DCsK5+E EuEIPmFiLVSQT5tOPMWpPDiP2aJX8wKngFdqCLc6COvfo1yUerzQLMydMJz69zA9ZA2Z4wmW+NY Ylu3AH1IcRwNbdYBx5n/ar8SjlV9TxSzS3j8YQmx5ETph7BKEXjANcE367j0H8Cnym6eGcVWv6+ Elwebvrpbqr7EhHzpspfmL1H7UZhdWJgAEoc/K3zCGrNAEyzFO3D+tJKaQG9U6Lg+XZpCqiZWVO 0zE3sz2f96+lQqMu7ySRShp0nldnuqHrbZvquK8Eo2nTiGvm5UH9Y+4u9Yxhga5fIVDXNEDT/xi IqACQ79JfdFdgXnLb1z5Nm97Y/i+0RmSbyPDk4Hdk4ClR/0q4AAurkup1oW5hCHi3fut+vgNAAF ITkx3GMV4xtK4U= X-Received: by 2002:a17:906:46d7:b0:b8a:fae9:5c60 with SMTP id a640c23a62f3a-b937654862emr537345266b.51.1772458342220; Mon, 02 Mar 2026 05:32:22 -0800 (PST) Received: from puffmais2.c.googlers.com (221.210.91.34.bc.googleusercontent.com. [34.91.210.221]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-65fabf6d1c6sm3282988a12.17.2026.03.02.05.32.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2026 05:32:21 -0800 (PST) From: =?utf-8?q?Andr=C3=A9_Draszik?= Date: Mon, 02 Mar 2026 13:32:09 +0000 Subject: [PATCH v3 10/11] power: supply: max17042: consider task period (max77759) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260302-max77759-fg-v3-10-3c5f01dbda23@linaro.org> References: <20260302-max77759-fg-v3-0-3c5f01dbda23@linaro.org> In-Reply-To: <20260302-max77759-fg-v3-0-3c5f01dbda23@linaro.org> To: Hans de Goede , Krzysztof Kozlowski , Marek Szyprowski , Sebastian Krzyszkowiak , Purism Kernel Team , Sebastian Reichel , Rob Herring , Conor Dooley , Ramakrishna Pallala Cc: Peter Griffin , Tudor Ambarus , Juan Yescas , Amit Sunil Dhamne , kernel-team@android.com, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Andr=C3=A9_Draszik?= X-Mailer: b4 0.14.3 Several (register) values reported by the fuel gauge depend on its internal task period and it needs to be taken into account when calculating results. All relevant example formulas in the data sheet assume the default task period (of 5760) and final results need to be adjusted based on the task period in effect. Update the code as and where necessary. Reviewed-by: Peter Griffin Signed-off-by: Andr=C3=A9 Draszik --- While I do believe this should apply to all devices supported by this driver, given the register description in max17042_battery.h, I've made this change specific to max77759, as I have no way to confirm this works as expected on those. I've found a data sheet for max17047/max17050 online, which does describe the relevant register 0x3c as 'reserved', hence I'm a bit hesitant to enable this for all. v2: * update commit message subject prefix --- drivers/power/supply/max17042_battery.c | 20 ++++++++++++++++++++ include/linux/power/max17042_battery.h | 1 + 2 files changed, 21 insertions(+) diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply= /max17042_battery.c index b9a21cef2cc6..bafbf8706055 100644 --- a/drivers/power/supply/max17042_battery.c +++ b/drivers/power/supply/max17042_battery.c @@ -61,6 +61,7 @@ struct max17042_chip { struct work_struct work; int init_complete; int irq; + int task_period; }; =20 static enum power_supply_property max17042_battery_props[] =3D { @@ -331,6 +332,8 @@ static int max17042_get_property(struct power_supply *p= sy, return ret; =20 data64 =3D data * 5000000ll; + data64 *=3D chip->task_period; + do_div(data64, MAX17042_DEFAULT_TASK_PERIOD); do_div(data64, chip->pdata->r_sns); val->intval =3D data64; break; @@ -340,6 +343,8 @@ static int max17042_get_property(struct power_supply *p= sy, return ret; =20 data64 =3D data * 5000000ll; + data64 *=3D chip->task_period; + do_div(data64, MAX17042_DEFAULT_TASK_PERIOD); do_div(data64, chip->pdata->r_sns); val->intval =3D data64; break; @@ -349,6 +354,8 @@ static int max17042_get_property(struct power_supply *p= sy, return ret; =20 data64 =3D data * 5000000ll; + data64 *=3D chip->task_period; + do_div(data64, MAX17042_DEFAULT_TASK_PERIOD); do_div(data64, chip->pdata->r_sns); val->intval =3D data64; break; @@ -358,6 +365,8 @@ static int max17042_get_property(struct power_supply *p= sy, return ret; =20 data64 =3D sign_extend64(data, 15) * 5000000ll; + data64 *=3D chip->task_period; + data64 =3D div_s64(data64, MAX17042_DEFAULT_TASK_PERIOD); val->intval =3D div_s64(data64, chip->pdata->r_sns); break; case POWER_SUPPLY_PROP_TEMP: @@ -1142,6 +1151,17 @@ static int max17042_probe(struct i2c_client *client,= struct device *dev, int irq regmap_write(chip->regmap, MAX17042_LearnCFG, 0x0007); } =20 + chip->task_period =3D MAX17042_DEFAULT_TASK_PERIOD; + if (chip->chip_type =3D=3D MAXIM_DEVICE_TYPE_MAX77759) { + ret =3D regmap_read(chip->regmap, MAX17042_TaskPeriod, &val); + if (ret) + return dev_err_probe(dev, ret, + "failed to read task period\n"); + chip->task_period =3D val; + } + dev_dbg(dev, "task period: %#.4x (%d)\n", chip->task_period, + chip->task_period); + chip->battery =3D devm_power_supply_register(dev, max17042_desc, &psy_cfg); if (IS_ERR(chip->battery)) diff --git a/include/linux/power/max17042_battery.h b/include/linux/power/m= ax17042_battery.h index 05097f08ea36..d5b08313cf11 100644 --- a/include/linux/power/max17042_battery.h +++ b/include/linux/power/max17042_battery.h @@ -17,6 +17,7 @@ #define MAX17042_DEFAULT_VMAX (4500) /* LiHV cell max */ #define MAX17042_DEFAULT_TEMP_MIN (0) /* For sys without temp sensor */ #define MAX17042_DEFAULT_TEMP_MAX (700) /* 70 degrees Celcius */ +#define MAX17042_DEFAULT_TASK_PERIOD (5760) =20 /* Consider RepCap which is less then 10 units below FullCAP full */ #define MAX17042_FULL_THRESHOLD 10 --=20 2.53.0.473.g4a7958ca14-goog