From nobody Tue Apr 7 22:03:15 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 B51B03DE447 for ; Wed, 11 Mar 2026 11:56:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230185; cv=none; b=IAthD6k28mLE+mJXxuumhUMfrzFalUqo5kmmtzBM+sWaHaeGBQJH9ieIHUXmM/UMM6EI+aqWbFRmYMwJmxF4iQEnLoUdZNmxQ0JMyi69w1g7nTzmGGe+PydqZQ1g7CiFefKyUdbhTQzQMVSMm72PgjSFip4YMY3hwp/qqixR8ps= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230185; c=relaxed/simple; bh=Kch86XWLNpsoWXsiUYScxG9+qZq2PDWJ+mVUNiuprdY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=boxD8vMSwZbTAdZ9XeCpHZVBcCqAjMbqm17dnp5maQg2nC+AVkHOEgRt6zl6vF0mN1KNiVTHWP+5IoB+fClM9BjcQu1o98fq0xp8BNnKGk3dhdMYeOxpQ20kOytw7/QleB4K5DnGgLwbgvWS9E4ZcgxhFZqSDrtXrLoaNSNYYRM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net; spf=pass smtp.mailfrom=flipper.net; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b=ZoPfvd7u; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flipper.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b="ZoPfvd7u" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4852c9b4158so37544325e9.0 for ; Wed, 11 Mar 2026 04:56:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773230182; x=1773834982; 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=a3tePfAp0V+6zfOlKlirFvJa8IZ0hYoxL5FVcQEbR28=; b=ZoPfvd7uwgmLH8bnvkCOkEOOkiu0xTsr0qCkebF1drwbWDVQ9zNslBrc5yT//loPu/ 6DwI2gzbfZRHyrqyO0mM8/rNB/szh6Kn7MurAgwd8NOvEeC3Y0wN/WEEOHyYNTm7FmyU Feq7dHtUv6FjpCev68pbU/qZMBLql/E7LtvyytmgILfedooeQ+8HZllaElNMer9xAwuZ 42Tvnj9tSgTQODQqBWu8yoHERClJrNWRMQrV1/1Devq36/gJAXEJufM8zHoNL25TynJ5 cgKYvfnqsTePT+YwCTe89wvw8ZdzbVXwdr74jZIh6Dw1FmFeD5Syh1YxroSAWTaon77/ os2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773230182; x=1773834982; 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=a3tePfAp0V+6zfOlKlirFvJa8IZ0hYoxL5FVcQEbR28=; b=YOivZhD68IgUiB48ecRDY/Hn2vad8SYm8pOfoNu7eTxgCVeT0mqFraL8MWQTFzHBsp Neoh6gciK7KMaROUZ+Usu8xFoak32e58NeBvCiTwItdm2be+BVT6oeeTLE/Gam7pXo1T SwdUPHCBaCd8na5EFcYVoF8HsVEKHF+r/722qnKcZ7RyCCLioISNt0aEgW4c7G/50Zyr aRVRcGtqVkiNt9p+NsRosbdK8yf0gh3/4pbiBqPLJ1L6NhfynLM1KdOj544r7b45uaho cw2UJDVFX6tdXdysBaYHkz36THEJB+Wpy37nGAgaWcN37uWLfWbuHJREA53odzScJyun 4EgQ== X-Forwarded-Encrypted: i=1; AJvYcCXJZn9qIQBNHsoxGCMJz74PiIF+s6QcB+XpPXXPJ693b3lDPwAr1DJFdacJ2lhvUZ3CHPSAnhqrkCsKbrs=@vger.kernel.org X-Gm-Message-State: AOJu0YwZ0Fh1IK9rVHqYCmdcm3P4156KdJMLkTCr+GjpZPWWQewxcAgv 3Rh+TWgFEvdSCe/1ccdIOhF9oM9ffPyLEpYvz9WIgfubl9/YYLaZUKckBo+1IwOPqTM= X-Gm-Gg: ATEYQzxi5o17ietsrAZ8SGKZLfONLSA4JtdYSlJg0FQu242XNVEfkhuzqze7Aual318 Dy3Qlj1pK3Js1cR022h952fke0giBtxRwIYbbX3oeKtUW+5n4NCQVQKND9Mhrpm7D/6UBl/9ZYr WNQtgdCHN18a5BrQOhkkRayeVYTpidaRrPKU3rpVy7dvga64y5r0kQE+MpD+s0tdvpSvZIdOpgW /tCGd9BiqrN9lY+IZLIXCVu9cUMnJRnRmAGrJj0/gW/yKGREMN2p5b9y42xS+NPOpiV46+v9afI UBnq15Rhm9/BpQrDUXgh980IgknX7VAnVmfKbehsqq7RECTfZq2OCT2trKv5IeSUTK8VzETFthg WbtcMXXdjKXMPw2edycSMvx9wHSFQdk9Fl49Ry4RltdFdUlQXC69TgMBDkK8930eZCMCrHzw4O9 JRYcuqU7fqRz2/5ehE1X4dcVbF/x868549iF2uxTW0BCID4kVQyaX61UisZlqxaKkpnKtu9LBTO 7MBO2mfFMFd9Yl6 X-Received: by 2002:a05:600c:4fd5:b0:485:379b:57be with SMTP id 5b1f17b1804b1-4854b0cb6c7mr36459495e9.1.1773230182091; Wed, 11 Mar 2026 04:56:22 -0700 (PDT) Received: from alchark-surface.localdomain (bba-86-98-192-109.alshamil.net.ae. [86.98.192.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4854ad5416bsm39586485e9.1.2026.03.11.04.56.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 04:56:21 -0700 (PDT) From: Alexey Charkov Date: Wed, 11 Mar 2026 15:56:14 +0400 Subject: [PATCH v4 01/11] dt-bindings: mfd: ti,bq25703a: Expand to include BQ25792 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: <20260311-bq25792-v4-1-7213415d9eec@flipper.net> References: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> In-Reply-To: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Morgan , Liam Girdwood , Mark Brown , Sebastian Reichel Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov , Krzysztof Kozlowski X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3922; i=alchark@flipper.net; h=from:subject:message-id; bh=Kch86XWLNpsoWXsiUYScxG9+qZq2PDWJ+mVUNiuprdY=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWRujEg6a9bvJP2Bu9fpQktK45xGg9KtpzUvs/5hF1FlZ jUKOJHdMZGFQYyLwVJMkWXutyW2U434Zu3y8PgKM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GuoY6xgxcHEKwFSfesnwP0N3QQg7w6XjyUyf5JMPVaw+lyCutkOwN5+D4XvqOgvTHYwM789/evh JS7i3TWLOd5bnk9I6oh/9eK0pUbbu86PytTNNOAA= X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 TI BQ25792 is similar in operation to BQ25703A, but has a different register layout and different current/voltage capabilities. Expand the existing BQ25703A binding to include BQ25792, and move the voltage and current limits into per-variant conditional statements. Reviewed-by: Krzysztof Kozlowski Tested-by: Chris Morgan Signed-off-by: Alexey Charkov --- .../devicetree/bindings/mfd/ti,bq25703a.yaml | 73 ++++++++++++++++++= +--- 1 file changed, 63 insertions(+), 10 deletions(-) diff --git a/Documentation/devicetree/bindings/mfd/ti,bq25703a.yaml b/Docum= entation/devicetree/bindings/mfd/ti,bq25703a.yaml index ba14663c9266..cdce83f05804 100644 --- a/Documentation/devicetree/bindings/mfd/ti,bq25703a.yaml +++ b/Documentation/devicetree/bindings/mfd/ti,bq25703a.yaml @@ -4,17 +4,16 @@ $id: http://devicetree.org/schemas/mfd/ti,bq25703a.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# =20 -title: BQ25703A Charger Manager/Buck/Boost Converter +title: BQ257xx Charger Manager/Buck/Boost Converter =20 maintainers: - Chris Morgan =20 -allOf: - - $ref: /schemas/power/supply/power-supply.yaml# - properties: compatible: - const: ti,bq25703a + enum: + - ti,bq25703a + - ti,bq25792 =20 reg: const: 0x6b @@ -25,7 +24,6 @@ properties: powering the device. minimum: 50000 maximum: 6400000 - default: 3250000 =20 interrupts: maxItems: 1 @@ -57,11 +55,11 @@ properties: minimum: 0 maximum: 6350000 regulator-min-microvolt: - minimum: 4480000 - maximum: 20800000 + minimum: 2800000 + maximum: 22000000 regulator-max-microvolt: - minimum: 4480000 - maximum: 20800000 + minimum: 2800000 + maximum: 22000000 enable-gpios: description: The BQ25703 may require both a register write and a GPIO @@ -74,6 +72,61 @@ properties: - regulator-min-microvolt - regulator-max-microvolt =20 +allOf: + - $ref: /schemas/power/supply/power-supply.yaml# + - if: + properties: + compatible: + const: ti,bq25703a + then: + properties: + input-current-limit-microamp: + minimum: 50000 + maximum: 6400000 + default: 3250000 + regulators: + properties: + vbus: + properties: + regulator-min-microamp: + minimum: 0 + maximum: 6350000 + regulator-max-microamp: + minimum: 0 + maximum: 6350000 + regulator-min-microvolt: + minimum: 4480000 + maximum: 20800000 + regulator-max-microvolt: + minimum: 4480000 + maximum: 20800000 + - if: + properties: + compatible: + const: ti,bq25792 + then: + properties: + input-current-limit-microamp: + minimum: 100000 + maximum: 3300000 + default: 3000000 + regulators: + properties: + vbus: + properties: + regulator-min-microamp: + minimum: 0 + maximum: 3320000 + regulator-max-microamp: + minimum: 0 + maximum: 3320000 + regulator-min-microvolt: + minimum: 2800000 + maximum: 22000000 + regulator-max-microvolt: + minimum: 2800000 + maximum: 22000000 + unevaluatedProperties: false =20 required: --=20 2.52.0 From nobody Tue Apr 7 22:03:15 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.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 3AB743DEAE8 for ; Wed, 11 Mar 2026 11:56:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230188; cv=none; b=b3GkCnWjMlFCufhWR8pNnz16+UWONXSn8r6jeiLzE76+eupT60qYjvAxzGi0W1XaQLMlVXVOd2P/uSMXcgUDfLOmtAGVwlXVinRS7BuuXJZsHfY9UV0Cv7NtL9++g5EA0M+u4+CNmucBkOpC7/jDqj30DgSqXWscpgjRw2xi+UY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230188; c=relaxed/simple; bh=DcG8KW5Fnk3rc/f7uk3dyHKO5i3tnn1nAb2IeSenCzU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qMNIGARAorpxfqggJVfjtxgGSsNUA4p28BxOyx/gbmJv/n1nWG4+cdap8Ek0cJOU8g4tgiOH5yY3khLygEdgzW5flB4FY0Mf2IesimSBytYwIeNFM/1diCaqONMIbf0IERFb5dICQKVWDk2inEpdhgQbVEjxdgCAWH3jh9ag+pQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net; spf=pass smtp.mailfrom=flipper.net; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b=Ei9hMQlq; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flipper.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b="Ei9hMQlq" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-4852ff06541so43138165e9.2 for ; Wed, 11 Mar 2026 04:56:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773230185; x=1773834985; 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=jCpuZJNVNsInRc1C9w8uAr8XhXxWVpiElBj6DPaFINQ=; b=Ei9hMQlq8Nf7iuEp4tS8ip3qh/DvXtJxM/OP8WSdNqjeq246T6ehXK+t4O19755PRh lQx8YCEQSX6AJSrzdlK6t3myvJdHkjwfbMmwxQ1t61g/2H6bC90aNhOlUTXepu1n2naD RTvccZU/Tdhwss60qRAviwyBSdtrCOLKWWHvkE30cI2CYDw+pZdDQ+6QTAOXQvhI8z2R LVNPnFuvSKsuh2Wfw83gVq93V9KGIa6YAM0J0lVJkCAlsqvj7mEpWBu4WOpm5jBXy0Jc kTG3rYmCbxKCxBy9bhWC7JzD0jb2RNy0xDvM6XwHkJkzueYCOZpo57JLfupkJ7zHG3Wg kt3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773230185; x=1773834985; 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=jCpuZJNVNsInRc1C9w8uAr8XhXxWVpiElBj6DPaFINQ=; b=IomV4+Fqz3TmXM9kypiRVXL4UPBrFeDtx2ZuyC8nyXT5x27BYqL6MZBq03ffEaX4mH Wt5B9q/YDhjRs7rLTQ0VN1Phqd47P37UMhzbRBVAI1+lr8RImtfpgSRcy/5J3piZ38+z 1LXwS1Gu/B6KcyvZvo59J0b5uzke1gu4yyhoqE70+jz56XxSrlyeRFLCCcU3lv/iEJSL aIby6mOj8ycRqjmxrg9Nu1r3TgwqLtIKfXoFElMjOYl86wJ1c9aqZEtDuKppO1uWvtwL Mpl3H43OfHcV1pQ2DUHMkDs07CsNdPtOWlm+m6SoHn8HFn5VioUwVEGCt2nPD0oUq73F hKSg== X-Forwarded-Encrypted: i=1; AJvYcCW0fTA+JWeQTdHmulXvwX9LizXqCYPIiAoW4BaAwHX4EfYb0skgJTJidnOlKv3pU8JY1ZWCGrTAHYq2lNM=@vger.kernel.org X-Gm-Message-State: AOJu0Yxd0Bi7AZ/pWFW0XCrbs52ugdsn8e9rz5W7+kxN5wvOmuLQQa1Q lo3P6735gK2ZU/ULnfcjU+vG+TR26c91p9/lwh9WLImFYGSJv39ed7oHHscMhYtmK9Hhgzi2yA7 EfmYH X-Gm-Gg: ATEYQzzB2JVRpJMPed0maeJKdW8OuNTT8ueHLSHNWTX4GE1pIkf31VoFxkZmdH1Zy/O UqGRKHAMP4bvLMvEuS3E+NuC5kBbUv0AEQEsf5WVzYfcneJc4xaLupWu/oILzG1hZX8KG20KWJD hF9tpjfPoRdL6TrMAnlwX10twnG/gthcVyF3UQgVvXhRMgPJdGUSV8bxPoQbrkFfuV6CejiHxWZ OBSe7NBxUZAD43UrEli05VYhSCqEzyLBMcE7xu7YsHpgTZlkBp6cmbgfWUKdo1S01wxjXPN4auF vzqAUlx01eHjnmCJByCLIA4/ZSBtruWdRNCXJEpExrUyxyBqDm2h8YYv4uk6rnhJdxa4keoIa70 VmMyI9bIGl+svyI6+qk8m3cVvIW78fxi0OG7rxJV3Cc3CTZINlq5eeh9w3VDMEMBLardIY1JvPn rbtR2vCqH7sKbcP559/aMB6/oHuRAj/AIIgzYM9H7EiJN11/osH1bxExFMKUPwZ4RYMTZU/VXs2 ZTGMw== X-Received: by 2002:a05:600c:1f96:b0:485:3bb0:194 with SMTP id 5b1f17b1804b1-4854b129e5dmr37492555e9.35.1773230184632; Wed, 11 Mar 2026 04:56:24 -0700 (PDT) Received: from alchark-surface.localdomain (bba-86-98-192-109.alshamil.net.ae. [86.98.192.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4854ad5416bsm39586485e9.1.2026.03.11.04.56.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 04:56:24 -0700 (PDT) From: Alexey Charkov Date: Wed, 11 Mar 2026 15:56:15 +0400 Subject: [PATCH v4 02/11] regulator: bq257xx: Remove reference to the parent MFD's dev 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: <20260311-bq25792-v4-2-7213415d9eec@flipper.net> References: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> In-Reply-To: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Morgan , Liam Girdwood , Mark Brown , Sebastian Reichel Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2756; i=alchark@flipper.net; h=from:subject:message-id; bh=DcG8KW5Fnk3rc/f7uk3dyHKO5i3tnn1nAb2IeSenCzU=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWRujEgqE1l3VMZ7r6holfnSL1seO+7elP1aSGLHTfNFN bWTpp2b2TGRhUGMi8FSTJFl7rcltlON+Gbt8vD4CjOHlQlkiLRIAwMQsDDw5SbmlRrpGOmZahvq GRrqGOsYMXBxCsBUr25j+M3608PeLFf/6bNHZwu3mL8UuTr9T1i0wrrbk8Wki/u/W3cw/LM6MO8 e52KFK6L5XzkPFFpZz3By7ebk/P77ltqF1D/LljECAA== X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 Drop the ->bq field from the platform data of the bq257xx regulator driver, which was only used to get the regmap of the parent MFD device, and use the regmap from the regulator_dev instead, slimming down the code a bit. Acked-by: Mark Brown Tested-by: Chris Morgan Signed-off-by: Alexey Charkov --- drivers/regulator/bq257xx-regulator.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/regulator/bq257xx-regulator.c b/drivers/regulator/bq25= 7xx-regulator.c index dab8f1ab4450..812938e565e3 100644 --- a/drivers/regulator/bq257xx-regulator.c +++ b/drivers/regulator/bq257xx-regulator.c @@ -15,7 +15,6 @@ #include =20 struct bq257xx_reg_data { - struct bq257xx_device *bq; struct regulator_dev *bq257xx_reg; struct gpio_desc *otg_en_gpio; struct regulator_desc desc; @@ -23,11 +22,11 @@ struct bq257xx_reg_data { =20 static int bq25703_vbus_get_cur_limit(struct regulator_dev *rdev) { - struct bq257xx_reg_data *pdata =3D rdev_get_drvdata(rdev); + struct regmap *regmap =3D rdev_get_regmap(rdev); int ret; unsigned int reg; =20 - ret =3D regmap_read(pdata->bq->regmap, BQ25703_OTG_CURRENT, ®); + ret =3D regmap_read(regmap, BQ25703_OTG_CURRENT, ®); if (ret) return ret; return FIELD_GET(BQ25703_OTG_CUR_MASK, reg) * BQ25703_OTG_CUR_STEP_UA; @@ -40,7 +39,7 @@ static int bq25703_vbus_get_cur_limit(struct regulator_de= v *rdev) static int bq25703_vbus_set_cur_limit(struct regulator_dev *rdev, int min_uA, int max_uA) { - struct bq257xx_reg_data *pdata =3D rdev_get_drvdata(rdev); + struct regmap *regmap =3D rdev_get_regmap(rdev); unsigned int reg; =20 if ((min_uA > BQ25703_OTG_CUR_MAX_UA) || (max_uA < 0)) @@ -52,7 +51,7 @@ static int bq25703_vbus_set_cur_limit(struct regulator_de= v *rdev, if ((reg * BQ25703_OTG_CUR_STEP_UA) < min_uA) return -EINVAL; =20 - return regmap_write(pdata->bq->regmap, BQ25703_OTG_CURRENT, + return regmap_write(regmap, BQ25703_OTG_CURRENT, FIELD_PREP(BQ25703_OTG_CUR_MASK, reg)); } =20 @@ -137,7 +136,6 @@ static void bq257xx_reg_dt_parse_gpio(struct platform_d= evice *pdev) static int bq257xx_regulator_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; - struct bq257xx_device *bq =3D dev_get_drvdata(pdev->dev.parent); struct bq257xx_reg_data *pdata; struct device_node *np =3D dev->of_node; struct regulator_config cfg =3D {}; @@ -149,7 +147,6 @@ static int bq257xx_regulator_probe(struct platform_devi= ce *pdev) if (!pdata) return -ENOMEM; =20 - pdata->bq =3D bq; pdata->desc =3D bq25703_vbus_desc; =20 platform_set_drvdata(pdev, pdata); --=20 2.52.0 From nobody Tue Apr 7 22:03:15 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 C8E3D3DEFE5 for ; Wed, 11 Mar 2026 11:56:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230190; cv=none; b=kz6ZY1yP2Aai3jo2qRdTGzhYBdfAWejJ588FPUdOIZLOBEEhwPSplUTELU+gpwk2OzuQCf0tiRZABNjUnboT8wM3+MS4RMT2wUowzeK9b4h3/G9Wv4FdP03IUFJ/FYL4iy83H7cXy/eypA7NthiTJaqBxHY7xP4Y/gtuijpZ5MM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230190; c=relaxed/simple; bh=1uAjKjH8Mriiu2XHqXVfsDGlgQSHnV96d3u/aQzpXDo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=omPiAri3zrS2te2Udf4sn4p7NJGpgNjbo6iXuvp8kJGOTeaG3CA+9wH5kGiCADMVhNfX8wtZ/FFfyJ0P+cm8UKBQ3g5aJ4Xl4tvRGklSxxwiA44uowYiFKo84rTVb0HcSAYoKRIUahH8SOFqhjawxef4n8EDATZDwa0k8gLGIuI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net; spf=pass smtp.mailfrom=flipper.net; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b=SEYH2Pq3; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flipper.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b="SEYH2Pq3" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-4853e1ce427so36039845e9.3 for ; Wed, 11 Mar 2026 04:56:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773230187; x=1773834987; 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=veDJydETiE9Gv6g2pRG32dl9Jb7Mpm7Du1gG7k28aTM=; b=SEYH2Pq3ppCgSe2YgQilj2Dk7nmgQ5YR/rZgPFxnYSBCFgdILk8nrDmQBZhHiaM5bh Sfk8qVwddsHsJXpfdU8/8i/f6/wP/bkHVqdoOViAyPbeosflxyFz9FyjRUpVcUMeZ6Qz 996gv1aFo8gzsGhSlNEZg+bf2iTPCOazHoDKC3AMRRVnzq+SPHet8jVB9ak/owIZLdGR nU7DPivMmCBVpeJa4qRU1GZjVk135X4lZ09QUkO5DhZjy8p/7x7FXZV4LK+H8uJcbk7a 4Ya66y6HA0FoiO0+TIBhh+WVLvno3nInqZi+BwoBp+QN6eGhNofKNj9RSdMgm3P42uQs tttA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773230187; x=1773834987; 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=veDJydETiE9Gv6g2pRG32dl9Jb7Mpm7Du1gG7k28aTM=; b=J+rtEH3NBUpVlI80WNY0rp8P5N4bMvzYUrL65u3lA1p3XkjhgGLxNzrLTSmxSp3TwD sENVsINt/gPfrcdKV8xfwrwmCW+b8zYNdkwN8fdh0qHVLB5uDYChujUt2XUthmeVPrbd tIVeBFiHbKClTWrI89gtLalZTV/Pwr3YckXA0InCm/0O1kN/2RKX6wPQwDmmmN7Qv3Vx ZhYCf0aWG1AFjH/sZX6VfzmgOrNpcX1ICUmZmMsJ+iEwBkhW5e2SWEaa0W8+xfoi1T9f CoKAXLy9adQdcMEG7bzQ+gtsikuDVtcevfiaN7uTeIpAtij8PouKi0YtJmONZXZry+MQ lqTw== X-Forwarded-Encrypted: i=1; AJvYcCWNVMO4NJLc4XFUxws3QMOHYefJa5XjDpS6q6xCmW4FOLvUgoqCWqq/9GW3WwttAHb6/jcE3vMtMnQPnm8=@vger.kernel.org X-Gm-Message-State: AOJu0Yx2UxPLvGQ9n4l8+JYdN9lUjWgRRPEqd29ofFVmH4RwF8THT12e LmwHhQSyA9gsVFN1Nfqass/XlvKGq5Cng2d953nzypJhOD5brJ/m5eG+uThEeYHM3SLidVm68os c08Qr X-Gm-Gg: ATEYQzzWtLsP149CbUt6Rp7QjV/QGuBBZboQrxQjI3qFiHkZxugmVwQrYJ30dLmmA0c DHTDsa5CPHHOD9VQdsnylrlUThb8EYEm2DtYSWELERDdzWq2wEu38amgFjRK/r8vpf7GE82qJB+ wdlXD1YpGh5Mnd5EWm5NndI1blWqRqKbirdFdER09os3RgktvtSiMwn352+ZTu9J1RWm8i307Am 5t436dY6/LmItjEBaSbosS4BnXDbpaU/ThKy+0q4HJblVxQRrXzTIUMocaPS1ni71hgNrhoMDkH 6hP4FsS12UUPH7seWwAPJxgBmx06A4xZw8FwIJSfxy+6WeAGL5UBV2S/Evm/QjTPETeemWS4W3p OOKke2NqZN9HD3yRGwjEwViB+OOqRXNrB6LB5djXRd/fkMABHUPGaJ75RsHopprCfiW45tJi7uM DsA8eShSp4cRI7yn+KP7MC7nKoGsKKjmkfEx87X6VSe3HrcE3k4Y8Qd69OE++ip1M7LZ10IXRSR YHJooq+4t/w1do0 X-Received: by 2002:a05:600c:8b13:b0:485:30d4:6b9e with SMTP id 5b1f17b1804b1-4854b100b66mr40280855e9.21.1773230187141; Wed, 11 Mar 2026 04:56:27 -0700 (PDT) Received: from alchark-surface.localdomain (bba-86-98-192-109.alshamil.net.ae. [86.98.192.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4854ad5416bsm39586485e9.1.2026.03.11.04.56.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 04:56:26 -0700 (PDT) From: Alexey Charkov Date: Wed, 11 Mar 2026 15:56:16 +0400 Subject: [PATCH v4 03/11] regulator: bq257xx: Drop the regulator_dev from the driver data 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: <20260311-bq25792-v4-3-7213415d9eec@flipper.net> References: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> In-Reply-To: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Morgan , Liam Girdwood , Mark Brown , Sebastian Reichel Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1643; i=alchark@flipper.net; h=from:subject:message-id; bh=1uAjKjH8Mriiu2XHqXVfsDGlgQSHnV96d3u/aQzpXDo=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWRujEj+bmje0PRiY+9KO/vGBRtdJ58/dNP4QRT/GpPoM 3sOH73D1TGRhUGMi8FSTJFl7rcltlON+Gbt8vD4CjOHlQlkiLRIAwMQsDDw5SbmlRrpGOmZahvq GRrqGOsYMXBxCsBU7zZhZGidk2SlnvjZKXHLl7dMX+50NHAukH2vueUdy05jhXMSK5QYGXZKFB7 L6F4kebyK8+4XMc6SPew8r37qrOBaphF+ffYnNy4A X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 The field was not used anywhere in the driver, so just drop it. This helps further slim down the platform data structure. Acked-by: Mark Brown Tested-by: Chris Morgan Signed-off-by: Alexey Charkov --- drivers/regulator/bq257xx-regulator.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/regulator/bq257xx-regulator.c b/drivers/regulator/bq25= 7xx-regulator.c index 812938e565e3..674dae6109e9 100644 --- a/drivers/regulator/bq257xx-regulator.c +++ b/drivers/regulator/bq257xx-regulator.c @@ -15,7 +15,6 @@ #include =20 struct bq257xx_reg_data { - struct regulator_dev *bq257xx_reg; struct gpio_desc *otg_en_gpio; struct regulator_desc desc; }; @@ -139,6 +138,7 @@ static int bq257xx_regulator_probe(struct platform_devi= ce *pdev) struct bq257xx_reg_data *pdata; struct device_node *np =3D dev->of_node; struct regulator_config cfg =3D {}; + struct regulator_dev *rdev; =20 pdev->dev.of_node =3D pdev->dev.parent->of_node; pdev->dev.of_node_reused =3D true; @@ -159,9 +159,9 @@ static int bq257xx_regulator_probe(struct platform_devi= ce *pdev) if (!cfg.regmap) return -ENODEV; =20 - pdata->bq257xx_reg =3D devm_regulator_register(dev, &pdata->desc, &cfg); - if (IS_ERR(pdata->bq257xx_reg)) { - return dev_err_probe(&pdev->dev, PTR_ERR(pdata->bq257xx_reg), + rdev =3D devm_regulator_register(dev, &pdata->desc, &cfg); + if (IS_ERR(rdev)) { + return dev_err_probe(&pdev->dev, PTR_ERR(rdev), "error registering bq257xx regulator"); } =20 --=20 2.52.0 From nobody Tue Apr 7 22:03:15 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 3F3193DE44F for ; Wed, 11 Mar 2026 11:56:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230192; cv=none; b=CsuGxBIA+3lB6R8q4kk+w1meuaRWzBAAi8mhO+sXOLr5cnGL5vHEZjD29WiJOiLC/Xh1Bq/bUHoL6qnZ0tSaLT/5Kf9FJ+GtZ8HTfx6prhn6ANV+dl+pBHyxhxB7K9SSPZD6QhFGc7FCVgNECHdQj93Psm/W8bax+J4o+4fQ66Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230192; c=relaxed/simple; bh=Vj+thyx6im8c/60dw5piAk8vyroKtJcY1a74UdrGYxA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=L5e4OgEjxrnWtATvcv1Guta+kwOjP38ap0ENpwYu+OvHS1g288xsQOTpuA2S9rECgKiKPsbbVOYrxcKUiumEBywgzimrUaii1r0j/GTsgUpA6fXEIOOXCkYvqcSK+TiliHRjwIwBl4ah6qxz1W2hOQyc41HnYUPhWkvJEgfvcOI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net; spf=pass smtp.mailfrom=flipper.net; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b=iOt1r1zw; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flipper.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b="iOt1r1zw" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-48539cbb7b1so23092085e9.3 for ; Wed, 11 Mar 2026 04:56:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773230190; x=1773834990; 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=8wsphdPWc7OLP974m9ulR0tmXF0Yx3Br+A797hF6by8=; b=iOt1r1zwaX9ESpgKEVpdL1reSJXdLv+YS7me+9QfcNn91Uk0VneW0uTU6sJzNNOk6R VtPtZGMsPIGMQVYD1NfFctLJgld1vNdZReEnxTxjwvGnYk760PVzVVReFdY+fQRys7mg V4psGXl+BK0xZ4ones8Cs/y5U2RZN15YmgZW1xxxU8SQA8zOP8vWV7u2CnJyiCwju9fp nfRJCykhzTZG33LdVogB+CH6HUg8yx/c5lUtdWJApIZAe06oYpEW+BmzxrIBOK5nFUhg vufbWbDLo9sa2+BItluuWnGTDgDnj9cGwyIbWoQY4P7sJ2i52mVD/GDlc3kbsip8WrHo 4kdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773230190; x=1773834990; 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=8wsphdPWc7OLP974m9ulR0tmXF0Yx3Br+A797hF6by8=; b=Ve9vU6hF0CIh6Bw1MYF8sVIAj6KndlHtvDZC1d/q679Mrs5JO8H//ZeU1nGN9QImyo 4KraFqs1S4uU4q/KxNwLmcxkaET8I1J6faJD/tAPPoUaj/TgCM0Q9LEZJrvfNOVywe4C fNKb9ucQGNZ+/qzhvOdvg8NOBcJG/6IlbFCjU3DaIwfKOk5fsDZMFGMXhESrP5Msmdzq 7TetPg74pKVp+DufjF/Z4fi24+Dr0jObRGgRKSLDAwoFEfiY+0sLA+3OP/RdlFHRWN15 zEON5A0wsNGijxAmUPSYXFyJLTQh9l5vCe1orJZZgY/ROK5Ib0OUmv8c5hCE+eGaenSd vxsg== X-Forwarded-Encrypted: i=1; AJvYcCUj0v0qNIcshF/jU0z2UAlY7foOwyicLb4VEIWB8SQ1UHXNHK3AqKklLvwwKr6GrI78tAh0Oaoi+RG024Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yx6Tk1F13W5N7CZSxdFmN43F9SThoHADXwqOZt31Bn6fvxo6n3F sOohSW0TIPTPuY6HRtKYqkAr6OIhh4fMGSmOW6r+25QrKYWaQxB5XZBUIzHBS5Lt5/U= X-Gm-Gg: ATEYQzwVrGHk/HvkMR818Lj15soB6pZbMxGrt8giEpRwnobJiMCEMR6m6WeomUA2aUv 9ZklIQujufnQb31ElcrIPPOQoan3BEgm8zIKGqvYtX6EuxQnGVmP6iZI6Nfq5uAXdqi1CY6Ax5G ATjrZbRutGjTTyQJCHqAT66TQ4qyU4PQOZj8Gfx+tN5Qz1fWuIR8jo8RyRD07GWLk2UYU42AyeE q6kF2egNIqaxe4E1n0QnizYlSZmYW0hoiqA3aWYU4pGr4p4pzux9Br5uEToHMIJCFiGriMOV22g WLlkqYlS1Z9CQdHmnmtvkFAPvPG4jqskdYKXC89XwdIg86HIDVgl2wjWG78LGHzum6ffOyTT+Xh jSXh8rOoWm++OQmIQW4jAUKDwwo5lz87Gkidlx2ONQsOjfu42+9ukJAWKR3Fe2vACUAd0HKte98 NQP5/+G+86vNJWN0+2LndN6G2dGGSBM55+0Dy73Nz6C1KGFZ88tuUhTzF71FD4+plezbnytkT1t FQIPg== X-Received: by 2002:a05:600c:1d0e:b0:485:364e:9328 with SMTP id 5b1f17b1804b1-4854b10c82amr38597485e9.16.1773230189640; Wed, 11 Mar 2026 04:56:29 -0700 (PDT) Received: from alchark-surface.localdomain (bba-86-98-192-109.alshamil.net.ae. [86.98.192.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4854ad5416bsm39586485e9.1.2026.03.11.04.56.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 04:56:29 -0700 (PDT) From: Alexey Charkov Date: Wed, 11 Mar 2026 15:56:17 +0400 Subject: [PATCH v4 04/11] regulator: bq257xx: Make OTG enable GPIO really optional 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: <20260311-bq25792-v4-4-7213415d9eec@flipper.net> References: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> In-Reply-To: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Morgan , Liam Girdwood , Mark Brown , Sebastian Reichel Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1183; i=alchark@flipper.net; h=from:subject:message-id; bh=Vj+thyx6im8c/60dw5piAk8vyroKtJcY1a74UdrGYxA=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWRujEhWinB7G5m+51bI9o13WsxbYqadDyoSnf/YKrr3e lTr9FMKHRNZGMS4GCzFFFnmfltiO9WIb9YuD4+vMHNYmUCGSIs0MAABCwNfbmJeqZGOkZ6ptqGe oaGOsY4RAxenAEz170BGhr8/rge99V63ZTJHQ+2aTZszBaSSGzlbJr5iPLnzwbbUQ/aMDJ25f24 Kqs06ofp79t9vDrO7zxzdNzdIceq++HnPBRUm1/ACAA== X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 The bindings describe the OTG enable GPIO as optional, but the driver gets upset if it's not provided in the device tree. Make the driver accept the absence of the GPIO, and just use register writes to handle OTG mode in that case, skipping the error message for -ENOENT. Acked-by: Mark Brown Tested-by: Chris Morgan Signed-off-by: Alexey Charkov --- drivers/regulator/bq257xx-regulator.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/regulator/bq257xx-regulator.c b/drivers/regulator/bq25= 7xx-regulator.c index 674dae6109e9..0bb58ab4b8d4 100644 --- a/drivers/regulator/bq257xx-regulator.c +++ b/drivers/regulator/bq257xx-regulator.c @@ -126,6 +126,12 @@ static void bq257xx_reg_dt_parse_gpio(struct platform_= device *pdev) of_node_put(subchild); =20 if (IS_ERR(pdata->otg_en_gpio)) { + if (PTR_ERR(pdata->otg_en_gpio) =3D=3D -ENOENT) { + /* No GPIO, will only use register writes for OTG */ + pdata->otg_en_gpio =3D NULL; + return; + } + dev_err(&pdev->dev, "Error getting enable gpio: %ld\n", PTR_ERR(pdata->otg_en_gpio)); return; --=20 2.52.0 From nobody Tue Apr 7 22:03:15 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (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 032333E022A for ; Wed, 11 Mar 2026 11:56:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230195; cv=none; b=DbhN8wHT1O/MPRETaWAChM5jmaMD5U/SgX2uS6Wy2QQyd9Du6MIqBl99PsTDZhF/KFvHi4bBYTEmBFTAyQFNS2LzI/nIqkToIoHkfbymz/ZtlJTGmvE12ETQ99BTXwhuIzDmv5w+4Mcm/cDWBhQs7DKekq9cELomHorfI0+YgPU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230195; c=relaxed/simple; bh=0GDlOYezmKEXCru71ex6Z77WQ5tS0GByeoQbXgUi37g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=d8jI90obFhM8OFUqfWoU+wLOO5Le8sw/aHemh3nm/krsGI2t3ZGKpdtqjqA6FIuf3gCuMJmigr444AO7fFVPnjxAcdegKVByo8He95cd5eOviDlAC1ZrzLaPMv/hTCaogmT7Fq/rQf1KM5MOQPlxmOkf8AT8vXfUolzLx+ErFtE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net; spf=pass smtp.mailfrom=flipper.net; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b=j/snTdrG; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flipper.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b="j/snTdrG" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-48534e9076fso27617965e9.0 for ; Wed, 11 Mar 2026 04:56:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773230192; x=1773834992; 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=j1uQzW3+bjNeF/wEPgSsxYt2kbdgf5x20O5xEAeMiek=; b=j/snTdrG27oLf/uCezauuFlD49o9fNjd0IndTm/3x/L1kqWEAKsp019S6PsHtLmQpu T24b2Ixz7rtaE15Nn6T7dYUJrYIUi4SnzeUvhVb7R2OguQNx1JD19I9w0FnH+7MKDmRF wzC7CwscL+wrR26vifi9uEKV4Jgffn5cader64cmHZjpYS+aG01Gq+xPL4syDk8C9FCJ Zk7In3/1nfOYZOb0mDBM7o9W3JhBmqhugdVlcCppiHbu+wn2D/AmK2KG1r4+TR2pcKpZ TD60OoPVFsBgV2SGKIyN9/i+VZvV13GF0DnNAo+2zL3Bf+vafYiTb3vfErvJQEnb4Xry 5b9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773230192; x=1773834992; 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=j1uQzW3+bjNeF/wEPgSsxYt2kbdgf5x20O5xEAeMiek=; b=pJlqPKQW79hmyPolT4I05Qw9LYvY/FCk5C41fL5lvYa3Lmdmz4RecWAynD4+M3jRym 1UtIAbkPXpEW7JoU2tbCWp+kAU7F89lNwWefkCGVvqq31XKIXTUOF2I86+tD7EUr4Hfv HUo6tu2hTmCY1voYk8JX5fqrdyr8CjI+bYEAf5tFoBR/5frFsDV1Fgmh1XhE/KYE407S uESxKbETkPXUI380nvZmn/nZYY4VzVJEAQ1/1H1tZzxtjG+rH4m414dDMPS0sLdBkUug ZoOqeKRy8v6/1YB7TRYSOaTrSTFdEqAOpxfRnuOBFGVKa8WpU2sRkCmRTVaERJ3bxJ1h hQnw== X-Forwarded-Encrypted: i=1; AJvYcCVSVe4FP6fk4c7deQ2L7LaSCTJnN5peaTDqWqSwzseQ3qtuER+Z+/Hq9r3uOlDnit5+iLOrVUaicTtAddY=@vger.kernel.org X-Gm-Message-State: AOJu0YwzFCUvkltu1bEtYlefpIJLgV26IJGwWzYtvH0ILrOK86N3Rp1D cvo2gzu4doolV/cpyVT+4QoFnTb3dM6pdfMqkbqFUvmxEMT09Y4GOb3HbJ5RXZF2t4s= X-Gm-Gg: ATEYQzwOGYGweZYehoaZ7YoAFFRzLwkLMcDWOry5QnDitvU2ZHdq60Kg3g2oooFH770 DWcU6p4Nj9vfGT2agbvnVzlAb6rJeXpIq2DbPV2I8zL0vSI2bR5aIZcr5EZ6acvIQgiQYe/zCgI yF1mfocj0a5uDsQu2rL36sXNNSIfjYVjXVQtIWcNq8PnFvoZHMwC8Y4e9k4Glw9q6idPGWxJZ6Q sy4yVJjlzJlr+gIQcTv0Ae4Vdcqfce/Nnam/EYCreajfUJESBpFsXyxJE7s20uCBv6Q0Paj3T7I +gKg/rFVZiYwHVdShO6B+jEHW7mX2h+nPK7dHxSCy7RirGguGlyeU2n0ifnPqIrNLShocOTceQ1 AHQFC91UfE7ax+1cx1zgfr9S9pbCRniSoiEw317006NzWSByqFWNGHIM9GIFcznx4cQ3Ynp9IIA jPY/C+V4/nrzdJAZT7oofbCcnakw5Vv07uC/VQ1UHFgJBcaX953m9PHauOTwxc9oQlERDCNzU5L MjNKA== X-Received: by 2002:a05:600c:1f10:b0:485:419c:4eba with SMTP id 5b1f17b1804b1-4854b0a5471mr41617415e9.1.1773230192293; Wed, 11 Mar 2026 04:56:32 -0700 (PDT) Received: from alchark-surface.localdomain (bba-86-98-192-109.alshamil.net.ae. [86.98.192.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4854ad5416bsm39586485e9.1.2026.03.11.04.56.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 04:56:32 -0700 (PDT) From: Alexey Charkov Date: Wed, 11 Mar 2026 15:56:18 +0400 Subject: [PATCH v4 05/11] power: supply: bq257xx: Fix VSYSMIN clamping logic 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: <20260311-bq25792-v4-5-7213415d9eec@flipper.net> References: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> In-Reply-To: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Morgan , Liam Girdwood , Mark Brown , Sebastian Reichel Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov , stable@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2028; i=alchark@flipper.net; h=from:subject:message-id; bh=0GDlOYezmKEXCru71ex6Z77WQ5tS0GByeoQbXgUi37g=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWRujEgWT/ucbxX14DGrGb/3Ad1dh87rCMvdO63tkLm+/ u6bw0FRHRNZGMS4GCzFFFnmfltiO9WIb9YuD4+vMHNYmUCGSIs0MAABCwNfbmJeqZGOkZ6ptqGe oaGOsY4RAxenAEy1EDfDf2eTRTziSYc4pghLXi6PuOqjy7lq5U2Vr8Ip4p4ZP3+mHGdkOOWaoP1 7berHE98NUw8vnXvhqEMGU+Z3Q34l02MZbMte8AMA X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 The minimal system voltage (VSYSMIN) is meant to protect the battery from dangerous over-discharge. When the device tree provides a value for the minimum design voltage of the battery, the user should not be allowed to set a lower VSYSMIN, as that would defeat the purpose of this protection. Flip the clamping logic when setting VSYSMIN to ensure that battery design voltage is respected. Cc: stable@vger.kernel.org Fixes: 1cc017b7f9c7 ("power: supply: bq257xx: Add support for BQ257XX charg= er") Tested-by: Chris Morgan Reviewed-by: Sebastian Reichel Signed-off-by: Alexey Charkov --- drivers/power/supply/bq257xx_charger.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index 02c7d8b61e82..7ca4ae610902 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -128,9 +128,8 @@ static int bq25703_get_min_vsys(struct bq257xx_chg *pda= ta, int *intval) * @vsys: voltage value to set in uV. * * This function takes a requested minimum system voltage value, clamps - * it between the minimum supported value by the charger and a user - * defined minimum system value, and then writes the value to the - * appropriate register. + * it between the user defined minimum system value and the maximum suppor= ted + * value by the charger, and then writes the value to the appropriate regi= ster. * * Return: Returns 0 on success or error if an error occurs. */ @@ -139,7 +138,7 @@ static int bq25703_set_min_vsys(struct bq257xx_chg *pda= ta, int vsys) unsigned int reg; int vsys_min =3D pdata->vsys_min; =20 - vsys =3D clamp(vsys, BQ25703_MINVSYS_MIN_UV, vsys_min); + vsys =3D clamp(vsys, vsys_min, BQ25703_MINVSYS_MAX_UV); reg =3D ((vsys - BQ25703_MINVSYS_MIN_UV) / BQ25703_MINVSYS_STEP_UV); reg =3D FIELD_PREP(BQ25703_MINVSYS_MASK, reg); =20 --=20 2.52.0 From nobody Tue Apr 7 22:03:15 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (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 625DC3E0245 for ; Wed, 11 Mar 2026 11:56:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230197; cv=none; b=pwS33v8JBaPpio6EDngW10pss2Do31WYMBssBOsvsVidoVNZgBZbIf8EKfWsSuL6J5axywnq43lXxk45ct/wMPhIPULACg589jTwXUf8w5z66KTXYDB8P8osEEkHg1Nzi8MZ45dFEPtWC+22Uo5H+HBEX2itgY80d6QdDBxzXtg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230197; c=relaxed/simple; bh=HoUkMd3aj0s9m5BRWarIKv4NrOIfktIuX7B1xZTtvpY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rFXnh6VRuBsnk4nes2UOw9AKWYdbW7LL4SKlbE58Ki2wbeylkgL96jg92qLEarBXdkWZ1Dxb8x8+RW30c6/WBZ5QS6Ulopt1UeaSbgg1ssCdc871jbubSJdPouwcL9dPl9gCHxGaH8QNCNgc2XBIbLIC5U+8R9Bi81nqcCcILf4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net; spf=pass smtp.mailfrom=flipper.net; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b=X2FhkI4t; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flipper.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b="X2FhkI4t" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-485392de558so20659815e9.1 for ; Wed, 11 Mar 2026 04:56:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773230195; x=1773834995; 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=Jv4k2NFngBv6AeWEv4O9srLSbI6EPVNmV51Qs0A5klE=; b=X2FhkI4tvga1GxTze+NLLCSERrolw6A3LarebMCFdBqnrN7+s0DIb6YKM3GAQ+egyF n+DBFaN8L5KzZRSTtgGwYFL9FeQwdt8/7ATpHhcBVA4CpvKJE3E6WdA1alsMWvko059H z13H+l0uLT0W9hWQe46oORQnW3HD7enfA7dVpvNzGnnbffYFIn8JBnTrSwvMyRohq9zG 2X0H/kSVHJ55vV3dR0B18FcJvwRW2/C+JRZaBO46VauR0dOt5rpgfEeb8cxWc9+InZPo owlcDnC0AKgM0JkWQazL1umJuA8JboGpzJhputar25x4s/svf3IjPSm+1lNPpO0WYzG9 zxIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773230195; x=1773834995; 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=Jv4k2NFngBv6AeWEv4O9srLSbI6EPVNmV51Qs0A5klE=; b=Qkxe3YPNj7teNIcxcGZsmvwwiQlbwOMaO7wMZifT35CnVduWAaULgufrtJkVcmRiP2 +XSR6xYjriIghJ+WhrPMJkm+yrw/CTiUL2SQ80X+EhkjjvVk8A/BuYowM5C5LwRZzkuH pmdrsjaj26FL9kzuHJ40X2Daqlj+2qqKpKgbemc8Kvx9XJAs2g+AAyrdfM87ekPZHIWF Skevn6OYiXXZZkyhGCGSwSVtrts+HKZXgdZu77/W4/8ipHSrpgzxDDakn1LV5EYNilQH 8xO29ZhLYB46QXmyOIGgFr7GaNpE8cp9G8nfl2qRHIVbht36HhhMQ+mmPVjl5ehgrPvr h9CA== X-Forwarded-Encrypted: i=1; AJvYcCWcfZFo4c515bz/QDF50PbXlqI2hXmfJ3hd+91heJhvrSvvSlZXpuU6SNKYzRMZ7XmK8nk1SwZxLV2ef8k=@vger.kernel.org X-Gm-Message-State: AOJu0YxGl6MRveeWp9RxQRSTH3kgd6ygbbCYaQquWy1SGksENB/XjWBq GpgssNaC5oQZPL+9K7ogdNpw/PULo4WaWeNLJOp2WbEO0EcbllvWHDNA8QZtzZdTmbo= X-Gm-Gg: ATEYQzzvTZmq5sqX3tiIGXRyb2Sl7Rk+okfEZYtrpaPXTOZkY6NHxpZlkWgs6HQSNJh 6+y6oporUGsMYxZxag4g0Fh118TElzuOzDFd2GYtvvi0kBK9wpLKMGhQJc7EySwoIwiNuG83XRP llyYlK4qOSfP4DAVXk5f0FDOt0/sOCeNsUIV6YoQ45fSPtV4Ab8Li2V/a/PXk2+F2M8KFEGd8nr ed6bgdPXoHeOvM69hEjIaDzsuefb/nbjqgB1F/ffKKEhoOUIpXs22Pb/pTE0jWDk2bvlBmvRJO0 zGlyAS4TMFlqVSRbozJbBNxr21IllSWM/ZftuvY5uXB93dX+txrwU3hYjVbA/q676fAoqAFy1xr ViM2KSrD7O/BoIi91fmWwmOMO9vb7Ul7f38q3b+3kiTYRsqFmVKedxHxJ4pa/bqTaSw5YobcbEn RzJ/CwOhrUW66b7mxyaFbvDdFHFKOxSRc3vKE3CWDY/K1R7KiZnYPKaEB8vztGrJfVWmF0nyj72 F2+qA== X-Received: by 2002:a05:600c:1f8e:b0:485:3f1c:d897 with SMTP id 5b1f17b1804b1-4854b0bc6d4mr37888365e9.9.1773230194731; Wed, 11 Mar 2026 04:56:34 -0700 (PDT) Received: from alchark-surface.localdomain (bba-86-98-192-109.alshamil.net.ae. [86.98.192.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4854ad5416bsm39586485e9.1.2026.03.11.04.56.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 04:56:34 -0700 (PDT) From: Alexey Charkov Date: Wed, 11 Mar 2026 15:56:19 +0400 Subject: [PATCH v4 06/11] power: supply: bq257xx: Make the default current limit a per-chip attribute 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: <20260311-bq25792-v4-6-7213415d9eec@flipper.net> References: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> In-Reply-To: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Morgan , Liam Girdwood , Mark Brown , Sebastian Reichel Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2056; i=alchark@flipper.net; h=from:subject:message-id; bh=HoUkMd3aj0s9m5BRWarIKv4NrOIfktIuX7B1xZTtvpY=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWRujEhmc3B7/shqZc2cGvUFYsYzOfcmTAu8vv20PMvqz CMx2nrcHRNZGMS4GCzFFFnmfltiO9WIb9YuD4+vMHNYmUCGSIs0MAABCwNfbmJeqZGOkZ6ptqGe oaGOsY4RAxenAEx14B+Gv5Lz7rxYy/alz45/YWjwF47Jksv/uVj48B9t5NVh82Y5wMDIMO/Krcr UWs4ZR43Slpk+6/nglnB5FcMVB5mS9cfF29ZOYAMA X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 Add a field for the default current limit to the bq257xx_info structure and use it instead of the hardcoded value in the probe function. This prepares the driver for allowing different electrical constraints for different chip variants. Tested-by: Chris Morgan Reviewed-by: Sebastian Reichel Signed-off-by: Alexey Charkov --- drivers/power/supply/bq257xx_charger.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index 7ca4ae610902..39718223c3f9 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -18,6 +18,7 @@ struct bq257xx_chg; =20 /** * struct bq257xx_chip_info - chip specific routines + * @default_iindpm_uA: default input current limit in microamps * @bq257xx_hw_init: init function for hw * @bq257xx_hw_shutdown: shutdown function for hw * @bq257xx_get_state: get and update state of hardware @@ -26,6 +27,7 @@ struct bq257xx_chg; * @bq257xx_set_iindpm: set maximum input current (in uA) */ struct bq257xx_chip_info { + int default_iindpm_uA; int (*bq257xx_hw_init)(struct bq257xx_chg *pdata); void (*bq257xx_hw_shutdown)(struct bq257xx_chg *pdata); int (*bq257xx_get_state)(struct bq257xx_chg *pdata); @@ -627,6 +629,7 @@ static const struct power_supply_desc bq257xx_power_sup= ply_desc =3D { }; =20 static const struct bq257xx_chip_info bq25703_chip_info =3D { + .default_iindpm_uA =3D BQ25703_IINDPM_DEFAULT_UA, .bq257xx_hw_init =3D &bq25703_hw_init, .bq257xx_hw_shutdown =3D &bq25703_hw_shutdown, .bq257xx_get_state =3D &bq25703_get_state, @@ -675,7 +678,7 @@ static int bq257xx_parse_dt(struct bq257xx_chg *pdata, "input-current-limit-microamp", &pdata->iindpm_max); if (ret) - pdata->iindpm_max =3D BQ25703_IINDPM_DEFAULT_UA; + pdata->iindpm_max =3D pdata->chip->default_iindpm_uA; =20 return 0; } --=20 2.52.0 From nobody Tue Apr 7 22:03:15 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (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 9E16C3DE42D for ; Wed, 11 Mar 2026 11:56:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230201; cv=none; b=RgA9IPKPzg5svEu13W/6w/a7TAE7hjY8KAOlxmnXQ0WSmWoGGq9GSFmfqB2ZiGL/CXTQDsY0+IZh9FRkZa6y/8dN3J5QY1rmoYLKo+JqBc073HUtOCxMBiK0/38hCED7OYpgFzliOkmeT430ANXiagyC7eDvm8t1env9mO9NCO4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230201; c=relaxed/simple; bh=K/K91eQQ75phcINLj4DBBQbD0ofWablCORf9BgG8obM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fKOl0R6nSh+KS4jW0s5xbQQ+kd3bWbfi+G5ouKQE4LlUbXToRVP+Fj6VfT6+g2EkZLd/V5VMI7Cw+iKYFN6Ms914Z1DhRxLklLkkEhjhdhRtBrpzNypGOwm7FluYPiNzvHDvQcLbcyh6CiC8eAOmeRNW8GNsbNa/73B0/ERm3T8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net; spf=pass smtp.mailfrom=flipper.net; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b=LzpP/O27; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flipper.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b="LzpP/O27" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-48534237460so41170125e9.3 for ; Wed, 11 Mar 2026 04:56:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773230198; x=1773834998; 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=8b97w0FIxP+iQSlY9+U8NDMrKZX5YXrCInQTxcuoNL8=; b=LzpP/O27YW7DukXMieulBCJYDHhyhYhnbNWoNrY6cbJdcWez9OeJQ92TMk+P9kRVRk I5dMws7OgQFZ9C3EjX158ubq0r2Vp0Rmz1xrYSxSBGbk1ThXbfmQESoLg5CeQQzrL6Sb vSf1DHso40dEjYpXzIKhC7nBaQlf0MzzDxBIER17V6aYDtARpS30eZbpPmNR67RR3F5q NJug1s3ZKNIdpZlFpUxXL0YtLiz6C4lurrNwwqmrpRtgbccnfxu+cTdY1Ap0CqWaovXc PUyj1RYyb1ccMG6g1WBA3zCOO5m+lS+SGNeDlBDcwQNcYHJTCBlqEaLkN63U5fjkY030 nujg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773230198; x=1773834998; 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=8b97w0FIxP+iQSlY9+U8NDMrKZX5YXrCInQTxcuoNL8=; b=srgGWHC/gjFDfng1lSCFJkyX3QostpPTL/ZNPriuh46tKmY7iUJifGLeYlLr7ybfR/ AiGymvCGDd4R1zwZo+y25HKuGVsJn0UhtQvsUPJMOl/aGXjkqIYO3kMOwCJ6KHiaX3or 2h8T10cWxiS7CCRIJbqlvlskGnQ2QpLZ9Naownog11N3Q8Hu1BsQ0Od4VaCQvZJV2dJN mfcmVVflrPrSaiT17jbI08hX020ZXuvZS0AkPsIaW4LsOm+1JtLkuB4f8Jm/6DNQbQ+b t6Is0bKR1cpB4NVdUykuR9vJc94YagIaXr1YyUqljd0/c9JiiWcZTn2iQ6UE/TMN9tuE mr9A== X-Forwarded-Encrypted: i=1; AJvYcCUtFDz+hCasbY4MKULOyQr1dhTChJdKHHSecdbYtm2FaxKClnh0tXGk+vTiTdWshwh8mXPhVXo5L2W9MYs=@vger.kernel.org X-Gm-Message-State: AOJu0Yw61SJbkbktfZDiRv+95SkcvesU0+C9eyP4q6RStb2VB6W5yVPO UYU4owkadX65i4OZiB9AKYiFQruOynWXR31CzwcfzeCEgZ7l1NqQD5NI2LC2MiwXpJU= X-Gm-Gg: ATEYQzxiIuyLOVLEUB+lA7R8A8WerBx9zfqLf4TULYyssT74807juRQ7i5i/8TMi5Yl Bl/sbRTv4Pn4BU1Onl1Zrm1s8ts1NLbfTC/KJUFhdcRT8h7wrc5xvluHp8ZV4LVwqoZTuwHkm6Z TznGun2FS0xWlCvJp4JNVDUQfmAHA0Fo1qHlqhpkzxyExr+Ua+8hpdc030fqRYmbRqEBxcWwwI9 xw/K4VsoWIyHvSW9Tsy+acm+Qx4PLZPG0ntyrxZgRIuqu1cVdUS0vg7PbVGFZTsqpeKVPd0nGXP LLut5eBOPf79sK8nCnZdhLNq6S8rI77e0VKvHRVcwb//iP1YGtlwmS7VyTbgyhs+gOVkSBX62jL UwmHGvgmOxIshYWeaSNnwTGlPISdwQeLSV7VrYHnlrKNd91lGMIqm5LZkXuLSu8a/8VqpEsGFAv z02478a32zoLznUp9rRskhiuHlFxvpwbcfFFpaFkevb8kAmw9KgUc0TDP1eR4bXOfcecjikIYFT KsW/PwoVyhrC2TU X-Received: by 2002:a05:600c:a08:b0:485:2c61:9459 with SMTP id 5b1f17b1804b1-4854b0afb48mr38299945e9.8.1773230197237; Wed, 11 Mar 2026 04:56:37 -0700 (PDT) Received: from alchark-surface.localdomain (bba-86-98-192-109.alshamil.net.ae. [86.98.192.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4854ad5416bsm39586485e9.1.2026.03.11.04.56.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 04:56:37 -0700 (PDT) From: Alexey Charkov Date: Wed, 11 Mar 2026 15:56:20 +0400 Subject: [PATCH v4 07/11] power: supply: bq257xx: Consistently use indirect get/set helpers 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: <20260311-bq25792-v4-7-7213415d9eec@flipper.net> References: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> In-Reply-To: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Morgan , Liam Girdwood , Mark Brown , Sebastian Reichel Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4242; i=alchark@flipper.net; h=from:subject:message-id; bh=K/K91eQQ75phcINLj4DBBQbD0ofWablCORf9BgG8obM=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWRujEg+9Kgp+p7OmthNUvZb1s1ysl8VH2wpuUKVnaHf7 sH+HrPUjoksDGJcDJZiiixzvy2xnWrEN2uXh8dXmDmsTCBDpEUaGICAhYEvNzGv1EjHSM9U21DP 0FDHWMeIgYtTAKbaOZiR4SCHVptEYfyd7hW+9QcfCh/isdK4/G2O0Oq1yZfS05j2XWBk2GpwTFS pVzKUnfVS0tQl/3/nPFglo+Bu0h7iWL3fP9KRBwA= X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 Move the remaining get/set helper functions to indirect calls via the per-chip bq257xx_chip_info struct. This improves the consistency of the code and prepares the driver to support multiple chip variants with different register layouts and bit definitions. Tested-by: Chris Morgan Reviewed-by: Sebastian Reichel Signed-off-by: Alexey Charkov --- drivers/power/supply/bq257xx_charger.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index 39718223c3f9..0765673728e4 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -22,18 +22,30 @@ struct bq257xx_chg; * @bq257xx_hw_init: init function for hw * @bq257xx_hw_shutdown: shutdown function for hw * @bq257xx_get_state: get and update state of hardware + * @bq257xx_get_ichg: get maximum charge current (in uA) * @bq257xx_set_ichg: set maximum charge current (in uA) + * @bq257xx_get_vbatreg: get maximum charge voltage (in uV) * @bq257xx_set_vbatreg: set maximum charge voltage (in uV) + * @bq257xx_get_iindpm: get maximum input current (in uA) * @bq257xx_set_iindpm: set maximum input current (in uA) + * @bq257xx_get_cur: get battery current from ADC (in uA) + * @bq257xx_get_vbat: get battery voltage from ADC (in uV) + * @bq257xx_get_min_vsys: get minimum system voltage (in uV) */ struct bq257xx_chip_info { int default_iindpm_uA; int (*bq257xx_hw_init)(struct bq257xx_chg *pdata); void (*bq257xx_hw_shutdown)(struct bq257xx_chg *pdata); int (*bq257xx_get_state)(struct bq257xx_chg *pdata); + int (*bq257xx_get_ichg)(struct bq257xx_chg *pdata, int *intval); int (*bq257xx_set_ichg)(struct bq257xx_chg *pdata, int ichg); + int (*bq257xx_get_vbatreg)(struct bq257xx_chg *pdata, int *intval); int (*bq257xx_set_vbatreg)(struct bq257xx_chg *pdata, int vbatreg); + int (*bq257xx_get_iindpm)(struct bq257xx_chg *pdata, int *intval); int (*bq257xx_set_iindpm)(struct bq257xx_chg *pdata, int iindpm); + int (*bq257xx_get_cur)(struct bq257xx_chg *pdata, int *intval); + int (*bq257xx_get_vbat)(struct bq257xx_chg *pdata, int *intval); + int (*bq257xx_get_min_vsys)(struct bq257xx_chg *pdata, int *intval); }; =20 /** @@ -490,22 +502,22 @@ static int bq257xx_get_charger_property(struct power_= supply *psy, break; =20 case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT: - return bq25703_get_iindpm(pdata, &val->intval); + return pdata->chip->bq257xx_get_iindpm(pdata, &val->intval); =20 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX: - return bq25703_get_chrg_volt(pdata, &val->intval); + return pdata->chip->bq257xx_get_vbatreg(pdata, &val->intval); =20 case POWER_SUPPLY_PROP_CURRENT_NOW: - return bq25703_get_cur(pdata, &val->intval); + return pdata->chip->bq257xx_get_cur(pdata, &val->intval); =20 case POWER_SUPPLY_PROP_VOLTAGE_NOW: - return bq25703_get_vbat(pdata, &val->intval); + return pdata->chip->bq257xx_get_vbat(pdata, &val->intval); =20 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX: - return bq25703_get_ichg_cur(pdata, &val->intval); + return pdata->chip->bq257xx_get_ichg(pdata, &val->intval); =20 case POWER_SUPPLY_PROP_VOLTAGE_MIN: - return bq25703_get_min_vsys(pdata, &val->intval); + return pdata->chip->bq257xx_get_min_vsys(pdata, &val->intval); =20 case POWER_SUPPLY_PROP_USB_TYPE: val->intval =3D pdata->usb_type; @@ -633,9 +645,15 @@ static const struct bq257xx_chip_info bq25703_chip_inf= o =3D { .bq257xx_hw_init =3D &bq25703_hw_init, .bq257xx_hw_shutdown =3D &bq25703_hw_shutdown, .bq257xx_get_state =3D &bq25703_get_state, + .bq257xx_get_ichg =3D &bq25703_get_ichg_cur, .bq257xx_set_ichg =3D &bq25703_set_ichg_cur, + .bq257xx_get_vbatreg =3D &bq25703_get_chrg_volt, .bq257xx_set_vbatreg =3D &bq25703_set_chrg_volt, + .bq257xx_get_iindpm =3D &bq25703_get_iindpm, .bq257xx_set_iindpm =3D &bq25703_set_iindpm, + .bq257xx_get_cur =3D &bq25703_get_cur, + .bq257xx_get_vbat =3D &bq25703_get_vbat, + .bq257xx_get_min_vsys =3D &bq25703_get_min_vsys, }; =20 /** --=20 2.52.0 From nobody Tue Apr 7 22:03:15 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (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 6142A3E0C6B for ; Wed, 11 Mar 2026 11:56:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230202; cv=none; b=nZkL7HPZ944mF6xUBZonjVuXbAedbzCEDwh49jcm9Ixr/Lb5XpUkr/7R0t4B8RmO+VwMLeM5OwXoeP6mSDjpS9b8X8a0tpllBv6lIfDV/n1rkIBM4bXYpnu0/K+ZR/R3m8IA1Ayz7v5+Q/5VBWzCx+nwTYdxme6jZV8/gQIVTGc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230202; c=relaxed/simple; bh=xDe5OwkC59HG0l6E9h1OwEErzx9ysv39/KByzvSAFgU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SHTWTuOJZ0Bt57u3d+EZ/UUjpT/lDM9ni/abWFpmQm/8n1205iv54H9T1qHXf/drXVg+Lc+As1CSD8cgxF/r2Rf/AiMhYZsGr+aY42267MQBelysTJLHqeC1v6qrrLRu88RSXkRz5QJc05AsDJG8c+N0rEKilRAUqmVg9NSsAns= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net; spf=pass smtp.mailfrom=flipper.net; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b=dyJjo875; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flipper.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b="dyJjo875" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-483487335c2so117857295e9.2 for ; Wed, 11 Mar 2026 04:56:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773230200; x=1773835000; 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=3AEOePYJtU4kn4mkWQfK7NUJrP7JZP+VFvVN1gskxyo=; b=dyJjo875bTZ6pO3TqpaO01tsiMFah/dqy0Ao27bDjB2En92LEuFexwjG9ur38dB74p xxLHEb/3ekk0dVh5HGpMbRRtkBNeJQQd/6HmYnS2SOYqRshKoADq7nZC2cJzDN7dLKFK L79mpZlZd0VMXWHhf/4oxcRLAhSw9C7euJkC+uNYZdFC3Cwipdi9MdLMlevltSi6844p z3iN8irHx7FDlaiB0qM9DMTABv1N1DdLXPWVPL/A0Gv1cQC1pkkaytp1PTgntlM5HIkZ b6ZI0W2AkBRpwMW48YRGWystVbm7UaqAGQOuUP/zWFtcrwFOiSyo/mIzS6qMAXP6iDs+ gGBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773230200; x=1773835000; 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=3AEOePYJtU4kn4mkWQfK7NUJrP7JZP+VFvVN1gskxyo=; b=sKwoqtW0GFFFPAfZepm81vckWB/t/SZr8Dm619xG5t02xs2RuUj3LmhinuuDThaNjx sHHINg10PsgwgUn9WDGU/dsNVGLcxOctj0+T5zsndy/HjDL93ySE8OMaUPN4fxe96Ac7 /40kE0GBO8bC0ci44VdwYz2dHK0jOOVyGGU5JZRmPI+5JZ3UTzhLMwt5sd9BbX5/646/ vrwnmFb91QHpX9OQHceFjb958HDdc4XXwf5n/h4HRPvsW56ghvjQILwKfc+8uIAARoB6 zwNJsDNUzN0RcY7Wi3+RhoYbcQ22bLNH8pJ1xCICyrkrYxxzmCv4Nw2irEfEswQdu4cA Pivw== X-Forwarded-Encrypted: i=1; AJvYcCVAzMfdmzrpkvPpCVW8J7LCbPD/p+GhkPdGlYrIvCDL7X3QAN11/0tEkmr/wnHq/WWOEMjnfINZwViwOMQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwXu2t9LVvQ/EatClWr1vXJZDWtzHFOKeqDuSO5I5HrGrNsD5rk 81fvyqwCUPQRt2/GNxxg5IZgzYhg+5aGplbpEJRyynWlCqnvjVebUcyNGki7Uxs6RCM= X-Gm-Gg: ATEYQzwM0dHDywtETFjs3NcNJf3OypLYpDVPVrSNqwjLPZajyukVn4CIMOzDc6aaNSF BSggaeMLfnUJktJAHFhrxc3wiNgJgksHWAe5LzUFtKVAQIhLsso8e5ha2jAJnQE70KtMY9psVKK yPb9I/jmmoSFPXILYbLcrKNqZqPe0F4wCYWFEuURl4Fl5b8A3/Fm0277Q4tI1oIBX5/8+XjiULB GnaA+tmmDRzLeo2HWtQcqea7vhbq406eJoJ8pfHV5EtzQEKsV8au8/G4y664HbUlBK/BCEOvkZI 9tyJZKhou5pxsWv0a/5q/XKyVPcwi7FiR9x292Y0Oqg5jFjO4dqn+IIoU2+1rOEDCrzkYP5vdq5 hA7AG0TUm7F8NwMAO6P/gw/U/NDdXC2vJrCn2wNJGc6JOJo3q2cBi9Nu7wgDaW0pkSxXbZV3SW7 HpiiEaui5Jxv2UtnEOCAHZaNfNc84/KpIBVyQzx44I7sNdg9XY0gC6hXguhU9wBdIPIjC67sviO r6n7w== X-Received: by 2002:a05:600c:154d:b0:485:3a59:99ca with SMTP id 5b1f17b1804b1-4854b109cb4mr38226145e9.16.1773230199754; Wed, 11 Mar 2026 04:56:39 -0700 (PDT) Received: from alchark-surface.localdomain (bba-86-98-192-109.alshamil.net.ae. [86.98.192.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4854ad5416bsm39586485e9.1.2026.03.11.04.56.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 04:56:39 -0700 (PDT) From: Alexey Charkov Date: Wed, 11 Mar 2026 15:56:21 +0400 Subject: [PATCH v4 08/11] power: supply: bq257xx: Add fields for 'charging' and 'overvoltage' states 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: <20260311-bq25792-v4-8-7213415d9eec@flipper.net> References: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> In-Reply-To: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Morgan , Liam Girdwood , Mark Brown , Sebastian Reichel Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3105; i=alchark@flipper.net; h=from:subject:message-id; bh=xDe5OwkC59HG0l6E9h1OwEErzx9ysv39/KByzvSAFgU=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWRujEj2jLXpr3h9Y2aA1/I02b6LBz+p8BlkH6tdcEzGz PX5k+khHRNZGMS4GCzFFFnmfltiO9WIb9YuD4+vMHNYmUCGSIs0MAABCwNfbmJeqZGOkZ6ptqGe oaGOsY4RAxenAEz1vSBGhlPs2w+Y1UpWHvoX/U3Lc5pXhMyUycksmp7/fA7KqL33aWNkaCy4WC9 Yc9E0jyH6+8aqSfFLN563dg40/H7M717ZxTXbOAA= X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 The driver currently reports the 'charging' and 'overvoltage' states based on a logical expression in the get_charger_property() wrapper function. This doesn't scale well to other chip variants, which may have a different number and type of hardware reported conditions which fall into these broad power supply states. Move the logic for determining 'charging' and 'overvoltage' states into chip-specific accessors, which can be overridden by each variant as needed. This helps keep the get_charger_property() wrapper function chip-agnostic while allowing for new chip variants to be added bringing their own logic. Tested-by: Chris Morgan Reviewed-by: Sebastian Reichel Signed-off-by: Alexey Charkov --- drivers/power/supply/bq257xx_charger.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index 0765673728e4..9c082865e745 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -54,8 +54,10 @@ struct bq257xx_chip_info { * @bq: parent MFD device * @charger: power supply device * @online: charger input is present + * @charging: charger is actively charging the battery * @fast_charge: charger is in fast charge mode * @pre_charge: charger is in pre-charge mode + * @overvoltage: overvoltage fault detected * @ov_fault: charger reports over voltage fault * @batoc_fault: charger reports battery over current fault * @oc_fault: charger reports over current fault @@ -71,8 +73,10 @@ struct bq257xx_chg { struct bq257xx_device *bq; struct power_supply *charger; bool online; + bool charging; bool fast_charge; bool pre_charge; + bool overvoltage; bool ov_fault; bool batoc_fault; bool oc_fault; @@ -106,8 +110,10 @@ static int bq25703_get_state(struct bq257xx_chg *pdata) pdata->online =3D reg & BQ25703_STS_AC_STAT; pdata->fast_charge =3D reg & BQ25703_STS_IN_FCHRG; pdata->pre_charge =3D reg & BQ25703_STS_IN_PCHRG; + pdata->charging =3D pdata->fast_charge || pdata->pre_charge; pdata->ov_fault =3D reg & BQ25703_STS_FAULT_ACOV; pdata->batoc_fault =3D reg & BQ25703_STS_FAULT_BATOC; + pdata->overvoltage =3D pdata->ov_fault || pdata->batoc_fault; pdata->oc_fault =3D reg & BQ25703_STS_FAULT_ACOC; =20 return 0; @@ -478,14 +484,14 @@ static int bq257xx_get_charger_property(struct power_= supply *psy, case POWER_SUPPLY_PROP_STATUS: if (!pdata->online) val->intval =3D POWER_SUPPLY_STATUS_DISCHARGING; - else if (pdata->fast_charge || pdata->pre_charge) + else if (pdata->charging) val->intval =3D POWER_SUPPLY_STATUS_CHARGING; else val->intval =3D POWER_SUPPLY_STATUS_NOT_CHARGING; break; =20 case POWER_SUPPLY_PROP_HEALTH: - if (pdata->ov_fault || pdata->batoc_fault) + if (pdata->overvoltage) val->intval =3D POWER_SUPPLY_HEALTH_OVERVOLTAGE; else if (pdata->oc_fault) val->intval =3D POWER_SUPPLY_HEALTH_OVERCURRENT; --=20 2.52.0 From nobody Tue Apr 7 22:03:15 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (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 17ACA3E1201 for ; Wed, 11 Mar 2026 11:56:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230206; cv=none; b=R0YIAxpQ6UHcddEBlBQxsgQE1Yui+zeBL5a+kFlN/1n5lvV13dAj5MqW9Iuot9VMy05C54/9G5kvTTj3nv/SBjlr3rMadNE96pUz6ikXrq2jJ4PGhe4hwMIMRlyu80fs/QKzDzlmJtqWF7vUs3yuO5TszJsd61aSwzJ9JI/6INY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230206; c=relaxed/simple; bh=b5HP5cIeTZQP9BQUxmRyZMvO9yHHBKJyF6S3q8g/yvg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hpnL/4Anuw9RX7SD28BvbQIb1WdBPhTfXcLKoJR2FC0iW+N1x6kFUvq8yU1gIyfjBXe2Srph1v3TfD+TCCb3kGQZbK39ww9s4lniLss3rQPT61hXq+hCTqYaQqLR4Vn4aAuzcpgVZpvUtGGhJnNzvPZ60V1ncOPkD8pyjAGYI0E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net; spf=pass smtp.mailfrom=flipper.net; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b=3r9DcxII; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flipper.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b="3r9DcxII" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-4852f8ac7e9so53195055e9.1 for ; Wed, 11 Mar 2026 04:56:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773230202; x=1773835002; 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=iCT/jCC9+oIr5DcOFKN3CbWvmGiClEFM4lsH0pMXL8s=; b=3r9DcxII1IZYbN/dS1exk4hTIZ5+H457HOBmkBBgDzkoLIKTmVbbk+ylW+vmjbKZtJ Qgdp3p21RQAhUZ/ohU2xgR5h+Z+4hFdoEcxD58iWHON+ykE46BG+iN8Tq/kYxWS5dOH1 maRJ4b6XsQMfFTZgVgj4ANagoSwmdgh2jRvQqY+8w8q2WWdoY1pGtIsRDFmNSiYrD6iC NcSy3nxVC6sj4qKBdGlEh4ipXCv4SC9RmXxCeITdApztWhkeKnMw+sWTqgeC6/e1Mj7D jMWlAzvU+aHoG0fUK3V1wguJyzMnXmjSHWklPqMWFG+PcXVzif1DcF+7c1OKomWqVhGJ +9jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773230202; x=1773835002; 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=iCT/jCC9+oIr5DcOFKN3CbWvmGiClEFM4lsH0pMXL8s=; b=qu5IPCD1eNeUy3E9k5poHLri6FlxmtvSatnE/RdGyGokqcnFMOi3sE9ZCX2wgruhDE UD6rhN3geJNh046ztulvp52raAKh+ShbAIiIBKeLgc2fJ/AyZnei1c5vsdJKtbB7s44N VKV2Rnl3ZLxrhbVDsoFMx5wn7zWKVyo51Oi5DWAiMlTsl9CEAY8IT3oanJSh4Y5V4Z8p dWOMPsioju7KCmIcZ+PuYtRZo/5TtTk7O6GYzp6Uztqe5maCBOYoESaVCTvhGCZ/CuoK pv/heRX1fgssb86IfZ0ndKM6CSc9Hu2zeWVg6gO5eqTot+IgEyszJ7OVcHTey7VSg1fw wVqg== X-Forwarded-Encrypted: i=1; AJvYcCUj8BDA8oz8jztkfHFkT6o1AfGU9c1H9Cy7b6xtceBXwv/dlP3boqMxTJVzfWREWCCRPywi/nfFyD8ANxI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx012EL5x4sCZ8sPwJoaJrbSskDZkfCyPMTuu/8ZuvajLLkb63k fnsGpaP+jdDPkvrBI2f+msVP6O60HpST6+2dvmcUhBHJnu5vK7hUsOevmE0VSUJmI1k= X-Gm-Gg: ATEYQzyoR647ED7vgpFnThVkRhbDZdUn4kVgXZEyo8WZlFSXqCSF5JkxcIgXaVqSnul rAjjoJpRp9ybGnonG8YowkHjHpl04Txo2FqkIyApwBqw8LnUX2QmfLc1wArSd+GyBlv/F/NxvJL Zds2PzS9pu0eQfAdoX7wvh6uPaOeC2Vz8s4yhstvgYQcteFsG6qE9PT+GaYiecjuFhkk2JKgJ52 X+1Pzol9pTxVEQDF4NB63bu7/qH8KoQHWACVsCo6vusnzAx/Iy0QOfabnZYaeYxIfGNmWEyZgcm vEXKAlMUg3to4LlJvWQytZsDbjkghdtbl/pR6LL+vazkgLzjzN+5vUEEEHo3/InHXykGJe+tW/7 T+8Dgvr0/0Oca+FfmPYrhcTNgB+R4PW3Qp58FgXISD/mX93j/gXGf2dpi7ViNEfXrfgyGmzXmQi Xp20/hdjiAYp3liuF6YTfn07yBlsV5SuMLR1Uyqj8dh5fqdiBXgq7esS0Kij90uuo/OW2SmuccJ zIAJA== X-Received: by 2002:a05:600c:3b9c:b0:485:39d6:e305 with SMTP id 5b1f17b1804b1-4854b13922emr39176245e9.23.1773230202377; Wed, 11 Mar 2026 04:56:42 -0700 (PDT) Received: from alchark-surface.localdomain (bba-86-98-192-109.alshamil.net.ae. [86.98.192.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4854ad5416bsm39586485e9.1.2026.03.11.04.56.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 04:56:42 -0700 (PDT) From: Alexey Charkov Date: Wed, 11 Mar 2026 15:56:22 +0400 Subject: [PATCH v4 09/11] mfd: bq257xx: Add BQ25792 support 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: <20260311-bq25792-v4-9-7213415d9eec@flipper.net> References: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> In-Reply-To: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Morgan , Liam Girdwood , Mark Brown , Sebastian Reichel Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=19396; i=alchark@flipper.net; h=from:subject:message-id; bh=b5HP5cIeTZQP9BQUxmRyZMvO9yHHBKJyF6S3q8g/yvg=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWRujEgWchVkW/0w0bY4WFZRlk18rc/EKytSlhqlJ229J MMcX8bcMZGFQYyLwVJMkWXutyW2U434Zu3y8PgKM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GuoY6xgxcHEKwFQHtzP8jy8rl3HJfZX69arFOnUxRdGU95VtIpuvb5205Kq4zc9L3xgZbnxnOnf nVeyCu4v1O/ukLpSknJdTvt7KXNgjzhITc4SFHwA= X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 Add register definitions and a new 'type' enum to be passed via MFD private data to support the BQ25792, which is a newer variant of the BQ257xx family. BQ25792 shares similar logic of operation with the already supported BQ25703A but has a completely different register map and different electrical constraints. Tested-by: Chris Morgan Signed-off-by: Alexey Charkov --- drivers/mfd/bq257xx.c | 54 +++++- include/linux/mfd/bq257xx.h | 414 ++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 465 insertions(+), 3 deletions(-) diff --git a/drivers/mfd/bq257xx.c b/drivers/mfd/bq257xx.c index e9d49dac0a16..4445ded5b2eb 100644 --- a/drivers/mfd/bq257xx.c +++ b/drivers/mfd/bq257xx.c @@ -39,13 +39,47 @@ static const struct regmap_config bq25703_regmap_config= =3D { .val_format_endian =3D REGMAP_ENDIAN_LITTLE, }; =20 -static const struct mfd_cell cells[] =3D { +static const struct regmap_range bq25792_writeable_reg_ranges[] =3D { + regmap_reg_range(BQ25792_REG00_MIN_SYS_VOLTAGE, + BQ25792_REG18_NTC_CONTROL_1), + regmap_reg_range(BQ25792_REG28_CHARGER_MASK_0, + BQ25792_REG30_ADC_FUNCTION_DISABLE_1), +}; + +static const struct regmap_access_table bq25792_writeable_regs =3D { + .yes_ranges =3D bq25792_writeable_reg_ranges, + .n_yes_ranges =3D ARRAY_SIZE(bq25792_writeable_reg_ranges), +}; + +static const struct regmap_range bq25792_volatile_reg_ranges[] =3D { + regmap_reg_range(BQ25792_REG19_ICO_CURRENT_LIMIT, + BQ25792_REG27_FAULT_FLAG_1), + regmap_reg_range(BQ25792_REG31_IBUS_ADC, + BQ25792_REG47_DPDM_DRIVER), +}; + +static const struct regmap_access_table bq25792_volatile_regs =3D { + .yes_ranges =3D bq25792_volatile_reg_ranges, + .n_yes_ranges =3D ARRAY_SIZE(bq25792_volatile_reg_ranges), +}; + +static const struct regmap_config bq25792_regmap_config =3D { + .reg_bits =3D 8, + .val_bits =3D 8, + .max_register =3D BQ25792_REG48_PART_INFORMATION, + .cache_type =3D REGCACHE_MAPLE, + .wr_table =3D &bq25792_writeable_regs, + .volatile_table =3D &bq25792_volatile_regs, +}; + +static struct mfd_cell cells[] =3D { MFD_CELL_NAME("bq257xx-regulator"), MFD_CELL_NAME("bq257xx-charger"), }; =20 static int bq257xx_probe(struct i2c_client *client) { + const struct regmap_config *rcfg; struct bq257xx_device *ddata; int ret; =20 @@ -53,9 +87,21 @@ static int bq257xx_probe(struct i2c_client *client) if (!ddata) return -ENOMEM; =20 + ddata->type =3D (uintptr_t)device_get_match_data(&client->dev); ddata->client =3D client; =20 - ddata->regmap =3D devm_regmap_init_i2c(client, &bq25703_regmap_config); + switch (ddata->type) { + case BQ25703A: + rcfg =3D &bq25703_regmap_config; + break; + case BQ25792: + rcfg =3D &bq25792_regmap_config; + break; + default: + return dev_err_probe(&client->dev, -EINVAL, "Unsupported device type\n"); + } + + ddata->regmap =3D devm_regmap_init_i2c(client, rcfg); if (IS_ERR(ddata->regmap)) { return dev_err_probe(&client->dev, PTR_ERR(ddata->regmap), "Failed to allocate register map\n"); @@ -74,12 +120,14 @@ static int bq257xx_probe(struct i2c_client *client) =20 static const struct i2c_device_id bq257xx_i2c_ids[] =3D { { "bq25703a" }, + { "bq25792" }, {} }; MODULE_DEVICE_TABLE(i2c, bq257xx_i2c_ids); =20 static const struct of_device_id bq257xx_of_match[] =3D { - { .compatible =3D "ti,bq25703a" }, + { .compatible =3D "ti,bq25703a", .data =3D (void *)BQ25703A }, + { .compatible =3D "ti,bq25792", .data =3D (void *)BQ25792 }, {} }; MODULE_DEVICE_TABLE(of, bq257xx_of_match); diff --git a/include/linux/mfd/bq257xx.h b/include/linux/mfd/bq257xx.h index 1d6ddc7fb09f..924ad2cf1ff9 100644 --- a/include/linux/mfd/bq257xx.h +++ b/include/linux/mfd/bq257xx.h @@ -98,7 +98,421 @@ =20 #define BQ25703_EN_OTG_MASK BIT(12) =20 +#define BQ25792_REG00_MIN_SYS_VOLTAGE 0x00 +#define BQ25792_REG01_CHARGE_VOLTAGE_LIMIT 0x01 +#define BQ25792_REG03_CHARGE_CURRENT_LIMIT 0x03 +#define BQ25792_REG05_INPUT_VOLTAGE_LIMIT 0x05 +#define BQ25792_REG06_INPUT_CURRENT_LIMIT 0x06 +#define BQ25792_REG08_PRECHARGE_CONTROL 0x08 +#define BQ25792_REG09_TERMINATION_CONTROL 0x09 +#define BQ25792_REG0A_RECHARGE_CONTROL 0x0a +#define BQ25792_REG0B_VOTG_REGULATION 0x0b +#define BQ25792_REG0D_IOTG_REGULATION 0x0d +#define BQ25792_REG0E_TIMER_CONTROL 0x0e +#define BQ25792_REG0F_CHARGER_CONTROL_0 0x0f +#define BQ25792_REG10_CHARGER_CONTROL_1 0x10 +#define BQ25792_REG11_CHARGER_CONTROL_2 0x11 +#define BQ25792_REG12_CHARGER_CONTROL_3 0x12 +#define BQ25792_REG13_CHARGER_CONTROL_4 0x13 +#define BQ25792_REG14_CHARGER_CONTROL_5 0x14 +/* REG15 reserved */ +#define BQ25792_REG16_TEMPERATURE_CONTROL 0x16 +#define BQ25792_REG17_NTC_CONTROL_0 0x17 +#define BQ25792_REG18_NTC_CONTROL_1 0x18 +#define BQ25792_REG19_ICO_CURRENT_LIMIT 0x19 +#define BQ25792_REG1B_CHARGER_STATUS_0 0x1b +#define BQ25792_REG1C_CHARGER_STATUS_1 0x1c +#define BQ25792_REG1D_CHARGER_STATUS_2 0x1d +#define BQ25792_REG1E_CHARGER_STATUS_3 0x1e +#define BQ25792_REG1F_CHARGER_STATUS_4 0x1f +#define BQ25792_REG20_FAULT_STATUS_0 0x20 +#define BQ25792_REG21_FAULT_STATUS_1 0x21 +#define BQ25792_REG22_CHARGER_FLAG_0 0x22 +#define BQ25792_REG23_CHARGER_FLAG_1 0x23 +#define BQ25792_REG24_CHARGER_FLAG_2 0x24 +#define BQ25792_REG25_CHARGER_FLAG_3 0x25 +#define BQ25792_REG26_FAULT_FLAG_0 0x26 +#define BQ25792_REG27_FAULT_FLAG_1 0x27 +#define BQ25792_REG28_CHARGER_MASK_0 0x28 +#define BQ25792_REG29_CHARGER_MASK_1 0x29 +#define BQ25792_REG2A_CHARGER_MASK_2 0x2a +#define BQ25792_REG2B_CHARGER_MASK_3 0x2b +#define BQ25792_REG2C_FAULT_MASK_0 0x2c +#define BQ25792_REG2D_FAULT_MASK_1 0x2d +#define BQ25792_REG2E_ADC_CONTROL 0x2e +#define BQ25792_REG2F_ADC_FUNCTION_DISABLE_0 0x2f +#define BQ25792_REG30_ADC_FUNCTION_DISABLE_1 0x30 +#define BQ25792_REG31_IBUS_ADC 0x31 +#define BQ25792_REG33_IBAT_ADC 0x33 +#define BQ25792_REG35_VBUS_ADC 0x35 +#define BQ25792_REG37_VAC1_ADC 0x37 +#define BQ25792_REG39_VAC2_ADC 0x39 +#define BQ25792_REG3B_VBAT_ADC 0x3b +#define BQ25792_REG3D_VSYS_ADC 0x3d +#define BQ25792_REG3F_TS_ADC 0x3f +#define BQ25792_REG41_TDIE_ADC 0x41 +#define BQ25792_REG43_DP_ADC 0x43 +#define BQ25792_REG45_DM_ADC 0x45 +#define BQ25792_REG47_DPDM_DRIVER 0x47 +#define BQ25792_REG48_PART_INFORMATION 0x48 + +/* Minimal System Voltage */ +#define BQ25792_REG00_VSYSMIN_MASK GENMASK(5, 0) + +#define BQ25792_MINVSYS_MIN_UV 2500000 +#define BQ25792_MINVSYS_STEP_UV 250000 +#define BQ25792_MINVSYS_MAX_UV 16000000 + +/* Charge Voltage Limit */ +#define BQ25792_REG01_VREG_MASK GENMASK(10, 0) + +#define BQ25792_VBATREG_MIN_UV 3000000 +#define BQ25792_VBATREG_STEP_UV 10000 +#define BQ25792_VBATREG_MAX_UV 18800000 + +/* Charge Current Limit */ +#define BQ25792_REG03_ICHG_MASK GENMASK(8, 0) + +#define BQ25792_ICHG_MIN_UA 50000 +#define BQ25792_ICHG_STEP_UA 10000 +#define BQ25792_ICHG_MAX_UA 5000000 + +/* Input Voltage Limit */ +#define BQ25792_REG05_VINDPM_MASK GENMASK(7, 0) + +/* Input Current Limit */ +#define BQ25792_REG06_IINDPM_MASK GENMASK(8, 0) +#define BQ25792_IINDPM_DEFAULT_UA 3000000 +#define BQ25792_IINDPM_STEP_UA 10000 +#define BQ25792_IINDPM_MIN_UA 100000 +#define BQ25792_IINDPM_MAX_UA 3300000 + +/* Precharge Control */ +#define BQ25792_REG08_VBAT_LOWV_MASK GENMASK(7, 6) +#define BQ25792_REG08_IPRECHG_MASK GENMASK(5, 0) + +/* Termination Control */ +#define BQ25792_REG09_REG_RST BIT(6) +#define BQ25792_REG09_ITERM_MASK GENMASK(4, 0) + +/* Re-charge Control */ +#define BQ25792_REG0A_CELL_MASK GENMASK(7, 6) +#define BQ25792_REG0A_TRECHG_MASK GENMASK(5, 4) +#define BQ25792_REG0A_VRECHG_MASK GENMASK(3, 0) + +/* VOTG regulation */ +#define BQ25792_REG0B_VOTG_MASK GENMASK(10, 0) + +#define BQ25792_OTG_VOLT_MIN_UV 2800000 +#define BQ25792_OTG_VOLT_STEP_UV 10000 +#define BQ25792_OTG_VOLT_MAX_UV 22000000 +#define BQ25792_OTG_VOLT_NUM_VOLT ((BQ25792_OTG_VOLT_MAX_UV \ + - BQ25792_OTG_VOLT_MIN_UV) \ + / BQ25792_OTG_VOLT_STEP_UV + 1) + +/* IOTG regulation */ +#define BQ25792_REG0D_PRECHG_TMR BIT(7) +#define BQ25792_REG0D_IOTG_MASK GENMASK(6, 0) + +#define BQ25792_OTG_CUR_MIN_UA 120000 +#define BQ25792_OTG_CUR_STEP_UA 40000 +#define BQ25792_OTG_CUR_MAX_UA 3320000 + +/* Timer Control */ +#define BQ25792_REG0E_TOPOFF_TMR_MASK GENMASK(7, 6) +#define BQ25792_REG0E_EN_TRICHG_TMR BIT(5) +#define BQ25792_REG0E_EN_PRECHG_TMR BIT(4) +#define BQ25792_REG0E_EN_CHG_TMR BIT(3) +#define BQ25792_REG0E_CHG_TMR_MASK GENMASK(2, 1) +#define BQ25792_REG0E_TMR2X_EN BIT(0) + +/* Charger Control 0 */ +#define BQ25792_REG0F_EN_AUTO_IBATDIS BIT(7) +#define BQ25792_REG0F_FORCE_IBATDIS BIT(6) +#define BQ25792_REG0F_EN_CHG BIT(5) +#define BQ25792_REG0F_EN_ICO BIT(4) +#define BQ25792_REG0F_FORCE_ICO BIT(3) +#define BQ25792_REG0F_EN_HIZ BIT(2) +#define BQ25792_REG0F_EN_TERM BIT(1) +/* bit0 reserved */ + +/* Charger Control 1 */ +#define BQ25792_REG10_VAC_OVP_MASK GENMASK(5, 4) +#define BQ25792_REG10_WD_RST BIT(3) +#define BQ25792_REG10_WATCHDOG_MASK GENMASK(2, 0) + +/* Charger Control 2 */ +#define BQ25792_REG11_FORCE_INDET BIT(7) +#define BQ25792_REG11_AUTO_INDET_EN BIT(6) +#define BQ25792_REG11_EN_12V BIT(5) +#define BQ25792_REG11_EN_9V BIT(4) +#define BQ25792_REG11_HVDCP_EN BIT(3) +#define BQ25792_REG11_SDRV_CTRL_MASK GENMASK(2, 1) +#define BQ25792_REG11_SDRV_DLY BIT(0) + +/* Charger Control 3 */ +#define BQ25792_REG12_DIS_ACDRV BIT(7) +#define BQ25792_REG12_EN_OTG BIT(6) +#define BQ25792_REG12_PFM_OTG_DIS BIT(5) +#define BQ25792_REG12_PFM_FWD_DIS BIT(4) +#define BQ25792_REG12_WKUP_DLY BIT(3) +#define BQ25792_REG12_DIS_LDO BIT(2) +#define BQ25792_REG12_DIS_OTG_OOA BIT(1) +#define BQ25792_REG12_DIS_FWD_OOA BIT(0) + +/* Charger Control 4 */ +#define BQ25792_REG13_EN_ACDRV2 BIT(7) +#define BQ25792_REG13_EN_ACDRV1 BIT(6) +#define BQ25792_REG13_PWM_FREQ BIT(5) +#define BQ25792_REG13_DIS_STAT BIT(4) +#define BQ25792_REG13_DIS_VSYS_SHORT BIT(3) +#define BQ25792_REG13_DIS_VOTG_UVP BIT(2) +#define BQ25792_REG13_FORCE_VINDPM_DET BIT(1) +#define BQ25792_REG13_EN_IBUS_OCP BIT(0) + +/* Charger Control 5 */ +#define BQ25792_REG14_SFET_PRESENT BIT(7) +/* bit6 reserved */ +#define BQ25792_REG14_EN_IBAT BIT(5) +#define BQ25792_REG14_IBAT_REG_MASK GENMASK(4, 3) +#define BQ25792_REG14_EN_IINDPM BIT(2) +#define BQ25792_REG14_EN_EXTILIM BIT(1) +#define BQ25792_REG14_EN_BATOC BIT(0) + +#define BQ25792_IBAT_3A FIELD_PREP(BQ25792_REG14_IBAT_REG_MASK, 0) +#define BQ25792_IBAT_4A FIELD_PREP(BQ25792_REG14_IBAT_REG_MASK, 1) +#define BQ25792_IBAT_5A FIELD_PREP(BQ25792_REG14_IBAT_REG_MASK, 2) +#define BQ25792_IBAT_UNLIM FIELD_PREP(BQ25792_REG14_IBAT_REG_MASK, 3) + +/* Temperature Control */ +#define BQ25792_REG16_TREG_MASK GENMASK(7, 6) +#define BQ25792_REG16_TSHUT_MASK GENMASK(5, 4) +#define BQ25792_REG16_VBUS_PD_EN BIT(3) +#define BQ25792_REG16_VAC1_PD_EN BIT(2) +#define BQ25792_REG16_VAC2_PD_EN BIT(1) + +/* NTC Control 0 */ +#define BQ25792_REG17_JEITA_VSET_MASK GENMASK(7, 5) +#define BQ25792_REG17_JEITA_ISETH_MASK GENMASK(4, 3) +#define BQ25792_REG17_JEITA_ISETC_MASK GENMASK(2, 1) + +/* NTC Control 1 */ +#define BQ25792_REG18_TS_COOL_MASK GENMASK(7, 6) +#define BQ25792_REG18_TS_WARM_MASK GENMASK(5, 4) +#define BQ25792_REG18_BHOT_MASK GENMASK(3, 2) +#define BQ25792_REG18_BCOLD BIT(1) +#define BQ25792_REG18_TS_IGNORE BIT(0) + +/* ICO Current Limit */ +#define BQ25792_REG19_ICO_ILIM_MASK GENMASK(8, 0) + +/* Charger Status 0 */ +#define BQ25792_REG1B_IINDPM_STAT BIT(7) +#define BQ25792_REG1B_VINDPM_STAT BIT(6) +#define BQ25792_REG1B_WD_STAT BIT(5) +#define BQ25792_REG1B_POORSRC_STAT BIT(4) +#define BQ25792_REG1B_PG_STAT BIT(3) +#define BQ25792_REG1B_AC2_PRESENT_STAT BIT(2) +#define BQ25792_REG1B_AC1_PRESENT_STAT BIT(1) +#define BQ25792_REG1B_VBUS_PRESENT_STAT BIT(0) + +/* Charger Status 1 */ +#define BQ25792_REG1C_CHG_STAT_MASK GENMASK(7, 5) +#define BQ25792_REG1C_VBUS_STAT_MASK GENMASK(4, 1) +#define BQ25792_REG1C_BC12_DONE_STAT BIT(0) + +/* Charger Status 2 */ +#define BQ25792_REG1D_ICO_STAT_MASK GENMASK(7, 6) +#define BQ25792_REG1D_TREG_STAT BIT(2) +#define BQ25792_REG1D_DPDM_STAT BIT(1) +#define BQ25792_REG1D_VBAT_PRESENT_STAT BIT(0) + +/* Charger Status 3 */ +#define BQ25792_REG1E_ACRB2_STAT BIT(7) +#define BQ25792_REG1E_ACRB1_STAT BIT(6) +#define BQ25792_REG1E_ADC_DONE_STAT BIT(5) +#define BQ25792_REG1E_VSYS_STAT BIT(4) +#define BQ25792_REG1E_CHG_TMR_STAT BIT(3) +#define BQ25792_REG1E_TRICHG_TMR_STAT BIT(2) +#define BQ25792_REG1E_PRECHG_TMR_STAT BIT(1) + +/* Charger Status 4 */ +#define BQ25792_REG1F_VBATOTG_LOW_STAT BIT(4) +#define BQ25792_REG1F_TS_COLD_STAT BIT(3) +#define BQ25792_REG1F_TS_COOL_STAT BIT(2) +#define BQ25792_REG1F_TS_WARM_STAT BIT(1) +#define BQ25792_REG1F_TS_HOT_STAT BIT(0) + +/* FAULT Status 0 */ +#define BQ25792_REG20_IBAT_REG_STAT BIT(7) +#define BQ25792_REG20_VBUS_OVP_STAT BIT(6) +#define BQ25792_REG20_VBAT_OVP_STAT BIT(5) +#define BQ25792_REG20_IBUS_OCP_STAT BIT(4) +#define BQ25792_REG20_IBAT_OCP_STAT BIT(3) +#define BQ25792_REG20_CONV_OCP_STAT BIT(2) +#define BQ25792_REG20_VAC2_OVP_STAT BIT(1) +#define BQ25792_REG20_VAC1_OVP_STAT BIT(0) + +#define BQ25792_REG20_OVERVOLTAGE_MASK (BQ25792_REG20_VBUS_OVP_STAT | \ + BQ25792_REG20_VBAT_OVP_STAT | \ + BQ25792_REG20_VAC2_OVP_STAT | \ + BQ25792_REG20_VAC1_OVP_STAT) +#define BQ25792_REG20_OVERCURRENT_MASK (BQ25792_REG20_IBUS_OCP_STAT | \ + BQ25792_REG20_IBAT_OCP_STAT | \ + BQ25792_REG20_CONV_OCP_STAT) + +/* FAULT Status 1 */ +#define BQ25792_REG21_VSYS_SHORT_STAT BIT(7) +#define BQ25792_REG21_VSYS_OVP_STAT BIT(6) +#define BQ25792_REG21_OTG_OVP_STAT BIT(5) +#define BQ25792_REG21_OTG_UVP_STAT BIT(4) +#define BQ25792_REG21_TSHUT_STAT BIT(2) + + +/* Charger Flag 0 */ +#define BQ25792_REG22_IINDPM_FLAG BIT(7) +#define BQ25792_REG22_VINDPM_FLAG BIT(6) +#define BQ25792_REG22_WD_FLAG BIT(5) +#define BQ25792_REG22_POORSRC_FLAG BIT(4) +#define BQ25792_REG22_PG_FLAG BIT(3) +#define BQ25792_REG22_AC2_PRESENT_FLAG BIT(2) +#define BQ25792_REG22_AC1_PRESENT_FLAG BIT(1) +#define BQ25792_REG22_VBUS_PRESENT_FLAG BIT(0) + +/* Charger Flag 1 */ +#define BQ25792_REG23_CHG_FLAG BIT(7) +#define BQ25792_REG23_ICO_FLAG BIT(6) +#define BQ25792_REG23_VBUS_FLAG BIT(4) +#define BQ25792_REG23_TREG_FLAG BIT(2) +#define BQ25792_REG23_VBAT_PRESENT_FLAG BIT(1) +#define BQ25792_REG23_BC12_DONE_FLAG BIT(0) + +/* Charger Flag 2 */ +#define BQ25792_REG24_DPDM_DONE_FLAG BIT(6) +#define BQ25792_REG24_ADC_DONE_FLAG BIT(5) +#define BQ25792_REG24_VSYS_FLAG BIT(4) +#define BQ25792_REG24_CHG_TMR_FLAG BIT(3) +#define BQ25792_REG24_TRICHG_TMR_FLAG BIT(2) +#define BQ25792_REG24_PRECHG_TMR_FLAG BIT(1) +#define BQ25792_REG24_TOPOFF_TMR_FLAG BIT(0) + +/* Charger Flag 3 */ +#define BQ25792_REG25_VBATOTG_LOW_FLAG BIT(4) +#define BQ25792_REG25_TS_COLD_FLAG BIT(3) +#define BQ25792_REG25_TS_COOL_FLAG BIT(2) +#define BQ25792_REG25_TS_WARM_FLAG BIT(1) +#define BQ25792_REG25_TS_HOT_FLAG BIT(0) + +/* FAULT Flag 0 */ +#define BQ25792_REG26_IBAT_REG_FLAG BIT(7) +#define BQ25792_REG26_VBUS_OVP_FLAG BIT(6) +#define BQ25792_REG26_VBAT_OVP_FLAG BIT(5) +#define BQ25792_REG26_IBUS_OCP_FLAG BIT(4) +#define BQ25792_REG26_IBAT_OCP_FLAG BIT(3) +#define BQ25792_REG26_CONV_OCP_FLAG BIT(2) +#define BQ25792_REG26_VAC2_OVP_FLAG BIT(1) +#define BQ25792_REG26_VAC1_OVP_FLAG BIT(0) + +/* FAULT Flag 1 */ +#define BQ25792_REG27_VSYS_SHORT_FLAG BIT(7) +#define BQ25792_REG27_VSYS_OVP_FLAG BIT(6) +#define BQ25792_REG27_OTG_OVP_FLAG BIT(5) +#define BQ25792_REG27_OTG_UVP_FLAG BIT(4) +#define BQ25792_REG27_TSHUT_FLAG BIT(2) + +/* Charger Mask 0 */ +#define BQ25792_REG28_IINDPM_MASK BIT(7) +#define BQ25792_REG28_VINDPM_MASK BIT(6) +#define BQ25792_REG28_WD_MASK BIT(5) +#define BQ25792_REG28_POORSRC_MASK BIT(4) +#define BQ25792_REG28_PG_MASK BIT(3) +#define BQ25792_REG28_AC2_PRESENT_MASK BIT(2) +#define BQ25792_REG28_AC1_PRESENT_MASK BIT(1) +#define BQ25792_REG28_VBUS_PRESENT_MASK BIT(0) + +/* Charger Mask 1 */ +#define BQ25792_REG29_CHG_MASK BIT(7) +#define BQ25792_REG29_ICO_MASK BIT(6) +#define BQ25792_REG29_VBUS_MASK BIT(4) +#define BQ25792_REG29_TREG_MASK BIT(2) +#define BQ25792_REG29_VBAT_PRESENT_MASK BIT(1) +#define BQ25792_REG29_BC12_DONE_MASK BIT(0) + +/* Charger Mask 2 */ +#define BQ25792_REG2A_DPDM_DONE_MASK BIT(6) +#define BQ25792_REG2A_ADC_DONE_MASK BIT(5) +#define BQ25792_REG2A_VSYS_MASK BIT(4) +#define BQ25792_REG2A_CHG_TMR_MASK BIT(3) +#define BQ25792_REG2A_TRICHG_TMR_MASK BIT(2) +#define BQ25792_REG2A_PRECHG_TMR_MASK BIT(1) +#define BQ25792_REG2A_TOPOFF_TMR_MASK BIT(0) + +/* Charger Mask 3 */ +#define BQ25792_REG2B_VBATOTG_LOW_MASK BIT(4) +#define BQ25792_REG2B_TS_COLD_MASK BIT(3) +#define BQ25792_REG2B_TS_COOL_MASK BIT(2) +#define BQ25792_REG2B_TS_WARM_MASK BIT(1) +#define BQ25792_REG2B_TS_HOT_MASK BIT(0) + +/* FAULT Mask 0 */ +#define BQ25792_REG2C_IBAT_REG_MASK BIT(7) +#define BQ25792_REG2C_VBUS_OVP_MASK BIT(6) +#define BQ25792_REG2C_VBAT_OVP_MASK BIT(5) +#define BQ25792_REG2C_IBUS_OCP_MASK BIT(4) +#define BQ25792_REG2C_IBAT_OCP_MASK BIT(3) +#define BQ25792_REG2C_CONV_OCP_MASK BIT(2) +#define BQ25792_REG2C_VAC2_OVP_MASK BIT(1) +#define BQ25792_REG2C_VAC1_OVP_MASK BIT(0) + +/* FAULT Mask 1 */ +#define BQ25792_REG2D_VSYS_SHORT_MASK BIT(7) +#define BQ25792_REG2D_VSYS_OVP_MASK BIT(6) +#define BQ25792_REG2D_OTG_OVP_MASK BIT(5) +#define BQ25792_REG2D_OTG_UVP_MASK BIT(4) +#define BQ25792_REG2D_TSHUT_MASK BIT(2) + +/* ADC Control */ +#define BQ25792_REG2E_ADC_EN BIT(7) +#define BQ25792_REG2E_ADC_RATE BIT(6) +#define BQ25792_REG2E_ADC_SAMPLE_MASK GENMASK(5, 4) +#define BQ25792_REG2E_ADC_AVG BIT(3) +#define BQ25792_REG2E_ADC_AVG_INIT BIT(2) + +/* ADC Function Disable 0 */ +#define BQ25792_REG2F_IBUS_ADC_DIS BIT(7) +#define BQ25792_REG2F_IBAT_ADC_DIS BIT(6) +#define BQ25792_REG2F_VBUS_ADC_DIS BIT(5) +#define BQ25792_REG2F_VBAT_ADC_DIS BIT(4) +#define BQ25792_REG2F_VSYS_ADC_DIS BIT(3) +#define BQ25792_REG2F_TS_ADC_DIS BIT(2) +#define BQ25792_REG2F_TDIE_ADC_DIS BIT(1) + +/* ADC Function Disable 1 */ +#define BQ25792_REG30_DP_ADC_DIS BIT(7) +#define BQ25792_REG30_DM_ADC_DIS BIT(6) +#define BQ25792_REG30_VAC2_ADC_DIS BIT(5) +#define BQ25792_REG30_VAC1_ADC_DIS BIT(4) + +/* 0x31-0x45: ADC result registers (16-bit, RO): single full-width field */ + +#define BQ25792_ADCVSYSVBAT_STEP_UV 1000 +#define BQ25792_ADCIBAT_STEP_UA 1000 + +/* DPDM Driver */ +#define BQ25792_REG47_DPLUS_DAC_MASK GENMASK(7, 5) +#define BQ25792_REG47_DMINUS_DAC_MASK GENMASK(4, 2) + +/* Part Information */ +#define BQ25792_REG48_PN_MASK GENMASK(5, 3) +#define BQ25792_REG48_DEV_REV_MASK GENMASK(2, 0) + +enum bq257xx_type { + BQ25703A, + BQ25792, +}; + struct bq257xx_device { struct i2c_client *client; struct regmap *regmap; + enum bq257xx_type type; }; --=20 2.52.0 From nobody Tue Apr 7 22:03:15 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (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 8F79D3E1236 for ; Wed, 11 Mar 2026 11:56:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230208; cv=none; b=G3zmTt+ofuy14GT92/8EWiGazuFAu/9IPhfTSYe33bxsRcFYwd5yfXEr66kcHrKOLlT0Mi1A1G8zbrfzRZxk3TwvChLnCUO4D5w1p+xntpW3GBG7GRTGIFeg/kMoyJgp5DviUZhSFit2x4HfXY+YY4a7k9duikrqfJE/FTBw0t8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230208; c=relaxed/simple; bh=q9BptJDuAQnjOV/HxIZuYo7P6hJdxkSiFaoHcUpNVb0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NzWCoTGIPosdkMGlAOO+euJEqFOyfpjHFACLrUs/2nIID7U7w4F95+1RKKO3XBJgBgMp0DGiQSdoH2AxxiAidLbK9Zas3/e+iVw30DdsJ8h19asfIjo6FmjkwYJ/m4lPNEQzvsb0s6w8PJ0N3tGT7l8U891S4LFvW1gT5RRVOSs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net; spf=pass smtp.mailfrom=flipper.net; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b=m+7Wugmc; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flipper.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b="m+7Wugmc" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4852f73d0a3so38247465e9.3 for ; Wed, 11 Mar 2026 04:56:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773230205; x=1773835005; 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=gzdSIakIBsa879u0fxfflVhMlKymXjPa/1rJ4QxUnO8=; b=m+7WugmcB/U+TwG4K03nIN6c2eJD6Xjhr1O/deIc6cZy3K2bPd09YhnA1JDKxHMfiE 3400tRx/R9Qh2n1DomMYbHb5CT/ZMutGAKzS05CZWAVssT2VNsa9b0lane5XxgtuL/lh ooc+FzvOuaMjBEl22RdZLp8SMfWU2yx+C5c/l2Q5pAE1KdUJVQcqy+en+4SB+ITPgNK0 o3sdeD/szCVjjh6Bmb9IPBgixABsHk1x7vG+vEQeHdcqby+Uuy2jRuRwrBSe7wJrVmFq X0tO0IiO+nrh93SYM7Gsj7GkkoDZwdRqV16SyHyhDT2pHGlkLIeIy4mhGGQYx05ZnwyH 8/kQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773230205; x=1773835005; 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=gzdSIakIBsa879u0fxfflVhMlKymXjPa/1rJ4QxUnO8=; b=J15nfzbNVN5+mMKHZ46DCDynTESovoKfdGAAgaTWSEZJHqZeuE4xoiDN+8A3hBX5bN J523pNu8Od1i2gND4OMZmOp+oV9UjB78XzHDrrnLYQPSCbOrMmpSe/ZqrnmlCNMENHNf 5taALH2+yMkz+FA7Dp9TD2kgtQKDm5/xBDgC+FPXRZTr1iSU41EHlsFc1S5ixX8kONWF JJkqqWkKPnLtiIv8IlPNndeccur7JiCMbxVODkM9VO7RHYlgCRqIVd7mJiDDNwngRlke +HW7t/u2VDc9Send2OikCmAMMTE8SbMBeRaatLTTQa+6pc5ozZMsw/tUQjgqIvpBH2B8 lNKA== X-Forwarded-Encrypted: i=1; AJvYcCWpOStC6PU2hcP4QrhdIc7n3unok4loX1KMbzoaLgJ35RAJKMLET6dDghhp0eijlEtZYgHkSYWbs+fbQug=@vger.kernel.org X-Gm-Message-State: AOJu0YzReqXfy6tHK4jlFzvl1J0H6cohp1I7SQcQUg7lmQvJHySil91C h2YNfZwyJcQfbgdYCB2nnBPz0+nzifMt3vdFLiPxIeDOcRg9u/5euQf6g1lczCdxrBw= X-Gm-Gg: ATEYQzyLYeWh5MYLijYyrakkmh3VccmsW1u+GU1SAQDHWzXvvDhR99cxyLPuqJ1EL2j oMW6XPML+gnAaHeEqVNY8ghJ5f6uMlfpQLM14UUdYB/jjbRDTd7+hflg/iLLwR8eCVl6W3PG2st +rILOr0Oecm1R4hGsRdZIMx2Qcn7yC+f+jDPEk9T/fpTH/zjuu+gQ8Wyy0clIObwB5uKdNCLZGm 6a/5UbTzeJ7ZN0my+br7lIN+xlj779sNG9cMQrAwOqX8It4+RtmSAgWE1dyxhdlbVBFjxvWSpGt DJC8sqOKj9fyJ/rN8nJNryrtsuO14R526n2Oc6JLf24nQj/5Xgyg4+r1sr46hVKU5rQ/Lq3QpeD Xr0rZtiKGPo1jzosGOarhf/Z9CZQMMzlXZtUswNmQSj8ERpeCSaYoFRS7rj9yWB7MK+fySYcMxG pWee6ipY1CtDGRaflYZR8/RLXHLndd2hbeiciPY4TIJmWx48awq/34otk2FwpwjGTDIRQV2o1RA fp0wA== X-Received: by 2002:a05:600c:1f10:b0:483:8062:b2f with SMTP id 5b1f17b1804b1-4854b0ae55amr42694045e9.6.1773230204855; Wed, 11 Mar 2026 04:56:44 -0700 (PDT) Received: from alchark-surface.localdomain (bba-86-98-192-109.alshamil.net.ae. [86.98.192.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4854ad5416bsm39586485e9.1.2026.03.11.04.56.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 04:56:44 -0700 (PDT) From: Alexey Charkov Date: Wed, 11 Mar 2026 15:56:23 +0400 Subject: [PATCH v4 10/11] regulator: bq257xx: Add support for BQ25792 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: <20260311-bq25792-v4-10-7213415d9eec@flipper.net> References: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> In-Reply-To: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Morgan , Liam Girdwood , Mark Brown , Sebastian Reichel Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5094; i=alchark@flipper.net; h=from:subject:message-id; bh=q9BptJDuAQnjOV/HxIZuYo7P6hJdxkSiFaoHcUpNVb0=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWRujEhW0/CcFvaydD5L1M4C309SSfcOB5RNf+nsusPrU m5KzqHqjoksDGJcDJZiiixzvy2xnWrEN2uXh8dXmDmsTCBDpEUaGICAhYEvNzGv1EjHSM9U21DP 0FDHWMeIgYtTAKb6fhEjw+Z4/h17JzLHXdl62HcJ29Ktjndv+U13v22W958hLbY1dAnD/5IVs7p Xi1Rc/yft16/ps+Bmi83m1DN5bTmTFx2arvS5lxMA X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 Add support for TI BQ25792, an integrated battery charger and buck/boost regulator. This enables VBUS output from the charger's boost converter for use in USB OTG applications, supporting 2.8-22V output at up to 3.32A with 10mV and 40mA resolution. Acked-by: Mark Brown Tested-by: Chris Morgan Signed-off-by: Alexey Charkov --- drivers/regulator/bq257xx-regulator.c | 98 +++++++++++++++++++++++++++++++= +++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/drivers/regulator/bq257xx-regulator.c b/drivers/regulator/bq25= 7xx-regulator.c index 0bb58ab4b8d4..f197162382cc 100644 --- a/drivers/regulator/bq257xx-regulator.c +++ b/drivers/regulator/bq257xx-regulator.c @@ -31,6 +31,32 @@ static int bq25703_vbus_get_cur_limit(struct regulator_d= ev *rdev) return FIELD_GET(BQ25703_OTG_CUR_MASK, reg) * BQ25703_OTG_CUR_STEP_UA; } =20 +static int bq25792_vbus_get_cur_limit(struct regulator_dev *rdev) +{ + struct regmap *regmap =3D rdev_get_regmap(rdev); + int ret; + unsigned int reg; + + ret =3D regmap_read(regmap, BQ25792_REG0D_IOTG_REGULATION, ®); + if (ret) + return ret; + return FIELD_GET(BQ25792_REG0D_IOTG_MASK, reg) * BQ25792_OTG_CUR_STEP_UA; +} + +static int bq25792_vbus_get_voltage_sel(struct regulator_dev *rdev) +{ + struct regmap *regmap =3D rdev_get_regmap(rdev); + __be16 reg; + int ret; + + ret =3D regmap_raw_read(regmap, BQ25792_REG0B_VOTG_REGULATION, + ®, sizeof(reg)); + if (ret) + return ret; + + return FIELD_GET(BQ25792_REG0B_VOTG_MASK, be16_to_cpu(reg)); +} + /* * Check if the minimum current and maximum current requested are * sane values, then set the register accordingly. @@ -54,6 +80,37 @@ static int bq25703_vbus_set_cur_limit(struct regulator_d= ev *rdev, FIELD_PREP(BQ25703_OTG_CUR_MASK, reg)); } =20 +static int bq25792_vbus_set_cur_limit(struct regulator_dev *rdev, + int min_uA, int max_uA) +{ + struct regmap *regmap =3D rdev_get_regmap(rdev); + unsigned int reg; + + if ((min_uA > BQ25792_OTG_CUR_MAX_UA) || + (max_uA < BQ25792_OTG_CUR_MIN_UA)) + return -EINVAL; + + reg =3D (max_uA / BQ25792_OTG_CUR_STEP_UA); + + /* Catch rounding errors since our step is 40000uA. */ + if ((reg * BQ25792_OTG_CUR_STEP_UA) < min_uA) + return -EINVAL; + + return regmap_write(regmap, BQ25792_REG0D_IOTG_REGULATION, + FIELD_PREP(BQ25792_REG0D_IOTG_MASK, reg)); +} + +static int bq25792_vbus_set_voltage_sel(struct regulator_dev *rdev, + unsigned int sel) +{ + struct regmap *regmap =3D rdev_get_regmap(rdev); + __be16 reg; + + reg =3D cpu_to_be16(FIELD_PREP(BQ25792_REG0B_VOTG_MASK, sel)); + return regmap_raw_write(regmap, BQ25792_REG0B_VOTG_REGULATION, + ®, sizeof(reg)); +} + static int bq25703_vbus_enable(struct regulator_dev *rdev) { struct bq257xx_reg_data *pdata =3D rdev_get_drvdata(rdev); @@ -101,6 +158,34 @@ static const struct regulator_desc bq25703_vbus_desc = =3D { .vsel_mask =3D BQ25703_OTG_VOLT_MASK, }; =20 +static const struct regulator_ops bq25792_vbus_ops =3D { + /* No GPIO for enabling the OTG regulator */ + .enable =3D regulator_enable_regmap, + .disable =3D regulator_disable_regmap, + .is_enabled =3D regulator_is_enabled_regmap, + .list_voltage =3D regulator_list_voltage_linear, + .get_voltage_sel =3D bq25792_vbus_get_voltage_sel, + .set_voltage_sel =3D bq25792_vbus_set_voltage_sel, + .get_current_limit =3D bq25792_vbus_get_cur_limit, + .set_current_limit =3D bq25792_vbus_set_cur_limit, +}; + +static const struct regulator_desc bq25792_vbus_desc =3D { + .name =3D "vbus", + .of_match =3D of_match_ptr("vbus"), + .regulators_node =3D of_match_ptr("regulators"), + .type =3D REGULATOR_VOLTAGE, + .owner =3D THIS_MODULE, + .ops =3D &bq25792_vbus_ops, + .min_uV =3D BQ25792_OTG_VOLT_MIN_UV, + .uV_step =3D BQ25792_OTG_VOLT_STEP_UV, + .n_voltages =3D BQ25792_OTG_VOLT_NUM_VOLT, + .enable_mask =3D BQ25792_REG12_EN_OTG, + .enable_reg =3D BQ25792_REG12_CHARGER_CONTROL_3, + .enable_val =3D BQ25792_REG12_EN_OTG, + .disable_val =3D 0, +}; + /* Get optional GPIO for OTG regulator enable. */ static void bq257xx_reg_dt_parse_gpio(struct platform_device *pdev) { @@ -141,6 +226,7 @@ static void bq257xx_reg_dt_parse_gpio(struct platform_d= evice *pdev) static int bq257xx_regulator_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; + struct bq257xx_device *bq =3D dev_get_drvdata(pdev->dev.parent); struct bq257xx_reg_data *pdata; struct device_node *np =3D dev->of_node; struct regulator_config cfg =3D {}; @@ -153,7 +239,17 @@ static int bq257xx_regulator_probe(struct platform_dev= ice *pdev) if (!pdata) return -ENOMEM; =20 - pdata->desc =3D bq25703_vbus_desc; + switch (bq->type) { + case BQ25703A: + pdata->desc =3D bq25703_vbus_desc; + break; + case BQ25792: + pdata->desc =3D bq25792_vbus_desc; + break; + default: + return dev_err_probe(&pdev->dev, -EINVAL, + "Unsupported device type\n"); + } =20 platform_set_drvdata(pdev, pdata); bq257xx_reg_dt_parse_gpio(pdev); --=20 2.52.0 From nobody Tue Apr 7 22:03:15 2026 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (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 40F7C3E1CE3 for ; Wed, 11 Mar 2026 11:56:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230211; cv=none; b=CA8gVunho05BoLcVi100Xg3dVRKm8PKtUTDo4M1nXlp5S/NEdR4LchaM49G+wjcolTW36WtLpPINsb8AcbVEPwq3ARHUD9f72RElnpmp1vuWZhSx6KU5v8XLviyzVkhM8jbW1zTVy60lLCcezPGUuf0dX+HsQ7uN5nRnRrhYgyQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773230211; c=relaxed/simple; bh=oEefOsNmSLTZPby8uBC2dEvm0TexHaC0NTq+MRbnJKg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OaMpFqG3rV2yXayQCjVIut0qqAfaTmG6Gvjlcj8MJYVQxQIh3LXnTAw74NQ/sbLImJ4Zogl06WWSLkvQAHoODq60BErS06U6bzMObqXqLFW4kQb/HdRudqRcJ3854Q8DiThwYPkOWYTJXk36yX2bMqrAdwi4xeUhYt8aB9G45us= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net; spf=pass smtp.mailfrom=flipper.net; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b=rM5ci/Xa; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flipper.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b="rM5ci/Xa" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-439aeed8a5bso11474040f8f.3 for ; Wed, 11 Mar 2026 04:56:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773230208; x=1773835008; 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=ka//lSrT2uJ9GB6Q7yfioJlQUhGTdKexeEgIdEuhzPE=; b=rM5ci/XaDTBc9ffPJiRSMulbZoJLYbZBXvp27s7S2LyxkxCuH/ST6rh8da1vSOnM4Y 4bphEYRbPDYZz11fYkPSxCpXKWLpyDyvIdMUSde27pl6kkAlIDIzYO4wBjNyvJ6Mlo6B 8fkED673ZcC+vkuiHwZG3X2D9Xo5MZdbGWeNidwd2kq4mw5wlRoz34J1PHdWmiHUHDud jRzCjWKsY6VK7pxeOlrJdUsQTsVhWdB4EAs3Tfh/z5WYUsyaEjiPzhfN8EUGj5PPybtE MWGjjwgkLPS9WZ4+k6YV6N4rkLQD76hyGRNlEkPvlTALFTRu6lR9Ao/QYOw36BQCYZSJ fWaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773230208; x=1773835008; 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=ka//lSrT2uJ9GB6Q7yfioJlQUhGTdKexeEgIdEuhzPE=; b=HBeUvQIvGZQL/4e241YL9IAo3rmnKLcP5ZuCeQb1CzLwpt8hy9u4Xk0ZXtWKx1eNS0 65r8HJ1BUtgnSHS7q/ZVb9zXUTzu9WlX22lfwVfqS6e5+dQw6VmRVGDrAyq362d5oAhz lO35z7ZJDcp8BLIFw2sm7DLaOyK0LY5ZKahGpibGrafMAornDV9CcqCcDxELVWZO5NMw H+wrxUA4DEH3Jbzru5xc2L/JgxMUVUpTOSRI2IU9JfN4daqwOQC+8an2JWjJI+3r/jlT Ht/iT6VEKBMtxJeu3ElndRtEPVzcZJPwUFZYQt/+QI8YAdmt3Q+2L+9Qv/2oQL81eJgR YwJg== X-Forwarded-Encrypted: i=1; AJvYcCVdpuHVbYkNbBkVnh0J62o94ele/WNLdtP1jxeLQRdIHHrfS4xcf8K3Fg8s0yPBB/S5shnA8cQL3fjvH5Q=@vger.kernel.org X-Gm-Message-State: AOJu0YyY4sUeQFynKhqNy5l5lC7q/JoHBJi1+DlI4V9uG6wfi0OiWkZw btT1jgjHi85BqVtnv4aXD5VCRUzoAmJUhvA8Wpn9w3YrxZA99HUU/UCFlpnDuslKSZk= X-Gm-Gg: ATEYQzzYRMYpoFKXBCbjlzSpVqv0Yl1dc5QxVgHI8x566FDkI/sURrHGbdOJhA8KIbc wlNnxl5L/L/f69j0a8aPfKPUbrGJarvzQ9vxuznOExC3ARlQrWzq2huLlWebaJ4tPaJdGfXg774 irBzxQgeS6Uh4X+454CBl1ov5/nzj0szgXH70c/9M0hu/ZnQfa8pGb7V7V422Nuxqx2rLffZ9xv b4eiea4zs2W+0Dl78BIRb+uCzQCVDzF1i2CiJOXANMy/pJ/HHT0kxLoFMsERvvIo223Pn/qT9Sw QUK5ZXAaXxNN4p+5Hao40ZsCI1aDypSNBgw5VAgqmhc1FXRjc7wMwJOTdHojX3YVNE2bAh9SWsz cXVGQPfVK3sgn3wdLErElR0OgU6oOHOKN0D1Za7Lo2LhgzegCrF3urwTUxoeiRSHaBMUv8G9VBz KM2/MmrQHzIwc325CKLiSn2PJSlSZN7bYBxKil197NSq/bM8xXLf7mVMQArqLLZ9LoTpYZLruTi +Q3iw== X-Received: by 2002:a05:600c:c4b7:b0:485:304a:58cd with SMTP id 5b1f17b1804b1-4854b0a4a4cmr36518585e9.4.1773230207495; Wed, 11 Mar 2026 04:56:47 -0700 (PDT) Received: from alchark-surface.localdomain (bba-86-98-192-109.alshamil.net.ae. [86.98.192.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4854ad5416bsm39586485e9.1.2026.03.11.04.56.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 04:56:47 -0700 (PDT) From: Alexey Charkov Date: Wed, 11 Mar 2026 15:56:24 +0400 Subject: [PATCH v4 11/11] power: supply: bq257xx: Add support for BQ25792 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: <20260311-bq25792-v4-11-7213415d9eec@flipper.net> References: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> In-Reply-To: <20260311-bq25792-v4-0-7213415d9eec@flipper.net> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Morgan , Liam Girdwood , Mark Brown , Sebastian Reichel Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=21256; i=alchark@flipper.net; h=from:subject:message-id; bh=oEefOsNmSLTZPby8uBC2dEvm0TexHaC0NTq+MRbnJKg=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWRujEi+KbP9tXxBrUJD6PULtaJVgekWTEYcT7/xcP//n a/cYBLWMZGFQYyLwVJMkWXutyW2U434Zu3y8PgKM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GuoY6xgxcHEKwFRXlTD8lTkVXOPW6MQedNBPxUJ50ulvoY9v6ly34iwxZpaJ69CrZGT4Z8f7dqf gebUUeb5GYVfvlWU2LBOKbkaePPfc0leq8jYnAA== X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 Add support for TI BQ25792 integrated battery charger and buck-boost converter. It shares high-level logic of operation with the already supported BQ25703A, but has a different register map, bit definitions and some of the lower-level hardware states. Tested-by: Chris Morgan Signed-off-by: Alexey Charkov --- drivers/power/supply/bq257xx_charger.c | 482 +++++++++++++++++++++++++++++= +++- include/linux/mfd/bq257xx.h | 6 +- 2 files changed, 483 insertions(+), 5 deletions(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index 9c082865e745..b9a41fe6f00e 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -5,6 +5,7 @@ */ =20 #include +#include #include #include #include @@ -88,6 +89,53 @@ struct bq257xx_chg { u32 vsys_min; }; =20 +/** + * bq25792_read16() - Read a 16-bit value from device register + * @pdata: driver platform data + * @reg: register address to read from + * @val: pointer to store the register value + * + * Read a 16-bit big-endian value from the BQ25792 device via regmap + * and convert to CPU byte order. + * + * Return: Returns 0 on success or error on failure to read. + */ +static int bq25792_read16(struct bq257xx_chg *pdata, unsigned int reg, u16= *val) +{ + __be16 regval; + int ret; + + ret =3D regmap_raw_read(pdata->bq->regmap, reg, ®val, sizeof(regval)); + if (ret) + return ret; + + *val =3D be16_to_cpu(regval); + return 0; +} + +/** + * bq25792_write16() - Write a 16-bit value to device register + * @pdata: driver platform data + * @reg: register address to write to + * @val: 16-bit value to write in CPU byte order + * + * Convert the value to big-endian and write a 16-bit value to the + * BQ25792 device via regmap. + * + * Return: Returns 0 on success or error on failure to write. + */ +static int bq25792_write16(struct bq257xx_chg *pdata, unsigned int reg, u1= 6 val) +{ + __be16 regval =3D cpu_to_be16(val); + int ret; + + ret =3D regmap_raw_write(pdata->bq->regmap, reg, ®val, sizeof(regval)); + if (ret) + return ret; + + return 0; +} + /** * bq25703_get_state() - Get the current state of the device * @pdata: driver platform data @@ -119,6 +167,43 @@ static int bq25703_get_state(struct bq257xx_chg *pdata) return 0; } =20 +/** + * bq25792_get_state() - Get the current state of the device + * @pdata: driver platform data + * + * Get the current state of the BQ25792 charger by reading status + * registers. Updates the online, charging, overvoltage, and fault + * status fields in the driver data structure. + * + * Return: Returns 0 on success or error on failure to read device. + */ +static int bq25792_get_state(struct bq257xx_chg *pdata) +{ + unsigned int reg; + int ret; + + ret =3D regmap_read(pdata->bq->regmap, BQ25792_REG1B_CHARGER_STATUS_0, &r= eg); + if (ret) + return ret; + + pdata->online =3D reg & BQ25792_REG1B_PG_STAT; + + ret =3D regmap_read(pdata->bq->regmap, BQ25792_REG1C_CHARGER_STATUS_1, &r= eg); + if (ret) + return ret; + + pdata->charging =3D reg & BQ25792_REG1C_CHG_STAT_MASK; + + ret =3D regmap_read(pdata->bq->regmap, BQ25792_REG20_FAULT_STATUS_0, ®= ); + if (ret) + return ret; + + pdata->overvoltage =3D reg & BQ25792_REG20_OVERVOLTAGE_MASK; + pdata->oc_fault =3D reg & BQ25792_REG20_OVERCURRENT_MASK; + + return 0; +} + /** * bq25703_get_min_vsys() - Get the minimum system voltage * @pdata: driver platform data @@ -142,6 +227,31 @@ static int bq25703_get_min_vsys(struct bq257xx_chg *pd= ata, int *intval) return ret; } =20 +/** + * bq25792_get_min_vsys() - Get the minimum system voltage + * @pdata: driver platform data + * @intval: pointer to store the minimum voltage value + * + * Read the current minimum system voltage setting from the device + * and return it in microvolts. + * + * Return: Returns 0 on success or error on failure to read. + */ +static int bq25792_get_min_vsys(struct bq257xx_chg *pdata, int *intval) +{ + unsigned int reg; + int ret; + + ret =3D regmap_read(pdata->bq->regmap, BQ25792_REG00_MIN_SYS_VOLTAGE, &re= g); + if (ret) + return ret; + + reg =3D FIELD_GET(BQ25792_REG00_VSYSMIN_MASK, reg); + *intval =3D (reg * BQ25792_MINVSYS_STEP_UV) + BQ25792_MINVSYS_MIN_UV; + + return ret; +} + /** * bq25703_set_min_vsys() - Set the minimum system voltage * @pdata: driver platform data @@ -166,6 +276,29 @@ static int bq25703_set_min_vsys(struct bq257xx_chg *pd= ata, int vsys) reg); } =20 +/** + * bq25792_set_min_vsys() - Set the minimum system voltage + * @pdata: driver platform data + * @vsys: voltage value to set in uV + * + * Set the minimum system voltage by clamping the requested value + * between device limits and writing to the appropriate register. + * + * Return: Returns 0 on success or error on failure to write. + */ +static int bq25792_set_min_vsys(struct bq257xx_chg *pdata, int vsys) +{ + unsigned int reg; + int vsys_min =3D pdata->vsys_min; + + vsys =3D clamp(vsys, vsys_min, BQ25792_MINVSYS_MAX_UV); + reg =3D ((vsys - BQ25792_MINVSYS_MIN_UV) / BQ25792_MINVSYS_STEP_UV); + reg =3D FIELD_PREP(BQ25792_REG00_VSYSMIN_MASK, reg); + + return regmap_write(pdata->bq->regmap, + BQ25792_REG00_MIN_SYS_VOLTAGE, reg); +} + /** * bq25703_get_cur() - Get the reported current from the battery * @pdata: driver platform data @@ -195,6 +328,30 @@ static int bq25703_get_cur(struct bq257xx_chg *pdata, = int *intval) return ret; } =20 +/** + * bq25792_get_cur() - Get the reported current from the battery + * @pdata: driver platform data + * @intval: pointer to store the battery current value + * + * Read the current ADC value from the device representing the battery + * charge or discharge current and return it in microamps. + * + * Return: Returns 0 on success or error on failure to read. + */ +static int bq25792_get_cur(struct bq257xx_chg *pdata, int *intval) +{ + u16 reg; + int ret; + + ret =3D bq25792_read16(pdata, BQ25792_REG33_IBAT_ADC, ®); + if (ret < 0) + return ret; + + *intval =3D (s16)reg * BQ25792_ADCIBAT_STEP_UA; + + return ret; +} + /** * bq25703_get_ichg_cur() - Get the maximum reported charge current * @pdata: driver platform data @@ -218,6 +375,30 @@ static int bq25703_get_ichg_cur(struct bq257xx_chg *pd= ata, int *intval) return ret; } =20 +/** + * bq25792_get_ichg_cur() - Get the maximum reported charge current + * @pdata: driver platform data + * @intval: pointer to store the maximum charge current value + * + * Read the programmed maximum charge current limit from the device. + * + * Return: Returns 0 on success or error on failure to read value. + */ +static int bq25792_get_ichg_cur(struct bq257xx_chg *pdata, int *intval) +{ + u16 reg; + int ret; + + ret =3D bq25792_read16(pdata, BQ25792_REG03_CHARGE_CURRENT_LIMIT, ®); + if (ret) + return ret; + + *intval =3D FIELD_GET(BQ25792_REG03_ICHG_MASK, reg) * + BQ25792_ICHG_STEP_UA; + + return ret; +} + /** * bq25703_set_ichg_cur() - Set the maximum charge current * @pdata: driver platform data @@ -242,6 +423,28 @@ static int bq25703_set_ichg_cur(struct bq257xx_chg *pd= ata, int ichg) reg); } =20 +/** + * bq25792_set_ichg_cur() - Set the maximum charge current + * @pdata: driver platform data + * @ichg: current value to set in uA + * + * Set the maximum charge current by clamping the requested value + * between device limits and writing to the appropriate register. + * + * Return: Returns 0 on success or error on failure to write. + */ +static int bq25792_set_ichg_cur(struct bq257xx_chg *pdata, int ichg) +{ + int ichg_max =3D pdata->ichg_max; + u16 reg; + + ichg =3D clamp(ichg, BQ25792_ICHG_MIN_UA, ichg_max); + reg =3D FIELD_PREP(BQ25792_REG03_ICHG_MASK, + (ichg / BQ25792_ICHG_STEP_UA)); + + return bq25792_write16(pdata, BQ25792_REG03_CHARGE_CURRENT_LIMIT, reg); +} + /** * bq25703_get_chrg_volt() - Get the maximum set charge voltage * @pdata: driver platform data @@ -265,6 +468,30 @@ static int bq25703_get_chrg_volt(struct bq257xx_chg *p= data, int *intval) return ret; } =20 +/** + * bq25792_get_chrg_volt() - Get the maximum set charge voltage + * @pdata: driver platform data + * @intval: pointer to store the maximum charge voltage value + * + * Read the current charge voltage limit from the device. + * + * Return: Returns 0 on success or error on failure to read value. + */ +static int bq25792_get_chrg_volt(struct bq257xx_chg *pdata, int *intval) +{ + u16 reg; + int ret; + + ret =3D bq25792_read16(pdata, BQ25792_REG01_CHARGE_VOLTAGE_LIMIT, ®); + if (ret) + return ret; + + *intval =3D FIELD_GET(BQ25792_REG01_VREG_MASK, reg) * + BQ25792_VBATREG_STEP_UV; + + return ret; +} + /** * bq25703_set_chrg_volt() - Set the maximum charge voltage * @pdata: driver platform data @@ -291,6 +518,29 @@ static int bq25703_set_chrg_volt(struct bq257xx_chg *p= data, int vbat) reg); } =20 +/** + * bq25792_set_chrg_volt() - Set the maximum charge voltage + * @pdata: driver platform data + * @vbat: voltage value to set in uV + * + * Set the maximum charge voltage by clamping the requested value + * between device limits and writing to the appropriate register. + * + * Return: Returns 0 on success or error on failure to write. + */ +static int bq25792_set_chrg_volt(struct bq257xx_chg *pdata, int vbat) +{ + int vbat_max =3D pdata->vbat_max; + u16 reg; + + vbat =3D clamp(vbat, BQ25792_VBATREG_MIN_UV, vbat_max); + + reg =3D FIELD_PREP(BQ25792_REG01_VREG_MASK, + (vbat / BQ25792_VBATREG_STEP_UV)); + + return bq25792_write16(pdata, BQ25792_REG01_CHARGE_VOLTAGE_LIMIT, reg); +} + /** * bq25703_get_iindpm() - Get the maximum set input current * @pdata: driver platform data @@ -319,6 +569,30 @@ static int bq25703_get_iindpm(struct bq257xx_chg *pdat= a, int *intval) return ret; } =20 +/** + * bq25792_get_iindpm() - Get the maximum set input current + * @pdata: driver platform data + * @intval: pointer to store the maximum input current value + * + * Read the current input current limit from the device. + * + * Return: Returns 0 on success or error on failure to read value. + */ +static int bq25792_get_iindpm(struct bq257xx_chg *pdata, int *intval) +{ + u16 reg; + int ret; + + ret =3D bq25792_read16(pdata, BQ25792_REG06_INPUT_CURRENT_LIMIT, ®); + if (ret) + return ret; + + reg =3D FIELD_GET(BQ25792_REG06_IINDPM_MASK, reg); + *intval =3D reg * BQ25792_IINDPM_STEP_UA; + + return ret; +} + /** * bq25703_set_iindpm() - Set the maximum input current * @pdata: driver platform data @@ -344,6 +618,29 @@ static int bq25703_set_iindpm(struct bq257xx_chg *pdat= a, int iindpm) FIELD_PREP(BQ25703_IINDPM_MASK, reg)); } =20 +/** + * bq25792_set_iindpm() - Set the maximum input current + * @pdata: driver platform data + * @iindpm: current value in uA + * + * Set the maximum input current by clamping the requested value + * between device limits and writing to the appropriate register. + * + * Return: Returns 0 on success or error on failure to write. + */ +static int bq25792_set_iindpm(struct bq257xx_chg *pdata, int iindpm) +{ + u16 reg; + int iindpm_max =3D pdata->iindpm_max; + + iindpm =3D clamp(iindpm, BQ25792_IINDPM_MIN_UA, iindpm_max); + + reg =3D iindpm / BQ25792_IINDPM_STEP_UA; + + return bq25792_write16(pdata, BQ25792_REG06_INPUT_CURRENT_LIMIT, + FIELD_PREP(BQ25792_REG06_IINDPM_MASK, reg)); +} + /** * bq25703_get_vbat() - Get the reported voltage from the battery * @pdata: driver platform data @@ -368,6 +665,30 @@ static int bq25703_get_vbat(struct bq257xx_chg *pdata,= int *intval) return ret; } =20 +/** + * bq25792_get_vbat() - Get the reported voltage from the battery + * @pdata: driver platform data + * @intval: pointer to store the battery voltage value + * + * Read the current ADC value representing the battery voltage + * and return it in microvolts. + * + * Return: Returns 0 on success or error on failure to read value. + */ +static int bq25792_get_vbat(struct bq257xx_chg *pdata, int *intval) +{ + u16 reg; + int ret; + + ret =3D bq25792_read16(pdata, BQ25792_REG3B_VBAT_ADC, ®); + if (ret) + return ret; + + *intval =3D reg * BQ25792_ADCVSYSVBAT_STEP_UV; + + return ret; +} + /** * bq25703_hw_init() - Set all the required registers to init the charger * @pdata: driver platform data @@ -434,6 +755,62 @@ static int bq25703_hw_init(struct bq257xx_chg *pdata) return ret; } =20 +/** + * bq25792_hw_init() - Initialize BQ25792 hardware + * @pdata: driver platform data + * + * Initialize the BQ25792 by disabling the watchdog, enabling discharge + * current sensing with 5A limit, and configuring input current regulation. + * Set the charge current, charge voltage, minimum system voltage, and + * input current limit from platform data. Enable and configure the ADC + * to measure all available channels. + * + * Return: Returns 0 on success or error code on error. + */ +static int bq25792_hw_init(struct bq257xx_chg *pdata) +{ + struct regmap *regmap =3D pdata->bq->regmap; + int ret =3D 0; + + /* Disable watchdog (TODO: make it work instead) */ + regmap_write(regmap, BQ25792_REG10_CHARGER_CONTROL_1, 0); + + /* + * Enable battery discharge current sensing, 5A discharge current + * limit, input current regulation and ship FET functions + */ + regmap_write(regmap, BQ25792_REG14_CHARGER_CONTROL_5, + BQ25792_REG14_SFET_PRESENT | + BQ25792_REG14_EN_IBAT | + BQ25792_IBAT_5A | + BQ25792_REG14_EN_IINDPM); + + ret =3D pdata->chip->bq257xx_set_ichg(pdata, pdata->ichg_max); + if (ret) + return ret; + + ret =3D pdata->chip->bq257xx_set_vbatreg(pdata, pdata->vbat_max); + if (ret) + return ret; + + ret =3D bq25792_set_min_vsys(pdata, pdata->vsys_min); + if (ret) + return ret; + + ret =3D pdata->chip->bq257xx_set_iindpm(pdata, pdata->iindpm_max); + if (ret) + return ret; + + /* Enable the ADC. */ + regmap_write(regmap, BQ25792_REG2E_ADC_CONTROL, BQ25792_REG2E_ADC_EN); + + /* Clear per-channel ADC disable bits - enable all channels */ + regmap_write(regmap, BQ25792_REG2F_ADC_FUNCTION_DISABLE_0, 0); + regmap_write(regmap, BQ25792_REG30_ADC_FUNCTION_DISABLE_1, 0); + + return ret; +} + /** * bq25703_hw_shutdown() - Set registers for shutdown * @pdata: driver platform data @@ -446,6 +823,30 @@ static void bq25703_hw_shutdown(struct bq257xx_chg *pd= ata) BQ25703_EN_LWPWR, BQ25703_EN_LWPWR); } =20 +/** + * bq25792_hw_shutdown() - Shutdown BQ25792 hardware + * @pdata: driver platform data + * + * Perform hardware shutdown for the BQ25792. Currently a no-op + * as the device does not require special shutdown configuration. + */ +static void bq25792_hw_shutdown(struct bq257xx_chg *pdata) +{ + /* Nothing to do here */ +} + +/** + * bq257xx_set_charger_property() - Set a power supply property + * @psy: power supply device + * @prop: power supply property to set + * @val: value to set for the property + * + * Handle requests to set power supply properties such as input current + * limit, constant charge voltage, and constant charge current. Routes + * the request to the chip-specific implementation. + * + * Return: Returns 0 on success or -EINVAL if property is not supported. + */ static int bq257xx_set_charger_property(struct power_supply *psy, enum power_supply_property prop, const union power_supply_propval *val) @@ -469,6 +870,19 @@ static int bq257xx_set_charger_property(struct power_s= upply *psy, return -EINVAL; } =20 +/** + * bq257xx_get_charger_property() - Get a power supply property + * @psy: power supply device + * @psp: power supply property to get + * @val: pointer to store the property value + * + * Handle requests to get power supply properties, including status, + * health, manufacturer, online state, and various voltage/current + * measurements. Reads current device state and routes chip-specific + * property requests to appropriate handlers. + * + * Return: Returns 0 on success or -EINVAL if property is not supported. + */ static int bq257xx_get_charger_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) @@ -550,6 +964,17 @@ static enum power_supply_property bq257xx_power_supply= _props[] =3D { POWER_SUPPLY_PROP_USB_TYPE, }; =20 +/** + * bq257xx_property_is_writeable() - Check if a property is writeable + * @psy: power supply device + * @prop: power supply property to check + * + * Determines which power supply properties can be written to. Only + * charge current limit, charge voltage limit, and input current + * limit are writeable. + * + * Return: Returns 1 if property is writeable, 0 otherwise. + */ static int bq257xx_property_is_writeable(struct power_supply *psy, enum power_supply_property prop) { @@ -622,6 +1047,17 @@ static void bq257xx_external_power_changed(struct pow= er_supply *psy) power_supply_changed(psy); } =20 +/** + * bq257xx_irq_handler_thread() - Handle charger interrupt + * @irq: interrupt number + * @private: pointer to driver private data + * + * Thread handler for charger interrupts. Triggers re-evaluation of + * external power status and updates power supply state in response + * to charger events. + * + * Return: Returns IRQ_HANDLED if interrupt was processed. + */ static irqreturn_t bq257xx_irq_handler_thread(int irq, void *private) { struct bq257xx_chg *pdata =3D private; @@ -662,6 +1098,22 @@ static const struct bq257xx_chip_info bq25703_chip_in= fo =3D { .bq257xx_get_min_vsys =3D &bq25703_get_min_vsys, }; =20 +static const struct bq257xx_chip_info bq25792_chip_info =3D { + .default_iindpm_uA =3D BQ25792_IINDPM_DEFAULT_UA, + .bq257xx_hw_init =3D &bq25792_hw_init, + .bq257xx_hw_shutdown =3D &bq25792_hw_shutdown, + .bq257xx_get_state =3D &bq25792_get_state, + .bq257xx_get_ichg =3D &bq25792_get_ichg_cur, + .bq257xx_set_ichg =3D &bq25792_set_ichg_cur, + .bq257xx_get_vbatreg =3D &bq25792_get_chrg_volt, + .bq257xx_set_vbatreg =3D &bq25792_set_chrg_volt, + .bq257xx_get_iindpm =3D &bq25792_get_iindpm, + .bq257xx_set_iindpm =3D &bq25792_set_iindpm, + .bq257xx_get_cur =3D &bq25792_get_cur, + .bq257xx_get_vbat =3D &bq25792_get_vbat, + .bq257xx_get_min_vsys =3D &bq25792_get_min_vsys, +}; + /** * bq257xx_parse_dt() - Parse the device tree for required properties * @pdata: driver platform data @@ -707,6 +1159,17 @@ static int bq257xx_parse_dt(struct bq257xx_chg *pdata, return 0; } =20 +/** + * bq257xx_charger_probe() - Probe routine for charger platform device + * @pdev: platform device + * + * Probe the charger device, allocate driver data structure, select the + * appropriate chip-specific function pointers, register the power supply, + * parse device tree properties for battery limits, initialize hardware, + * and set up the interrupt handler if available. + * + * Return: Returns 0 on success or error code on failure. + */ static int bq257xx_charger_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -722,7 +1185,17 @@ static int bq257xx_charger_probe(struct platform_devi= ce *pdev) return -ENOMEM; =20 pdata->bq =3D bq; - pdata->chip =3D &bq25703_chip_info; + + switch (bq->type) { + case BQ25703A: + pdata->chip =3D &bq25703_chip_info; + break; + case BQ25792: + pdata->chip =3D &bq25792_chip_info; + break; + default: + return dev_err_probe(dev, -EINVAL, "Unknown chip type\n"); + } =20 platform_set_drvdata(pdev, pdata); =20 @@ -760,6 +1233,13 @@ static int bq257xx_charger_probe(struct platform_devi= ce *pdev) return ret; } =20 +/** + * bq257xx_charger_shutdown() - Shutdown routine for charger platform devi= ce + * @pdev: platform device + * + * Called during system shutdown to perform charger cleanup, including + * disabling watchdog timers or other chip-specific shutdown procedures. + */ static void bq257xx_charger_shutdown(struct platform_device *pdev) { struct bq257xx_chg *pdata =3D platform_get_drvdata(pdev); diff --git a/include/linux/mfd/bq257xx.h b/include/linux/mfd/bq257xx.h index 924ad2cf1ff9..c563a3a9ecf5 100644 --- a/include/linux/mfd/bq257xx.h +++ b/include/linux/mfd/bq257xx.h @@ -353,12 +353,10 @@ #define BQ25792_REG20_VAC2_OVP_STAT BIT(1) #define BQ25792_REG20_VAC1_OVP_STAT BIT(0) =20 -#define BQ25792_REG20_OVERVOLTAGE_MASK (BQ25792_REG20_VBUS_OVP_STAT | \ - BQ25792_REG20_VBAT_OVP_STAT | \ +#define BQ25792_REG20_OVERVOLTAGE_MASK (BQ25792_REG20_VBAT_OVP_STAT | \ BQ25792_REG20_VAC2_OVP_STAT | \ BQ25792_REG20_VAC1_OVP_STAT) -#define BQ25792_REG20_OVERCURRENT_MASK (BQ25792_REG20_IBUS_OCP_STAT | \ - BQ25792_REG20_IBAT_OCP_STAT | \ +#define BQ25792_REG20_OVERCURRENT_MASK (BQ25792_REG20_IBAT_OCP_STAT | \ BQ25792_REG20_CONV_OCP_STAT) =20 /* FAULT Status 1 */ --=20 2.52.0