From nobody Mon Sep 28 08:47:22 2026 Received: from mailgw.kylinos.cn (mailgw.kylinos.cn [124.126.103.232]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 23E2F3A4F5E; Mon, 24 Aug 2026 08:42:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=124.126.103.232 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787560960; cv=none; b=phOLdwxwoqH1AeQkX8RFPYqx9ekbC1ImjvIJWazMZIA9RAXfbPEYgU1NLZrTVkYA+0LVJKFAqd8LmlndShHau0evr0xZYvHnRblkJR69Wbien2reFM/P8m7D59E5vj7FCou+smY8p4Q4gwhAWO+YgpD+pxsnrprjirqnZ+lH35c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787560960; c=relaxed/simple; bh=xx8BeD6FcSupwzvKa0xvJB9EOGzzmimM5ANfaef8jqM=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=nQruFNuf3EV8G54R3wCjFU5ez+R5hUNfjpTq7kDy4wsa6MH3F+R/psPVezFkCWpi90VZvVqqLn7UGphKE5QhMZF1lR393H0sooVTdbQKz386yGw8+XIsI1C5UNOhry+YUtkwrJZC/37kIwL53QCJQ5jKrwJoEy1eteXg6bTRNPo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kylinos.cn; spf=pass smtp.mailfrom=kylinos.cn; arc=none smtp.client-ip=124.126.103.232 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kylinos.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=kylinos.cn X-UUID: bbdd58ca9f9711f19a56ed5b684f684d-20260824 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.3.19,REQID:d7a45d48-df51-4d6e-ba47-c6147d1a6ab0,IP:0,U RL:0,TC:0,Content:0,EDM:25,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION :release,TS:25 X-CID-META: VersionHash:7db8b62,CLOUDID:1571de253698cbf14f999226fec177e9,BulkI D:nil,BulkQuantity:0,SF:102|136|850|865|898,TC:nil,Content:0|15|50,EDM:5|- 100,IP:nil,URL:0,File:nil,RT:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0 ,AV:0,LES:1,SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0,ARC:0 X-CID-BVR: 2,SSN|SDN X-CID-BAS: 2,SSN|SDN,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR X-CID-RHF: D41D8CD98F00B204E9800998ECF8427E X-UUID: bbdd58ca9f9711f19a56ed5b684f684d-20260824 X-User: lilinmao@kylinos.cn Received: from localhost.localdomain [(10.44.16.150)] by mailgw.kylinos.cn (envelope-from ) (Generic MTA with TLSv1.3 TLS_AES_256_GCM_SHA384 256/256) with ESMTP id 2115456918; Mon, 24 Aug 2026 16:42:26 +0800 From: Linmao Li To: Sebastian Reichel Cc: Ricardo Rivera-Matos , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Linmao Li Subject: [PATCH] power: supply: bq2515x: Propagate charge-enable read errors Date: Mon, 24 Aug 2026 16:42:17 +0800 Message-Id: <20260824084217.670213-1-lilinmao@kylinos.cn> X-Mailer: git-send-email 2.25.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" bq2515x_get_charge_disable() returns bool even though reading the charger-disable state can fail. A negative error is therefore converted to true, so POWER_SUPPLY_PROP_STATUS reports NOT_CHARGING with success instead of propagating the failure. The GPIO read is not checked for errors either. Return an int from the helper, check both reads, and only convert a valid charger-disable state to the charging-status boolean. Fixes: 44908459275e ("power: supply: bq25150 introduce the bq25150") Signed-off-by: Linmao Li --- drivers/power/supply/bq2515x_charger.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/power/supply/bq2515x_charger.c b/drivers/power/supply/= bq2515x_charger.c index 0208358ebbe4c..c2b17562cf8bb 100644 --- a/drivers/power/supply/bq2515x_charger.c +++ b/drivers/power/supply/bq2515x_charger.c @@ -420,7 +420,7 @@ static int bq2515x_get_battery_current_now(struct bq251= 5x_device *bq2515x) BQ2515X_ICHG_DIVISOR); } =20 -static bool bq2515x_get_charge_disable(struct bq2515x_device *bq2515x) +static int bq2515x_get_charge_disable(struct bq2515x_device *bq2515x) { int ret; int ce_pin; @@ -428,6 +428,8 @@ static bool bq2515x_get_charge_disable(struct bq2515x_d= evice *bq2515x) int charger_disable; =20 ce_pin =3D gpiod_get_value_cansleep(bq2515x->ce_gpio); + if (ce_pin < 0) + return ce_pin; =20 ret =3D regmap_read(bq2515x->regmap, BQ2515X_ICCTRL2, &icctrl2); if (ret) @@ -435,10 +437,7 @@ static bool bq2515x_get_charge_disable(struct bq2515x_= device *bq2515x) =20 charger_disable =3D icctrl2 & BQ2515X_CHARGER_DISABLE; =20 - if (charger_disable || ce_pin) - return true; - - return false; + return charger_disable || ce_pin; } =20 static int bq2515x_set_charge_disable(struct bq2515x_device *bq2515x, int = val) @@ -615,7 +614,11 @@ static int bq2515x_charging_status(struct bq2515x_devi= ce *bq2515x, else status1_no_fault =3D false; =20 - ce_status =3D (!bq2515x_get_charge_disable(bq2515x)); + ret =3D bq2515x_get_charge_disable(bq2515x); + if (ret < 0) + return ret; + + ce_status =3D !ret; =20 /* * If there are no faults and charging is enabled, then status is base-commit: 2da28b059e0ddcd2e1956eeae383246207965573 --=20 2.25.1