From nobody Thu Apr 9 07:17:16 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 A53F03BED75 for ; Tue, 10 Mar 2026 09:29:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134953; cv=none; b=rATZ+tM9OdS0y5KVlsjctRrBCbp68mEgLhf4GZ9qbKsitZSmNAhCEKfysvHPXs3jvTQpgR3HwWvTx4KgTjMw6UG8U+yNq+6JAaAOOeSfIDvIsbfIdcYQeKD476wXaVzkQVugUyQLBNaNH4FhuifGskBzYyj9n3/FmPvoTNSySpk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134953; c=relaxed/simple; bh=Kch86XWLNpsoWXsiUYScxG9+qZq2PDWJ+mVUNiuprdY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=O8Y4/d+eptVijVm7MJprXmwbDFZ4jtSs9dnweX1cU6LcXVTCdJtny+kB65n2sYvlKog5GJBXatEk+tDrm6dxIEY0D4WmS3vwlpMpCmX//b2i5xANgL1yUHZzqkweRq/7oY/aH9R6BSdSR87k6IBh6wRu9DD8a80zTxjKyUvDvGM= 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=M7SIxeTd; arc=none smtp.client-ip=209.85.128.50 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="M7SIxeTd" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-48374014a77so149647485e9.3 for ; Tue, 10 Mar 2026 02:29:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773134950; x=1773739750; 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=M7SIxeTdPAVaLGTymXhVoVw7ZUhdRy5PCrEoHj/M182KR/YBWNEG1EGvaIFmOqfXCR f6+l9ZgTLm4f1QKQzvnALbqCANenX2BhKB0/bI30WbOK7yqts28HUpWiPgYnp+YBAtW+ J/HPOS061uo+g3JYtTJE+WMcbNGGuhICYAvZpsvP6fxY0dKNwrDsXwoj4r5NJCTkFYEl RgPY/Ku/PW5TeSRoDdKRMbUza0oHTKKdBhCRwBCEqZOpo4Y7sKHOpKxFi49UHDlldsmn Lqi0nBQdK02Nwtk7KlDsG5YRLHb4HRpgqJU/mq1a4iCQlT7AoG60LjqbUFwMVzXe3MAU oKwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773134950; x=1773739750; 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=MLWDQvzwzHeIOPohAnR2arQAgEZ/NDejhRAoBqfcDfnwYtXY6i68nM0yxLIU9xQbaU IntgP6XfolZ3Td+QPlNvarpP5jXLXbqFkKYmGfpIDJEeC7a6zRTayF8DNqLq3vyhpL8c BbV9B1NBrZe8UX+fraBET/ykoXvvmSbsSgES9QsnuM5J8AtLSBfEIrjTo8jQN73Ni9Ao Uwot0m1NkgVq3A7bPENOuHs8tQy2T73LTcBEhqSbY89JRC1co0zTgUO0o0RPxPeWe0hW p9EdmqAnoVA+lnDHo4A0ya3jNEvkVPH25uwfX35Ds2H2VBf3/0MSdXcBqlx9ogGJtZBY ajaA== X-Forwarded-Encrypted: i=1; AJvYcCUcDQskStke6H1TvHqLn9N2nAfUcqSMmwIzcfGAUvTcnSZnF3JnezVIpPk/FuW+phtaIJNXIk2pcGBv7QU=@vger.kernel.org X-Gm-Message-State: AOJu0YxD7T6gGu43GFH1bZwnq9xAW0C8Hvb45+O1X+IF5DmdZ4bMAiFM qOwMH+qBUSyT9GJXEumMm/9G7RvF+ZUTwPAP23hvZyT+9ojP7r7tK07cSGfcfxLqa1Y= X-Gm-Gg: ATEYQzy5aNiups4ABytKHjuxGE0l7g21FxSZsA5XQhe9i6sHs+kF7D7ie4X9e88blTu 4KyOrJ8jyXn5H+Q65gCIt+qq1F5BHY6lLKrtmciwD7/IiTkv6n2QWRmKy4IQ+fcrWQcFySua0vQ SdFoNpfhf22N9AMLrUQJql7P6p9tfnRc6P0fN+Xf232nEzDsJpwsYe63PVLNKemNnzHsIp3ESJU CVZ/Rs7fjF1EI8+dzPX+y98/KGBwY3tXJSIcfuQROUhB7+864AAQZ62mKuaXFV0BmY1/jEeEIxZ NK+BINZjDEYNEK5BrDMFUInBMAy4keEQTXH000amaxIrHZo3/UeeU5T/9SZ8RTJzefBO/hPOfFj UfiHZi7N15jCgALJllUeBeIUfOdh4bGa/B6LUESLXS7e31YmmSbRKhCE75DzmBQp3xXX9cqrEBm Zx5CJ4cs3gSMJ2DKOv5/n/HScmO5Ic2lAn/ITtTGE8Pc3ZftO3395Ya4SV9sJabaA2KkACIdEbB EL2xw== X-Received: by 2002:a05:600c:3b01:b0:485:353f:c651 with SMTP id 5b1f17b1804b1-485353fc9b9mr131031465e9.22.1773134949897; Tue, 10 Mar 2026 02:29:09 -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-48529f019a4sm104214285e9.12.2026.03.10.02.29.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 02:29:09 -0700 (PDT) From: Alexey Charkov Date: Tue, 10 Mar 2026 13:28:25 +0400 Subject: [PATCH v3 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: <20260310-bq25792-v3-1-02f8e232d63b@flipper.net> References: <20260310-bq25792-v3-0-02f8e232d63b@flipper.net> In-Reply-To: <20260310-bq25792-v3-0-02f8e232d63b@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=owGbwMvMwCW2adGNfoHIK0sZT6slMWSuf5KYMFvmmzE7k+6GAuEWY17WjysLp4srttjslrrkl RVSFb6uYyILgxgXg6WYIsvcb0tspxrxzdrl4fEVZg4rE8gQaZEGBiBgYeDLTcwrNdIx0jPVNtQz NNQx1jFi4OIUgKlu+sLIMHdRU09l8SGjgy90S/dGZ/N+nm0+cfaheYfep/TlmTmuXcvI8CFYLy6 z4grzFJNPb5bY8d34eceKI+/nmS27srY/2vrzKgMA 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 Thu Apr 9 07:17:16 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 43D3043DA39 for ; Tue, 10 Mar 2026 09:29:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134955; cv=none; b=GoLOfvQccX/neon8owPoNTl/NGIK5EThXmd3nb801n7CsXMMa574sPcgrOgUTGsb0ME1aMo2SPjn4Wo9oeUQPVrnaK7+y6Ce42n1g5cMOGJGIyxJaN0UsPoLYJP4J+c/I8zyJ2E9vHV5b7nd1Fn2FBeIpizRswbD0MX2mZlmtfQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134955; c=relaxed/simple; bh=DcG8KW5Fnk3rc/f7uk3dyHKO5i3tnn1nAb2IeSenCzU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SDfKX5Ic2quNE15A0gbTDrqMkCNuXb/W1lMGoeTqVnDI+RShpwBGrFvgUkfi2j/GHvYYgFOZxq3r6bwCG1cIfHLi2RxG0g/Sm1gvmLuhlRc7yr1LpzLzguH4N91Eg+TsxiHT6oKoWO4vpDrVGlvKS/SXh58D/F4qXs1sFc0VBoI= 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=52rmwWQ+; arc=none smtp.client-ip=209.85.128.50 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="52rmwWQ+" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4853510b4f3so34089065e9.0 for ; Tue, 10 Mar 2026 02:29:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773134953; x=1773739753; 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=52rmwWQ+5lSExH5NtxqrZ1Urfxwa33hp20t5KO3bH4tydKGukbT+MSzLGrWnpg8ImT O5PasIZsGor2CQ77z7tI/cL/VBfCyEKlKLdQkVanZkc01FC8cPIVvcC9sYhZxAqx0zLO VZSAD0S6q0L+PLnrtEFjZXK9/sl4/pA0XL2S2B8mkY/IeeGRfOGxTT2z969KSQRlm94n ZMu35iA+iFjSOR2++CQZlbkX5rgHhnIGtKtxgjuVCwy73Xrw4+RPnmK6m3ozbA4j0ukr nDBCk1AcHzmE9TdoON5CexlJA4GE03Hwf1AQhSds9Hw10BdvdYolW8bSyDbtyM4ryH2A YluQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773134953; x=1773739753; 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=SnmB31irV6Y4Z107o+Mk+OSfiTRDvLvPw3WJQpZ8E2383U8ScuKan1QDI8l8h09OT1 j9tpfyjxd4b1UOEQTtusLu6m82bg9pXjxM/foUq4UYROpc/rYD6wJ0xdp3JnrhBOVsi7 OkioXtkt2d0fbuOmIoUrYgHzHRCaplRUuCw4Y9C0r4iCm8YNf/kOwj1/KVSElsJFR0en iSQa/fDp+429NBTMPXELD90QgGuLxonp2HBanGJE/Zk06pSh4I8oqVg+s/34gQXgdyAe wKK0d7yYVji9K2hc36+c0FzkFmjVjn+KJhRSXCy6+DZNsRznNSViHL38KqDnU/GOTij5 Aw6Q== X-Forwarded-Encrypted: i=1; AJvYcCXZus+xdts6oC/UcKDElbCMzBgGetp5T2t+LihrP2egrKgfguY3q37Rgnoa7lBGmPlkZDRefXuP9+W8GJk=@vger.kernel.org X-Gm-Message-State: AOJu0YzNhzOLtVfIJAtTG/u3rj7E0Ot8oN3X3iJcP+PxWJstLUcZN2jo Vkhwhb7L6It7CMdP7jW/FkuaC3X3pPOqbP+61IirnhVr0cTDIzIjdvCxQdqfKBqPmhw= X-Gm-Gg: ATEYQzz1hCTgYYY/TpPB4FX6Xy6A//VxMMafB6l3BI5UbuLDzu/tZnJUqS1bN4gR5Y/ w6S4kE06gr7kV3E7m9tW5dHPGynUwf0GYvYTN4lAidFb6MY9zy+WryLC05UxqzqSk48aMBWwDRa G2AraGKKgMaqgxgnZGxiKqI5ShauG4wj0gHw4LXshy3Uu2PMa1R5/6QcW+f8TudOnbGQ8LiXvRc QOBcRmTwIjPjFW/dNvEhc8Kp8rlnDfsM5QTFXe4qCPY9S2O+/0UvUpXGcGyWEWpnzI4a2oVTLFU 6Kj0GawhwblWkjc7QGss+ESpQJYZiYwQvlZdeDeQ16byItSc3nJcxnqqsmbw411QT12b6MZa5Aw 6sMovTcih28/LsI4JvyT1/OM+IIk6hW9ZGi75j4dRvfQ6WbnmFMTQQg/+YfaEO3wQf16Rxn38k/ hut1IMj6X8fCLNowztmKYoAbhB22sQHQeMNHs+/gG9QZ7n8d2jQ7IxO+YZzuVZG8nO658919ySQ 1G4sQ== X-Received: by 2002:a05:600c:1e2a:b0:47e:e57d:404 with SMTP id 5b1f17b1804b1-485269582efmr227608515e9.16.1773134952539; Tue, 10 Mar 2026 02:29:12 -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-48529f019a4sm104214285e9.12.2026.03.10.02.29.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 02:29:12 -0700 (PDT) From: Alexey Charkov Date: Tue, 10 Mar 2026 13:28:26 +0400 Subject: [PATCH v3 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: <20260310-bq25792-v3-2-02f8e232d63b@flipper.net> References: <20260310-bq25792-v3-0-02f8e232d63b@flipper.net> In-Reply-To: <20260310-bq25792-v3-0-02f8e232d63b@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=owGbwMvMwCW2adGNfoHIK0sZT6slMWSuf5KomuzgzdwTos704jv/tblFLzseLf7LNcNJwGSB8 2/DbYXKHRNZGMS4GCzFFFnmfltiO9WIb9YuD4+vMHNYmUCGSIs0MAABCwNfbmJeqZGOkZ6ptqGe oaGOsY4RAxenAEy1ZCfD/4rL8mblacUJkm1X0n14Vp+rvR2gu9F08bQNeccUvxgkFzAyLE5maJN Tcn2lqlvveZSX/9erNRueXrO/k9snFhsqWGbHAQA= 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 Thu Apr 9 07:17:16 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 B712D43DA5A for ; Tue, 10 Mar 2026 09:29:16 +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=1773134958; cv=none; b=KnQ4VW+abGGiZJAuO+OrumVascrQJ/VGbbe+8Lx0FiawPngKGh1Kq/6mBarCMIVNhcJCuSFVpPLlwOJJIzafldYs2i4j/czVuLRSuGbl7VX2zTVdvSz+K5i1rbhOIIK16HD2mXbHKgaPQzo+D9pxWVCHVYl82vDYq4BUHotqtMU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134958; c=relaxed/simple; bh=1uAjKjH8Mriiu2XHqXVfsDGlgQSHnV96d3u/aQzpXDo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uuH2GcktzMe2Zd7rChLVkB6N2S/Lese95541C+esL4U5zGHtZQ2C38twTnHzGcbpvs1s4BbyRfEmMqkl1DRaYHhzp3PYw+uErq21mdAlN71irvtJMaBKJrBPWM5BsZLATa79y3kICRB1sg95415CNE4fPHwX2R6f3vOFYje9kT0= 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=i4WfYQtr; 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="i4WfYQtr" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-48541edecf9so9306595e9.1 for ; Tue, 10 Mar 2026 02:29:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773134955; x=1773739755; 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=i4WfYQtrTkq6ePczcImq37QLgO77Okbqd7qEBKoWHSM77pRcRfw0i24FaYyN16ju/0 hBtIYl0Q7Scf4yQ/U6osTc2Rcigu+1Q5xHuG8qtLflrsgrIUrG/+f1VvGbbFivymEtlB +aq4THO78NOB77mpZbYgLGAJM7MozvZpUbPdyAhZGyObiymFDPsovWx43MWTHh9PydNB hiNuS0oI/Qhvk70isvyTII0O6nkbLV5+Kx3bihFsnXld8iZNRuG0f49lpihvh4dY8TX5 G64EpXXfWTCVvcVtoBu8aEg6DQjzg/jASOX8+ujmgRZDNc0oaFtSd1OWLf83/7Ickaat Kb2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773134955; x=1773739755; 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=aK4h6amw+3TIqivcfN+wYuDvuPi+IqlNUMbBwgTmWE/XUSv1lfjnVyAtwd+z2kwHnY NMjSbs8NAiCbWqU0Ao+S/QxURN3FQnhglM29Hk0Yln2MfIqaOjy7GRSlnBnL/u7nir8a nMb0b8BgUaEs2l13K4FCFSa972G7mMWaEdpDqUuFYB2U0MkkQzKzENoOsJNQgKvjWtux 34CTgq1sS0X1tIdyuaDF4OMpkh0/0bIvVlAeEs5MenEg6KctMJDqF6X+iKnjCqSStamU l9621+LBYFt8sM721WEdpk5ChlnxP0HFZFELXVz/t0htAnVFbZ5N4CM+8XhKsOq7EIYl AaxA== X-Forwarded-Encrypted: i=1; AJvYcCXrFDnfPXEDXk6CtlWnxvgKVnRkM++IWItmn8l3nk4ew/Gcx823ETzgku5xeqIjlSFtyWHBnL70dGt9M1k=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9YauXmo8jIjpmNLrx+BSuCrb/R7QwwM7ixZjZHQ1uDIEBKryW 6oeayTPoqR6wdJuSmMQIyPcXwvsF+T0AORb0JftZaWim9nL46Zylp0CLKs3bwE7z5QA= X-Gm-Gg: ATEYQzyeGJJeTNKRUUNW6V9jBnt4GHY4NNUWiOushj2VbGm/XJMRkGZ+g5V5OMvlD08 AgQ18zVFwQzwDpo2Vv6E9/1DFpIdpkaac+XZL0xB4F/Zb1c/Jup8UJywS4OvVVY8WGsoeatpPFa 6bzZKLHAT3x5OfhMVNPSQWL2vDoRLH40LkyOHCso4bfNMIqDVjd0gpTwYy7J4q8fhxFILhqcFPN gk/K9cDwKyHVpduez95tFh8qm2Z6YcqWNCfNqWrIvyadafiz4OP+ENb3BhtH7YA6ZnLwfzp5/rG XdqXA9JLXM9sMcsVVexckseh5KSw7wSpZHCHZn6VoRItHetkpkYSJwrDdnrsrrCIwQ+clqhJid6 Zwt15DP2f6BPNPem0KfkKD5KQ8tBkJc3U6nwevzQWxeN137dHWD3xd1lDmpQmppnymm8XZM7isF pglPqCjuTDo+0ajR2Med10/d4ZbY2eM2WxCBTKV7EjfIYxpA+sZOIoqiVCe+Wq4feER44PTLJZC cCBAtEF3Mq/yHdL X-Received: by 2002:a05:600c:3e11:b0:485:3a22:69b9 with SMTP id 5b1f17b1804b1-4853a226f66mr110525055e9.29.1773134955154; Tue, 10 Mar 2026 02:29:15 -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-48529f019a4sm104214285e9.12.2026.03.10.02.29.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 02:29:14 -0700 (PDT) From: Alexey Charkov Date: Tue, 10 Mar 2026 13:28:27 +0400 Subject: [PATCH v3 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: <20260310-bq25792-v3-3-02f8e232d63b@flipper.net> References: <20260310-bq25792-v3-0-02f8e232d63b@flipper.net> In-Reply-To: <20260310-bq25792-v3-0-02f8e232d63b@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=owGbwMvMwCW2adGNfoHIK0sZT6slMWSuf5L4rq6p4FzKlq514oEcZjcXmf21qOMzd7+dvoox5 d81ztnBHRNZGMS4GCzFFFnmfltiO9WIb9YuD4+vMHNYmUCGSIs0MAABCwNfbmJeqZGOkZ6ptqGe oaGOsY4RAxenAEz1HUuG/y4xlhps3pKJenzrdn2653Zzl3FavcHO1bduWysolUy+ZsXwv2bCft2 FwptPP9e44RDzVWPZk+7dkXPK9S0eHpjTkxO2hgsA 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 Thu Apr 9 07:17:16 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (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 76FA243E9C3 for ; Tue, 10 Mar 2026 09:29:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134960; cv=none; b=dLVChHXB+avHPW5RzHD705KSRIU7DCGWGPVKlfNYGkxWTqtelr/C5QVR1kYlpkurOGwBVqaGr3W9L7zOoT9Pug32tKA9Au6YOXrpe3YEoJOxMjXCQpAdU7M9Z5Jmja1FFYmwNYlULUF9iOIrDPS0mA5iNr8OvXrqpPneqSeQ4Vk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134960; c=relaxed/simple; bh=Vj+thyx6im8c/60dw5piAk8vyroKtJcY1a74UdrGYxA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cihMaX0qi8qgijUGVYfTxGPnDSR7wLVRb0szz6IuN8UFUFhmeBLcCEYo7xyvsQHanhn8MkChdJZRnQcSSkUHaVuyVXI89/fnAbYNibRFHTrZQMDyQtPpLorOyql+qc1o5Dd8KF3GvTpU4ud7ByYD/92qnLt8MqpPq2NDsJg7SjY= 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=vR7fJ8ln; arc=none smtp.client-ip=209.85.128.49 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="vR7fJ8ln" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-4853aec185aso17672685e9.1 for ; Tue, 10 Mar 2026 02:29:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773134958; x=1773739758; 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=vR7fJ8lnUobnMwfdgMtMN6lweHudauGYOvWcj3bxhgtdswNS0CAndKhXSBU14u0MD/ 0VZc5BbokXb4UJLrohStmhS/Nuna9T/5S+k2d4Ir87QFLW4d8RJ8IUc4sS8DQRXlOBZ4 BlSJ0mT/z3gQVoZ2qP41rLwru5kWfgIIrpILItaM0gb54gqAsfskZMAbpC/sGjgy6ztk DPUTGI/0mHoQvOTdwe+Xy78Xft+Txkk+OrSEe9XjK8PIBRhZZQ+kd1/1YIKl8eI6BN2l iKiEizPpdsdLJ+dCa3djbl4n7zuKiB7u3k2VOC8mM2UtqIBmHXZN+ZV7w477VmyOHogS gprw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773134958; x=1773739758; 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=V+hOELFn6ilOYzrmToY92wf6v802Wy7sz/4qLkEzt4yFJ1phOejHkE47RMrmAvoEY0 JuCTzZcG4TU/QlxR6wPxNmheZrrYy8YXvHnBaEm5CCdSCyRDnnxrwdzSwRXMJNVGtXJA oQvzRJ1/k3VVeMpuuGy5Ueg5KqYOxQnN4VvUvYrzbxCYCPRTIPT6CQL2vB3W2konax7S Mf5pIHQgVpbjsAFgV4SBxXlBvEbriu6ACNNqmL9a/i4XNtjl9ioWDImz31yp1OdjnhTe fD6mt1Wk/A02vH3oypFs06dvRJZOio2RLJGMRM7lSy1ZHdQxJAmpQuoxZAd8jhXNAr65 2+Aw== X-Forwarded-Encrypted: i=1; AJvYcCWBG/I1cD6i8qS/ZUw5BBsViyVgrGRZ0BNUcr8+Yfi/osMDmjLx2NgRfRH9Dlt/aO+bCTB72jWOKC3RZJs=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+g8TtkUMC4Iic+1+8eebbDHvy5otDeQVAE9zxqwf/nmxpq4ws pKbkmjQRJN/A7CQ7oDXxKGScLzQXaaSLQRS0DII/IRmH0sd4zZuG7+/ssjP9WilSc3g= X-Gm-Gg: ATEYQzwYd8BjPPinzVPp3jnSYMEhFus16/AMZxx+C5TRNJzq0r8Pie06jA1zueMq3oo Za9YoRnq+0wg0+Bzsbf8b0y4dOVCV3cSI1honxMyXTJPlnVmTzL1O5tk68FX+NdQx3cozJb5ipT uCaZ8V7Gspgy57lLAuWQu4GMftRhyXhoTRdSMa1+WgIhKuAETQ4zX/SMg1mP4ex2Q8AmxpCeWct H7/iZWlPXy8UPwP8so4gev0/X5MM81xhOwRtXxLj2WVR5PLpytqlua0YfQOe1LPAEDluEmR9gfq l6532U6Bs5SsPgSFgVba/Z+SHc9APuI4Yq5KcXfj1a5DOQUZdOSXki+u2obZ5Qju1lLSjEIildi Vk7T58FF+0IU98AwVsOyzUwsty2uvJbJix+r/XN5WxZTU4SQv5ev30EJzx6QsFU+sIRww6tYEvI D/TEY7KhDQ1uiBk+RUo8KuXEBkVM7IJghs/uJ/2AQndfk0g6LZFje/6sNS925xmV4hn9MvOaKip vGku9SbYTJwtFeb X-Received: by 2002:a05:600d:7:b0:485:2fc5:3a5 with SMTP id 5b1f17b1804b1-4852fc506bdmr118922715e9.26.1773134957899; Tue, 10 Mar 2026 02:29:17 -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-48529f019a4sm104214285e9.12.2026.03.10.02.29.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 02:29:17 -0700 (PDT) From: Alexey Charkov Date: Tue, 10 Mar 2026 13:28:28 +0400 Subject: [PATCH v3 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: <20260310-bq25792-v3-4-02f8e232d63b@flipper.net> References: <20260310-bq25792-v3-0-02f8e232d63b@flipper.net> In-Reply-To: <20260310-bq25792-v3-0-02f8e232d63b@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=owGbwMvMwCW2adGNfoHIK0sZT6slMWSuf5JoU+x76OjFhHLLOX9P3Lg3of3H6qUqPezc73Rtu 1R69vUxdkxkYRDjYrAUU2SZ+22J7VQjvlm7PDy+wsxhZQIZIi3SwAAELAx8uYl5pUY6Rnqm2oZ6 hoY6xjpGDFycAjDVsVaMDD235J9tWn+CydLCcj27VWC+m6v0r/Vq0wq+L2jaGcjytZKRYeraoq3 d6dq9fiei1CetcmzY/a/aSOacq4sed92fpS4iHAA= 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 Thu Apr 9 07:17:16 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 7E37B43E9FB for ; Tue, 10 Mar 2026 09:29:22 +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=1773134963; cv=none; b=DpouHYGCPj3MXMug7t7dssJpYMycwisBYv+uOU4Z6A1Ew8kSF+BVzDpDytZsaOFJgnB0sMzOQaJNXyvygsRfMw+uOylnV0U6vcwzwS1T2a167lLpk2/SssghAvxK1EWaGJUEmPWy8M2GCYt6iAglL3k2SapVbT8vjmV7GN8pnDw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134963; c=relaxed/simple; bh=O1aC8On/MA8Asa48gmfFpo6774HHdkmtVifIcPxem2k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mtb8vFg/Y9SnAiU00WVoB1GdeCfwhg8Ewqi2NqrZmHzSPI9FE+9HzRPZ4Vfa3Dz79+ZLdllkEY2jiBYIQxW3xbdZW8fXFbCjpgQI1xBl64YKS4MFf/ujxgu38CbIBCWTlyuN/yRCALvsbeD4roGe+OC8Rbj/ukT7pqhvfgWcuck= 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=fyw3i/Rr; 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="fyw3i/Rr" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-48529c325f0so26692375e9.0 for ; Tue, 10 Mar 2026 02:29:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773134961; x=1773739761; 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=U8lhk/WPiNJlz/hNCzMa0IHLyNJ22cQxP3R/xv+M6DI=; b=fyw3i/Rrm00HEOoIRYHjF3EXAmK7464c3QQljL7q+yHQ0XgZht7QeUXnTImJiGHk6r 5YWewpcTdmUU+IrO66JT9hcmvX59fZ0yg6OJq9Uzy30z9thzYbXsLlqoDVQwNkDWgPGe k1Bvm7U2+f52zbWQ0+SPMSqSHS3l22uo85fWyAMFrpHXwY7TM0w1Q32N7+E114Uq8qkq DqtAKEldFQ2G/5XfPejuBreSV3vQbt8SSLTBXG4tv6c8zRGzGqWWBpOgT1kzz/TTRntD D7LsFcdXPQTEzTx9kXwKwa0+nDvJLt9x5hdb3xd1aVFnzLLL4S6GR8CfpjEjVH3uTirg ODyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773134961; x=1773739761; 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=U8lhk/WPiNJlz/hNCzMa0IHLyNJ22cQxP3R/xv+M6DI=; b=FQLjSL8McZsuetEI6RYmFvjaXZSShLZk7CKKZJLttkB1oGEVf8jfan+DThbzsit00C +XWL2jSNCD8MOsxUkQ+x+XDE2Uom1mh8zqI3WEhn7nCuO2yQwYFyywJd/YOn9MvOhZUr EAyIA0a7/D/uUbm4Fg6f0Gdjub6LS65T1RB8OoBbaUBvpNqc51OCfH8IiJNyADjTlaQ1 H4Z+c/njlCbNAc2kcHcPsUa67dWYoHs2cyx1kqKmiUzRGY6JutmJR0zNlrjPuguidABt /e1i4X7S8XS05sTuY2B/mIyKxC0OQpBxL8o/yyejYQIdF0RxWHY+2T2xxirHmc2sv7XK uRjQ== X-Forwarded-Encrypted: i=1; AJvYcCXn9zx5AcCGMD1o51rUzqv0e5rZW0q4EC9uH8Op9BnlUbOwX/FdPnrIatxj918LagVDcbw0SlOUuQ1Fo9A=@vger.kernel.org X-Gm-Message-State: AOJu0YzouG8k8bcGF/FzSuZRlOBresupC+KU9RpmobCe2LK7YIKxEIKZ WnSkG/zv+loa1R2Nm4lWlZ5r88nHV616ekKRF7XlLJB+sJ5gQ+cytvc8iGiNEPa7hqI= X-Gm-Gg: ATEYQzzIBTKMbYlWXlBpiA8uQzkNEgejH4ZSyHYOMDGNbROY1oFg6yeMWTdkuY2GHMz WztjiNIjH67vk+wlOVpzJGpinb027h+m1VP6wh782I36NhJDVreCXn+xjmQjFNrmkvM2h/orw7S aq0ApZugNf06WoxSGtppF/KVQvPzmic/Jdo+ITxb8oSY2uJuKivNrf6QOCLdZd1CCHX9BnUdw+L uo1Fj6WZqPIvQlzYx6iIIfEfOpQeHmxJ8p6DDP2YLc60dK+ZeqwEO+d8QWV5b7c45+Gp3ZsRtW8 2JU01Af4xCdwAUehSDXCHIGxliG9SL9YYj93iO80aaS4kZfJLhtQlt7j7Vj0ga5SS7ZpHa+BGpM HuLxgWhecgzHop4aZmkqiJ0DcVyG3jS5B5Os3cuLOfLj28bS1xPzfAuTwKFbSgR9CLXJwOmdM8Z iGJq75MDxRuV6+8+Y1ICNly5wjfmcrx1FC8HBO5Xac6UB9IhnQpbDlgMmyYtBvjfRWdg6r8kge2 p6HbQ== X-Received: by 2002:a05:600c:4505:b0:485:40c6:f527 with SMTP id 5b1f17b1804b1-48540c6f6d6mr65321075e9.32.1773134960593; Tue, 10 Mar 2026 02:29:20 -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-48529f019a4sm104214285e9.12.2026.03.10.02.29.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 02:29:20 -0700 (PDT) From: Alexey Charkov Date: Tue, 10 Mar 2026 13:28:29 +0400 Subject: [PATCH v3 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: <20260310-bq25792-v3-5-02f8e232d63b@flipper.net> References: <20260310-bq25792-v3-0-02f8e232d63b@flipper.net> In-Reply-To: <20260310-bq25792-v3-0-02f8e232d63b@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=1962; i=alchark@flipper.net; h=from:subject:message-id; bh=O1aC8On/MA8Asa48gmfFpo6774HHdkmtVifIcPxem2k=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWSuf5K4UWSxcOobJnZOz4qvgUcqbh45tWuNZXPY0j05h g2ZAociOiayMIhxMViKKbLM/bbEdqoR36xdHh5fYeawMoEMkRZpYAACFga+3MS8UiMdIz1TbUM9 Q0MdYx0jBi5OAZhqGzmGfwa7+m/b7VyhoHXp0CW1DO9lf5h/bp10ZLJMjp/Po7JIhX8M/wMrWET SDTaLtHIm/Q6/KLMrQ2zRGlX/KR9ZGHwNrtXwcAEA 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 Signed-off-by: Alexey Charkov Reviewed-by: Sebastian Reichel --- 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 Thu Apr 9 07:17:16 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 C06A043E488 for ; Tue, 10 Mar 2026 09:29:24 +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=1773134966; cv=none; b=TT69HX5TnSsxpRZiki+cJSgvLKY0Fx7+r4eaO8uFHwea/eE/5fvdOOWDq5we141VtRBbR3RjivWJH+wWYLX9edZvmUE73NmXYJ5p3jnuuyz8jdsqTgMSQH1AAHMCj6h88ofA7V2oOuboBVJwkzHaxJbX4L7N52PUqT8jYPNT8aE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134966; c=relaxed/simple; bh=sw5rQKvX/kWusd9n6LHXdCUy7V/VOBCXkbjfWoaPsis=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gS4xI6BSbub/vT3QnDc2HkvWxsiubisIppzlPs5kvsu2a1S4jIQM0S3BPF4OhwtCN5RhHwvTxVcArhzDDyGuiyIA0rXX5F1YPwZB0k2yZXu5Qod/FrdWoYGu9lP0YNaTCks+fPp1k4sywu/IiRx3BssiHWuxUhD6fhaVUzPxLTs= 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=vOUjKtG3; 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="vOUjKtG3" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4852a9c6309so31511615e9.0 for ; Tue, 10 Mar 2026 02:29:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773134963; x=1773739763; 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=jmE6i8Plda/pdmCIIVlRHiRV9OKzbx1wU/pBBf22f9M=; b=vOUjKtG3KT5CfgrNcExROZczFImtw+IEH92dq+pxIXqDw2SvV6IgyPJ0wW4zloG5HG f5S9wIrFUpsbjiDvGd6T1sBfq/JYevqZWG+rGDY8XrN1pePNv2gSzIzK2KqSUNf0BHVk m9UNrwow4y7h37ISVajMqx1AIxC0/kYHQhafjMavdwcE2U//Egx0kXQZTuU21GfTX8qj k9c8PLMIc5gsSZ3+7gMqSAAsiS0IlUQC42/OT2b+G7hNSq+ZnMS8DV9FUFFRbOdhdHcD 5CREXpRT4kXhMH/7AFmsi5IWY/LPr9tJTbvF2fgAzrwHC2QYXiqFZZfGOzUbSakBv8Ak mQKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773134963; x=1773739763; 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=jmE6i8Plda/pdmCIIVlRHiRV9OKzbx1wU/pBBf22f9M=; b=ZD5veiNxuopCONtV11Hdcgc0GYLsgjPM4wVaK6uhsPXtfxdOlu9/Gelu6nLsYv2O/c lU3DCFnYDpl7oNNWgBc3ByS2s40aofhsccbX6fxv2Kx87PQRwNs7wJMK7Ey50hsW7mnp WPxJtahhjWEvZGvVFUYsqdk7UXtNtLKRxKtehqeKoWtiEG/eJOssujJxJR5NMWOBii8j ek4VigBnNZH11M2xrd6CzNb/qqoxBAWaSAn7YISmzovm0VLs1wP1+k9eHxTI6tifhvuQ t+GWfIIVZ5OSH+cW/702BlhEtqdL+fnAw8HImWSrXGNHMuxk4u+xLqRaEL53m7jhfKJ8 o1Ow== X-Forwarded-Encrypted: i=1; AJvYcCXDKVjsRhT7fq0E6I0jtzbt9EMMWCwAv1Bfg8lxvLfut1t5UauTAvVRQSMTvIrDP5HYiFo4lCoSR+NbR+E=@vger.kernel.org X-Gm-Message-State: AOJu0YzpW6hEKsS4aUl/HV4FmdZY4WbUbdP64Hm8E8MKKYVOsE1kRw+N z7CqE1XblMnC7C0gKBvEqbggarOexQSX2n3RIe3segJPs4qMtAuPS2DwgM4GJWvQM2A= X-Gm-Gg: ATEYQzyRJUV9KfnJmkMc3xZqGTvcLaTX8K+jZfq5oR+db7tYj/XNdPhwqFQuVzhshgE TRd8IgT+zRiKUg9Wo3Il3zmfj61ViNgEvTwcSyZ/p0HVwfdyeH3QKH1T6Y/Bzs0PAdd/3ifLadi 62Zir++9WROQLOaxazlhIPR5MmSS9dsZqeuJ3Fi+1Zij8257FSGN+b2jHNuOm2YdlgN9o6mJjJ/ M4r7Dk6S9IyJIUz+RD1S4FTwfHonlJMGrqtrNm1EhNeCGKf08OtfW+neOgJTOeUJqdtoclw3+9O zjBx4Jg8aswiM/KMdIuS5ux/69HVoXhYOO7JPAxrvmbG41tw7Kl/M5rUkT75513uuAt5OHCKn9b zw+BYt6DaGMpGQkjNXed1ICZhfye5rYNxA99n8HSfdyZ5VhI7L0JhGSnlP56XToY7ZiqDc4suIW JJdk6I0yR+hu7cRe+hFnDa1KVLqourbH9peyCAziOxyzmOBFmK3iNkaFS/jn6kZdHXkryHNezsq OWCpg== X-Received: by 2002:a05:600d:8450:20b0:485:40c6:f526 with SMTP id 5b1f17b1804b1-48540c6f6b0mr46904115e9.26.1773134963152; Tue, 10 Mar 2026 02:29:23 -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-48529f019a4sm104214285e9.12.2026.03.10.02.29.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 02:29:22 -0700 (PDT) From: Alexey Charkov Date: Tue, 10 Mar 2026 13:28:30 +0400 Subject: [PATCH v3 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: <20260310-bq25792-v3-6-02f8e232d63b@flipper.net> References: <20260310-bq25792-v3-0-02f8e232d63b@flipper.net> In-Reply-To: <20260310-bq25792-v3-0-02f8e232d63b@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=1666; i=alchark@flipper.net; h=from:subject:message-id; bh=sw5rQKvX/kWusd9n6LHXdCUy7V/VOBCXkbjfWoaPsis=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWSuf5LI91X9g6CVhNWfrl31XKcYVKtPCd9kL+hrmmee3 3iQo7y2YyILgxgXg6WYIsvcb0tspxrxzdrl4fEVZg4rE8gQaZEGBiBgYeDLTcwrNdIx0jPVNtQz NNQx1jFi4OIUgKmukmJkmPTmrOzJKaFLW2q43SVUV1hd7pnYGHs7210irTeN9dwiV0aG0xYvJD+ 8Tti7Y4aT6CudPUaq7/as9dF57nhvoZL9H2ZFJgA= 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 Signed-off-by: Alexey Charkov Reviewed-by: Sebastian Reichel --- drivers/power/supply/bq257xx_charger.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index 7ca4ae610902..e14dd16f9d08 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -26,6 +26,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 +628,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 +677,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 Thu Apr 9 07:17:16 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 87AEA44105B for ; Tue, 10 Mar 2026 09:29:27 +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=1773134968; cv=none; b=Wlxbu2eHJaKePij3zMR2Jy1A4bqD4x4Hj8ALFNN9Uysii707IdYyjk43gtc7DMrMK2255qQWCuT/HrbJIZ1I7SD1nokG6QPOhXc1sfPjmjIy3VABFz/7gUZEk0iUCJtb0U+WnbgiMKRrWvrdtE7MAGPt+xUJX08ZBoC6aLNL+XY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134968; c=relaxed/simple; bh=uhoOBLTkCt9koWbQVb9qbShLeGalrFZRwZECwHGWC0Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pxEOLA0fVup4bi7ZiBJyj8UmdbCah32hiIbbHPM9PcQcuenKBgQiAlHeOQhAmPH0yapdRC5iN51p1RjH3V4A6B/MpwStHqqWJDtQnwIdCuyGvE3ztTBSUAEqBtPAP9aIvRIv8mNYkKeY16gd+n3AMF+9d8/YFwdDbl4lbzYH5ok= 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=8IoaQdpn; 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="8IoaQdpn" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4852e9ca034so28736555e9.2 for ; Tue, 10 Mar 2026 02:29:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773134966; x=1773739766; 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=XCPvyofErjhorjvOzgcNlfIsVmqLN0uhP/f3Z0DZct8=; b=8IoaQdpniGTg3J6DKnb32KHRH0sycNRGaeTUw4PxH8cUHaxx/FSnxd+KDMbeCOZod3 t+Ja3fvXVkUS9tUPX01B46aE6qMa8xnuBP6s0pCJqRZQ8ggpsjDU0zSntnfErnPSk1JL O6OfPMmgeyWOs16+QWiYPUFx674BsT9lIjTkwDrPuTCrQyShLKe6TgjetroMJi9am/GD U7OHpjxRjyo+TCaAft8CP5DDKcFa6KKjXfqaIyCSRtEUZX585kr6iFLwnqQYcUa9aPBd PJTpnB3ChwVWuhIwtBdhClKA5Jxq8lrorsszwwlIe3BsRZCmZUJtRmXeUoZvmzpTcD5c NADA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773134966; x=1773739766; 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=XCPvyofErjhorjvOzgcNlfIsVmqLN0uhP/f3Z0DZct8=; b=TsFXcyb9Em/ZNDV2IFq87Mm1XSd5WNqscLf09uOkSPbIV5MZj0Y051IxoZwHgPYckR Y+0Oajb1c8sjubsiPGvs9ihkcteAsOdReKu9v4956HK7EmWf3GLQJbkkIX/6FMjg5FsO qPWu4fCWhv+goTP1n3j8RmxdZb4pCAaHyrbD/MEL5oTuE3Ne7TyBmImKM25hFT5sga8T QhQXX52S2qOFtZs2funfOIYdCD6paa65BB2YRM9lfHDt0Ogg7Aeo0RWBkTNDWyHO0Xst 0SE5cAcnNN00hP7BWIWDia1WSJe5EYTE687ITCY6ZczWPfDkvzTxC9se3oYQKw5DaAor W0oA== X-Forwarded-Encrypted: i=1; AJvYcCVCQ1nMDybMUV+rSiPj6BZf0+B0e3jfTkv+RWm1ISlHyaNDc3iHV/kQOXNadrRqYGeQ0RBqpRXP2ktLM+o=@vger.kernel.org X-Gm-Message-State: AOJu0YzpkrNrAOfsgNhQwwIiQREMEAGq8nYN1hf/TcOviqGo5Rvpdx00 unoIc3aKUK5lnI3X+ClBmSLvBHe3c68UqOrbh2J93xXPV/8jgXjCFEn+eld0c2jJCzI= X-Gm-Gg: ATEYQzwwwsMaaIZkw5UxrEG2y9TU1FuRybGSv8YosQpRCm7QjR4UCGQw8JCfV+XA2qh I1v3blrEvSHL+9wht8UWt5pchyoR1ut/WGLL+Rle+fJ6V2RNZI18OZvctYQXXSCmPwF+2IgRBQu KpeyDg9lJAevr8Omeijkvbp/KhnSJhaxfhHSQ5cBCxARmG4z2VkTxs+UyXwP4WqGOh1EGgArCDq Wfz8YBk6CD6+2leQuiz/PLzc2T1ETjbmo/udKWk5ZOQtg5ac9pAcdTNFaQJbcDqCjNDJ0yxa11j 1Cq0BWdr0SRbftPJuML7bnQ9DeuRDgVsWnzhH1nm3250rPFqLPQJKvAdIhwAKVjX03hlsZImSL/ 633rPAh2z91TJhZMrH9xcBlytaHpkseCDJnbalyuhuojnGG1etj/oOcjtJ+CDF3jGcuDCXdQ/vg I+88XDpQl5LT+f8AthSl7eUVpOa5XJfJDVvQO1hcp0VtAsjd7VtT6X4uM1mk3G0BcfUmfMIbs6c mss6g== X-Received: by 2002:a05:600c:350e:b0:477:9b35:3e49 with SMTP id 5b1f17b1804b1-48526916bafmr216148855e9.3.1773134965857; Tue, 10 Mar 2026 02:29:25 -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-48529f019a4sm104214285e9.12.2026.03.10.02.29.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 02:29:25 -0700 (PDT) From: Alexey Charkov Date: Tue, 10 Mar 2026 13:28:31 +0400 Subject: [PATCH v3 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: <20260310-bq25792-v3-7-02f8e232d63b@flipper.net> References: <20260310-bq25792-v3-0-02f8e232d63b@flipper.net> In-Reply-To: <20260310-bq25792-v3-0-02f8e232d63b@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=3415; i=alchark@flipper.net; h=from:subject:message-id; bh=uhoOBLTkCt9koWbQVb9qbShLeGalrFZRwZECwHGWC0Y=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWSuf5L4NvKH67LLO18+Sn5RxHPNdrv3nO0LruRGXQj+0 /20df1fvo6JLAxiXAyWYoosc78tsZ1qxDdrl4fHV5g5rEwgQ6RFGhiAgIWBLzcxr9RIx0jPVNtQ z9BQx1jHiIGLUwCm2t+WkWHS7M0t5hLsDYsOPvvOY/LJnP2eQPVPZp/GQ1tXs3l0pp1j+M3CuXN qTVjBB8fv3MybHe4Vyxkde/t8/bKv0YLzZ66W1uQAAA== 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 Signed-off-by: Alexey Charkov Reviewed-by: Sebastian Reichel --- drivers/power/supply/bq257xx_charger.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index e14dd16f9d08..deb60a9bd222 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -30,9 +30,15 @@ struct bq257xx_chip_info { 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 /** @@ -489,22 +495,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; @@ -632,9 +638,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 Thu Apr 9 07:17:16 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 20F3643DA5E for ; Tue, 10 Mar 2026 09:29:29 +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=1773134971; cv=none; b=q4/6Ek69BbgEbqGjKrym1ExnP97KEGllqyqk0tr/Xhop4X3J/fLywFiFK7EIGHIaldcygJLoaOjTSNsv8tY8OvGBmacBpJyfXB0CkE5Cu3jXlsunWD3Yh3XO9gU/vyP2hFFh96Z7iJaxFh2SJNJ0uP9seGPYrr/KMwQIlFcsB0E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134971; c=relaxed/simple; bh=oCIm21h1xlZz1ac67TCK0k/M2uaB2EsOtQDVrIRc4YI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FrSfBv0yupFzXRHn2ZuDn4IXzpT1gsG95V+6cwMZ51unz3iDYXRYqd2Ia629mYrd/r7XOLcAMMVBGJogWCzy3JqqR9n3trgUXGL/f20zQXJr+GjUxI41+JhfL9Qfo/WKIdBR/L24ZHCSEu4932od5SSXUt376xt9DMzk491vqhM= 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=4aDBMVWL; 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="4aDBMVWL" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4853e1ce427so19804255e9.3 for ; Tue, 10 Mar 2026 02:29:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773134968; x=1773739768; 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=GgvXV9daisj99tiFpRQvp/oWE6rCsyVXhi3xoGqS9rM=; b=4aDBMVWLbE4pkVbP5+UGmJ9FE50fL8wakMNGfE6mpmyuoOi4WMP5pr2dYnFqQOPKJK KDplrtDP8gyKQxIwevtxfoywsBwTizsvokti+nFhV4uV36kIWBXvEi82LDSfB55QLpVu 2LRyEj2Z4Xcv6HHBvjzVNdTarbNYL3OakGTA6Q8TFR0TuDTGs7OVx862oz3mu8xNxPvx Ax4MS55GZiySBu8kMjD5osLr7ig/62KRXp9mqjh6kBxbx48MkyQTyeEuiK08oroMIyuA PiMPZ5zsk1MGRm+fDjyeUaO7qRIrXhSO+XsSjTfIcd/0BbhYccaQG4oW9AtFkR3RdATV FiWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773134968; x=1773739768; 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=GgvXV9daisj99tiFpRQvp/oWE6rCsyVXhi3xoGqS9rM=; b=DegWcdMP3fQib117r3VsyjOcBMLlfZCmPL6t3z0NNQWFoPJ6S/Vfs1KYfSWFWHHgUR efmszF8pyQst46PQkfkUj7H0GR5NGSEe0FAJgWBNigrIotP2J4uyAImTSxwH6KGJbXP6 QjlwzWiCM/mcanR20n0IF/W7cPxq7zO5kPlUCc54dYpnhdmozJFKeBOyzBJ4alQnCjQS jY1nyaZe+69iykxIN8HAQX2BLBheSBDv7YcIH+Geu3v3ZwKeSAqW+pASkydI3FfyJmh1 TZiL8mAN4a86DRCAVA8PAz9TNyg9hNajroO/81yg6UxkNzALirdBm6yHSsx8u7ejIgYs FwlA== X-Forwarded-Encrypted: i=1; AJvYcCUXVUM3EkOXJLP02fwoNSzpnsntvE+W8GqOFYPjMTkTT4QmVdGL41f8HMkOz26SdBreYSVAH02uKXWYaH4=@vger.kernel.org X-Gm-Message-State: AOJu0YwumkrUI6wnnfQb3cOM8LWztJtBrAbxH1v/sVvXe75TOrkBXdL0 Nwbff8V70J7z+n2NCRTu+aPy6Sdrk5UFSne2EgWjI1REUQRS/kZ+4HnspDpRbbfNi7Q= X-Gm-Gg: ATEYQzyuPxgPVnUw/cqsNjDcyW2kdl5kZ5pg2INOBaczGNKs5jGCMVZtDxUbnd1tdr0 jomNfL5h3biUQvjsyx3MliVgRPvOFWlvgbI4F7L11PPO5wZVcVRZ4kd06ZmIfUEmfM5+PnEry5Q dGdAlyPqRXz/6DfnpbETdh9z/yPGHIZ6BJjK4QZ83ksHcih1/E6LcPnVFp6Y45ppfYwvS/r4C14 lVLGy+dcVh/vShzRzdStINf5TberJN//jcZHAPVMAXs+Q17shXgK5Hf7G9lc7Ts0Njis9UWC3hd eTyVYamOyd5+64dTK/+km4E8+xCX1w1LvprAD1nawHA6YNYisRW/te+yDwRXRUhf8kbTk1tOfzL Jp/mJMBew+GZJKC4abzlqGsObel3/QSgknzjjG7rAaULgx5aGc/jl1YkrkqXCbCClZf8vA/Itrg tRldu84dyZO3j3hOQifAtO2yrKsTzCoBxM8JbkBRxF03mM/B3W99l0b0atwnCkNg8Y46j+ny3g7 KDH+g== X-Received: by 2002:a05:600c:64ce:b0:485:3ca4:4ef4 with SMTP id 5b1f17b1804b1-4853ca451d9mr88483685e9.9.1773134968403; Tue, 10 Mar 2026 02:29:28 -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-48529f019a4sm104214285e9.12.2026.03.10.02.29.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 02:29:28 -0700 (PDT) From: Alexey Charkov Date: Tue, 10 Mar 2026 13:28:32 +0400 Subject: [PATCH v3 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: <20260310-bq25792-v3-8-02f8e232d63b@flipper.net> References: <20260310-bq25792-v3-0-02f8e232d63b@flipper.net> In-Reply-To: <20260310-bq25792-v3-0-02f8e232d63b@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=2521; i=alchark@flipper.net; h=from:subject:message-id; bh=oCIm21h1xlZz1ac67TCK0k/M2uaB2EsOtQDVrIRc4YI=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWSuf5IYEyN/Ppbnv2n867x654N3/7lIGG5Pv6jL12tTM ns6w+XujoksDGJcDJZiiixzvy2xnWrEN2uXh8dXmDmsTCBDpEUaGICAhYEvNzGv1EjHSM9U21DP 0FDHWMeIgYtTAKZ65zmG/85bw2RdPbV1q9Ssav3f2+T2yLOldxUuUJXi8s+u93qTxfDP5K3E6d7 7JWpNO6bfbhZi2hj7LzL6cLZEifCcD2Y7rmznAQA= 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 Signed-off-by: Alexey Charkov Reviewed-by: Sebastian Reichel --- drivers/power/supply/bq257xx_charger.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index deb60a9bd222..951abd035fc5 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -64,8 +64,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; @@ -99,8 +101,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; @@ -471,14 +475,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 Thu Apr 9 07:17:16 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 D953644A71C for ; Tue, 10 Mar 2026 09:29:32 +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=1773134974; cv=none; b=Wvf9S+4HTPGYbTWSLq6Gy2Pd4XxoI1Le7bSOT9ZNd93YOA/0Lp+mWyrPhQnZQqw/wXyUCH8K4BmgOCz02JnkOUqILHbE0chCXwfs0Al6wl8d5V3nbE1JHmIsRuwPMAW29r1jxRktl45c8MK4Fm39YZM7JaAczVKMNgXMgZA05m4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134974; c=relaxed/simple; bh=KEBE6F6MhA37qQuoyujbaXqiqC0+Q7yylCnouiEwyWI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kSdSa8WiHE7dfnPtpJnF9Lw9ESeO1Ifu4xrlh3Ah9MZI2nqrG7z+qIk7tCq5LHFsMRyUGa35ijekqE/4WGzf33WDmihfalmwGrTsn9RVrz8WJMZHtPAQtQ1xw2HhX67yuV8QQrbS2WtKkdj4TGwZ6qJIWEsBNUwKiyQ3Ugj3XV8= 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=8iC3Wllu; 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="8iC3Wllu" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4853c1ca73aso15692405e9.2 for ; Tue, 10 Mar 2026 02:29:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773134971; x=1773739771; 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=7ViO9MM2ECJfrHqKrqQ+ftCHQhsOysHa0l3h+KQp/y4=; b=8iC3WlluXr6LWjNKbpwbO+o3bKe3sauFcG9k0RqAA/55nNwoxnZjdpjOv7+NhKCTKg gtE/LujgKfGphqQtHhdS1enb51K7dBUCFj2GdVwankfg9tdllckp8G/Erm+hw7IUcCqP 6yKLMnUWh1axU2xex1SpULkyRAZIYBD7oQL0VSah3+fQxdZrMgk9NgWXcK6DLl0KNYk5 Swrw2ig7jsSj6nfCvn9PIgL5HOCujDmrtP02m5DrQ95pD7Red/ebLFqLVpb9r4DagqcT GPoKR57Lf5A8YRIBXG1TN3WBkNbrYSnM12Hh0jQoBElSQ/ZODvZLJQLsrgl965G9fgEo bVBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773134971; x=1773739771; 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=7ViO9MM2ECJfrHqKrqQ+ftCHQhsOysHa0l3h+KQp/y4=; b=MQYRpNwy5BPe5h1TPOWQ0ZCRt8/WMBlTXBpwp+e8v9MrQZ4NmGXGPYv2mKVjC9oFfC 2G2Adozi3ujHdI8/UjgO+49xi9mEitrwwCzxnpR2HOJKNClJPsLlGurg5xIdBlFYU9qd m4SPzflJV57urWOK+wpTuGxfz6pJdH2B+mI/bom+O2vxGPRk6sL+4K4esplTH2oShNOA eKI5uEDS2btqDBwgG1XPh49/bp+dxucsIKJ1LEO3+6O0bfVXP5GqC3DAXFcyd2hHnpLq ZpHTcgTYA0xGu9phJNPY4XBNNTtNIg2loHHBhv1Rv/TV56VPeSrRW2/8myxiJu5p6Blw aixQ== X-Forwarded-Encrypted: i=1; AJvYcCW+G1AQOFhsSjGMIFiY5Fi/g0M+YoudlGJv9FVWWrWsz2VJag8bytDlr5DWelbxnAVzvpq7AGJupoDt3G8=@vger.kernel.org X-Gm-Message-State: AOJu0Yybf38kSzJZqcXqW38C0iFwAYtFFMQFTwSq1aevXhnxMlAraaP5 8MmXb7Y3VFX40d7hjxei0Vzd35g61kU0stCMtkr+Apc/emR039X95FPNrqU3kou4AVo= X-Gm-Gg: ATEYQzwQL0gcDswVH8e9leEc1kq5JuJxCs6I+ndZwfFBozf9UB6Cjwp/g+HjcTKbjeK gBJGUKWkEVlHKSzW1OuoYVIAuC1rBEnZZeTXVeWru76DfpC40S48w6NMAGeoo2cvdub4FB7Ao7O 2CElTxurdAbfYZrSoyTDuJM4t+3x/3niab05Qix0Pc8c8EMEO+F7WIIsVizM6dQbdH4deWpMzAA k3LpPPA2qfpLz+8iP8B85wMn+nIteTOfiaIPl9wQN5DDby6fHsdGnDqjMOpiRjW2PY3EtfPlziV 8NL58I8lW+JTJ3mzpSPE5a8RNGoNFskjqbTgdfq5T5xPMUsP1Aq2LoQTFprC2vvlfrxZNLR3wnP fV8oAazQngfuP7LoAits35LKe2hN5xNE0/iYf9lpFePQnPiTH8jZHrcav683h0qoOQNxj0pal/t f4j9co0rEbO3DGhoTM2KNuBfCrz4sHH8SKcU6itMEWZDuK4mkCHVcJ6bO7lD+oNtKs3A0iSw0Tx Dt4sw== X-Received: by 2002:a05:600c:3515:b0:485:364e:934e with SMTP id 5b1f17b1804b1-485364e94admr145376955e9.21.1773134971163; Tue, 10 Mar 2026 02:29:31 -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-48529f019a4sm104214285e9.12.2026.03.10.02.29.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 02:29:30 -0700 (PDT) From: Alexey Charkov Date: Tue, 10 Mar 2026 13:28:33 +0400 Subject: [PATCH v3 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: <20260310-bq25792-v3-9-02f8e232d63b@flipper.net> References: <20260310-bq25792-v3-0-02f8e232d63b@flipper.net> In-Reply-To: <20260310-bq25792-v3-0-02f8e232d63b@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=20016; i=alchark@flipper.net; h=from:subject:message-id; bh=KEBE6F6MhA37qQuoyujbaXqiqC0+Q7yylCnouiEwyWI=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWSuf5J4XGfXweeaDveeqKxhOS07o6/83OGfUdV5sodXM Gz4sXpXUMdEFgYxLgZLMUWWud+W2E414pu1y8PjK8wcViaQIdIiDQxAwMLAl5uYV2qkY6Rnqm2o Z2ioY6xjxMDFKQBTfSuTkWHTj5bTx16V7rjql5c1i8M0fFZkSMZeJv43eV0lwt7CcpEMf0WvVsn d7X+ve/Lu1Wu2ot1ZRtNutmpcd/hl8ea4QcHyw1wA X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 Add register definitions and a new 'type' enum to be passed in MFD platform 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 | 64 ++++++- include/linux/mfd/bq257xx.h | 417 ++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 477 insertions(+), 4 deletions(-) diff --git a/drivers/mfd/bq257xx.c b/drivers/mfd/bq257xx.c index e9d49dac0a16..7516e2ec00e6 100644 --- a/drivers/mfd/bq257xx.c +++ b/drivers/mfd/bq257xx.c @@ -10,6 +10,11 @@ #include #include =20 +struct bq257xx_match_data { + const struct bq257xx_plat plat; + const struct regmap_config *regmap_config; +}; + static const struct regmap_range bq25703_readonly_reg_ranges[] =3D { regmap_reg_range(BQ25703_CHARGER_STATUS, BQ25703_MANUFACT_DEV_ID), }; @@ -39,15 +44,64 @@ 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 bq257xx_match_data bq25703a_match_data =3D { + .plat =3D { .type =3D BQ25703A }, + .regmap_config =3D &bq25703_regmap_config, +}; + +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 const struct bq257xx_match_data bq25792_match_data =3D { + .plat =3D { .type =3D BQ25792 }, + .regmap_config =3D &bq25792_regmap_config, +}; + +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 bq257xx_match_data *md =3D device_get_match_data(&client->de= v); struct bq257xx_device *ddata; - int ret; + int i, ret; + + for (i =3D 0; i < ARRAY_SIZE(cells); i++) { + cells[i].platform_data =3D &md->plat; + cells[i].pdata_size =3D sizeof(md->plat); + } =20 ddata =3D devm_kzalloc(&client->dev, sizeof(*ddata), GFP_KERNEL); if (!ddata) @@ -55,7 +109,7 @@ static int bq257xx_probe(struct i2c_client *client) =20 ddata->client =3D client; =20 - ddata->regmap =3D devm_regmap_init_i2c(client, &bq25703_regmap_config); + ddata->regmap =3D devm_regmap_init_i2c(client, md->regmap_config); if (IS_ERR(ddata->regmap)) { return dev_err_probe(&client->dev, PTR_ERR(ddata->regmap), "Failed to allocate register map\n"); @@ -74,12 +128,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 &bq25703a_match_data }, + { .compatible =3D "ti,bq25792", .data =3D &bq25792_match_data }, {} }; MODULE_DEVICE_TABLE(of, bq257xx_of_match); diff --git a/include/linux/mfd/bq257xx.h b/include/linux/mfd/bq257xx.h index 1d6ddc7fb09f..b2e38a4a4738 100644 --- a/include/linux/mfd/bq257xx.h +++ b/include/linux/mfd/bq257xx.h @@ -98,7 +98,424 @@ =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) + struct bq257xx_device { struct i2c_client *client; struct regmap *regmap; }; + +enum bq257xx_type { + BQ25703A, + BQ25792, +}; + +struct bq257xx_plat { + enum bq257xx_type type; +}; --=20 2.52.0 From nobody Thu Apr 9 07:17:16 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (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 ABEEE44B671 for ; Tue, 10 Mar 2026 09:29:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134977; cv=none; b=aMoSGcsvm3G02mxdPVq7/cZbj8xu4dstmC1L81Lhc5bNb9BM5vBFq0Kl+APbCF2Qqq2o+vjo6JYqg+n0mr0GCc++mnUbJyZZreJ+sVQdivHjyRwzwh+BKZLDF8+I6qliwEVThdS/9UKHpm/LITrnfHvjH7qCzcREKnONzdQJOYM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134977; c=relaxed/simple; bh=Yas/YH/+WHqmaG1+9dU+ZXDZsf5koKP+4O5pY6ZHHVo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rwxX+DrYGwzScW+/E1LXjNNgBQnqxwl4JgzbKw5c3BapFbmSRVRv8V9lf0T5fkOfXqS13s3PBIRqcbXI+XLB5qEgKKHd4oebB8iOz2IhIlC0ojJLDkZZNmSBiUAPSLmMbzpLIFLl13eiqKFj6u6O0eRT1kl66U36XGS+9d9IeWg= 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=FwTWLO4a; arc=none smtp.client-ip=209.85.128.52 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="FwTWLO4a" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-48534e9076fso16353095e9.0 for ; Tue, 10 Mar 2026 02:29:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773134974; x=1773739774; 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=b6JAnC42FjnZsgn6Qw8KBFDtZiHpm03wSifwT634VnI=; b=FwTWLO4aw6ueaKTqNVpx+oRkSkIAsONBb1cBED21oQ+/u/QUZLVD9P7mupcZgMXC3f Y/ASAf4yPTbGEO0q4cKbRolRni1y8ftvk9k6GeRJbfvhT4CPIgMj9gG8ARSW+Nc7JewZ 5OrqcrUKS8QCZ/oVMsNilORAWBSHnkAxxRStl9APBm8cJVIJqTu83Erm6zya5xBBSymj T+jbDtgLv6EGTIYI7I0yMzfb6A3BZRAKxVxKOdj58muRfPRLEaH/+IN+kZSOPDDNIqCi 5FaJ+fDiAoOKnYUK7j6VH7cmZyZcpLXU3jlRtpQcezFneVIOq4mgx8pUujnwhkpDiUxJ kuwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773134974; x=1773739774; 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=b6JAnC42FjnZsgn6Qw8KBFDtZiHpm03wSifwT634VnI=; b=aQW/EZOY//Lhg3I71911niZgG0OpGyffKMNp9AZsq5pvRlgvUeBOru1UoiCizhcp+f n60kJFBLP1KhFK/CV3cs2nb3QY+XQyV6nupvMf83L3t3yWRIA3VCjqmjQw8F3oyPl9s/ Sa4d+O7lcfnoLHTXItNs0/OomoRrX7+iLcl9ygngkBsIRBOkq2V5zdWvWFGFWBWB8+d2 zr9pEZneQhON6AD4taIt5MTS175t8bAcFiIoRNbVL/orV+5q+qSSDxmTVdjAuESSWLII WCqiavcLU5gu56i37AY5OXUPtzixwLwFVO7f5uM9dgHRHc98AuWqqDYN/E/VXFwz7QcY KrIg== X-Forwarded-Encrypted: i=1; AJvYcCWXjo+uFIT89R92kYSazNO+jxH3OykRuYH6h5BrmH9IjTythMlO4v9rIyXMMHJB1qNsmElQYGqvE5iQQBg=@vger.kernel.org X-Gm-Message-State: AOJu0YypoEjKFOAuLu/8ky1EOrNH8nJqYYPD89Jr4MFQhMVHFnS7mZQc cVSC/91Yn/3WU2p5xKbp8MHg1L4IuFvonH1qxguf3yI/wBCcEnMpaxZAGNcPI7reK7s= X-Gm-Gg: ATEYQzzG3vsberTtxQE3FGQ3z4c0ArruQ3fLMmIsU3gObtCmJWggBvAiehHPq9zFI2J FiUm0VvV34hN1mbewIjGrXIiMIbjkUAAOKpat6pqfEQ58af3FsbEXIjRSGfbeMLepUJ9I1Xt8+w /SWntL6XU24sKJaqSUuDEJ6GrNtyqasXZ66i1QW47A3mLiFpnuMikpfwUyFfXA7ILiRzMRYpGfc kXNuzsZRaVQiEZ2i6KGx898uZdIqRNv8FzLc2adTXe5DVSuyWWjdiLmSnSN3v2vKtcqbJZZoCNT XXhAHltSVz0agppmvtG7jVeVdNmtRJ/T8Mo8uB19QTPB7Ou1sf9p2n1h4iGgzImK5AxLrp3YL2X bRJlpR5qftzkepTA0YyFcZ6WbbSEza6JkaMbAjNUDFR+AcSOeUQ5ssvZxJOW7daBS390XrUBfoJ DKuOkcoFXiLEptYiPNylazYEWfEF8eGHU6Y7XC6cQlDPuYtdSCS0euwwOWJCBusRhqTyxSd2fDu 46zRw== X-Received: by 2002:a05:600c:4445:b0:483:a27e:6706 with SMTP id 5b1f17b1804b1-48526922533mr256104605e9.9.1773134973989; Tue, 10 Mar 2026 02:29:33 -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-48529f019a4sm104214285e9.12.2026.03.10.02.29.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 02:29:33 -0700 (PDT) From: Alexey Charkov Date: Tue, 10 Mar 2026 13:28:34 +0400 Subject: [PATCH v3 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: <20260310-bq25792-v3-10-02f8e232d63b@flipper.net> References: <20260310-bq25792-v3-0-02f8e232d63b@flipper.net> In-Reply-To: <20260310-bq25792-v3-0-02f8e232d63b@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=5084; i=alchark@flipper.net; h=from:subject:message-id; bh=Yas/YH/+WHqmaG1+9dU+ZXDZsf5koKP+4O5pY6ZHHVo=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWSuf5LUcM/2idZDNp71kkv/7AxRl4vQ23+X74pO2RLOR a91Xjru7ZjIwiDGxWAppsgy99sS26lGfLN2eXh8hZnDygQyRFqkgQEIWBj4chPzSo10jPRMtQ31 DA11jHWMGLg4BWCqD61n+Cvfx+d/+i9P/1uJ7zHXZvGeWNNnKcOj0Vfaw6Sdlr7/QSwjw9uw7Ia IbdpPDkw4t32XYPixNSZamlyzN28V2/jqQVnlUU4A 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..61911ac8613a 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_plat *plat =3D dev_get_platdata(dev); 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 (plat->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 Thu Apr 9 07:17:16 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 A5C0944BC93 for ; Tue, 10 Mar 2026 09:29:38 +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=1773134982; cv=none; b=GB9Uj5Muur5cB7jqOq4WQuppoWHePp8PkGjAY4lJ5i3cXt5GHJffhiTS+g3lAUvCaGlb6gyhXv2n23esoUb8lEs/X7ALQx3Levonw+WZGaDls1j++E2gn+cUhp63wFeXDm2nKjaClYgORD2S4pClxBQjFWCUdqfO+HYneGBxRXk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773134982; c=relaxed/simple; bh=FwG9A84SLXtf/UKZlp7MYYLSt2H9Jv4dNseNtGkkscI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hiv9C320fu4RwvYqPtFPs5rbOU/pCu6tk8Om9f4e5TDvkhuBsIW4fqdRnpNsjhWdfVR/Yw0oNAaFmX2VPSu14yKZSJrzBhkqzr8ktl4k6pDkVuZ5JCVjTKt7xqwRTgNmiU9eoZcQSP5MjH7RajCnuaGB6tBHAM4Z9GsFLbOfRPo= 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=o9JXEvwf; 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="o9JXEvwf" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-48374014a77so149654025e9.3 for ; Tue, 10 Mar 2026 02:29:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1773134977; x=1773739777; 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=AYcWbBThtSnaMdWV6+Ti7cq+NwatFUoWBz0VjirVfYk=; b=o9JXEvwfNKyvTAJhilYdgnHQzN4leWHvwNmsVd7A3zBy+PY4GZ89y5FLwloYddcF6E mpLupe3+AGTMEElxDtkicAJ4utGN7qgxIa3/r30NHa8dlnCjN3tMzh41ndB9qCt6u1K0 GuOFQykaaEyodsrqrxVWUkClhw2OcWfJkXv/t9MgGQmSaA+xlBD5knwuOaPR2u75TLkc /1tcbZA/2FYkahizBGPgAYF4fBf7inmHpMHOSzlCRbUz++Dl8BnxIaAdwgLggwZrSl9q dEan+mdiQ+SdwVMrtzFiQC0r95kdFZlWiOlctzP2lNqJ2+4x3DjiyPosFd582Ew1XNiU HdDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773134977; x=1773739777; 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=AYcWbBThtSnaMdWV6+Ti7cq+NwatFUoWBz0VjirVfYk=; b=fs71mTlgmyL2LaAt0t+RdUpfhByP7vQ0aGKKQTYdAHiIkDkd7tp/tOIHvRllDONaAd Y6RRFRhZu3S+CW96Vi4Q8jG5tl7OtJ3+nfPQo1905/Fj4NmoUlmq8ksJIDVRGNFCiTQe E1e8d91uw4oaSBqLyk/EZjhqOCQ23e3ZmriHh1WfgPffhnffhcUF5vRcbRs4m0fE9+8Q f0FhXMZ1wxFEhkBW5Ea4k4A1o8zz4I7c6547ZXKFJIXdnJvgREJyUnzbHZvrS+MW+jh7 RSrmt3o4HfpK2n2anVhStTCY9xNbpS6tjgfAEeH9uxnxbQhK22OwBcHkuAEkAsb8+aYv GMiw== X-Forwarded-Encrypted: i=1; AJvYcCWI7cMEbZhiUs/byT9YJiZNdGwYa0HuHHIx/ALIfnfJVSJ61W5K2XoyLlYGpx0IvZjxfCxC/N6/9di9Tik=@vger.kernel.org X-Gm-Message-State: AOJu0Yzd/n3oRvptt9140GvcDlJIoZUNsCxOX864mIEdGUlEcdKhUph2 7l1wJF/lMw4C+5QpixJbO2BSeURV7/yDKnzjLJMrhHyyzJK6O7aIqTzgkQKVbUnoBJs= X-Gm-Gg: ATEYQzy5Ik3GMriU/LQQSFlDmCfJq80HBcwJvzsuDk6iYmV7R31gxU8TPzXUPbBUw9o iXUGeEUpO6WP2lOUlzydoGCtTtK/JLyKo5+GJcNRvAqHZM8h7bdzxExfdvWLGVF1YpNjKYAVpsT tM07DJpdFxRR2s66winj/yWNKQjgFTtanHnbh1n0Vx7IZ15X2B7afARDk/66FgBnJZ1sJAcSHEf Mu4mWR160kxrZplL6XLD76pcV4/hRmRcqvMmFQC27Dwe29bM06KmFGRA3NoDmWZC4Q0OeDqSWXh 0+2CjFEtosR8IRaUkCXynBcHXUYEmlvy+vRclM2cmFreqo+sHjrEIQdtZcaeqot7tQooKXvZiQ4 cvRgkJNRcQY4e73cA2zsgt5pcxlMWCv5SnoC9MrE1AKtnlbLepJQvVZ68W/TkLxML3DIN/dFI14 3GkmXhmw+8WvwuDzPQkRp9dQc4TCW6820RBWsBznyV4CEOLTaJ/1zoANU1cbndfzXTKluieqduL RiSCw== X-Received: by 2002:a05:600c:3b89:b0:485:3f1c:d8a4 with SMTP id 5b1f17b1804b1-4853f1cda4cmr79633425e9.9.1773134976888; Tue, 10 Mar 2026 02:29:36 -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-48529f019a4sm104214285e9.12.2026.03.10.02.29.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 02:29:36 -0700 (PDT) From: Alexey Charkov Date: Tue, 10 Mar 2026 13:28:35 +0400 Subject: [PATCH v3 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: <20260310-bq25792-v3-11-02f8e232d63b@flipper.net> References: <20260310-bq25792-v3-0-02f8e232d63b@flipper.net> In-Reply-To: <20260310-bq25792-v3-0-02f8e232d63b@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=22912; i=alchark@flipper.net; h=from:subject:message-id; bh=FwG9A84SLXtf/UKZlp7MYYLSt2H9Jv4dNseNtGkkscI=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWSuf5J0Wv/Iz+vGnsUHdarjA7bbTHt/Z88Rhu0fj+/cO CldJeDw/I6JLAxiXAyWYoosc78tsZ1qxDdrl4fHV5g5rEwgQ6RFGhiAgIWBLzcxr9RIx0jPVNtQ z9BQx1jHiIGLUwCmOuclI8PtO/KLV9XMO/bizsGoYw4RmkazlC9Fr+S5ELd80aUSnwtXGP7nd/7 3r5D9Pf9nxRf1q1Ouat7tYY5aLtP8oc/n7eyH5z8zAAA= 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 | 492 +++++++++++++++++++++++++++++= +++- include/linux/mfd/bq257xx.h | 6 +- 2 files changed, 493 insertions(+), 5 deletions(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index 951abd035fc5..0bbb0a8b5f55 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 @@ -18,12 +19,19 @@ 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 + * @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; @@ -47,8 +55,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 @@ -79,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 @@ -110,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 @@ -133,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 @@ -157,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 @@ -186,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 @@ -209,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 @@ -233,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 @@ -256,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 @@ -282,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 @@ -310,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 @@ -335,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 @@ -359,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 @@ -425,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 @@ -437,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) @@ -460,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) @@ -541,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) { @@ -613,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; @@ -653,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 @@ -698,10 +1159,22 @@ static int bq257xx_parse_dt(struct bq257xx_chg *pdat= a, 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; struct bq257xx_device *bq =3D dev_get_drvdata(pdev->dev.parent); + struct bq257xx_plat *plat =3D dev_get_platdata(dev); struct bq257xx_chg *pdata; struct power_supply_config psy_cfg =3D { }; int ret; @@ -713,7 +1186,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 (plat->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 @@ -751,6 +1234,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 b2e38a4a4738..0d568e8b1835 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