From nobody Tue Dec 2 00:25:54 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3B7632F772; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021218; cv=none; b=gWn6jlJOmNjKkrivmtmqgDI2xTbxG/RJk97Td9d1MHhClnl+al3K/orLQ8pvwHPi9HfWqkII6BFMbyxiRK3es3lVUoYtOVp5BIFwrPz2P4Zoard+p7OIwgjvfmEBbpcuUn9vO1fmld3oZAKe6jsgxjF4A5aiMYADmqhNdtTMMFQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021218; c=relaxed/simple; bh=+pBsNNQtLItEUIogavMTQxGMrQEuwJbUHzlRDsNE40k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Zc2qodGTZHp+YFESZMpnItQ72KkOwom5qipSlLEewvJuo3lvgBRkdzoHrF5gvpwWn/lcWBTmX1n35rzrWSw4TfPFQEEOdcbMTiYTAMv0mmI1ZAbpTannL5Aahr6vcU7OO41v4if43mM2p2TG8jJ8G4VfVSAOJEY/XDlkAaiBgAo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sKnRuBIF; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sKnRuBIF" Received: by smtp.kernel.org (Postfix) with ESMTPS id 2CFD7C16AAE; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764021218; bh=+pBsNNQtLItEUIogavMTQxGMrQEuwJbUHzlRDsNE40k=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=sKnRuBIF3PYkOz+2iAEZyhzjtg1avtmxmy3W2REDYbKwD6jv33opqn6O6L/L7YtdX /+Ja3XjbOMqLIaYfJuc0N0udXK8Bx8uIoZTDz3I9WX61NlJwflK132XqZ8VV3f6+1E RMpAN2NppbZvS0LYi37vFgdEy0GrTYEizZvye8hyO4yloOW8Hu0BmHWRWiNzzXVy5f N72Ul0YNM/I5t+sqSUuZHvbRSTf5HCiY8RDI/SmQBGorcpvvFb3QkxxpmNbnk7YhpH mFtFpEuLNTDI6FplNTFC7cUrrHzjwwXGRu+bCYOuHvpU56d0vfqsPIn2DjyrwyFPPc ymwqw501XAbiA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 22151CFD35F; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Mon, 24 Nov 2025 22:53:34 +0100 Subject: [PATCH RFC 1/8] dt-bindings: power: supply: Add schema for Qualcomm pmi8998 fuel gauge 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: <20251124-pmi8998_fuel_gauge-v1-1-dd3791f61478@ixit.cz> References: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> In-Reply-To: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Casey Connolly , Casey Connolly , Joel Selvaraj , Yassine Oudjana , Bjorn Andersson , Konrad Dybcio , Alexander Martinz , =?utf-8?q?Barnab=C3=A1s_Cz=C3=A9m=C3=A1n?= , Richard Acayan , Alexey Minnekhanov Cc: linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2537; i=david@ixit.cz; h=from:subject:message-id; bh=8gDcJuVR00nr5ImU9LywPVZeG4RNmdnomhcdhAvXSQU=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpJNPfKWxSxscYEJAYp0SZC4kEMTmRSgRMI64xj rQ01rKQLCGJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaSTT3wAKCRBgAj/E00kg cvywD/44kARU05lAFhs0AM2MeVjrNig/NHmW+MGYEYMB/NjjZhFdlAEW2mW3SDWCOVZsDI3D+GO vjP++xsbeZeNP71XrakQ2eVD1Qzzv4DQvbmIMAxUrutiJklsbsHss2jAJIAXFZ9mQ8BTXafGmQg 5QHQ2IjNqg2FejoJfBEWUs0hs9+gYieJ9w15xoWpCG2WWa75wqRGfM5588iTYad1XgSRy/opK+9 K6Hi5GAbCSNUR1QfAKTOeIty1pJYalKQ1AXHflttX2gghCqUHI533EC8LTC3D+TGzzQo2fB1h0B Ouz9Kwtp8FsrQCS3o9C2aPuKVBWkvxTr4yCL038A1IRWsgH6quQ7jGU0BU3Qgv8LuqdhTbdScb6 4K6rYCnpgGiG5xGRJcMgYg8ZHdHURY+Z7I2MEbHeTq7n18KXos3oNf2DzVA+mRR2OP9ZQZWDqWC UyXIGTv4h4vA2TdD9cSB6WG3RYJqRf5IGCMIbk6ENdzDUuSzZmlgRKdi3nA1MFLQSAh3m3wqEtM 4Qp/IQyP3ktpTg+EsrzHh+PY49I+eGXTWifdnXJAEZVgne2k44igHbNNEU7tKbmoQe1qRJSF4bT niN4FbblG68cu2nvm6tWzI2S28R5wT9HXcMRtyiBenjGRyMnVjuMfT7/pxQqU5tzHd/y3U8p1i6 V8uLRsbV9ElYgvw== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Yassine Oudjana Add a device-tree schema for Qualcomm PMIC 8998 fuel gauge. Signed-off-by: Barnab=C3=A1s Cz=C3=A9m=C3=A1n Signed-off-by: Yassine Oudjana --- .../bindings/power/supply/qcom,pmi8998-fg.yaml | 77 ++++++++++++++++++= ++++ 1 file changed, 77 insertions(+) diff --git a/Documentation/devicetree/bindings/power/supply/qcom,pmi8998-fg= .yaml b/Documentation/devicetree/bindings/power/supply/qcom,pmi8998-fg.yaml new file mode 100644 index 0000000000000..9acc1a7f04cda --- /dev/null +++ b/Documentation/devicetree/bindings/power/supply/qcom,pmi8998-fg.yaml @@ -0,0 +1,77 @@ +# SPDX-License-Identifier: (GPL-2.0-only or BSD-3-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/power/supply/qcom,pmi8998-fg.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm PMI8998 PMIC Fuel Gauge + +maintainers: + - Casey Connolly + - Joel Selvaraj + - Yassine Oudjana + +allOf: + - $ref: /schemas/power/supply/power-supply.yaml# + +properties: + compatible: + const: qcom,pmi8998-fg + + reg: + maxItems: 1 + + monitored-battery: + description: | + phandle of battery characteristics node. + The fuel gauge uses the following battery properties: + - charge-full-design-microamp-hours + - voltage-min-design-microvolt + - voltage-max-design-microvolt + See Documentation/devicetree/bindings/power/supply/battery.yaml + + interrupts: + items: + - description: State of charge change interrupt + + interrupt-names: + items: + - const: soc-delta + + power-supplies: true + +required: + - compatible + - reg + - monitored-battery + - interrupts + - interrupt-names + +additionalProperties: false + +examples: + - | + #include + + battery: battery { + compatible =3D "simple-battery"; + + charge-full-design-microamp-hours =3D <4070000>; + voltage-min-design-microvolt =3D <3400000>; + voltage-max-design-microvolt =3D <4400000>; + }; + + pmic { + #address-cells =3D <1>; + #size-cells =3D <0>; + + fuel-gauge@4000 { + compatible =3D "qcom,pmi8998-fg"; + reg =3D <0x4000>; + + interrupts =3D <0x2 0x40 0x4 IRQ_TYPE_EDGE_RISING>; + interrupt-names =3D "soc-delta"; + + monitored-battery =3D <&battery>; + }; + }; --=20 2.51.0 From nobody Tue Dec 2 00:25:54 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BC6C432F774; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021218; cv=none; b=DLLDStsHM2VOyj91+ab97D3gsCY4RaUyqUiqNIXU42SLxxXrbDqT4r68JP7zvK0aPx7+GwyTCjWir2GWLBuAYd5r8bRhhinWAGklEstJkcdSIZq/s3m1dxCIl5hOPw3WZDq2QRAAvZ5mN9ISHpON5O88U6TeeMqFay0GTndoQlA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021218; c=relaxed/simple; bh=U75tQfB+CxqTIxiXtul6BfWuCrZpHiWDngPIkL1yXtg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RdFvYTqYpBWr1Z/KdIH1H0zbdyW//yo9wB3pTJklW3CnkxWgG5JOGpJ2poQcadPNA5PezHyBqou5SeXgaTFyVEDcY0ey9HRc2jBOWNp9ltTzF7cbCB57xDj+PfPN/AqPPF8GUA4T7OTE4BHkau2+PIucTDv6+vNrkNvlnecxE50= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tAFVTOAz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="tAFVTOAz" Received: by smtp.kernel.org (Postfix) with ESMTPS id 3DF0FC4CEFB; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764021218; bh=U75tQfB+CxqTIxiXtul6BfWuCrZpHiWDngPIkL1yXtg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=tAFVTOAzfh/0RQpbua9xIxWw8d2pzZEuq2jFuK6AIbpxIAm2w4R4h4qX4gjOFyXeV tXEStwanewM5at4jjGf3NEJ8cS4SFbR+egZeiIrRyiXmMcprv6u2f/3gIUG8C06HU3 DRpPB9zDCvDD7+cP9P5rWZ8UmgIfXfGnCRh2nmzLdyNS+Yr2qWEJzPeuOaU4+pOb4U jqkisZzjbHpVfygCcy6cUEWFm6YsmivOOOd1QDnC4NhJS1HmAEV9kSr1iMt+HP926A 1EEtEDd9G7daZUFvmcOE53nIbofzCIlw40r0B/7kqsZ3gHspwtpz+rbpCauNs1Gc81 XnEOfyAIcxQbg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3647ACFD360; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Mon, 24 Nov 2025 22:53:35 +0100 Subject: [PATCH RFC 2/8] power: supply: Add driver for Qualcomm PMI8998 fuel gauge 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: <20251124-pmi8998_fuel_gauge-v1-2-dd3791f61478@ixit.cz> References: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> In-Reply-To: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Casey Connolly , Casey Connolly , Joel Selvaraj , Yassine Oudjana , Bjorn Andersson , Konrad Dybcio , Alexander Martinz , =?utf-8?q?Barnab=C3=A1s_Cz=C3=A9m=C3=A1n?= , Richard Acayan , Alexey Minnekhanov Cc: linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=20973; i=david@ixit.cz; h=from:subject:message-id; bh=3EhOp7+1Mtoxk6hc41aMmLn59WiI2Nd6Xzcmx2ZWgq4=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpJNPgbs48fzQOzVvnGSO01F6Od9LxUTyDmXEOb MFD9FqfOl2JAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaSTT4AAKCRBgAj/E00kg cmhxEADSlWUQm7y79kgVwNIpUbh5iphIWtrABTZMqXLSR98TaYsibZLPgS4mhpwOTE9LwaNeuJG jAKzwvu2mtuYZgDZG8sWxhBapiwQdNB3NdN08rDpV+u9OZ8ZTC+D8AnNI/fPefuDE4f/ehEux7l VseTt/E7NPBDxhySv8QDqbFZblDMq66XTe5bYuZWyoGdquY1auupzKkC58faG6+PWL2xI9NnA3d GQxZty9cABax2pI0G6ZmLQBTO4+vUQdFn9n6QjwxLbyE6gs4js0MeTZO+iQDyJJ9z3FU75Kyai1 2hwJLfYDCaZTpWML+S++4Fwsf0wMRHIff2J6Q4HkzOEYG1VG88XZK8iaZRyeuNfpuP6BUhuCKnh 7+5vRK/QV3M2sdYBoEUYhE4jdQDXg/g9RtPMpjl+rTSQhhjU8tCnZWXRtKVhpw+4r14XY1HYv/K L4tDuXAlVtPnkuddhj0U6M8OJR7ynqT6IciVsQUYtQPqqPx5y7qvPMcyPCRA/5gTtI5yCMlUEeb F5CSkLtLUiZWL28V0ysXbshabvMjHq2EaeE6+fMVP7Wu4LI4jM6LYfmMvVnwfwjbcnpaAQxAKmc 4yOwfc6iZZ8c3ZcnYmNMGr227y3iZ9YtKZ08U6dFumSm2eMmxJYYSCezjsryms0hBngBuNtsCxr 6RTI4Z0MNilXXxA== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Joel Selvaraj Ths driver supports the fuel gauge hardware available on PMICs known as 3rd generation fuel gauge hardware available on PMI8998. Co-developed-by: Casey Connolly Co-developed-by: Barnab=C3=A1s Cz=C3=A9m=C3=A1n Signed-off-by: Barnab=C3=A1s Cz=C3=A9m=C3=A1n Co-developed-by: Yassine Oudjana Signed-off-by: Yassine Oudjana Signed-off-by: David Heidelberg --- drivers/power/supply/Kconfig | 8 + drivers/power/supply/Makefile | 1 + drivers/power/supply/pmi8998_fg.c | 687 ++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 696 insertions(+) diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig index 92f9f7aae92f2..4024c6fe3fef2 100644 --- a/drivers/power/supply/Kconfig +++ b/drivers/power/supply/Kconfig @@ -746,6 +746,14 @@ config CHARGER_PM8916_LBC To compile this driver as module, choose M here: the module will be called pm8916_lbc. =20 +config BATTERY_PMI8998_FG + tristate "Qualcomm PMI8998 PMIC fuel gauge driver" + depends on MFD_SPMI_PMIC + help + Say Y here to enable the Qualcomm PMI8998 PMIC Fuel Gauge driver. + This adds support for battery fuel gauging and state of charge of + battery connected to the fuel gauge. + config CHARGER_BQ2415X tristate "TI BQ2415x battery charger driver" depends on I2C diff --git a/drivers/power/supply/Makefile b/drivers/power/supply/Makefile index 4b79d5abc49a7..03584efa2b1b0 100644 --- a/drivers/power/supply/Makefile +++ b/drivers/power/supply/Makefile @@ -96,6 +96,7 @@ obj-$(CONFIG_CHARGER_MT6370) +=3D mt6370-charger.o obj-$(CONFIG_CHARGER_QCOM_SMBB) +=3D qcom_smbb.o obj-$(CONFIG_BATTERY_PM8916_BMS_VM) +=3D pm8916_bms_vm.o obj-$(CONFIG_CHARGER_PM8916_LBC) +=3D pm8916_lbc.o +obj-$(CONFIG_BATTERY_PMI8998_FG) +=3D pmi8998_fg.o obj-$(CONFIG_CHARGER_BQ2415X) +=3D bq2415x_charger.o obj-$(CONFIG_CHARGER_BQ24190) +=3D bq24190_charger.o obj-$(CONFIG_CHARGER_BQ24257) +=3D bq24257_charger.o diff --git a/drivers/power/supply/pmi8998_fg.c b/drivers/power/supply/pmi89= 98_fg.c new file mode 100644 index 0000000000000..d5fccd16a013b --- /dev/null +++ b/drivers/power/supply/pmi8998_fg.c @@ -0,0 +1,687 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* Copyright (c) 2020, The Linux Foundation. All rights reserved. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* SOC */ +#define BATT_MONOTONIC_SOC 0x009 + +/* BATT */ +#define PARAM_ADDR_BATT_TEMP 0x150 +#define BATT_INFO_JEITA_COLD 0x162 +#define BATT_INFO_JEITA_COOL 0x163 +#define BATT_INFO_JEITA_WARM 0x164 +#define BATT_INFO_JEITA_HOT 0x165 +#define PARAM_ADDR_BATT_VOLTAGE 0x1a0 +#define PARAM_ADDR_BATT_CURRENT 0x1a2 + +/* MEMIF */ +#define MEM_INTF_IMA_CFG 0x452 +#define MEM_INTF_IMA_EXP_STS 0x455 +#define MEM_INTF_IMA_HW_STS 0x456 +#define MEM_INTF_IMA_ERR_STS 0x45f +#define MEM_INTF_ADDR_LSB 0x461 +#define MEM_INTF_RD_DATA0 0x467 +#define MEM_INTF_WR_DATA0 0x463 +#define MEM_IF_DMA_STS 0x470 +#define MEM_IF_DMA_CTL 0x471 + +#define BATT_TEMP_LSB_MASK GENMASK(7, 0) +#define BATT_TEMP_MSB_MASK GENMASK(2, 0) + +struct pmi8998_fg_chip { + struct device *dev; + unsigned int base; + struct regmap *regmap; + struct notifier_block nb; + + struct power_supply *batt_psy; + struct power_supply *chg_psy; + int status; + struct delayed_work status_changed_work; +}; + +/* + * IO functions + */ + +/** + * @brief pmi8998_fg_read() - Read multiple registers with regmap_bulk_read + * + * @param chip Pointer to chip + * @param val Pointer to read values into + * @param addr Address to read from + * @param len Number of registers (bytes) to read + * @return int 0 on success, negative errno on error + */ +static int pmi8998_fg_read(struct pmi8998_fg_chip *chip, u8 *val, u16 addr= , int len) +{ + if (((chip->base + addr) & 0xff00) =3D=3D 0) + return -EINVAL; + + dev_vdbg(chip->dev, "%s: Reading 0x%x bytes from 0x%x", __func__, len, ad= dr); + + return regmap_bulk_read(chip->regmap, chip->base + addr, val, len); +} + +/** + * @brief pmi8998_fg_write() - Write multiple registers with regmap_bulk_w= rite + * + * @param chip Pointer to chip + * @param val Pointer to write values from + * @param addr Address to write to + * @param len Number of registers (bytes) to write + * @return int 0 on success, negative errno on error + */ +static int pmi8998_fg_write(struct pmi8998_fg_chip *chip, u8 *val, u16 add= r, int len) +{ + bool sec_access =3D (addr & 0xff) > 0xd0; + u8 sec_addr_val =3D 0xa5; + int ret; + + if (((chip->base + addr) & 0xff00) =3D=3D 0) + return -EINVAL; + + dev_vdbg(chip->dev, "%s: Writing 0x%x to 0x%x", __func__, *val, addr); + + if (sec_access) { + ret =3D regmap_bulk_write(chip->regmap, + ((chip->base + addr) & 0xff00) | 0xd0, + &sec_addr_val, 1); + if (ret) + return ret; + } + + return regmap_bulk_write(chip->regmap, chip->base + addr, val, len); +} + +/** + * @brief pmi8998_fg_masked_write() - like pmi8998_fg_write but applies + * a mask first. + * + * @param chip Pointer to chip + * @param val Pointer to write values from + * @param addr Address to write to + * @param len Number of registers (bytes) to write + * @return int 0 on success, negative errno on error + */ +static int pmi8998_fg_masked_write(struct pmi8998_fg_chip *chip, u16 addr,= u8 mask, u8 val) +{ + u8 reg; + int ret; + + ret =3D pmi8998_fg_read(chip, ®, addr, 1); + if (ret) + return ret; + + reg &=3D ~mask; + reg |=3D val & mask; + + return pmi8998_fg_write(chip, ®, addr, 1); +} + +/* + * Battery status + */ + +/** + * @brief pmi8998_fg_get_capacity() - Get remaining capacity of battery + * + * @param chip Pointer to chip + * @param val Pointer to store value at + * @return int 0 on success, negative errno on error + */ +static int pmi8998_fg_get_capacity(struct pmi8998_fg_chip *chip, int *val) +{ + u8 cap[2]; + int ret; + + ret =3D pmi8998_fg_read(chip, cap, BATT_MONOTONIC_SOC, 2); + if (ret) { + dev_err(chip->dev, "Failed to read capacity: %d", ret); + return ret; + } + + if (cap[0] !=3D cap[1]) + cap[0] =3D cap[0] < cap[1] ? cap[0] : cap[1]; + + *val =3D DIV_ROUND_CLOSEST((cap[0] - 1) * 98, 0xff - 2) + 1; + + return 0; +} + +/** + * @brief pmi8998_fg_get_temperature() - Get temperature of battery + * + * @param chip Pointer to chip + * @param val Pointer to store value at + * @return int 0 on success, negative errno on error + */ +static int pmi8998_fg_get_temperature(struct pmi8998_fg_chip *chip, int *v= al) +{ + int ret, temp; + u8 readval[2]; + + ret =3D pmi8998_fg_read(chip, readval, PARAM_ADDR_BATT_TEMP, 2); + if (ret) { + dev_err(chip->dev, "Failed to read temperature: %d\n", ret); + return ret; + } + + temp =3D ((readval[1] & BATT_TEMP_MSB_MASK) << 8) | + (readval[0] & BATT_TEMP_LSB_MASK); + temp =3D DIV_ROUND_CLOSEST(temp * 10, 4); + + *val =3D temp - 2730; + + return 0; +} + +/** + * @brief pmi8998_fg_get_current() - Get current being drawn from battery + * + * @param chip Pointer to chip + * @param val Pointer to store value at + * @return int 0 on success, negative errno on error + */ +static int pmi8998_fg_get_current(struct pmi8998_fg_chip *chip, int *val) +{ + s16 temp; + u8 readval[2]; + int ret; + + ret =3D pmi8998_fg_read(chip, readval, PARAM_ADDR_BATT_CURRENT, 2); + if (ret) { + dev_err(chip->dev, "Failed to read current: %d\n", ret); + return ret; + } + + /* handle rev 1 too */ + temp =3D (s16)(readval[1] << 8 | readval[0]); + *val =3D div_s64((s64)temp * 488281, 1000); + + /* + * PSY API expects charging batteries to report a positive current, which= is inverted + * to what the PMIC reports. + */ + *val =3D -*val; + + return 0; +} + +/** + * @brief pmi8998_fg_get_voltage() - Get voltage of battery + * + * @param chip Pointer to chip + * @param val Pointer to store value at + * @return int 0 on success, negative errno on error + */ +static int pmi8998_fg_get_voltage(struct pmi8998_fg_chip *chip, int *val) +{ + int temp; + u8 readval[2]; + int ret; + + ret =3D pmi8998_fg_read(chip, readval, PARAM_ADDR_BATT_VOLTAGE, 2); + if (ret) { + dev_err(chip->dev, "Failed to read voltage: %d\n", ret); + return ret; + } + + /* handle rev 1 too */ + temp =3D readval[1] << 8 | readval[0]; + *val =3D div_u64((u64)temp * 122070, 1000); + + return 0; +} + +/** + * @brief pmi8998_fg_get_temp_threshold() - Get configured temperature thr= esholds + * + * @param chip Pointer to chip + * @param psp Power supply property of temperature limit + * @param val Pointer to store value at + * @return int 0 on success, negative errno on error + */ +static int pmi8998_fg_get_temp_threshold(struct pmi8998_fg_chip *chip, + enum power_supply_property psp, int *val) +{ + u8 temp; + u16 reg; + int ret; + + switch (psp) { + case POWER_SUPPLY_PROP_TEMP_MIN: + reg =3D BATT_INFO_JEITA_COLD; + break; + case POWER_SUPPLY_PROP_TEMP_MAX: + reg =3D BATT_INFO_JEITA_HOT; + break; + case POWER_SUPPLY_PROP_TEMP_ALERT_MIN: + reg =3D BATT_INFO_JEITA_COOL; + break; + case POWER_SUPPLY_PROP_TEMP_ALERT_MAX: + reg =3D BATT_INFO_JEITA_WARM; + break; + default: + return -EINVAL; + } + + ret =3D pmi8998_fg_read(chip, &temp, reg, 1); + if (ret < 0) { + dev_err(chip->dev, "Failed to read JEITA property %d level: %d\n", psp, = ret); + return ret; + } + + /* Resolution is 0.5C. Base is -30C. */ + *val =3D (((5 * temp) / 10) - 30) * 10; + + return 0; +} + +/* + * Battery power supply + */ + +static enum power_supply_property pmi8998_fg_props[] =3D { + POWER_SUPPLY_PROP_STATUS, + POWER_SUPPLY_PROP_TECHNOLOGY, + POWER_SUPPLY_PROP_CAPACITY, + POWER_SUPPLY_PROP_CURRENT_NOW, + POWER_SUPPLY_PROP_VOLTAGE_NOW, + POWER_SUPPLY_PROP_PRESENT, + POWER_SUPPLY_PROP_TEMP, + POWER_SUPPLY_PROP_TEMP_MIN, + POWER_SUPPLY_PROP_TEMP_MAX, + POWER_SUPPLY_PROP_TEMP_ALERT_MIN, + POWER_SUPPLY_PROP_TEMP_ALERT_MAX, +}; + +static int pmi8998_fg_get_property(struct power_supply *psy, + enum power_supply_property psp, + union power_supply_propval *val) +{ + struct pmi8998_fg_chip *chip =3D power_supply_get_drvdata(psy); + int temp, ret =3D 0; + + dev_dbg(chip->dev, "Getting property: %d", psp); + + switch (psp) { + case POWER_SUPPLY_PROP_STATUS: + /* Get status from charger if available */ + if (chip->chg_psy && + chip->status !=3D POWER_SUPPLY_STATUS_UNKNOWN) { + val->intval =3D chip->status; + } else { + /* + * Fall back to capacity and current-based + * status checking + */ + ret =3D pmi8998_fg_get_capacity(chip, &temp); + if (ret) { + val->intval =3D POWER_SUPPLY_STATUS_UNKNOWN; + break; + } + if (temp =3D=3D 100) { + val->intval =3D POWER_SUPPLY_STATUS_FULL; + break; + } + + ret =3D pmi8998_fg_get_current(chip, &temp); + if (ret) { + val->intval =3D POWER_SUPPLY_STATUS_UNKNOWN; + break; + } + if (temp < 0) + val->intval =3D POWER_SUPPLY_STATUS_CHARGING; + else if (temp > 0) + val->intval =3D POWER_SUPPLY_STATUS_DISCHARGING; + else + val->intval =3D POWER_SUPPLY_STATUS_NOT_CHARGING; + } + + break; + case POWER_SUPPLY_PROP_TECHNOLOGY: + val->intval =3D POWER_SUPPLY_TECHNOLOGY_LION; + break; + case POWER_SUPPLY_PROP_CAPACITY: + ret =3D pmi8998_fg_get_capacity(chip, &val->intval); + break; + case POWER_SUPPLY_PROP_CURRENT_NOW: + ret =3D pmi8998_fg_get_current(chip, &val->intval); + break; + case POWER_SUPPLY_PROP_VOLTAGE_NOW: + ret =3D pmi8998_fg_get_voltage(chip, &val->intval); + break; + case POWER_SUPPLY_PROP_PRESENT: + val->intval =3D 1; + break; + case POWER_SUPPLY_PROP_TEMP: + ret =3D pmi8998_fg_get_temperature(chip, &val->intval); + break; + case POWER_SUPPLY_PROP_TEMP_MIN: + case POWER_SUPPLY_PROP_TEMP_MAX: + case POWER_SUPPLY_PROP_TEMP_ALERT_MIN: + case POWER_SUPPLY_PROP_TEMP_ALERT_MAX: + ret =3D pmi8998_fg_get_temp_threshold(chip, psp, &val->intval); + break; + default: + dev_err(chip->dev, "invalid property: %d\n", psp); + return -EINVAL; + } + + return ret; +} + +static const struct power_supply_desc batt_psy_desc =3D { + .name =3D "qcom-battery", + .type =3D POWER_SUPPLY_TYPE_BATTERY, + .properties =3D pmi8998_fg_props, + .num_properties =3D ARRAY_SIZE(pmi8998_fg_props), + .get_property =3D pmi8998_fg_get_property, +}; + +/* + * Init functions + */ + +static int pmi8998_fg_iacs_clear_sequence(struct pmi8998_fg_chip *chip) +{ + u8 temp; + int ret; + + /* clear the error */ + ret =3D pmi8998_fg_masked_write(chip, MEM_INTF_IMA_CFG, BIT(2), BIT(2)); + if (ret) { + dev_err(chip->dev, "Failed to write IMA_CFG: %d\n", ret); + return ret; + } + + temp =3D 0x4; + ret =3D pmi8998_fg_write(chip, &temp, MEM_INTF_ADDR_LSB + 1, 1); + if (ret) { + dev_err(chip->dev, "Failed to write MEM_INTF_ADDR_MSB: %d\n", ret); + return ret; + } + + temp =3D 0x0; + ret =3D pmi8998_fg_write(chip, &temp, MEM_INTF_WR_DATA0 + 3, 1); + if (ret) { + dev_err(chip->dev, "Failed to write WR_DATA3: %d\n", ret); + return ret; + } + + ret =3D pmi8998_fg_read(chip, &temp, MEM_INTF_RD_DATA0 + 3, 1); + if (ret) { + dev_err(chip->dev, "Failed to write RD_DATA3: %d\n", ret); + return ret; + } + + ret =3D pmi8998_fg_masked_write(chip, MEM_INTF_IMA_CFG, BIT(2), 0); + if (ret) { + dev_err(chip->dev, "Failed to write IMA_CFG: %d\n", ret); + return ret; + } + + return 0; +} + +static int pmi8998_fg_clear_ima(struct pmi8998_fg_chip *chip, bool check_h= w_sts) +{ + u8 err_sts, exp_sts, hw_sts; + bool run_err_clr_seq =3D false; + int ret; + + ret =3D pmi8998_fg_read(chip, &err_sts, MEM_INTF_IMA_ERR_STS, 1); + if (ret) { + dev_err(chip->dev, "Failed to read IMA_ERR_STS: %d\n", ret); + return ret; + } + + ret =3D pmi8998_fg_read(chip, &exp_sts, + MEM_INTF_IMA_EXP_STS, 1); + if (ret) { + dev_err(chip->dev, "Failed to read IMA_EXP_STS: %d\n", ret); + return ret; + } + + if (check_hw_sts) { + ret =3D pmi8998_fg_read(chip, &hw_sts, + MEM_INTF_IMA_HW_STS, 1); + if (ret) { + dev_err(chip->dev, "Failed to read IMA_HW_STS: %d\n", ret); + return ret; + } + /* + * Lower nibble should be equal to upper nibble before SRAM + * transactions begins from SW side. + */ + if ((hw_sts & 0x0f) !=3D hw_sts >> 4) { + dev_dbg(chip->dev, "IMA HW not in correct state, hw_sts=3D%x\n", + hw_sts); + run_err_clr_seq =3D true; + } + } + + if (exp_sts & (BIT(0) | BIT(1) | BIT(3) | + BIT(4) | BIT(5) | BIT(6) | + BIT(7))) { + dev_dbg(chip->dev, "IMA exception bit set, exp_sts=3D%x\n", exp_sts); + run_err_clr_seq =3D true; + } + + if (run_err_clr_seq) { + ret =3D pmi8998_fg_iacs_clear_sequence(chip); + if (!ret) + return -EAGAIN; + } + + return 0; +} + +static irqreturn_t pmi8998_fg_handle_soc_delta(int irq, void *data) +{ + struct pmi8998_fg_chip *chip =3D data; + + /* Signal change in state of charge */ + power_supply_changed(chip->batt_psy); + dev_dbg(chip->dev, "SOC changed"); + + return IRQ_HANDLED; +} + +static void pmi8998_fg_status_changed_worker(struct work_struct *work) +{ + struct pmi8998_fg_chip *chip =3D container_of(work, struct pmi8998_fg_chi= p, + status_changed_work.work); + + power_supply_changed(chip->batt_psy); +} + +static int pmi8998_fg_notifier_call(struct notifier_block *nb, unsigned lo= ng val, void *v) +{ + struct pmi8998_fg_chip *chip =3D container_of(nb, struct pmi8998_fg_chip,= nb); + struct power_supply *psy =3D v; + union power_supply_propval propval; + int ret; + + if (psy =3D=3D chip->chg_psy) { + ret =3D power_supply_get_property(psy, + POWER_SUPPLY_PROP_STATUS, &propval); + if (ret) + chip->status =3D POWER_SUPPLY_STATUS_UNKNOWN; + + chip->status =3D propval.intval; + + power_supply_changed(chip->batt_psy); + + if (chip->status =3D=3D POWER_SUPPLY_STATUS_UNKNOWN) { + /* + * REVISIT: Find better solution or remove current-based + * status checking once checking is properly implemented + * in charger drivers + + * Sometimes it take a while for current to stabilize, + * so signal property change again later to make sure + * current-based status is properly detected. + */ + cancel_delayed_work_sync(&chip->status_changed_work); + schedule_delayed_work(&chip->status_changed_work, + msecs_to_jiffies(1000)); + } + } + + return NOTIFY_OK; +} + +static int pmi8998_fg_probe(struct platform_device *pdev) +{ + struct power_supply_config supply_config =3D {}; + struct pmi8998_fg_chip *chip; + const __be32 *prop_addr; + int irq; + u8 dma_status; + bool error_present; + int ret; + + chip =3D devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL); + if (!chip) + return -ENOMEM; + + chip->dev =3D &pdev->dev; + + chip->regmap =3D dev_get_regmap(pdev->dev.parent, NULL); + if (!chip->regmap) { + dev_err(chip->dev, "Failed to locate the regmap\n"); + return -ENODEV; + } + + /* Get base address */ + prop_addr =3D of_get_address(pdev->dev.of_node, 0, NULL, NULL); + if (!prop_addr) { + dev_err(chip->dev, "Failed to read SOC base address from dt\n"); + return -EINVAL; + } + chip->base =3D be32_to_cpu(*prop_addr); + + /* + * Change the FG_MEM_INT interrupt to track IACS_READY + * condition instead of end-of-transaction. This makes sure + * that the next transaction starts only after the hw is ready. + * IACS_INTR_SRC_SLCT is BIT(3) + */ + ret =3D pmi8998_fg_masked_write(chip, MEM_INTF_IMA_CFG, BIT(3), BIT(3)); + if (ret) { + dev_err(chip->dev, + "Failed to configure interrupt sourete: %d\n", ret); + return ret; + } + + ret =3D pmi8998_fg_clear_ima(chip, true); + if (ret && ret !=3D -EAGAIN) { + dev_err(chip->dev, "Failed to clear IMA exception: %d\n", ret); + return ret; + } + + /* Check and clear DMA errors */ + ret =3D pmi8998_fg_read(chip, &dma_status, MEM_IF_DMA_STS, 1); + if (ret < 0) { + dev_err(chip->dev, "Failed to read dma_status: %d\n", ret); + return ret; + } + + error_present =3D dma_status & (BIT(1) | BIT(2)); + ret =3D pmi8998_fg_masked_write(chip, MEM_IF_DMA_CTL, BIT(0), + error_present ? BIT(0) : 0); + if (ret < 0) { + dev_err(chip->dev, "Failed to write dma_ctl: %d\n", ret); + return ret; + } + + supply_config.drv_data =3D chip; + supply_config.fwnode =3D dev_fwnode(&pdev->dev); + + chip->batt_psy =3D devm_power_supply_register(chip->dev, + &batt_psy_desc, &supply_config); + if (IS_ERR(chip->batt_psy)) { + if (PTR_ERR(chip->batt_psy) !=3D -EPROBE_DEFER) + dev_err(&pdev->dev, "Failed to register battery\n"); + return PTR_ERR(chip->batt_psy); + } + + platform_set_drvdata(pdev, chip); + + /* Get soc-delta IRQ */ + irq =3D of_irq_get_byname(pdev->dev.of_node, "soc-delta"); + if (irq < 0) { + dev_err(&pdev->dev, "Failed to get irq soc-delta byname: %d\n", + irq); + return irq; + } + + ret =3D devm_request_threaded_irq(chip->dev, irq, NULL, + pmi8998_fg_handle_soc_delta, + IRQF_ONESHOT, "soc-delta", chip); + if (ret < 0) { + dev_err(&pdev->dev, "Failed to request soc-delta IRQ: %d\n", ret); + return ret; + } + + /* Optional: Get charger power supply for status checking */ + chip->chg_psy =3D power_supply_get_by_reference(of_fwnode_handle(chip->de= v->of_node), + "power-supplies"); + if (IS_ERR(chip->chg_psy)) { + ret =3D PTR_ERR(chip->chg_psy); + dev_warn(chip->dev, "Failed to get charger supply: %d\n", ret); + chip->chg_psy =3D NULL; + } + + if (chip->chg_psy) { + INIT_DELAYED_WORK(&chip->status_changed_work, + pmi8998_fg_status_changed_worker); + + chip->nb.notifier_call =3D pmi8998_fg_notifier_call; + ret =3D power_supply_reg_notifier(&chip->nb); + if (ret) { + dev_err(chip->dev, + "Failed to register notifier: %d\n", ret); + return ret; + } + } + + return 0; +} + +static const struct of_device_id fg_match_id_table[] =3D { + { .compatible =3D "qcom,pmi8998-fg" }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, fg_match_id_table); + +static struct platform_driver pmi8998_fg_driver =3D { + .probe =3D pmi8998_fg_probe, + .driver =3D { + .name =3D "pmi8998-fg", + .of_match_table =3D fg_match_id_table, + }, +}; + +module_platform_driver(pmi8998_fg_driver); + +MODULE_AUTHOR("Casey Connolly "); +MODULE_AUTHOR("Joel Selvaraj "); +MODULE_AUTHOR("Yassine Oudjana "); +MODULE_DESCRIPTION("Qualcomm PMI8998 Fuel Gauge Driver"); +MODULE_LICENSE("GPL"); --=20 2.51.0 From nobody Tue Dec 2 00:25:54 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E635332FA09; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021219; cv=none; b=ieqjYvh0IY0HeG9Tygo2H8z/0nqvdrV/xmZswBGch5WzdyHA0rgXivF7SXJzQemNBkVLM3+ahHrjne+HX4hfGrWljecY/49Qa8PW2Nfc8liegQ1nGx9MqRr20zGo++GaKHqEhT3YB0GrNqdwJkLhHUekgm6ttWJ15uoh1m4qpfM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021219; c=relaxed/simple; bh=Al8V6HMtter/SRb4oyaFfSbSGkkMcZGStdBXyd2IwqA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fEHnSi8fHQ0gUgI/beujrD6FH8E8LbC1vWxNrl4fflhErTs30K1RdwPyDIlwnWzjBACp0ng0Nk6XOila5YO07gaOcOk2BmvWgjKUJFbGIGZj+P5uGGVoPkWi4gSpQ5B8cIX4FFIVu7xokGBuXpvDDWTMzTuYOVnb8K/VV9WbJAM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gg+twld5; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gg+twld5" Received: by smtp.kernel.org (Postfix) with ESMTPS id 55150C2BC86; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764021218; bh=Al8V6HMtter/SRb4oyaFfSbSGkkMcZGStdBXyd2IwqA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=gg+twld5v5M9s/bv4OWHbveKTeyDju91JqQ0QKBduHYRzfHCtYlq/A0TZAFCE7EiR V5046dhbhMR+/U8ENbt0lUuh/z56dl5CTCVgXlHdp8CJcU71BSZpZ3FRmdd/B187st RVYXPD6wyS1+ZEf9xsyuj/USGD/QdR9BT80THIAMhRCaD/6rthMhI3Q07aJ0y4w1Zi wPN86CJUMUEPgyEWfVa+O/4uZ0yxm+X2oY/2P7bHwca0ngZJi/g1wptKqjcy1d3RT9 dxywfpxAQPsybmaS+m3PcrnkVxnN75lo7TdfcCLyBkVAnkbkDgEFY8CmeRP4Wcim7D a/BAX+Qa2TR7w== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 48EEDCFD362; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Mon, 24 Nov 2025 22:53:36 +0100 Subject: [PATCH RFC 3/8] arm64: dts: qcom: pmi8998: Add fuel gauge 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: <20251124-pmi8998_fuel_gauge-v1-3-dd3791f61478@ixit.cz> References: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> In-Reply-To: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Casey Connolly , Casey Connolly , Joel Selvaraj , Yassine Oudjana , Bjorn Andersson , Konrad Dybcio , Alexander Martinz , =?utf-8?q?Barnab=C3=A1s_Cz=C3=A9m=C3=A1n?= , Richard Acayan , Alexey Minnekhanov Cc: linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=802; i=david@ixit.cz; h=from:subject:message-id; bh=3NH+XDRf7boZ2ZmNb3Bl1vms6aKp3xOCdIZF3YQ+0F0=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpJNPg55+d8XT532qjbGQqchmayDZA+eMWof6+X UhVu69VKuaJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaSTT4AAKCRBgAj/E00kg cmIkD/9vn0ydEfm5TSte0rhonIcjJ75d0IPSoApYAqj7a0JXnks5F8oeRsqXevA4dWjzJTEtsr0 8TgfpB+I0TaPlku/gG+ygcXN0KZ8C7BCKChSQFeh2pFuVxjNgwCmdGUvz+Yl8+lGYO8kb8jooa5 ZzNU50kl8IaOvj/xv0U6urmvutjMPugV7x+r7XpCBO3joSPKWSVOvBx6YBJhZiS1Yp2Ywxupk+B sCRSpA82oUlEnQxrKDNMSXXgsTs6j6u69slgRAjQJkSRKJdI0dpEEGhe/wuIYfQhQSujLCENPb5 fdELrOegE8b2Gd+tS/rIItpdZRTSVlDWFl+fGRtAMc+Z+IrJAEDAqDjIIM6Gl9fL/lsVwP7YqB3 rVmgagRgM4sY0aBl0zLkYYmsywAFPezUSk3BeKyEctfWX3y61GbvxdezPzBOon2+3VRXpBa5h0y N4TN4BNTXnWMzWczO4SVnDxUUiYAObJzBin7k12eFsgLWN3POw90lEkcg3ef7v+0d0KJnUkSS8O bNnkdfwcJQX1lZ9gQymokImssKfZTiHCoNfIkXZVy9e/44aiJROOgMNZ28KSKtJYxzd9LEMefTS RCBEJAk439MOb6MD3ha7wGfKOwuJJUMaTg8siYfipF3QOBAY2dGM06QK+XOsKp/PCYnW7QMgFWM aRBL+N19XB5s59w== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Casey Connolly Introduce the fuel gauge node for pmi8998. Signed-off-by: David Heidelberg --- arch/arm64/boot/dts/qcom/pmi8998.dtsi | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/pmi8998.dtsi b/arch/arm64/boot/dts/qc= om/pmi8998.dtsi index cd3f0790fd420..ab3bc66502657 100644 --- a/arch/arm64/boot/dts/qcom/pmi8998.dtsi +++ b/arch/arm64/boot/dts/qcom/pmi8998.dtsi @@ -44,6 +44,17 @@ pmi8998_rradc: adc@4500 { reg =3D <0x4500>; #io-channel-cells =3D <1>; }; + + pmi8998_fg: fuel-gauge@4000 { + compatible =3D "qcom,pmi8998-fg"; + reg =3D <0x4000>; + + interrupts =3D <0x2 0x40 0x3 IRQ_TYPE_EDGE_RISING>; + interrupt-names =3D "soc-delta"; + + status =3D "disabled"; + }; + }; =20 pmi8998_lsid1: pmic@3 { --=20 2.51.0 From nobody Tue Dec 2 00:25:54 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22E2E32FA1E; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021219; cv=none; b=jJbI0rG8NJnoCUOfpmRFbUd4vDShaCMRbppTiihEDjRfPBke2a+X61swO6QsYozSM/jOC5kM+yAZp75af/FyXR+MV90vZTDqeNidOxFCv7etOlbAIi0YGaDjc0y8oO8qZzqSFsmaf0RmLjVG8AvSsO7CN83//tsDbeAhS/MPFpM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021219; c=relaxed/simple; bh=BgrQ+EjDTzWVK+qCh810+qg1MEmEBST6Ww23QYqcyQE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PbcP55AyebIYAl1bNT7RPGF56kLaqkWxzvplk8dgB65OrJyTTf7OaIJq06W49JM7ewO1FZAJJmw5+z//gyx8HYdXcz3qmjdY8flWI4uqmSK8DLXZ+T4Y8gUFRVgxDTcwYohzPnVpRx1wS+WnctlqBeaLivlYEe7NJTGlqlAHTZM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tVVBQRVH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="tVVBQRVH" Received: by smtp.kernel.org (Postfix) with ESMTPS id 69A7CC2BC9E; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764021218; bh=BgrQ+EjDTzWVK+qCh810+qg1MEmEBST6Ww23QYqcyQE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=tVVBQRVHbO1R/FPNz6in3gw3Sud80nBqDYUFKHImH1kYiOKFQhKojgKKBBc1EsPHt eB3hCcHfApNj8edDcFJU40ljsa3rHWBiUjYIfm1e1oBAzlq5NfNH/Lg6ZBWM08AKk8 3noTKMjodxtbaq5O8x+KblJmnKsjwUVzEPd7jxvUXh6jRUCZHAV1T9dBjvQYY2GPIM OwVtUyvqDMZRseP7GFksBkRAI9LB0X/aBwm1b0V9oBz5yYuQ8zaQCjDrxPgb4TokFZ AWINgHe2TDpEsIb8JWk5ojSwECzXFvOn+kFMKBqHuhp52QHno5cpQOhmjZCQpWde5S lIeFpbN8GtW/Q== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5BC04CFD363; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Mon, 24 Nov 2025 22:53:37 +0100 Subject: [PATCH RFC 4/8] arm64: dts: qcom: pm660: Add fuel gauge 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: <20251124-pmi8998_fuel_gauge-v1-4-dd3791f61478@ixit.cz> References: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> In-Reply-To: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Casey Connolly , Casey Connolly , Joel Selvaraj , Yassine Oudjana , Bjorn Andersson , Konrad Dybcio , Alexander Martinz , =?utf-8?q?Barnab=C3=A1s_Cz=C3=A9m=C3=A1n?= , Richard Acayan , Alexey Minnekhanov Cc: linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=889; i=david@ixit.cz; h=from:subject:message-id; bh=Oehd4AB8jVMo0BM0kTNmlPXaU9PB0xpePJ4WKe1viNY=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpJNPgIuRTPoGf/YpDS0NtfGU0NfB4vzFgHeiCl kqK2+FlNR2JAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaSTT4AAKCRBgAj/E00kg cvyeEACBX6kgWzktd3wBY99dGZqC7osuD5Wg2AiGpJRcnNwSaQTQonaHdhzPFzf4TtuABXY+87s YrQzr+S2gZioisyz7ppEo9usGCi+zvsZx6hxMHTfst5/jHcX9OhY5KbNnXdlzLRcwmeJcJ1Wb2w TZeEk9PAMW/+730BKlpyvN0QnA3nOYqMlQSlS2y6F1vr2k/tV9o+3I25OUV/XPEtw+KC/5H68z1 y6wtapPz97VeKBbgFgqTrxyjBnyaN82X2CI6yDPJ/p7ny2lNLUJeRtNk2OU/WCwmKHz69JaxbJ0 YGJc6iiJFzGPBVIiZwAhHXwI1AZ4pyKQ/2erQKcjb5H5RQMaebVYPy4EIkk37uuybRBapAzs0z1 mIQIT05vG1pgKcrzX5Rv88/dFHl1XUfFRJ+NKWQSuuQSRrcNpX6kn9mMpmZ1T68TO5QUnAikFM0 p9dU2pPNYhmEEH2Ogg+sCHaVz5feAmylgwolATlXzMDxFBqzaBXVHAv8psAZR2IkkJ6u3I1VUi8 wkmB6os8ufY9ANh0qgLoLrIMd9cVFWkSiohKjBzXy2xs/rXCiHJ+ynnBBtT0S/yx1Pr635JXgb0 qTqnrNHGizhfOasey+avZmNQ8YZ1P8j21AUIF+jc/1HyDBT0JtKqmLlZB4D+V3Yl3zNhZ8koUKU LBX3bGntOl+3Veg== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Richard Acayan The PM660 has the same fuel gauge as PMI8998. Add support for PM660 battery monitoring. Signed-off-by: Richard Acayan Signed-off-by: David Heidelberg --- arch/arm64/boot/dts/qcom/pm660.dtsi | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/pm660.dtsi b/arch/arm64/boot/dts/qcom= /pm660.dtsi index 156b2ddff0dcb..ce53f5ddc4bdf 100644 --- a/arch/arm64/boot/dts/qcom/pm660.dtsi +++ b/arch/arm64/boot/dts/qcom/pm660.dtsi @@ -197,6 +197,16 @@ channel@85 { }; }; =20 + pm660_fg: fuel-gauge@4000 { + compatible =3D "qcom,pmi8998-fg"; + reg =3D <0x4000>; + + interrupts =3D <0x0 0x40 0x3 IRQ_TYPE_EDGE_RISING>; + interrupt-names =3D "soc-delta"; + + status =3D "disabled"; + }; + pm660_rradc: adc@4500 { compatible =3D "qcom,pm660-rradc"; reg =3D <0x4500>; --=20 2.51.0 From nobody Tue Dec 2 00:25:54 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2C93132FA28; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021219; cv=none; b=aPnoSkh3i1Ntdga5tG4swRueMqVJCT57TQ8L7+GHoGBY8eh3aW0YzPItXWyb4XWF3V3rHIEZHjI7tku9pdu+LIxJDCURbEBMPrhp2ztlfmTbf+pLI2PW9M9r0ulRayqPxA6NXwxnkCthF1/cTrhgcW/o87T8yVLR9pPn1B7k1Qs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021219; c=relaxed/simple; bh=ZTO1VmzdNMhc0BgtZT7Hj8ZjO+FqcNP8ddbdak5mk8Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tT9JWrqaiREe5ZXzTJwFZ2pzfvUN0UKeqWiPugkZUf+RMNNh1q5iX5IdjxhACDnY617tq4hu84rKoDcMoDP8opADmeINaTv3fhZM4bKMnyjMQ/oc5zn3xSXJj5wQf8sKyx248qQ+OHyQjcIC8gLuNb9YwqNUH+mxguO0L5BZEwg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CtCX7vl6; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="CtCX7vl6" Received: by smtp.kernel.org (Postfix) with ESMTPS id 7EF5AC2BCB3; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764021218; bh=ZTO1VmzdNMhc0BgtZT7Hj8ZjO+FqcNP8ddbdak5mk8Y=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=CtCX7vl64L/SyNYYkXy2lahWjWKAyJJqRszZ7gS7N6yc3CGnGAdSLu5y0dg/uf+BO 1b4gk3MlupU211UTs5PXy501V0lTw5LOmEKV4of1+fPrTKsxPcCEEWwWueyMXCdVbL KHNnaTyZp0DRYC6Utz/7QeUIJKn9CRNKqks9JeHwT8Btxo5+2gcWnd47AlkHMJeupd 09pcjfp0Jk0DMG7ercerAe6MC2McdLfpkAXW0V99QwIanDgp8iW6MDvQz8q2A7LJSA LKae3AIvMGlkimHDJnmWC4GzqCW8qNGLfrIbegK+WubLhtGJ5RTHGzPFQ98Cwr7Pbb QJkYlFkvMqGeQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 73F6ACFD35F; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Mon, 24 Nov 2025 22:53:38 +0100 Subject: [PATCH RFC 5/8] arm64: dts: qcom: sdm845-xiaomi-beryllium: Enable fuel gauge 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: <20251124-pmi8998_fuel_gauge-v1-5-dd3791f61478@ixit.cz> References: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> In-Reply-To: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Casey Connolly , Casey Connolly , Joel Selvaraj , Yassine Oudjana , Bjorn Andersson , Konrad Dybcio , Alexander Martinz , =?utf-8?q?Barnab=C3=A1s_Cz=C3=A9m=C3=A1n?= , Richard Acayan , Alexey Minnekhanov Cc: linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=864; i=david@ixit.cz; h=from:subject:message-id; bh=Re+K+Vl4ZWKmEaGB1PbuYTeVVGS0LWdIYqQ7l+1dIAI=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpJNPgfC0P7L5HwD7n3cXr0nX8wAQIe/gu8Sdt7 OSfwTLO7yaJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaSTT4AAKCRBgAj/E00kg cqOVEACA6gKbkiaPb7CMA/iUgj6STdqPRAi/V9BHUqxSlKcWhjlcnzSqhhNWe0SzqqFeSmi5Zoa yt17IyjfPUm+SLoWvtCklMerADVx7pIrEq8gVf1dWwVKNtAoz3IHr6v0Z2DHMNtYcSmrhWZaaB3 DZ9/y3itT1ew+3eICVmS3+CtrELd7MeZ19dwFfmIXbpnpBtpWeeLo+sCREzlbWDNx8Jlq3Nk1qO BylNY1pwf/4v8R5NnMnHsHYMEQyzOwZKUv28e6afb37Bnmptng6+WcTUUSyyIE/08n3g+pkince yNtCJADoNXolSNGXHM6pF64BX9G5iQoC8yQdP9zoqck2PyvLhQnVzoIU+L5tfb4lofile53BpGS oIBj6Qzaz5zMNImMaIr28ykDwQ/0nThRDk0VhZkSY7BIIvFiES/sX3YE5daeCbJ3W/S8TySupKs GQeaKxjy51vSHu6dFauPL1vKMi/JeSacJGzKiPzqTitQK+QDWsJMiIJNUfy1q69TUP9ZdBPe6ea WplkSMec+9a5hb3zIxvFllZ2Ve8qhwDuRX1kaoqnx6PzutPbOctUMs2HUswVOrfVVn/PPH6qCbF hpeMUDWkFaD4c2APyPQ7asaf9T1K6XHbi+uBOfFKsts5kJOfXAie5IueYfI1f/3F23o3Q8VCiCb sPmizpjdlI0Wgcw== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Joel Selvaraj Enable the fuel gauge and configure the associated charger and battery. Signed-off-by: Joel Selvaraj Signed-off-by: David Heidelberg Reviewed-by: Dmitry Baryshkov --- arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi b= /arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi index 785006a15e979..bb6448f4e036b 100644 --- a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi +++ b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi @@ -377,6 +377,13 @@ led-1 { }; }; =20 +&pmi8998_fg { + power-supplies =3D <&pmi8998_charger>; + monitored-battery =3D <&battery>; + + status =3D "okay"; +}; + &pm8998_resin { linux,code =3D ; status =3D "okay"; --=20 2.51.0 From nobody Tue Dec 2 00:25:54 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 33D9332FA31; Mon, 24 Nov 2025 21:53:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021219; cv=none; b=gvIcQjclTayDs1JXBvaC7AJgvliFOrpRhXOxX4MApS8Rvinxth3kVKbLiAH/Ynybqm+Udzfw5BwBcEc2ctu/FkW0QFJlvT6/P+lxETp9fsSFhz1Ov0JVW/SPQTsBZRhoTHtpGRTSx8/iIAgknYdZRm0cldb2hUCOd298pO4tjjk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021219; c=relaxed/simple; bh=iNnu8NdOtVkVeXBIGUy+//lZW2PoS4dtCcSNdHnk5KQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UdFvZGnLuGfbgENbkW0Az5NZVGP40KG48ZjrmvU5K8hZW+oJEpuXjdAnXir+g2i5fWOp0JxTtO7pOUDyZHfFpTiAcd4N7zMbVArgR2i6Dw7oZia6Jgki+RJjscY4dXlh7NoLVQNXArBTSVfcaNa2OtUutETQgkX0zVXB8ZQjUVo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RO5CXKCO; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="RO5CXKCO" Received: by smtp.kernel.org (Postfix) with ESMTPS id 8F422C2BC87; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764021218; bh=iNnu8NdOtVkVeXBIGUy+//lZW2PoS4dtCcSNdHnk5KQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=RO5CXKCOC8cYEMuH61U9QH3lvY8aOdQDaEauJxwGURZJasL74yl0GNfQ6UHy8WMkP iZ/71tegWrQD2lvRURWXOgHzpyCweaeBrZUDfODvXie04Gqf0DO6gM8Ygjj7IMtLKT TLA+yIxM6K1n3v/Fvayj6t2S5xNyC8IRw9Y07fJ4aEchUrFZheaYqPas6IeEsc2HA+ SWk1UZrz88ANVtYvAQwvJGk0IdAxlC2boxGG63Zq98KHjReNoaluYNV74q7LUJraaf /lUeelt3aKlyxJ0mR55cTy5WaDSJMorAUgVeeqDVKGEiU7Yc/ZDMPNKPsOl6Xbn1S1 sIgoZEkBcEY8A== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 87C18CFD364; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Mon, 24 Nov 2025 22:53:39 +0100 Subject: [PATCH RFC 6/8] arm64: dts: qcom: sdm845-shift-axolotl: Enable fuel gauge 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: <20251124-pmi8998_fuel_gauge-v1-6-dd3791f61478@ixit.cz> References: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> In-Reply-To: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Casey Connolly , Casey Connolly , Joel Selvaraj , Yassine Oudjana , Bjorn Andersson , Konrad Dybcio , Alexander Martinz , =?utf-8?q?Barnab=C3=A1s_Cz=C3=A9m=C3=A1n?= , Richard Acayan , Alexey Minnekhanov Cc: linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=839; i=david@ixit.cz; h=from:subject:message-id; bh=rWr9w6N0g0uoz/ni0a7604nlr6yXoa+VTp7KmyJxlrg=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpJNPgFlWsPm3iSNWe01qiE1zdx1ltKOFn190HJ Ko0UM3Acv2JAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaSTT4AAKCRBgAj/E00kg clyfD/97XwPy2exVdqPOI880Z1tW0zR9atPBY9VnosC07OH1VVQcky95MsrBcCE/fBhCW8aX7nj RCOWtBkbF5zvq7wYDMQK36Y9VlXLgCdLDTGzWdF2rHsYgKNX38QqarS+H4ZsSF1Cm99ZDCoxbYd meBvz/QARBVI6tbe7kZlRoGw1koasx1e666/IrVD7LxmnmwttuMHw6DIUiFqwOXyhUMZ2eVMS+y mUjtlm52nsvAbIqjJKNAjjVDvZTsPOr5kFQeKEVnJSYkrZT363haXBlm4ej6j9KjoyO+iij5jOE i5pnBtu/RU9IHSyqmeYK+JkyPLJJEeybhgXpB0Y5lP/iVmJUm4ULWXo95vM3yJROdrbxyMX8IGi PXP1bfG7Q1Mu44WghOg9oE6c9Gx0GGhJKwF4h3Y8aHqrUwbbA2k+m9vj5+/a4WRLGAdhctrpBTm nrVZ67rqaVGJnpBpdsd0NUnon9j9deQo3beU7q6wXl84gavQ1Ab+Og9/89oya9TgSM4d0ObMHeq 3k/D4Saa3SACtsZht6Pbs6XQnVeVc0OC8y7i55pQwBrwPR3CPmPkIQVcGPZvv4MLA3TOxxvgogM pPdAu59AadhcElCCa42nKLdlLJfJk8Z9F3VFjE02PAYMBIcp3zhbdvZOISrAKzlwa2uRO5jGbI4 YAQe9Eatm5bGZbg== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Casey Connolly Enable the fuel gauge and configure the associated charger and battery. Signed-off-by: Casey Connolly Signed-off-by: David Heidelberg Reviewed-by: Dmitry Baryshkov --- arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts b/arch/arm64= /boot/dts/qcom/sdm845-shift-axolotl.dts index ddc2b3ca3bc57..f1fea39972e8c 100644 --- a/arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts +++ b/arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts @@ -524,6 +524,13 @@ &pmi8998_charger { status =3D "okay"; }; =20 +&pmi8998_fg { + power-supplies =3D <&pmi8998_charger>; + monitored-battery =3D <&battery>; + + status =3D "okay"; +}; + &pm8998_resin { linux,code =3D ; status =3D "okay"; --=20 2.51.0 From nobody Tue Dec 2 00:25:54 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E548B32FA04; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021219; cv=none; b=ae4ioQgW0eZW1cOLduhwGplvXg7R8pM6Ww+yyiwKkMdiwNdx3jMAXtYAxsYSGMjBPq1kP96gGZxB8+v7Xs4o0TDliY+AIL1wWCUypyRJdLggjEbgAxZYcDguGtuVLkMRNeOQBhe7e/f99+a4k2uVvywg7JLI5pTuURXbZOFTJ7A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021219; c=relaxed/simple; bh=UZCDBsnIgF6i1ponotY8rKoFIZRImebHaODX1X7uydk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JbwvvDcrEf599sBdMvS8cg2+APuOyHCqZpdFAmH2EPCb8nLHzgccHw3YA+OMOUJ9FIYeXJk3YLe/dSznk0IiVSydN3u+FNZm7PKdS+PyoOGi4H71BYv+2v0UwneC+aGIqpTofkDCwZTf5BJcNa30iRcMxNevmWE7mHjzp/GfijQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HByVrdvK; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HByVrdvK" Received: by smtp.kernel.org (Postfix) with ESMTPS id A58D0C19423; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764021218; bh=UZCDBsnIgF6i1ponotY8rKoFIZRImebHaODX1X7uydk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=HByVrdvKJ2l3/KJQrVU93kcRmq097VNuyxwDIFchD4RR8+N+x6gQSen9D9sDNlABP OxNJsVMLayxpgMqOu+5sBs17ndMM4blDrDJiXLXTe7RvJM1mTQoyHFv78BmX5wWxxZ 288t1z32gUsUoA/M43nf3rdLzkLc6clx19yNr14d6wFcCtAdCp9bXeLkn69IgI40WP uDXY+wWD0SsL6GxaoRk5rOv8kk+vCyOktzbnkf9aJmFM0mG+vPxl9WyYl5FyuWGS5N W7RB48n8ZZ7n/ddHwzdVmWnQVR4IHL3DaiQhV6tVntc1++4ATJm+6HHjzRHZxdb/U4 4zvZO5Pw7L/Yg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 99634CFD362; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Mon, 24 Nov 2025 22:53:40 +0100 Subject: [PATCH RFC 7/8] arm64: dts: qcom: sdm660-xiaomi-lavender: Enable support for battery 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: <20251124-pmi8998_fuel_gauge-v1-7-dd3791f61478@ixit.cz> References: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> In-Reply-To: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Casey Connolly , Casey Connolly , Joel Selvaraj , Yassine Oudjana , Bjorn Andersson , Konrad Dybcio , Alexander Martinz , =?utf-8?q?Barnab=C3=A1s_Cz=C3=A9m=C3=A1n?= , Richard Acayan , Alexey Minnekhanov Cc: linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1321; i=david@ixit.cz; h=from:subject:message-id; bh=//aqcSpHZqCf7Mxnh6vHuPIwTM+lRyzwo555sjaHWYQ=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpJNPgrjHhAZgGkJRJFtjUg8tuRv4ka4Q3yB3je dyrZooQwrmJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaSTT4AAKCRBgAj/E00kg chwTD/4/GOvibHB+A6jj1nlegYxO1fobQm020Fk2yy+lZ+X7zYV3IAd3dAJcIJIMHcPa4/ZAyDl nnclreUzuijV8H0Rj8MFp7B25J5XNUPa+ZE9kwrOTNp6uWVrRo25ft1/cS6AnxVWc86DS+3MQ3T oEmy56/52kuKyL2kZkVa1gcpZADRqSvi965KuhHYKZlTZenqfWUQBFybCO/yQER7f1LAdwjFbNC 67OIvlVKhIoLq2zPLu/7Daxf6KypaLTHMnA5jt1sQRW598WEaEKmXx0GJNR2tZYpu3lmuLaV5eS l/rEkvpOkwFioU/R7oWsPy52dkaMW5gHC7MZ6uRHsFOCPLCuqENkKANHJm9rV/R/E1h+jXX4B6p HbZ+uDifRd1IPxgIc4+QRhMfYz+czqHv2YzcWkzCX5rIQJwVXx300XkA2y/xpL8TBbANFEqRIUm qsTSZTWA4uD+jQC8B9RKiOa2NpDORvD9XPwV3hjdaT0sTYXndKmBOi9RpTQ+v6sMek3cMRI9hK4 ps3fLHKSx5UOV/Ox2nCftygviLdL9efjTNnIjCpCvhpbsSmCEL1UU3s6vHrTrXecxfqz7hOG73z PeOpDuJVSWELW4mcTv3G/cx6/XC1OjdrmUS3IV95D0qUIeRAzWRC/LcVF5Yegpz7nQwyaCqOWgk 1AfBNTow9k3tiQQ== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Alexey Minnekhanov Add support for battery, fuelgauge and charger. Signed-off-by: Alexey Minnekhanov Signed-off-by: David Heidelberg Reviewed-by: Dmitry Baryshkov --- .../arm64/boot/dts/qcom/sdm660-xiaomi-lavender.dts | 25 ++++++++++++++++++= ++++ 1 file changed, 25 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender.dts b/arch/arm= 64/boot/dts/qcom/sdm660-xiaomi-lavender.dts index a9926ad6c6f9f..cb89b88d887d1 100644 --- a/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender.dts +++ b/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender.dts @@ -38,6 +38,14 @@ framebuffer0: framebuffer@9d400000 { }; }; =20 + battery: battery { + compatible =3D "simple-battery"; + + charge-full-design-microamp-hours =3D <4000000>; + voltage-min-design-microvolt =3D <3400000>; + voltage-max-design-microvolt =3D <4400000>; + }; + vph_pwr: vph-pwr-regulator { compatible =3D "regulator-fixed"; regulator-name =3D "vph_pwr"; @@ -93,6 +101,23 @@ &blsp1_uart2 { status =3D "okay"; }; =20 +&pm660_charger { + monitored-battery =3D <&battery>; + + status =3D "okay"; +}; + +&pm660_fg { + monitored-battery =3D <&battery>; + power-supplies =3D <&pm660_charger>; + + status =3D "okay"; +}; + +&pm660_rradc { + status =3D "okay"; +}; + &pon_pwrkey { status =3D "okay"; }; --=20 2.51.0 From nobody Tue Dec 2 00:25:54 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 34E2732FA32; Mon, 24 Nov 2025 21:53:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021219; cv=none; b=hBQjsOQGnQZ5MCzOxtq0muJPXaIhab0XNvi63hglk8x6qMMBvd8xzw09/A26qit/5IP78hROp98OpkaVNvfKerwGQyP1BSTjBr6xcaWtMDD42U+HheKVb1/ivjyVtsFrxVwb/nH7zFL+ifqqQhbpDoipQGQI6HUXrsktGSB8QQM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764021219; c=relaxed/simple; bh=3IKw0nkX63RBBXH8cToT4cBaJzlDdChJSInpUsVpcyA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=o9c26mA5ngu/Yhull065WHhITt5V8aVEC4eDhku4CKTwmip/ZtWEPqS5DuyB+GqPOY8Q40ZScFMrpflHbjQvE8Z8SlehQ/M+ANd6jCf+HsMaRwGY4yEd9ktz58lhAlLPe9UErYXbZVVPCfXcjayxIBHLt68Jefitp283jxumqXI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RDXdOcni; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="RDXdOcni" Received: by smtp.kernel.org (Postfix) with ESMTPS id B76C1C19421; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764021218; bh=3IKw0nkX63RBBXH8cToT4cBaJzlDdChJSInpUsVpcyA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=RDXdOcni3FSC5b1r8qwe7fWzs8w/k1cc3XcJOA67qh+HB37tYBXn0LdBvjwvpPKMo rN1i0/hrd5gXDi0cnNWSkw4lGVOjWWqX4ubXjcMTOP4fppmJRt3RoeKjMK1utDybuF 7PoXV4LGJISTG51fIvP3NM2mshUH/v8TlRgXhgljLQ87i9R/Z7MzOUAOqSfcmk5HND uDbHEu4aJoo3QEzNWs2sO4oPosUrx8HMv7KySqQyAmHjhljG4L8sqkRbUrQ5ZzacIy tu4qrA+NSG3GTR1rP+c4kh/FWuDCjcTSp+RMsMqeK5WKzbogNSHtWEHtHdvSzhfreO I3gsb4uJY2qSw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id AD6BDCFD360; Mon, 24 Nov 2025 21:53:38 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Mon, 24 Nov 2025 22:53:41 +0100 Subject: [PATCH RFC 8/8] arm64: dts: qcom: sdm670-google-sargo: Enable fuel gauge 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: <20251124-pmi8998_fuel_gauge-v1-8-dd3791f61478@ixit.cz> References: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> In-Reply-To: <20251124-pmi8998_fuel_gauge-v1-0-dd3791f61478@ixit.cz> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Casey Connolly , Casey Connolly , Joel Selvaraj , Yassine Oudjana , Bjorn Andersson , Konrad Dybcio , Alexander Martinz , =?utf-8?q?Barnab=C3=A1s_Cz=C3=A9m=C3=A1n?= , Richard Acayan , Alexey Minnekhanov Cc: linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=813; i=david@ixit.cz; h=from:subject:message-id; bh=SyGBCL9VTEPA+aAWTUKzUH7OLMbCTKZV+KFoRbFN9oM=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpJNPgenmWLfuDKhq15mBg6v1tJzJPi9mONOtDK +nbgiB4RcSJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaSTT4AAKCRBgAj/E00kg ct3+D/9FOzgDdTeSSuMnpUerlqxXHRc7EteoshYCabmOBQfZkQfTUgC+p7Nnbujn8EyVH35kHb2 04thXEH3bbZXwDcQ37886myN5Mtm7HRNkGg2/FzE3FYSClXrJoIo+9XdzSWRFTqh7jgLHGYW7bW IKK/9Qq3KPlvhlmiYyhegZSxWdKzhbxFMBprU2gcomvExFvuT9mFU4A8UjddL9SxgXLlmXhn1vC 7Mbvfvd7eBwQ3/n/T4jqKkb7mw5V5ZX3KaSade6jOq3tjcv9pVH/Ui8Ds8BenYgsOYKYPbyIGvT K4W6HBLQfUd3Y2CBEPSGB7wUZW58vhoRNjDUz26iBZ8ofu/gdimjAjo84FQtLpq89gvQpot+2do nJkFJVFN4uDf6Oh4/AaEk3bysrf2gZ0QaeGAMyL0yasVutQO2bELurmwmfVVBGvPVi1Ri0CpYF9 dqxm8E8uvzWkxcRFsi9OymhD9I+WIUN5tdCFlvyihsMMlOSGpOyJoEVJ6kgfCmYBNbmPiWfPyHS xDH5NX8mvn0rQcchS2DL04az9PEzKLSgvyHVl/+StqKya6kPzZGnlsJteKA63dlWzhDCgg/hr2f ej8jQ1LL8+E+bTikNcpcJfR1nUt1P8VPgayWzBhDG2UHB7465QB9YCfpV2U8+zTqpCxJer7NCAF BVXLpg4Ve72CGEw== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Richard Acayan The PM660 fuel gauge determines the battery charge. Enable it for full battery support. Signed-off-by: Richard Acayan Signed-off-by: David Heidelberg Reviewed-by: Dmitry Baryshkov --- arch/arm64/boot/dts/qcom/sdm670-google-sargo.dts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/sdm670-google-sargo.dts b/arch/arm64/= boot/dts/qcom/sdm670-google-sargo.dts index ed55646ca419d..a8e0e85c42cd2 100644 --- a/arch/arm64/boot/dts/qcom/sdm670-google-sargo.dts +++ b/arch/arm64/boot/dts/qcom/sdm670-google-sargo.dts @@ -490,6 +490,13 @@ &pm660_charger { status =3D "okay"; }; =20 +&pm660_fg { + monitored-battery =3D <&battery>; + power-supplies =3D <&pm660_charger>; + + status =3D "okay"; +}; + &pm660_rradc { status =3D "okay"; }; --=20 2.51.0