From nobody Mon Jun 8 05:26:23 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (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 B29BF313E10 for ; Tue, 2 Jun 2026 20:11:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780431091; cv=none; b=LUNDQTvlky6ZY8n6tDcCuF5fORmg2tRc8bJh6HzQztm89Rn5Z1G4FCqWkPrNLDQIjcLbybEWmYcigUa5usKlZOc0RsmSKuQNUDoLu3fiuxnQFh8GBGYjq24yGTZRddJEP7jdMRkRL4tlqIc7KLPgOUP78OOzUdz9Sl0cnMTooAk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780431091; c=relaxed/simple; bh=223od1A+Cz0XplSlrBZp0RWQ7qf9uUi6RyR8x+K5pfQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=quLlkGZPRiJwOX8axRIyYEtbyaGx96nC2MdOcSvbbhKAS5JGikmSAAs9cly0khbXOQ0e/Lg425l4299mD9ZZLqFolnLwGQTj+eqlhMysrJA2xnZhAYt/1vFwSz8q+ume0MiL+zqOqZPLmLxMOTlrQAoibXPwrvuHScGgZykRuB0= 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=SNATBmuw; arc=none smtp.client-ip=209.85.128.42 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="SNATBmuw" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-490388fd0dbso118601375e9.0 for ; Tue, 02 Jun 2026 13:11:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1780431088; x=1781035888; 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=1tao3RRa4fqWodWHn9YOVIx5KYGzNGLszmBA/8A40dM=; b=SNATBmuw05bjZB08ZeTPhLWM3mY9VQVIc+6n4EWCwrDTb5XkFjoK2JYz8UhKNKkT2W CFPAWrq6/d/s+p7EuJPs1gUzpvofqh0zPaWiDpaqLextwXt3VjRgdcO970asdV80IDIn y7EDK+G6jK3jCKJTIPmQlDkifCY6vwKXv7QuSTWOoDNJp2DEQ+eUgjZU4OOHt2PTAGVN /6wa5fRJE1nFAiOxl1cT3PBTAmDadGH1mr4mFY8jgUQCqXOX/mwkbyZins7/1kw3mCqJ p6wPvVxiGYG1rL/sNBVnk2JkuzNCIxHBsTYGqFWg759/aOEkwFVZreSWaihsAFOP3ocC kIUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780431088; x=1781035888; 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=1tao3RRa4fqWodWHn9YOVIx5KYGzNGLszmBA/8A40dM=; b=d0WXvEvNliGamBlvDJW8QLg3kMOekDzW79h9g5VdonsUoOam+HFRTPM5am+ET0rEZo TwXjKi9FIaTGAd71b3yUoWcneYvKd4AG+hZMSiH/ZOwJNY5D7LZLSdo56M0DPU2opUh+ OLn5ndnkDoALDDY+Mw3ZKhAgi1WI8I1geKK3g98gjt9gsGnzYXXQh9iWgJ5/OUwYMtcQ 8z9DcoXiBUzN+rL8wWIF++vqB4NzAzrGLVXa6KJkqB0FhOhZRJA686Nq4Q5ufvIvuZ9t GwfSA35OS67O9/nkmYNE0Dd/qI90hrREZjUa17YxlgACONRLW5Gyckk5rg08gjG2b2HX RO5w== X-Gm-Message-State: AOJu0YzvAik1oWKr1XLt2XgQ2XvcsQyp87+m3Xsgrre0zsTXww8N/xe6 f7INszK2/MnkNuNwKJn8ZHBKB3F9b3cCuo0uX9P5TdRZo/To3fHr8ANuovGFoqwOQh7++CO09uE QXwJBDsgQog== X-Gm-Gg: Acq92OGR4t4r97yLjBMcMasebBLNbAWJUkBuk40wRl3CgXQyWhkaRc+IxOk2rjj9MDS emKrhtUo8GaC/dZdb/fkY+xIjiyCziOxwlIKTkHnyCnHtvq0P2OUogGb1vCIMttslnl8Gy5p4y0 zb/78zNUmP/4f+mbDLsgV29XVj+CMXIIuncDCRTKOws1U7C6UH0sWhd6u3l/aPBYYZwGEI1l92U PDvjqT3mZdqm08grUWnoQfI3ij+cHliyVA6ymM1AbUsKdt7r0gA0gstKx+bJbcd0VDV42fznuKK TNAEaJUGyJvyP/vtqiC12JjGEMFYm5+Hmld4s4qeZ9FeWvrScOK/DC1KVhpgamga95qRdrNGlCS QQSUN1qUN2TJKOD9YEDfsIvEE3wlmoWJaO4SY5Gkw76Jn452eN3NhRJfG0Hd1oo//8ckG7s53JS bJzafPy1jtLACaZW8PXmxEoGgk3OOP+L/Jy8LMzln8MLlzr+Qqfw4= X-Received: by 2002:a05:600c:a117:b0:490:48df:2793 with SMTP id 5b1f17b1804b1-490b5e64affmr3928395e9.26.1780431088170; Tue, 02 Jun 2026 13:11:28 -0700 (PDT) Received: from alchark-surface.localdomain ([5.194.92.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b63e6720sm2588515e9.13.2026.06.02.13.11.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 13:11:27 -0700 (PDT) From: Alexey Charkov Date: Wed, 03 Jun 2026 00:10:49 +0400 Subject: [PATCH v7 1/7] 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: <20260603-bq25792-v7-1-d487bed276d0@flipper.net> References: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> In-Reply-To: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> To: Chris Morgan , Mark Brown , Sebastian Reichel , Liam Girdwood , Lee Jones Cc: linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1622; i=alchark@flipper.net; h=from:subject:message-id; bh=223od1A+Cz0XplSlrBZp0RWQ7qf9uUi6RyR8x+K5pfQ=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWTJWzzbbHGoPCH5jOhbxmauA4dYvcPNzWdpbsxhutZ5+ 7Ddv7gjHRNZGMS4GCzFFFnmfltiO9WIb9YuD4+vMHNYmUCGSIs0MAABCwNfbmJeqZGOkZ6ptqGe oZGOsY4RAxenAEz1u0qGf/bsU3kDD1amPp7L9Xvvvo9/TvWuZSmsnlbiUv90YYVmby8jw0r5y/q a829Vre0X4Xjarx/jtnNlQoXy1hYzb5YZu3USWQE= 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 09c466052c04..913ca9186bf1 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; }; @@ -145,6 +144,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 device_set_of_node_from_dev(&pdev->dev, pdev->dev.parent); =20 @@ -164,9 +164,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.53.0 From nobody Mon Jun 8 05:26:23 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 EC83C3246FE for ; Tue, 2 Jun 2026 20:11:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780431093; cv=none; b=IdD+Izd1HZvAcEtUpOEz+u4wd2QrhKG6KB8qyUuycAJtABmNq4mLu6T+6qoqFjan2bMexQSy2m1djDiX4VCGn7APNEEHqz53fDCBKeR5Uu/grPzvZEk/xS5XmP1e4L3c0tReVpUNNwpmg6wNkqUihRfFpTzRkrasi3VyGKDGlF4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780431093; c=relaxed/simple; bh=0JqtBpYUnXIfBSOJ9sBFjxb9UBuuSJ3GUR0evn/Js9k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iA6LJRZzm5rsUESBph4UF7vNUcaUi2X+t1OLeCVa2t7yHpM4RVJ6xmAZktcgi4Ry+9acNenzeBXIrMJjX/FsVmP223th+CnkhDlM/sQTKZPqGaIO9XWpu+C+RyGL0LkB6VqHlFH/p0gk2RL0qzQU9cxkLMkvS+yhnrm3vsQLz/I= 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=pj25vQ8Y; arc=none smtp.client-ip=209.85.128.53 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="pj25vQ8Y" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-4908b92904fso66133505e9.0 for ; Tue, 02 Jun 2026 13:11:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1780431090; x=1781035890; 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=ZKgY/LuZvQl+MpRxtJBgscIMUnKIMmUCTQze1Bp636w=; b=pj25vQ8Y8M+jV8MDUXAfilI75khrAQKZslwobjWIQkGY/n+Dq170I0inKcH6bVolaP lZEn7eH3QRsBG1C1tZ6TSPoYGBczyCjW0C+AjZ5XO46eUtWpKrq06fw0Se9U6RuHdyoJ P+wfijgDcxlwG0jFfsvH7VdwTkY2WZXpMbhtGDL7foCHWEWCBtZZ70kNQ6i7fjrsmfG6 Ry1XpPf5cT/nFzyJpuMFgJEhQUUl2EHCnM/aLa/fXPnOpsZS0asPWmLqXCdFI8rOo/Dm sEfpFl1u31LInihReb0ryMjmXiiII1Zl+dVOhh7sod/wexWCn7bWWUd3FGmbAEdBbrFJ ZX3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780431090; x=1781035890; 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=ZKgY/LuZvQl+MpRxtJBgscIMUnKIMmUCTQze1Bp636w=; b=WARrLVF5v1vVX9aeQRfLJmcJqP1r/Sohy4VM/f84myvYOaTbUJ6sOhoqd+S9aCL5Z2 cA/9/V8q6catQ4nUrJnw0TYX6yQjLckmfw2QCYDa98usFcke7QiD/PU0tL0FgdJJnV7E vDK3hme51Va4w6c1m+18g8cdksqFxniDIPnYLZFKfOoaeTFe7kl66ZVxYtGRQ9uR14sC Fe+KVuUoVjDTFtaA32KCBZrohGVKH6m/CuTtRHaXUCPGunx+xjy65I9fhL7LoYz9il7e yBZi2GecN8fIsTa5B4L7DkvFh5UYI6ixvZP1nv4NXInbOnsD99v6w48P/qa/Bewtnpvn AEwA== X-Gm-Message-State: AOJu0YxnkRsT4rZxWpAQo2CHMF8cl7x4tTmnXRKJqg6IY8YOQyrl3fvK InZbnNOI3KViZUf+8KbuV9Rj8EoqsoDWc58RGQV4RcdlvYBFvZrlKwflHSDnwJw+QlI= X-Gm-Gg: Acq92OGzDNK/2EG/M3I8AzR5VGQK+R5KST1cXfyBpzSSHemcNh6xVnxEGdUtqR4dl43 kKWHcvYox6Ixl/gLNw27N/5DUvRIqIgtXPNU+UQuf6RAhUBgo4+8fCgDmxGbVLgSDsWWD6mldnr 2FtIi+wvt4lRFj8RdsZoTd0P9qr50CcUuoUaEV4ixVLzs4NEVWP8oj6XwYbvAQPv097E1Q4XT9Y Y6Ru3Q0Jdda00i4ooXk9kLqIydRMOHuZ1818MgqOMHEN834GezTE1DWT07riKdFqDBSvaS3jdo4 XfM743rjoQQhLPr2i/kqdQVn4EJ/C71rvPGDuKz3Qy8YwKvUQG9iiaxIGPFh7FFkQ6Irg3va8Im 508i3VeZrFh2NLiQNVxitpMUxbxhr9q9fK/Pgz9PhbjE+KqVQ0H/YO7mHS2dwgPeRASe+NkGujU wPCxihp7m5AaMAbJTnBF9ZAYCh+SyZ+0BKsXCxNRdrBP4aybgIU/k= X-Received: by 2002:a05:600c:8184:b0:490:b5a0:ccfe with SMTP id 5b1f17b1804b1-490b610797cmr4064345e9.31.1780431090477; Tue, 02 Jun 2026 13:11:30 -0700 (PDT) Received: from alchark-surface.localdomain ([5.194.92.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b63e6720sm2588515e9.13.2026.06.02.13.11.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 13:11:30 -0700 (PDT) From: Alexey Charkov Date: Wed, 03 Jun 2026 00:10:50 +0400 Subject: [PATCH v7 2/7] 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: <20260603-bq25792-v7-2-d487bed276d0@flipper.net> References: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> In-Reply-To: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> To: Chris Morgan , Mark Brown , Sebastian Reichel , Liam Girdwood , Lee Jones Cc: linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov , stable@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2028; i=alchark@flipper.net; h=from:subject:message-id; bh=0JqtBpYUnXIfBSOJ9sBFjxb9UBuuSJ3GUR0evn/Js9k=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWTJWzx7tYB7af1S72lfHuvaqHH4NRcI3fxyJVxhplHtD PHJ6va3OyayMIhxMViKKbLM/bbEdqoR36xdHh5fYeawMoEMkRZpYAACFga+3MS8UiMdIz1TbUM9 QyMdYx0jBi5OAZjqh74M/90iZilcm3ba/Z6hQIB0uFBs0v1DXcyryq0ZeX6u8fjZPpmRYdrUf5f 9Zs9a7v/z1enwrKB7iryLDqsGLX6jLXv1imVkCjMA X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 The minimal system voltage (VSYSMIN) is meant to protect the battery from dangerous over-discharge. When the device tree provides a value for the minimum design voltage of the battery, the user should not be allowed to set a lower VSYSMIN, as that would defeat the purpose of this protection. Flip the clamping logic when setting VSYSMIN to ensure that battery design voltage is respected. Cc: stable@vger.kernel.org Fixes: 1cc017b7f9c7 ("power: supply: bq257xx: Add support for BQ257XX charg= er") Tested-by: Chris Morgan Reviewed-by: Sebastian Reichel Signed-off-by: Alexey Charkov --- drivers/power/supply/bq257xx_charger.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index 02c7d8b61e82..7ca4ae610902 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -128,9 +128,8 @@ static int bq25703_get_min_vsys(struct bq257xx_chg *pda= ta, int *intval) * @vsys: voltage value to set in uV. * * This function takes a requested minimum system voltage value, clamps - * it between the minimum supported value by the charger and a user - * defined minimum system value, and then writes the value to the - * appropriate register. + * it between the user defined minimum system value and the maximum suppor= ted + * value by the charger, and then writes the value to the appropriate regi= ster. * * Return: Returns 0 on success or error if an error occurs. */ @@ -139,7 +138,7 @@ static int bq25703_set_min_vsys(struct bq257xx_chg *pda= ta, int vsys) unsigned int reg; int vsys_min =3D pdata->vsys_min; =20 - vsys =3D clamp(vsys, BQ25703_MINVSYS_MIN_UV, vsys_min); + vsys =3D clamp(vsys, vsys_min, BQ25703_MINVSYS_MAX_UV); reg =3D ((vsys - BQ25703_MINVSYS_MIN_UV) / BQ25703_MINVSYS_STEP_UV); reg =3D FIELD_PREP(BQ25703_MINVSYS_MASK, reg); =20 --=20 2.53.0 From nobody Mon Jun 8 05:26:23 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 00659356758 for ; Tue, 2 Jun 2026 20:11:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780431098; cv=none; b=Xu3EjUXQ6cxmGFBymxAWFEw0LZgqtL4tO+q79dUg3xvAjfgDbbNq8Q0Rc9e8PthG1Obz0RtAt9mLC6ASsxGWmvk+lPhU70OOqk4xvk235buJRH7nBwNZUBH4dW6W2njKdsQH4tdY+BV9p/OK5yDqdujxbcVKKqlsnQkZlF1RPJY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780431098; c=relaxed/simple; bh=/Ln9LFakNDKoLvwg+rwl9Pq8pfV/yyp8Qn8XzZMduQI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oJlfenEB/Zz7x9BIcyGXbwzHEA6b622Ez7omWg9RKJ4MHQr0s0/OsQ9onD0Vtk1F5XRREYg4ihFk2BnAWl3mUMbYr4xfRLpoojveO28bDz5PKYaVKdTJgHLO5t8oUZCDGZ7CNUfOFlDTzIfYELjCdV4NAHJrjpn25CtiLsPzrxE= 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=4T568e+K; arc=none smtp.client-ip=209.85.128.46 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="4T568e+K" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-49041e84237so96902065e9.1 for ; Tue, 02 Jun 2026 13:11:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1780431092; x=1781035892; 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=ZJ0eMBj31/DmadfkNUO8i3+VOVpXdT7omqYybF6XNp8=; b=4T568e+K96uuDJZYo/gDF1kDpZSUm+4cKXGiVJbKlO7RkfuExVxDfrk+Cgso6SCZp3 qsy+VzoSatwpEYDNTNzsju9nIcGgAZZ5rK8wE102cX8DO2Jf9J4qjvp7ylLjOoByD/w6 7+HUc9bPz/QuOmGglqxB3560k6vNJVt4KbERD2p7+pbUKEGUT33wG1QEXkW1QQfEJ7BN 7501btc7VQi68PK3RCgqTS9DT5SA30rE3JZCuJ2Am7xrJwmOBqfkFPihIH3RpXudPFr/ u0WFlG5xpQ+kbgIlmRTaETV9/x0JwBTXEtqtIseDRa9sBB8MrcRYG1LS9Xnf/RozAdlq S93g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780431092; x=1781035892; 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=ZJ0eMBj31/DmadfkNUO8i3+VOVpXdT7omqYybF6XNp8=; b=bKsPk0VvP/dqCXnci/hBiuWHlGF0aSsoaDpTmK22u8D/IyKq+sBwP1lclRnqc9lOpX OpYC/qhoA/H97k3m020L4IJww7LQuccuHYOzbypZOmjzKgPvM1ZzVRFXbEQ8095gkpMW 6yMhjWZOQNc0/nEA9AH7z0Z8Gd2Znf7TDDWRJ/WkZiK7xCCp28XPwCbDKuE5pCcBz4Tl p1eRhJBOsFpaKygpsNvrLzfSzBXiBK2HxmVl3VgSY84gPugXspdGR2a5npLd/Rb/GFnl 5tAasZ9hrLbg9UWLfp1mRyhZul9FsEvlMCR1QU7Rb9KnLvVGGAj4nuxUzMs/HSllapr+ vR3Q== X-Gm-Message-State: AOJu0YzPrsvyE0EnpG/LLSBrRc7G9tb4zVA5VxH9UhYrcGZWV/uOpzWn Tvl/W8hWn6ENJ/BDa9dDK5ZMy+DbDBf4LGK8gJx5sDT7nUDJ2y9rxsng4d5sGNgo3Z0= X-Gm-Gg: Acq92OEXVMxGFJtJyFzfPTxpbSyt1NZ5nfxOlNkJMbiyXvxkfGrlZhIiTFFLzvcnTSl kFzqAyo6sVo3oXEHrr0pjQmtgCukIGDwByrP1JZ6M2evpdgYEQ5bfBFl5CYEcgUZHryIa1UNY3y 7eVXbST4YIqp1IY8elJIYqeL7xlzGYQ8Noh1uyGFnqYSn/pto0e4R2X0utUpED91gmTMEpQ3qda afE6PClIKOwg8FF7NR3mwgri+hENFUPZX+KEg1MWX2/5f4s2zTE8zQAGWEaXlZfTJ5iVwJ+h7dH rlZGc/duyJC+9cCCL98GQ84AT+IpAzr5FXLZG9wqTQspxo4TNySDhJLVIV0qFC5Wf8ZimhYd/gh 0trLTId1eqMCxJ391YYQ9qEnahTjBTNhsTKk5oHo+lPSOeAg8rWtEINl0H3zGK3NUBZ2aLIDim/ DdlO8Ut+Y66UaGgyad5mpQHV5WStN0uc34Nn+LH58/ApA/P85k7aU= X-Received: by 2002:a05:600c:8b0f:b0:48f:e230:29f5 with SMTP id 5b1f17b1804b1-490b6163925mr2735985e9.16.1780431092442; Tue, 02 Jun 2026 13:11:32 -0700 (PDT) Received: from alchark-surface.localdomain ([5.194.92.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b63e6720sm2588515e9.13.2026.06.02.13.11.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 13:11:32 -0700 (PDT) From: Alexey Charkov Date: Wed, 03 Jun 2026 00:10:51 +0400 Subject: [PATCH v7 3/7] 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: <20260603-bq25792-v7-3-d487bed276d0@flipper.net> References: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> In-Reply-To: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> To: Chris Morgan , Mark Brown , Sebastian Reichel , Liam Girdwood , Lee Jones Cc: linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2056; i=alchark@flipper.net; h=from:subject:message-id; bh=/Ln9LFakNDKoLvwg+rwl9Pq8pfV/yyp8Qn8XzZMduQI=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWTJWzxr/mIv+ztuUe+nqm27fK7/nXTn17OfTyta1lw6e Sljj6mwT8dEFgYxLgZLMUWWud+W2E414pu1y8PjK8wcViaQIdIiDQxAwMLAl5uYV2qkY6Rnqm2o Z2ikY6xjxMDFKQBT3cXA8IfzheD9WT/nub18/aPcXXvngzUuj66UnWR+VqoUtFVc93YOw//az54 boj86fd4yu85w/ofv1bZSMdImR05+OMQVY7ulbj4vAA== X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 Add a field for the default current limit to the bq257xx_info structure and use it instead of the hardcoded value in the probe function. This prepares the driver for allowing different electrical constraints for different chip variants. Tested-by: Chris Morgan Reviewed-by: Sebastian Reichel Signed-off-by: Alexey Charkov --- drivers/power/supply/bq257xx_charger.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index 7ca4ae610902..39718223c3f9 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -18,6 +18,7 @@ struct bq257xx_chg; =20 /** * struct bq257xx_chip_info - chip specific routines + * @default_iindpm_uA: default input current limit in microamps * @bq257xx_hw_init: init function for hw * @bq257xx_hw_shutdown: shutdown function for hw * @bq257xx_get_state: get and update state of hardware @@ -26,6 +27,7 @@ struct bq257xx_chg; * @bq257xx_set_iindpm: set maximum input current (in uA) */ struct bq257xx_chip_info { + int default_iindpm_uA; int (*bq257xx_hw_init)(struct bq257xx_chg *pdata); void (*bq257xx_hw_shutdown)(struct bq257xx_chg *pdata); int (*bq257xx_get_state)(struct bq257xx_chg *pdata); @@ -627,6 +629,7 @@ static const struct power_supply_desc bq257xx_power_sup= ply_desc =3D { }; =20 static const struct bq257xx_chip_info bq25703_chip_info =3D { + .default_iindpm_uA =3D BQ25703_IINDPM_DEFAULT_UA, .bq257xx_hw_init =3D &bq25703_hw_init, .bq257xx_hw_shutdown =3D &bq25703_hw_shutdown, .bq257xx_get_state =3D &bq25703_get_state, @@ -675,7 +678,7 @@ static int bq257xx_parse_dt(struct bq257xx_chg *pdata, "input-current-limit-microamp", &pdata->iindpm_max); if (ret) - pdata->iindpm_max =3D BQ25703_IINDPM_DEFAULT_UA; + pdata->iindpm_max =3D pdata->chip->default_iindpm_uA; =20 return 0; } --=20 2.53.0 From nobody Mon Jun 8 05:26:23 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 0242A2F290A for ; Tue, 2 Jun 2026 20:11:35 +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=1780431097; cv=none; b=IGPj92ekQ52UUqksYVjgiW2ipH+NaJ/6cFck/wETbnYjPHZBy5dnD++yua1zpIcVo1OB731uQbzDgbxpyBl+9zG+Zfi8VCf+ui4ZadE5vBdvSB5/rVDbSQ2+HipLjHf362JyOr/uRkXNxFmrmVpq1wO53P6U31UsiCT72DP63Vk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780431097; c=relaxed/simple; bh=97Sq7wlZ0moS05bCO0Jofm6Gw/WfJ7BvBaZmQBGvEdQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=i50hlHiMNKZzvS76qP/fwrV1CKVB+6QN6jx1u64iXLHjzJQI07o4AZmMUjIMK7NImlJ/i4YxK1+nQRmH2LujiKUUqmVus+ovdVErskzESoOVdNuhaI+NTCbw37jbeMvOqcM4Gy8llhUSQhCBuuvDQLezA6KijgU4Xg40Dpzt4n0= 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=DdqA6CW0; 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="DdqA6CW0" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-490a7678b2dso26265995e9.2 for ; Tue, 02 Jun 2026 13:11:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1780431094; x=1781035894; 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=LbLzHRtPnH05nnLuUM9Mpkj6zyBMwlcuhPC8O/ppmgc=; b=DdqA6CW0VN7f7S1Qg5gGkHcJdAJeDvV32SOdTdkCMjHfsEmcRAp4ylnby6Xci+6ZFh xSh+eIRweW0SDZYWIeteuL6t7jwCMZmDid74HyLGWsdz5UKTyxN4j3d43BU+jGyN2OvQ Y/JrEDRUFFcx7au+PXoU5c/UxPqBSt/TtSAvxiiLum5r2vNwavS780lkTb89aGECZKEw IOkfdW8TEJjpSIKX6gECFuib7P+h2+hHOaPkimvREN/xqE8TPTaCLAkNnPv7Inrnk6uR QnNe6y70LTMmcgpG9Lsw9RTEq5qAsMnxNbkwK+7xM9tOlBKZM370ph9z4eXqt/W2Ufhy DxmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780431094; x=1781035894; 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=LbLzHRtPnH05nnLuUM9Mpkj6zyBMwlcuhPC8O/ppmgc=; b=o7zlbk4h80ASd0V7134FU5WBlk1aQcHrXLdDDiIewwwQq60d+ZHw0Jv07U5GbW5dCw RaCEC2h7hbZyN+SDRcuzUSrZF4jqH1P88E5hrdQemzzu8hQExHzAP5Z89M4wPyZ66qeo tWm4yEhDBLXmVRxSQJi9OAB2/vyfyRhTjxy/w/kj5M25UGfLGwyup552ueMZkiRint4y i15TQgsN1iVSyrONiAOuiopy/HQDbYUi69KQ03e26XcZ4JgKIDTE3W8FUmVjhBsae5fc 4m5NC0dRHIan8sBtIqVU9eHFIA50+hzux9OaQSW3KlfRRznylwnozHX0xdjOAW+EhlXl o6Rw== X-Gm-Message-State: AOJu0YxHyvYD4SVpnVOZIOJUloLT8WlEyezB6CslkXZ/F0vRa6kfYXwG nTCGE7vO+G5uq0dEYw3UWsNEQCKqgbGhQEQqYoLktGfHfVyCW3Lax2ro5UBiapufHlE= X-Gm-Gg: Acq92OHBlrq/J6jQQu9ln+pcrHueUQzHwiMYzo7cqNdaNRiOk214X1kYgOMTMId4sEs TVAVwAX1xF0sJIDPLl/Hx8xgewfgbiZ/lrCWuFiRWIMslRspu9UMZsU6wBw2UgaKMmr4cb5s3U0 BITsLWJ+L1tPtMi6v49fAW0dwMvAYHWaN9aWvbyBqoC4Ms11FJGTW6hySAklw/uZuCZjC+ydTp7 jtmNfW+LejIIk5dUnwnxxP7aOjeJmQYxST2uJaJaL9MBdBDueo4zQrMgPHi9897Kvwa9Yu3Bw8F ZIe/Wsvdgo85Bc6yoZLsVe3RgxMUP0OJCjM3HxD+kayNdJjZC5/EundxX/gI8G9iCfxNQLTnrtw fYTxeWA1PxAkFZEBc0PUmLNHg+SXbjWmPFACz8kOmsPv7K792YIW5gAaat7oX9iXVtFfRtKJMGT +xUYo5Lefuh/AbYZPinAMZxtJQ8BLLtrHrav1DHP6+XDXSHLKegjiSskRRrHNfcg== X-Received: by 2002:a05:600c:c4b8:b0:490:b591:b5a3 with SMTP id 5b1f17b1804b1-490b60e9af0mr4492655e9.32.1780431094413; Tue, 02 Jun 2026 13:11:34 -0700 (PDT) Received: from alchark-surface.localdomain ([5.194.92.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b63e6720sm2588515e9.13.2026.06.02.13.11.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 13:11:34 -0700 (PDT) From: Alexey Charkov Date: Wed, 03 Jun 2026 00:10:52 +0400 Subject: [PATCH v7 4/7] 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: <20260603-bq25792-v7-4-d487bed276d0@flipper.net> References: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> In-Reply-To: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> To: Chris Morgan , Mark Brown , Sebastian Reichel , Liam Girdwood , Lee Jones Cc: linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4242; i=alchark@flipper.net; h=from:subject:message-id; bh=97Sq7wlZ0moS05bCO0Jofm6Gw/WfJ7BvBaZmQBGvEdQ=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWTJWzyLfWB3mSu48eXt6jgX3bb11tpmF1x2Xvz36/PGi afLr7dP6ZjIwiDGxWAppsgy99sS26lGfLN2eXh8hZnDygQyRFqkgQEIWBj4chPzSo10jPRMtQ31 DI10jHWMGLg4BWCqXeYy/BV7ZPR3n9a8iuLnhyc9kd7wZur0d65/jZw2T3DbmfFa9+cehn/G+fX HJz+52lr5vPDehXe5le/DRPyqzY+6RPnOre0XCuIAAA== X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 Move the remaining get/set helper functions to indirect calls via the per-chip bq257xx_chip_info struct. This improves the consistency of the code and prepares the driver to support multiple chip variants with different register layouts and bit definitions. Tested-by: Chris Morgan Reviewed-by: Sebastian Reichel Signed-off-by: Alexey Charkov --- drivers/power/supply/bq257xx_charger.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index 39718223c3f9..0765673728e4 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -22,18 +22,30 @@ struct bq257xx_chg; * @bq257xx_hw_init: init function for hw * @bq257xx_hw_shutdown: shutdown function for hw * @bq257xx_get_state: get and update state of hardware + * @bq257xx_get_ichg: get maximum charge current (in uA) * @bq257xx_set_ichg: set maximum charge current (in uA) + * @bq257xx_get_vbatreg: get maximum charge voltage (in uV) * @bq257xx_set_vbatreg: set maximum charge voltage (in uV) + * @bq257xx_get_iindpm: get maximum input current (in uA) * @bq257xx_set_iindpm: set maximum input current (in uA) + * @bq257xx_get_cur: get battery current from ADC (in uA) + * @bq257xx_get_vbat: get battery voltage from ADC (in uV) + * @bq257xx_get_min_vsys: get minimum system voltage (in uV) */ struct bq257xx_chip_info { int default_iindpm_uA; int (*bq257xx_hw_init)(struct bq257xx_chg *pdata); void (*bq257xx_hw_shutdown)(struct bq257xx_chg *pdata); int (*bq257xx_get_state)(struct bq257xx_chg *pdata); + int (*bq257xx_get_ichg)(struct bq257xx_chg *pdata, int *intval); int (*bq257xx_set_ichg)(struct bq257xx_chg *pdata, int ichg); + int (*bq257xx_get_vbatreg)(struct bq257xx_chg *pdata, int *intval); int (*bq257xx_set_vbatreg)(struct bq257xx_chg *pdata, int vbatreg); + int (*bq257xx_get_iindpm)(struct bq257xx_chg *pdata, int *intval); int (*bq257xx_set_iindpm)(struct bq257xx_chg *pdata, int iindpm); + int (*bq257xx_get_cur)(struct bq257xx_chg *pdata, int *intval); + int (*bq257xx_get_vbat)(struct bq257xx_chg *pdata, int *intval); + int (*bq257xx_get_min_vsys)(struct bq257xx_chg *pdata, int *intval); }; =20 /** @@ -490,22 +502,22 @@ static int bq257xx_get_charger_property(struct power_= supply *psy, break; =20 case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT: - return bq25703_get_iindpm(pdata, &val->intval); + return pdata->chip->bq257xx_get_iindpm(pdata, &val->intval); =20 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX: - return bq25703_get_chrg_volt(pdata, &val->intval); + return pdata->chip->bq257xx_get_vbatreg(pdata, &val->intval); =20 case POWER_SUPPLY_PROP_CURRENT_NOW: - return bq25703_get_cur(pdata, &val->intval); + return pdata->chip->bq257xx_get_cur(pdata, &val->intval); =20 case POWER_SUPPLY_PROP_VOLTAGE_NOW: - return bq25703_get_vbat(pdata, &val->intval); + return pdata->chip->bq257xx_get_vbat(pdata, &val->intval); =20 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX: - return bq25703_get_ichg_cur(pdata, &val->intval); + return pdata->chip->bq257xx_get_ichg(pdata, &val->intval); =20 case POWER_SUPPLY_PROP_VOLTAGE_MIN: - return bq25703_get_min_vsys(pdata, &val->intval); + return pdata->chip->bq257xx_get_min_vsys(pdata, &val->intval); =20 case POWER_SUPPLY_PROP_USB_TYPE: val->intval =3D pdata->usb_type; @@ -633,9 +645,15 @@ static const struct bq257xx_chip_info bq25703_chip_inf= o =3D { .bq257xx_hw_init =3D &bq25703_hw_init, .bq257xx_hw_shutdown =3D &bq25703_hw_shutdown, .bq257xx_get_state =3D &bq25703_get_state, + .bq257xx_get_ichg =3D &bq25703_get_ichg_cur, .bq257xx_set_ichg =3D &bq25703_set_ichg_cur, + .bq257xx_get_vbatreg =3D &bq25703_get_chrg_volt, .bq257xx_set_vbatreg =3D &bq25703_set_chrg_volt, + .bq257xx_get_iindpm =3D &bq25703_get_iindpm, .bq257xx_set_iindpm =3D &bq25703_set_iindpm, + .bq257xx_get_cur =3D &bq25703_get_cur, + .bq257xx_get_vbat =3D &bq25703_get_vbat, + .bq257xx_get_min_vsys =3D &bq25703_get_min_vsys, }; =20 /** --=20 2.53.0 From nobody Mon Jun 8 05:26:23 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 29A453546F0 for ; Tue, 2 Jun 2026 20:11:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780431100; cv=none; b=HWCN5rfzeOQIyCh9ikWXBg+WsWX4lV68TSXxVHv0JX4fytpHLSLE91tExQpcVMRoCzLv7PfJFxu1dPSAurGtk2uF0XYKx+GEqJ+JwS3hQE9Y/cjDqLjmKPCccbNKikG9gJMWknMlS94wjfBsmX4w54GxuXEmjTQ2C+9tiBCaOpE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780431100; c=relaxed/simple; bh=QX6okppMDyrxTZ7OSaWmNrFDIXP96tCcnvzzlwPJ6Rw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Vgn60QPO8x8JB5pU6/JmWX6o3LqdczFvtpi7St6wtqMcI0RpRvs5Nhzb3efhgXCxqZX0gv0PJliw7M2cI9vpnxGtW1DNMV/bwQdWrrUITIvVatKg3Ou7vwKGjZ0LbMcavfufVaI78ejRzI2JCQOmt9XZN7vbn26vRikK59WiLXk= 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=ghw6GBtX; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=flipper.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flipper.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=flipper.net header.i=@flipper.net header.b="ghw6GBtX" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-490aaeabdb4so16732875e9.1 for ; Tue, 02 Jun 2026 13:11:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1780431096; x=1781035896; 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=aA0GAlxgKtzqwruXUmo8+gBxnOZJJsH0+VpSj9nEF8w=; b=ghw6GBtXWopXQ1dgGZj+xPgvtVD6W05Ne6B9iaPE8UuX8jR8CZ0/crrGPrpSCce++3 XTIYQeqwadhhWpxltdvRFBkV4Y9nHnVqIJ/yBDHzsuNnjvvfuIRs+QR6QmzTQQm68xab fvuSq+ELYXpGgIVq86OYGkNMEM4A04ZpoQidR9cb1GvsQepr9TUooESx937aRFUsvYIB LdrInhpwFdf5VCuyV4TWkL2c9hR5PTccjTmNDYK3NbpqhAAZZblCItSr6RLdPcoCuIwf uUGbK3W6q/NYvfKIKFcV1krwYRJSKJn2XP5Am45x992x6tpc39jh9Q0Q9KKrfyfSNc/r 8i5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780431096; x=1781035896; 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=aA0GAlxgKtzqwruXUmo8+gBxnOZJJsH0+VpSj9nEF8w=; b=H0KiX9Jw8KTNWbRsGHTFOwX2Yp6fKoqGUrtutvdSonjjlYhh1RdytDp5Lq9Y+cNleX SCH+IL/+FGd/OM03l0jAWEOBQHQltiniKWtqqxfd4BLkvKDiiJoU25jr93/ZnsFvEO2C HaKK8mz1AdlofBmz4XkkiNnU3kLXS6CiZ0wtTDKQFwqJqWHXJ6ghLptXTe59bJ2NrnN3 pmxMXsvWMFVSBWMBeZbnBvDvwGUe7RGxCjb2FfwelJGAPQ2hejnSA2IwSQy4+z69g4CB nkIUVwJgl69J/c6jxJDtOowstDiIFtqUpiCUVZANd9KDEr9j9YBUCpd3aNHnStutP4TR dxPQ== X-Gm-Message-State: AOJu0YzfnxrTlq3pyXUG7nyvF4fl2z2JD5XDiqkvpDQstarVtysPBzhx TrXy0MXp7XzJPRcud4WebbvjJEpp7BUPwwhM6de9FZaeIJ/o9SZ49jBEuxvquEYQtcM= X-Gm-Gg: Acq92OH8GfqXXDqufTmJprK3bNXhH/j/ApVN67rfOI683ZAKumrnuMQioN278kddWSt 4F/zBePiAv79gkxJxsOy4jNjrB6yEp7g4k0PINyKmZUbH9wK8O/DUIec+ko+ATkrj1r4lwz0ZQD WCUeGBdXfzaYwAueOyLWzgvLueVlx17pUNv1WthXtiTTffeeIx4arIMCANEbGcHbzptrshRekde vQC9CN9v2jBJFQrwGYmaDQIB64TyZ1tYY5SPdtBJy81VmCIyFdGyZLD3odvgEUv1gUsJdagCoOJ FBtoVWZCp77hmgkJkvJbZwHciv1B+vDph1+nxmKUS7f6WFjObKSxnRBbc1U6aiSUfjtRUTddUkw uE595cZ9MpBQtNYp/uoYpbaGh3USod9yL5tHDcv4IlaNT5vUqRs3mfZbF39oEPkJZhwaJ3rGCaj xwnuVldoIJoElZJb1BOgLOrNP6y0Im0aKgcak5aRtGL7gUfPnBkbk= X-Received: by 2002:a05:600c:6385:b0:490:46df:a87a with SMTP id 5b1f17b1804b1-490b5e73e7dmr6125765e9.1.1780431096457; Tue, 02 Jun 2026 13:11:36 -0700 (PDT) Received: from alchark-surface.localdomain ([5.194.92.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b63e6720sm2588515e9.13.2026.06.02.13.11.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 13:11:36 -0700 (PDT) From: Alexey Charkov Date: Wed, 03 Jun 2026 00:10:53 +0400 Subject: [PATCH v7 5/7] 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: <20260603-bq25792-v7-5-d487bed276d0@flipper.net> References: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> In-Reply-To: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> To: Chris Morgan , Mark Brown , Sebastian Reichel , Liam Girdwood , Lee Jones Cc: linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3105; i=alchark@flipper.net; h=from:subject:message-id; bh=QX6okppMDyrxTZ7OSaWmNrFDIXP96tCcnvzzlwPJ6Rw=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWTJWzw7ULjc8EP5JC2/FXU/vcKSLBz0xafL/Oef8VW6z GjjH7dfHRNZGMS4GCzFFFnmfltiO9WIb9YuD4+vMHNYmUCGSIs0MAABCwNfbmJeqZGOkZ6ptqGe oZGOsY4RAxenAEx1wCpGhnlqB7st5qls9NDmPChv+k6xf1/8NRFWzlMLa/S0PttpODP8FUmrSxT WNjKzuvzwvaHPvHwp1ZByjvT/zx0vavyenubECQA= X-Developer-Key: i=alchark@flipper.net; a=openpgp; fpr=9DF6A43D95320E9ABA4848F5B2A2D88F1059D4A5 The driver currently reports the 'charging' and 'overvoltage' states based on a logical expression in the get_charger_property() wrapper function. This doesn't scale well to other chip variants, which may have a different number and type of hardware reported conditions which fall into these broad power supply states. Move the logic for determining 'charging' and 'overvoltage' states into chip-specific accessors, which can be overridden by each variant as needed. This helps keep the get_charger_property() wrapper function chip-agnostic while allowing for new chip variants to be added bringing their own logic. Tested-by: Chris Morgan Reviewed-by: Sebastian Reichel Signed-off-by: Alexey Charkov --- drivers/power/supply/bq257xx_charger.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index 0765673728e4..9c082865e745 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -54,8 +54,10 @@ struct bq257xx_chip_info { * @bq: parent MFD device * @charger: power supply device * @online: charger input is present + * @charging: charger is actively charging the battery * @fast_charge: charger is in fast charge mode * @pre_charge: charger is in pre-charge mode + * @overvoltage: overvoltage fault detected * @ov_fault: charger reports over voltage fault * @batoc_fault: charger reports battery over current fault * @oc_fault: charger reports over current fault @@ -71,8 +73,10 @@ struct bq257xx_chg { struct bq257xx_device *bq; struct power_supply *charger; bool online; + bool charging; bool fast_charge; bool pre_charge; + bool overvoltage; bool ov_fault; bool batoc_fault; bool oc_fault; @@ -106,8 +110,10 @@ static int bq25703_get_state(struct bq257xx_chg *pdata) pdata->online =3D reg & BQ25703_STS_AC_STAT; pdata->fast_charge =3D reg & BQ25703_STS_IN_FCHRG; pdata->pre_charge =3D reg & BQ25703_STS_IN_PCHRG; + pdata->charging =3D pdata->fast_charge || pdata->pre_charge; pdata->ov_fault =3D reg & BQ25703_STS_FAULT_ACOV; pdata->batoc_fault =3D reg & BQ25703_STS_FAULT_BATOC; + pdata->overvoltage =3D pdata->ov_fault || pdata->batoc_fault; pdata->oc_fault =3D reg & BQ25703_STS_FAULT_ACOC; =20 return 0; @@ -478,14 +484,14 @@ static int bq257xx_get_charger_property(struct power_= supply *psy, case POWER_SUPPLY_PROP_STATUS: if (!pdata->online) val->intval =3D POWER_SUPPLY_STATUS_DISCHARGING; - else if (pdata->fast_charge || pdata->pre_charge) + else if (pdata->charging) val->intval =3D POWER_SUPPLY_STATUS_CHARGING; else val->intval =3D POWER_SUPPLY_STATUS_NOT_CHARGING; break; =20 case POWER_SUPPLY_PROP_HEALTH: - if (pdata->ov_fault || pdata->batoc_fault) + if (pdata->overvoltage) val->intval =3D POWER_SUPPLY_HEALTH_OVERVOLTAGE; else if (pdata->oc_fault) val->intval =3D POWER_SUPPLY_HEALTH_OVERCURRENT; --=20 2.53.0 From nobody Mon Jun 8 05:26:23 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 EF5B436D51B for ; Tue, 2 Jun 2026 20:11:39 +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=1780431101; cv=none; b=aJ2Ce3t8LbHyg1LGph/XsdsvS8vinkDPryzkyw2cfqF1BWGkv9BH4Y3CWfL14WB711rdS/yr3ot/wxeqnRbpVOaI+yBdAOJyWCs9Nzp+HXPnATEVn69kHQ1GU8RqonlfKFRLFB8+js+nCSfEEzQrS10f57y/nvW7nsmR8RgtwMM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780431101; c=relaxed/simple; bh=Vi8lBOp630ilsbWu7TQVgNwOksr7IIsbE6AqM8rs6Ns=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KCjy2DGlfPH3PIVnBVF8O57wKScsidykgWGYlfSQodnnO6rUm3nukaEZCV5KfHy9WeWVRqIk2ghgyqJdff0FpLJ3HVs/N+tfQ+AzVOR5NViJmD7DzpWjTwc9DsOCbLK9m6rFpCkGQ1SXRcW3Q7/RXHzvB7UD0ln2sRV1beqV5o8= 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=q2G5AtRd; 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="q2G5AtRd" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-49041e84237so96902725e9.1 for ; Tue, 02 Jun 2026 13:11:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1780431098; x=1781035898; 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=FqOFWfl1z1GfCJI9RlnRCpt/iBEpv3vNYTRFI/Bs01A=; b=q2G5AtRdqUcC7nCU4UMPFh2YpYcD+Y7SZByEqm0L7wHN1iOYpuY8bLW+MOaGuOmBY3 AYn3XaxapfG9akOZ0Jb5iD7deTmpb6uCiG4mJ5LorSefoz66SY9nK0WOludRutEYbiNq JlwtQeH3dVPYzqVm1LH8IKcbdKhaqx4PV+ixSR6ZR9Fki6rzK30vlO08biovPu7WG2Rx CNWkfpdcppKhlqFR2XPcck/oF/V04EcJMD/r1RHpK+evzSiOwzCTZHFC3MMiV3MOl1b6 EnAk1P/cQDBnvkYKHPMWwPHkBmcZrFOM0DheusC1SVCWaqWi0G2PDA05n00vX3fr2MSW mYOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780431098; x=1781035898; 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=FqOFWfl1z1GfCJI9RlnRCpt/iBEpv3vNYTRFI/Bs01A=; b=dikh1eQGG0QdnHYdAb2NrvHvEhLPefqX1RIep6Cc+DIqFzojD2EqFl1RCwoAHlrYjJ wCBQSWsO5EI+bt7F92MXtHJjDRsiBbtn5tep+TbowX9HsPrhvXFfw1to5C8QZpfjX+8Z DiHvNgpwJdov/v8y81FbiZfe81owsKPbgEJ9IlQdco/bPo5s/wLwgQyRftYDRCEYmF1p IGbE7EHwowKrdbD/ERxnSpnkpvzECumODvoQvIHI0zp6wjNRlzZeNecwolrG3oBryzW5 Sm4ysgwoWWb4aYfVGZwlUIBUJiAX8bDRsSzhbaQBoK43I44ae0P96GkEBKvtuoHZoH/j OaYw== X-Gm-Message-State: AOJu0YwF1qQ2447hn0BXUJYg2mE6flECqOgF46n7x88UjdOzKWXeRmmq NbQB62+eUreZqHe3vBcOyCZ74GFgRBPxvVXHR0WrMLuEj2cG3KLelC/D3bjGXYd3zkw= X-Gm-Gg: Acq92OHjLtZOljN4T4gYX77lZY8H98Bord4RPJ4xYWvRsdx7h5bmUuXsDpCMykC1vD3 ZpvK+2qhe5kpIx7wXLaeS1EiFYvLxFKpFlCoGif+wvvaJZyRo7mYhgT9goqX9ARwMVWA1kS/NcO Jdr2v2LDx2FtzPmKNoMqRyab5e9sKz6J743UOLqsvZ+uNoK6Nz6dVEOVwii3w+0t09d22ZLBitD xw071r7CpMwT+w6D8PVJVu3H7HAFPxVu/npck4O/vyp/GwJw7MBYs2i5zz3NcKbI/LUptvtM5ge QrPPocm7EbmlPZOSpbJqUwl07xV3SktxTOEyKvul5cNjGkUd1uSmKME75QrSDuI6cugc8T25eRU ijumUmipPa14WeNpqTqnByn8BR4RC0oS4PsSWuZz4jBc5yzKWmahbowGB6n9C1RAm4368eaE2Iu TiAgZcnX+v0cZIaANVJyllBDWuGrc4z/0av+gyBAxQbUmxBHGSYL0= X-Received: by 2002:a05:600c:4509:b0:490:4b89:5372 with SMTP id 5b1f17b1804b1-490b613c9cfmr2628325e9.11.1780431098383; Tue, 02 Jun 2026 13:11:38 -0700 (PDT) Received: from alchark-surface.localdomain ([5.194.92.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b63e6720sm2588515e9.13.2026.06.02.13.11.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 13:11:38 -0700 (PDT) From: Alexey Charkov Date: Wed, 03 Jun 2026 00:10:54 +0400 Subject: [PATCH v7 6/7] 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: <20260603-bq25792-v7-6-d487bed276d0@flipper.net> References: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> In-Reply-To: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> To: Chris Morgan , Mark Brown , Sebastian Reichel , Liam Girdwood , Lee Jones Cc: linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5043; i=alchark@flipper.net; h=from:subject:message-id; bh=Vi8lBOp630ilsbWu7TQVgNwOksr7IIsbE6AqM8rs6Ns=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWTJWzyf3xwg9UG1av6tOUcdLHNUtstefKRyJ7naNVPK4 oTozCynjoksDGJcDJZiiixzvy2xnWrEN2uXh8dXmDmsTCBDpEUaGICAhYEvNzGv1EjHSM9U21DP 0EjHWMeIgYtTAKZ6fRYjw1uZ6uumO6e4bv0vcch77uOOrMf5TDP5r/h9uCftcOtg6jSG/9Ercni l7qqsMSrwntbo235hVoePkNw62yUL2u3jizW28wEA 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 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 913ca9186bf1..fec75b23cd40 100644 --- a/drivers/regulator/bq257xx-regulator.c +++ b/drivers/regulator/bq257xx-regulator.c @@ -31,6 +31,32 @@ static int bq25703_vbus_get_cur_limit(struct regulator_d= ev *rdev) return FIELD_GET(BQ25703_OTG_CUR_MASK, reg) * BQ25703_OTG_CUR_STEP_UA; } =20 +static int bq25792_vbus_get_cur_limit(struct regulator_dev *rdev) +{ + struct regmap *regmap =3D rdev_get_regmap(rdev); + int ret; + unsigned int reg; + + ret =3D regmap_read(regmap, BQ25792_REG0D_IOTG_REGULATION, ®); + if (ret) + return ret; + return FIELD_GET(BQ25792_REG0D_IOTG_MASK, reg) * BQ25792_OTG_CUR_STEP_UA; +} + +static int bq25792_vbus_get_voltage_sel(struct regulator_dev *rdev) +{ + struct regmap *regmap =3D rdev_get_regmap(rdev); + __be16 reg; + int ret; + + ret =3D regmap_raw_read(regmap, BQ25792_REG0B_VOTG_REGULATION, + ®, sizeof(reg)); + if (ret) + return ret; + + return FIELD_GET(BQ25792_REG0B_VOTG_MASK, be16_to_cpu(reg)); +} + /* * Check if the minimum current and maximum current requested are * sane values, then set the register accordingly. @@ -54,6 +80,37 @@ static int bq25703_vbus_set_cur_limit(struct regulator_d= ev *rdev, FIELD_PREP(BQ25703_OTG_CUR_MASK, reg)); } =20 +static int bq25792_vbus_set_cur_limit(struct regulator_dev *rdev, + int min_uA, int max_uA) +{ + struct regmap *regmap =3D rdev_get_regmap(rdev); + unsigned int reg; + + if ((min_uA > BQ25792_OTG_CUR_MAX_UA) || + (max_uA < BQ25792_OTG_CUR_MIN_UA)) + return -EINVAL; + + reg =3D (max_uA / BQ25792_OTG_CUR_STEP_UA); + + /* Catch rounding errors since our step is 40000uA. */ + if ((reg * BQ25792_OTG_CUR_STEP_UA) < min_uA) + return -EINVAL; + + return regmap_write(regmap, BQ25792_REG0D_IOTG_REGULATION, + FIELD_PREP(BQ25792_REG0D_IOTG_MASK, reg)); +} + +static int bq25792_vbus_set_voltage_sel(struct regulator_dev *rdev, + unsigned int sel) +{ + struct regmap *regmap =3D rdev_get_regmap(rdev); + __be16 reg; + + reg =3D cpu_to_be16(FIELD_PREP(BQ25792_REG0B_VOTG_MASK, sel)); + return regmap_raw_write(regmap, BQ25792_REG0B_VOTG_REGULATION, + ®, sizeof(reg)); +} + static int bq25703_vbus_enable(struct regulator_dev *rdev) { struct bq257xx_reg_data *pdata =3D rdev_get_drvdata(rdev); @@ -101,6 +158,34 @@ static const struct regulator_desc bq25703_vbus_desc = =3D { .vsel_mask =3D BQ25703_OTG_VOLT_MASK, }; =20 +static const struct regulator_ops bq25792_vbus_ops =3D { + /* No GPIO for enabling the OTG regulator */ + .enable =3D regulator_enable_regmap, + .disable =3D regulator_disable_regmap, + .is_enabled =3D regulator_is_enabled_regmap, + .list_voltage =3D regulator_list_voltage_linear, + .get_voltage_sel =3D bq25792_vbus_get_voltage_sel, + .set_voltage_sel =3D bq25792_vbus_set_voltage_sel, + .get_current_limit =3D bq25792_vbus_get_cur_limit, + .set_current_limit =3D bq25792_vbus_set_cur_limit, +}; + +static const struct regulator_desc bq25792_vbus_desc =3D { + .name =3D "vbus", + .of_match =3D of_match_ptr("vbus"), + .regulators_node =3D of_match_ptr("regulators"), + .type =3D REGULATOR_VOLTAGE, + .owner =3D THIS_MODULE, + .ops =3D &bq25792_vbus_ops, + .min_uV =3D BQ25792_OTG_VOLT_MIN_UV, + .uV_step =3D BQ25792_OTG_VOLT_STEP_UV, + .n_voltages =3D BQ25792_OTG_VOLT_NUM_VOLT, + .enable_mask =3D BQ25792_REG12_EN_OTG, + .enable_reg =3D BQ25792_REG12_CHARGER_CONTROL_3, + .enable_val =3D BQ25792_REG12_EN_OTG, + .disable_val =3D 0, +}; + /* Get optional GPIO for OTG regulator enable. */ static void bq257xx_reg_dt_parse_gpio(struct platform_device *pdev) { @@ -141,6 +226,7 @@ static void bq257xx_reg_dt_parse_gpio(struct platform_d= evice *pdev) static int bq257xx_regulator_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; + struct bq257xx_device *bq =3D dev_get_drvdata(pdev->dev.parent); struct bq257xx_reg_data *pdata; struct device_node *np =3D dev->of_node; struct regulator_config cfg =3D {}; @@ -152,7 +238,17 @@ static int bq257xx_regulator_probe(struct platform_dev= ice *pdev) if (!pdata) return -ENOMEM; =20 - pdata->desc =3D bq25703_vbus_desc; + switch (bq->type) { + case BQ25703A: + pdata->desc =3D bq25703_vbus_desc; + break; + case BQ25792: + pdata->desc =3D bq25792_vbus_desc; + break; + default: + return dev_err_probe(&pdev->dev, -EINVAL, + "Unsupported device type\n"); + } =20 platform_set_drvdata(pdev, pdata); bq257xx_reg_dt_parse_gpio(pdev); --=20 2.53.0 From nobody Mon Jun 8 05:26:23 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 596CA375F95 for ; Tue, 2 Jun 2026 20:11:42 +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=1780431104; cv=none; b=X79wjQ6KJmMeQxQShxfaAtePnaj+iME694dsipfvqDF+04D0BBM1TJQzj/Bo9MuYtiAdx4m9T/hFFfuJpK6UKJC5NjKVUucWzTU4FSaKTh9mlIY6aU8YyQ8tLFltZ+/qrq6Nkq+pCSB7SWf/pXvQ+fvIOJW/WgY/U0qyhFQ8pAw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780431104; c=relaxed/simple; bh=/fVBmG3pmMKGALtVvTpYeCS9ORu92oU+m2HRFoAvhO0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WFs8jpJuf0mj7td6oCbsDZVeBc10+c+SXokl8Muxuw8NzB7+zYNfiZbbdwdw3TlOWqtsZbB4O90+N1DJhaxXPi54VbzxbVJYG0quLzhFUchIlTli537Vmo4gF3VTpQsB3UnOVJQ+V8AxB7iY/DP+wixMGZ9RAVhE8T4+hDCsIys= 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=y3MeGbCO; 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="y3MeGbCO" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-490388fd0dbso118602375e9.0 for ; Tue, 02 Jun 2026 13:11:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=flipper.net; s=google; t=1780431101; x=1781035901; 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=mhj/ojkVt6E05/4dVLAx3+2ix9jxvERKRunvW8ZUReg=; b=y3MeGbCOVY1eVEBiASiCHCNqdE5rIjPMCfs9k1cLdpLUB+rQwWmbXmSj9gKHy/C620 8N/+l3y4/uEWDP/zrzIxG+xb4GiBWISFOYsx++0kq98aOpLbxda0NRNjlaUHPN1Uwenf LVsu70KqUzmsLTKxegtt7tRS2KIMioh4Wm5xrmMNWMM9EndiOJHFNW4J2fLli5n8N4VB yupHC3XoAW8C3GfOglplThnmhY6cVfgeBprSwg+bihz96mU3ifafWBXQKRfpuS0ywd1S FWIi/PR34jCZnmceRFA9no8Gi1neubgYMO9oaLLQgfSQpw2nmgbwPVAbVnsDp/YNtPA+ fCLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780431101; x=1781035901; 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=mhj/ojkVt6E05/4dVLAx3+2ix9jxvERKRunvW8ZUReg=; b=eXk6DtLkpWgsBN0/cmeZ2Tool7kJGkP5m8XmNm7Lb0sBs58T8mUEzrb51RlW0X7OIT P6nKEsCpAikjqUTuUGeVUHzTMVUbUJdz6PJdJJzwmiQyvGUmoIaNUaWfh1Rw7cdpswts 6YUqkPHZKZOF84Quq8LwQ5r4QtTZlkKxstWe5318ZcRfsqAuQJmep81XHTky9Z7e5ulg +C/QvvGp0VM5S0qlxiKNcHRRCsUEO2taxgA0DT8bWijSXgeQKZMlIei7qv8p3pzrytBG 9CGlrvFxgYTykGaBCOXm9Wmld9UbRIf0OwryDC25vGCS32fIk4inJQ7SWdk7bIcdc1fB zF1w== X-Gm-Message-State: AOJu0YwYabm9PBQetG1TXynqeflCYlrgDw+JGfXOT1cjmKMdX0h8QiHC fxOqy1cNVuSGaYqd2UplEl1k+0KV1hs1BA2226N+NQu29uv6w5HaEOUtsyehmAKF+iY= X-Gm-Gg: Acq92OHa/Q1H14oC20BfRWBgixvzGvnynKYBZpRcAhKH2yQB21Rp6+D56rPEp8wpyfY llbOWngMgpwQw8anwRffty3j/cHDtmyqh8Hf7R8+XVSxbTt7OGbguijSsBMO84YzgRth47RX2Ol PVajGXORyundoPqEE7KXjt8Wn3mlLv1CmJGTOLTKaYrt57qkzvbRzGBGOgo9OrWmvQbQW/mK9Km x8yHkntmMd5qcuMe4z8B77WS7cwNwPuJmZlbWVUWWnCbEOHzALkhVI+DVogV11XpX71X4nUsp4m Vm6feZWVqZeWpu2jA+fPgJ1kA1sWt/pBHA/yfbXQgs0fhxkjowbN79QPFK2/SRVh/9QOzH77cNX y3oHHN358xPZxOTsSBGW46jSf9wVHrPWt5Xhd/W1w8OXjKVEifcmKMiUZFRJc36B8WghwrWnWIL Bk6UP1Jq3AvIXUVPqzST7oHooKVa4AqN65hJhZrDCLcp44Kd5we8nEtQIpKVhFDw== X-Received: by 2002:a05:600c:468f:b0:490:44eb:c1e5 with SMTP id 5b1f17b1804b1-490b5e8cc4cmr4607765e9.31.1780431100572; Tue, 02 Jun 2026 13:11:40 -0700 (PDT) Received: from alchark-surface.localdomain ([5.194.92.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b63e6720sm2588515e9.13.2026.06.02.13.11.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 13:11:40 -0700 (PDT) From: Alexey Charkov Date: Wed, 03 Jun 2026 00:10:55 +0400 Subject: [PATCH v7 7/7] 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: <20260603-bq25792-v7-7-d487bed276d0@flipper.net> References: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> In-Reply-To: <20260603-bq25792-v7-0-d487bed276d0@flipper.net> To: Chris Morgan , Mark Brown , Sebastian Reichel , Liam Girdwood , Lee Jones Cc: linux-kernel@vger.kernel.org, Sebastian Reichel , linux-pm@vger.kernel.org, Alexey Charkov X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=22570; i=alchark@flipper.net; h=from:subject:message-id; bh=/fVBmG3pmMKGALtVvTpYeCS9ORu92oU+m2HRFoAvhO0=; b=owGbwMvMwCW2adGNfoHIK0sZT6slMWTJWzwPC7oR03so8fQqqx1pp770z0s9cmH/jA98V0okL 95dpuDL0DGRhUGMi8FSTJFl7rcltlON+Gbt8vD4CjOHlQlkiLRIAwMQsDDw5SbmlRrpGOmZahvq GRrpGOsYMXBxCsBU33jPyPC/fn2w346bPPUZ1+dFW2/qL1swRTZUQ+/hu7JAY105bjtGhsdb8rr uPXMprT+vJvumS0dZbvrBN7JxS87e8rLjkpxykRsA 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. Signed-off-by: Alexey Charkov --- drivers/power/supply/bq257xx_charger.c | 528 +++++++++++++++++++++++++++++= +++- include/linux/mfd/bq257xx.h | 14 + 2 files changed, 541 insertions(+), 1 deletion(-) diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/= bq257xx_charger.c index 9c082865e745..7d02169248b1 100644 --- a/drivers/power/supply/bq257xx_charger.c +++ b/drivers/power/supply/bq257xx_charger.c @@ -5,6 +5,7 @@ */ =20 #include +#include #include #include #include @@ -88,6 +89,53 @@ struct bq257xx_chg { u32 vsys_min; }; =20 +/** + * bq25792_read16() - Read a 16-bit value from device register + * @pdata: driver platform data + * @reg: register address to read from + * @val: pointer to store the register value + * + * Read a 16-bit big-endian value from the BQ25792 device via regmap + * and convert to CPU byte order. + * + * Return: Returns 0 on success or error on failure to read. + */ +static int bq25792_read16(struct bq257xx_chg *pdata, unsigned int reg, u16= *val) +{ + __be16 regval; + int ret; + + ret =3D regmap_raw_read(pdata->bq->regmap, reg, ®val, sizeof(regval)); + if (ret) + return ret; + + *val =3D be16_to_cpu(regval); + return 0; +} + +/** + * bq25792_write16() - Write a 16-bit value to device register + * @pdata: driver platform data + * @reg: register address to write to + * @val: 16-bit value to write in CPU byte order + * + * Convert the value to big-endian and write a 16-bit value to the + * BQ25792 device via regmap. + * + * Return: Returns 0 on success or error on failure to write. + */ +static int bq25792_write16(struct bq257xx_chg *pdata, unsigned int reg, u1= 6 val) +{ + __be16 regval =3D cpu_to_be16(val); + int ret; + + ret =3D regmap_raw_write(pdata->bq->regmap, reg, ®val, sizeof(regval)); + if (ret) + return ret; + + return 0; +} + /** * bq25703_get_state() - Get the current state of the device * @pdata: driver platform data @@ -119,6 +167,43 @@ static int bq25703_get_state(struct bq257xx_chg *pdata) return 0; } =20 +/** + * bq25792_get_state() - Get the current state of the device + * @pdata: driver platform data + * + * Get the current state of the BQ25792 charger by reading status + * registers. Updates the online, charging, overvoltage, and fault + * status fields in the driver data structure. + * + * Return: Returns 0 on success or error on failure to read device. + */ +static int bq25792_get_state(struct bq257xx_chg *pdata) +{ + unsigned int reg; + int ret; + + ret =3D regmap_read(pdata->bq->regmap, BQ25792_REG1B_CHARGER_STATUS_0, &r= eg); + if (ret) + return ret; + + pdata->online =3D reg & BQ25792_REG1B_PG_STAT; + + ret =3D regmap_read(pdata->bq->regmap, BQ25792_REG1C_CHARGER_STATUS_1, &r= eg); + if (ret) + return ret; + + pdata->charging =3D reg & BQ25792_REG1C_CHG_STAT_MASK; + + ret =3D regmap_read(pdata->bq->regmap, BQ25792_REG20_FAULT_STATUS_0, ®= ); + if (ret) + return ret; + + pdata->overvoltage =3D reg & BQ25792_REG20_OVERVOLTAGE_MASK; + pdata->oc_fault =3D reg & BQ25792_REG20_OVERCURRENT_MASK; + + return 0; +} + /** * bq25703_get_min_vsys() - Get the minimum system voltage * @pdata: driver platform data @@ -142,6 +227,31 @@ static int bq25703_get_min_vsys(struct bq257xx_chg *pd= ata, int *intval) return ret; } =20 +/** + * bq25792_get_min_vsys() - Get the minimum system voltage + * @pdata: driver platform data + * @intval: pointer to store the minimum voltage value + * + * Read the current minimum system voltage setting from the device + * and return it in microvolts. + * + * Return: Returns 0 on success or error on failure to read. + */ +static int bq25792_get_min_vsys(struct bq257xx_chg *pdata, int *intval) +{ + unsigned int reg; + int ret; + + ret =3D regmap_read(pdata->bq->regmap, BQ25792_REG00_MIN_SYS_VOLTAGE, &re= g); + if (ret) + return ret; + + reg =3D FIELD_GET(BQ25792_REG00_VSYSMIN_MASK, reg); + *intval =3D (reg * BQ25792_MINVSYS_STEP_UV) + BQ25792_MINVSYS_MIN_UV; + + return ret; +} + /** * bq25703_set_min_vsys() - Set the minimum system voltage * @pdata: driver platform data @@ -166,6 +276,29 @@ static int bq25703_set_min_vsys(struct bq257xx_chg *pd= ata, int vsys) reg); } =20 +/** + * bq25792_set_min_vsys() - Set the minimum system voltage + * @pdata: driver platform data + * @vsys: voltage value to set in uV + * + * Set the minimum system voltage by clamping the requested value + * between device limits and writing to the appropriate register. + * + * Return: Returns 0 on success or error on failure to write. + */ +static int bq25792_set_min_vsys(struct bq257xx_chg *pdata, int vsys) +{ + unsigned int reg; + int vsys_min =3D pdata->vsys_min; + + vsys =3D clamp(vsys, vsys_min, BQ25792_MINVSYS_MAX_UV); + reg =3D ((vsys - BQ25792_MINVSYS_MIN_UV) / BQ25792_MINVSYS_STEP_UV); + reg =3D FIELD_PREP(BQ25792_REG00_VSYSMIN_MASK, reg); + + return regmap_write(pdata->bq->regmap, + BQ25792_REG00_MIN_SYS_VOLTAGE, reg); +} + /** * bq25703_get_cur() - Get the reported current from the battery * @pdata: driver platform data @@ -195,6 +328,30 @@ static int bq25703_get_cur(struct bq257xx_chg *pdata, = int *intval) return ret; } =20 +/** + * bq25792_get_cur() - Get the reported current from the battery + * @pdata: driver platform data + * @intval: pointer to store the battery current value + * + * Read the current ADC value from the device representing the battery + * charge or discharge current and return it in microamps. + * + * Return: Returns 0 on success or error on failure to read. + */ +static int bq25792_get_cur(struct bq257xx_chg *pdata, int *intval) +{ + u16 reg; + int ret; + + ret =3D bq25792_read16(pdata, BQ25792_REG33_IBAT_ADC, ®); + if (ret < 0) + return ret; + + *intval =3D (s16)reg * BQ25792_ADCIBAT_STEP_UA; + + return ret; +} + /** * bq25703_get_ichg_cur() - Get the maximum reported charge current * @pdata: driver platform data @@ -218,6 +375,30 @@ static int bq25703_get_ichg_cur(struct bq257xx_chg *pd= ata, int *intval) return ret; } =20 +/** + * bq25792_get_ichg_cur() - Get the maximum reported charge current + * @pdata: driver platform data + * @intval: pointer to store the maximum charge current value + * + * Read the programmed maximum charge current limit from the device. + * + * Return: Returns 0 on success or error on failure to read value. + */ +static int bq25792_get_ichg_cur(struct bq257xx_chg *pdata, int *intval) +{ + u16 reg; + int ret; + + ret =3D bq25792_read16(pdata, BQ25792_REG03_CHARGE_CURRENT_LIMIT, ®); + if (ret) + return ret; + + *intval =3D FIELD_GET(BQ25792_REG03_ICHG_MASK, reg) * + BQ25792_ICHG_STEP_UA; + + return ret; +} + /** * bq25703_set_ichg_cur() - Set the maximum charge current * @pdata: driver platform data @@ -242,6 +423,28 @@ static int bq25703_set_ichg_cur(struct bq257xx_chg *pd= ata, int ichg) reg); } =20 +/** + * bq25792_set_ichg_cur() - Set the maximum charge current + * @pdata: driver platform data + * @ichg: current value to set in uA + * + * Set the maximum charge current by clamping the requested value + * between device limits and writing to the appropriate register. + * + * Return: Returns 0 on success or error on failure to write. + */ +static int bq25792_set_ichg_cur(struct bq257xx_chg *pdata, int ichg) +{ + int ichg_max =3D pdata->ichg_max; + u16 reg; + + ichg =3D clamp(ichg, BQ25792_ICHG_MIN_UA, ichg_max); + reg =3D FIELD_PREP(BQ25792_REG03_ICHG_MASK, + (ichg / BQ25792_ICHG_STEP_UA)); + + return bq25792_write16(pdata, BQ25792_REG03_CHARGE_CURRENT_LIMIT, reg); +} + /** * bq25703_get_chrg_volt() - Get the maximum set charge voltage * @pdata: driver platform data @@ -265,6 +468,30 @@ static int bq25703_get_chrg_volt(struct bq257xx_chg *p= data, int *intval) return ret; } =20 +/** + * bq25792_get_chrg_volt() - Get the maximum set charge voltage + * @pdata: driver platform data + * @intval: pointer to store the maximum charge voltage value + * + * Read the current charge voltage limit from the device. + * + * Return: Returns 0 on success or error on failure to read value. + */ +static int bq25792_get_chrg_volt(struct bq257xx_chg *pdata, int *intval) +{ + u16 reg; + int ret; + + ret =3D bq25792_read16(pdata, BQ25792_REG01_CHARGE_VOLTAGE_LIMIT, ®); + if (ret) + return ret; + + *intval =3D FIELD_GET(BQ25792_REG01_VREG_MASK, reg) * + BQ25792_VBATREG_STEP_UV; + + return ret; +} + /** * bq25703_set_chrg_volt() - Set the maximum charge voltage * @pdata: driver platform data @@ -291,6 +518,29 @@ static int bq25703_set_chrg_volt(struct bq257xx_chg *p= data, int vbat) reg); } =20 +/** + * bq25792_set_chrg_volt() - Set the maximum charge voltage + * @pdata: driver platform data + * @vbat: voltage value to set in uV + * + * Set the maximum charge voltage by clamping the requested value + * between device limits and writing to the appropriate register. + * + * Return: Returns 0 on success or error on failure to write. + */ +static int bq25792_set_chrg_volt(struct bq257xx_chg *pdata, int vbat) +{ + int vbat_max =3D pdata->vbat_max; + u16 reg; + + vbat =3D clamp(vbat, BQ25792_VBATREG_MIN_UV, vbat_max); + + reg =3D FIELD_PREP(BQ25792_REG01_VREG_MASK, + (vbat / BQ25792_VBATREG_STEP_UV)); + + return bq25792_write16(pdata, BQ25792_REG01_CHARGE_VOLTAGE_LIMIT, reg); +} + /** * bq25703_get_iindpm() - Get the maximum set input current * @pdata: driver platform data @@ -319,6 +569,30 @@ static int bq25703_get_iindpm(struct bq257xx_chg *pdat= a, int *intval) return ret; } =20 +/** + * bq25792_get_iindpm() - Get the maximum set input current + * @pdata: driver platform data + * @intval: pointer to store the maximum input current value + * + * Read the current input current limit from the device. + * + * Return: Returns 0 on success or error on failure to read value. + */ +static int bq25792_get_iindpm(struct bq257xx_chg *pdata, int *intval) +{ + u16 reg; + int ret; + + ret =3D bq25792_read16(pdata, BQ25792_REG06_INPUT_CURRENT_LIMIT, ®); + if (ret) + return ret; + + reg =3D FIELD_GET(BQ25792_REG06_IINDPM_MASK, reg); + *intval =3D reg * BQ25792_IINDPM_STEP_UA; + + return ret; +} + /** * bq25703_set_iindpm() - Set the maximum input current * @pdata: driver platform data @@ -344,6 +618,29 @@ static int bq25703_set_iindpm(struct bq257xx_chg *pdat= a, int iindpm) FIELD_PREP(BQ25703_IINDPM_MASK, reg)); } =20 +/** + * bq25792_set_iindpm() - Set the maximum input current + * @pdata: driver platform data + * @iindpm: current value in uA + * + * Set the maximum input current by clamping the requested value + * between device limits and writing to the appropriate register. + * + * Return: Returns 0 on success or error on failure to write. + */ +static int bq25792_set_iindpm(struct bq257xx_chg *pdata, int iindpm) +{ + u16 reg; + int iindpm_max =3D pdata->iindpm_max; + + iindpm =3D clamp(iindpm, BQ25792_IINDPM_MIN_UA, iindpm_max); + + reg =3D iindpm / BQ25792_IINDPM_STEP_UA; + + return bq25792_write16(pdata, BQ25792_REG06_INPUT_CURRENT_LIMIT, + FIELD_PREP(BQ25792_REG06_IINDPM_MASK, reg)); +} + /** * bq25703_get_vbat() - Get the reported voltage from the battery * @pdata: driver platform data @@ -368,6 +665,30 @@ static int bq25703_get_vbat(struct bq257xx_chg *pdata,= int *intval) return ret; } =20 +/** + * bq25792_get_vbat() - Get the reported voltage from the battery + * @pdata: driver platform data + * @intval: pointer to store the battery voltage value + * + * Read the current ADC value representing the battery voltage + * and return it in microvolts. + * + * Return: Returns 0 on success or error on failure to read value. + */ +static int bq25792_get_vbat(struct bq257xx_chg *pdata, int *intval) +{ + u16 reg; + int ret; + + ret =3D bq25792_read16(pdata, BQ25792_REG3B_VBAT_ADC, ®); + if (ret) + return ret; + + *intval =3D reg * BQ25792_ADCVSYSVBAT_STEP_UV; + + return ret; +} + /** * bq25703_hw_init() - Set all the required registers to init the charger * @pdata: driver platform data @@ -434,6 +755,108 @@ 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; + u8 reg; + + /* Disable watchdog (TODO: make it work instead) */ + ret =3D regmap_write(regmap, BQ25792_REG10_CHARGER_CONTROL_1, 0); + if (ret) + return ret; + + /* + * Enable battery discharge current sensing, 5A discharge current + * limit, input current regulation and ship FET functions + */ + ret =3D regmap_write(regmap, BQ25792_REG14_CHARGER_CONTROL_5, + BQ25792_REG14_SFET_PRESENT | + BQ25792_REG14_EN_IBAT | + BQ25792_IBAT_5A | + BQ25792_REG14_EN_IINDPM); + if (ret) + return ret; + + if (pdata->vbat_max < 5000000) { + /* 1S batteries */ + reg =3D FIELD_PREP(BQ25792_REG0A_CELL_MASK, BQ25792_CELL_1S); + } else if (pdata->vbat_max < 10000000) { + /* 2S batteries */ + reg =3D FIELD_PREP(BQ25792_REG0A_CELL_MASK, BQ25792_CELL_2S); + } else if (pdata->vbat_max < 14000000) { + /* 3S batteries */ + reg =3D FIELD_PREP(BQ25792_REG0A_CELL_MASK, BQ25792_CELL_3S); + } else { + /* 4S batteries */ + reg =3D FIELD_PREP(BQ25792_REG0A_CELL_MASK, BQ25792_CELL_4S); + } + + /* Recharge voltage detection deglitch time (default 1024ms) */ + reg |=3D FIELD_PREP(BQ25792_REG0A_TRECHG_MASK, BQ25792_TRECHG_1024MS); + + /* Recharge voltage offset: 5% of the set charge voltage */ + reg |=3D FIELD_PREP(BQ25792_REG0A_VRECHG_MASK, + (pdata->vbat_max / 20 - BQ25792_VRECHG_MIN_UV) / BQ25792_VRECHG_STEP_= UV); + + ret =3D regmap_write(regmap, BQ25792_REG0A_RECHARGE_CONTROL, reg); + if (ret) + return ret; + + 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 Input Current Optimizer (the rest is at POR value) */ + ret =3D regmap_write(regmap, BQ25792_REG0F_CHARGER_CONTROL_0, + BQ25792_REG0F_EN_AUTO_IBATDIS | + BQ25792_REG0F_EN_CHG | + BQ25792_REG0F_EN_ICO | + BQ25792_REG0F_EN_TERM); + if (ret) + return ret; + + /* Enable the ADC. */ + ret =3D regmap_write(regmap, BQ25792_REG2E_ADC_CONTROL, BQ25792_REG2E_ADC= _EN); + if (ret) + return ret; + + /* Clear per-channel ADC disable bits - enable all channels */ + ret =3D regmap_write(regmap, BQ25792_REG2F_ADC_FUNCTION_DISABLE_0, 0); + if (ret) + return ret; + + ret =3D regmap_write(regmap, BQ25792_REG30_ADC_FUNCTION_DISABLE_1, 0); + if (ret) + return ret; + + return ret; +} + /** * bq25703_hw_shutdown() - Set registers for shutdown * @pdata: driver platform data @@ -446,6 +869,30 @@ static void bq25703_hw_shutdown(struct bq257xx_chg *pd= ata) BQ25703_EN_LWPWR, BQ25703_EN_LWPWR); } =20 +/** + * bq25792_hw_shutdown() - Shutdown BQ25792 hardware + * @pdata: driver platform data + * + * Perform hardware shutdown for the BQ25792. Currently a no-op + * as the device does not require special shutdown configuration. + */ +static void bq25792_hw_shutdown(struct bq257xx_chg *pdata) +{ + /* Nothing to do here */ +} + +/** + * bq257xx_set_charger_property() - Set a power supply property + * @psy: power supply device + * @prop: power supply property to set + * @val: value to set for the property + * + * Handle requests to set power supply properties such as input current + * limit, constant charge voltage, and constant charge current. Routes + * the request to the chip-specific implementation. + * + * Return: Returns 0 on success or -EINVAL if property is not supported. + */ static int bq257xx_set_charger_property(struct power_supply *psy, enum power_supply_property prop, const union power_supply_propval *val) @@ -469,6 +916,19 @@ static int bq257xx_set_charger_property(struct power_s= upply *psy, return -EINVAL; } =20 +/** + * bq257xx_get_charger_property() - Get a power supply property + * @psy: power supply device + * @psp: power supply property to get + * @val: pointer to store the property value + * + * Handle requests to get power supply properties, including status, + * health, manufacturer, online state, and various voltage/current + * measurements. Reads current device state and routes chip-specific + * property requests to appropriate handlers. + * + * Return: Returns 0 on success or -EINVAL if property is not supported. + */ static int bq257xx_get_charger_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) @@ -550,6 +1010,17 @@ static enum power_supply_property bq257xx_power_suppl= y_props[] =3D { POWER_SUPPLY_PROP_USB_TYPE, }; =20 +/** + * bq257xx_property_is_writeable() - Check if a property is writeable + * @psy: power supply device + * @prop: power supply property to check + * + * Determines which power supply properties can be written to. Only + * charge current limit, charge voltage limit, and input current + * limit are writeable. + * + * Return: Returns 1 if property is writeable, 0 otherwise. + */ static int bq257xx_property_is_writeable(struct power_supply *psy, enum power_supply_property prop) { @@ -622,6 +1093,17 @@ static void bq257xx_external_power_changed(struct pow= er_supply *psy) power_supply_changed(psy); } =20 +/** + * bq257xx_irq_handler_thread() - Handle charger interrupt + * @irq: interrupt number + * @private: pointer to driver private data + * + * Thread handler for charger interrupts. Triggers re-evaluation of + * external power status and updates power supply state in response + * to charger events. + * + * Return: Returns IRQ_HANDLED if interrupt was processed. + */ static irqreturn_t bq257xx_irq_handler_thread(int irq, void *private) { struct bq257xx_chg *pdata =3D private; @@ -662,6 +1144,22 @@ static const struct bq257xx_chip_info bq25703_chip_in= fo =3D { .bq257xx_get_min_vsys =3D &bq25703_get_min_vsys, }; =20 +static const struct bq257xx_chip_info bq25792_chip_info =3D { + .default_iindpm_uA =3D BQ25792_IINDPM_DEFAULT_UA, + .bq257xx_hw_init =3D &bq25792_hw_init, + .bq257xx_hw_shutdown =3D &bq25792_hw_shutdown, + .bq257xx_get_state =3D &bq25792_get_state, + .bq257xx_get_ichg =3D &bq25792_get_ichg_cur, + .bq257xx_set_ichg =3D &bq25792_set_ichg_cur, + .bq257xx_get_vbatreg =3D &bq25792_get_chrg_volt, + .bq257xx_set_vbatreg =3D &bq25792_set_chrg_volt, + .bq257xx_get_iindpm =3D &bq25792_get_iindpm, + .bq257xx_set_iindpm =3D &bq25792_set_iindpm, + .bq257xx_get_cur =3D &bq25792_get_cur, + .bq257xx_get_vbat =3D &bq25792_get_vbat, + .bq257xx_get_min_vsys =3D &bq25792_get_min_vsys, +}; + /** * bq257xx_parse_dt() - Parse the device tree for required properties * @pdata: driver platform data @@ -707,6 +1205,17 @@ static int bq257xx_parse_dt(struct bq257xx_chg *pdata, return 0; } =20 +/** + * bq257xx_charger_probe() - Probe routine for charger platform device + * @pdev: platform device + * + * Probe the charger device, allocate driver data structure, select the + * appropriate chip-specific function pointers, register the power supply, + * parse device tree properties for battery limits, initialize hardware, + * and set up the interrupt handler if available. + * + * Return: Returns 0 on success or error code on failure. + */ static int bq257xx_charger_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -722,7 +1231,17 @@ static int bq257xx_charger_probe(struct platform_devi= ce *pdev) return -ENOMEM; =20 pdata->bq =3D bq; - pdata->chip =3D &bq25703_chip_info; + + switch (bq->type) { + case BQ25703A: + pdata->chip =3D &bq25703_chip_info; + break; + case BQ25792: + pdata->chip =3D &bq25792_chip_info; + break; + default: + return dev_err_probe(dev, -EINVAL, "Unknown chip type\n"); + } =20 platform_set_drvdata(pdev, pdata); =20 @@ -760,6 +1279,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 4ec72eb920f2..379ef4ee8291 100644 --- a/include/linux/mfd/bq257xx.h +++ b/include/linux/mfd/bq257xx.h @@ -200,6 +200,20 @@ #define BQ25792_REG0A_TRECHG_MASK GENMASK(5, 4) #define BQ25792_REG0A_VRECHG_MASK GENMASK(3, 0) =20 +#define BQ25792_CELL_1S 0 +#define BQ25792_CELL_2S 1 +#define BQ25792_CELL_3S 2 +#define BQ25792_CELL_4S 3 + +#define BQ25792_TRECHG_64MS 0 +#define BQ25792_TRECHG_256MS 1 +#define BQ25792_TRECHG_1024MS 2 +#define BQ25792_TRECHG_2048MS 3 + +#define BQ25792_VRECHG_MIN_UV 50000 +#define BQ25792_VRECHG_STEP_UV 50000 +#define BQ25792_VRECHG_MAX_UV 800000 + /* VOTG regulation */ #define BQ25792_REG0B_VOTG_MASK GENMASK(10, 0) =20 --=20 2.53.0