From: "Nícolas F. R. A. Prado" <nfraprado@collabora.com>
To: Sebastian Reichel <sre@kernel.org>
Cc: kernel@collabora.com, linux-pm@vger.kernel.org,
linux-kernel@vger.kernel.org,
"Nícolas F. R. A. Prado" <nfraprado@collabora.com>
Subject: [PATCH] power: supply: sbs-battery: Handle unsupported PROP_TIME_TO_EMPTY_NOW
Date: Thu, 07 Mar 2024 17:05:10 -0500 [thread overview]
Message-ID: <20240307-sbs-time-empty-now-error-v1-1-18d0f8702330@collabora.com> (raw)
Despite the RunTimeToEmpty() (0x11) function being defined in the SBS
specification as required, it seems that not all batteries implement it.
On platforms with such batteries, reading the property will cause an
error to be printed:
power_supply sbs-8-000b: driver failed to report `time_to_empty_now' property: -5
This not only pollutes the log, distracting from real problems on the
device, but also prevents the uevent file from being read since it
contains all properties, including the faulty one.
The following table summarizes the findings for a handful of platforms:
Platform Status Manufacturer Model
------------------------------------------------------------------------
mt8186-corsola-steelix-sku131072 OK BYD L22B3PG0
mt8195-cherry-tomato-r2 NOT OK PANASON AP16L5J
mt8192-asurada-spherion-r0 NOT OK PANASON AP15O5L
mt8183-kukui-jacuzzi-juniper-sku16 NOT OK LGC KT0 AP16L8J
mt8173-elm-hana OK Sunwoda L18D3PG1
sc7180-trogdor-lazor-limozeen-nots-r5 NOT OK Murata AP18C4K
sc7180-trogdor-kingoftown NOT OK 333-AC-0D-A GG02047XL
rk3399-gru-kevin OK SDI 4352D51
Identify during probe, based on the battery model, if this is one of the
quirky batteries, and if so, don't register the
POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW property.
Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
---
drivers/power/supply/sbs-battery.c | 45 ++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/drivers/power/supply/sbs-battery.c b/drivers/power/supply/sbs-battery.c
index a6c204c08232..85ff331cf87a 100644
--- a/drivers/power/supply/sbs-battery.c
+++ b/drivers/power/supply/sbs-battery.c
@@ -1112,6 +1112,49 @@ static const struct power_supply_desc sbs_default_desc = {
.external_power_changed = sbs_external_power_changed,
};
+static const char * const unsupported_time_to_empty_now_models[] = {
+ "AP16L5J", "AP15O5L", "AP16L8J", "AP18C4K", "GG02047XL"
+};
+
+static void sbs_remove_unsupported_properties(struct power_supply_config *psy_cfg,
+ struct power_supply_desc *sbs_desc)
+{
+ enum power_supply_property *new_properties;
+ struct sbs_info *chip = psy_cfg->drv_data;
+ bool missing_time_to_empty_now = false;
+ const char *model_name;
+ unsigned int new_num_properties;
+ unsigned int i = 0, j = 0;
+
+ model_name = sbs_get_constant_string(chip, POWER_SUPPLY_PROP_MODEL_NAME);
+ if (IS_ERR(model_name))
+ return;
+
+ for (i = 0; i < ARRAY_SIZE(unsupported_time_to_empty_now_models); i++) {
+ if (!strcmp(model_name, unsupported_time_to_empty_now_models[i])) {
+ missing_time_to_empty_now = true;
+ break;
+ }
+ }
+
+ if (!missing_time_to_empty_now)
+ return;
+
+ new_num_properties = ARRAY_SIZE(sbs_properties) - 1;
+ new_properties = devm_kzalloc(&chip->client->dev, new_num_properties * sizeof(sbs_properties[0]), GFP_KERNEL);
+
+ for (i = 0; i < sbs_desc->num_properties; i++) {
+ if (sbs_desc->properties[i] == POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW)
+ continue;
+
+ new_properties[j] = sbs_desc->properties[i];
+ j++;
+ }
+
+ sbs_desc->properties = new_properties;
+ sbs_desc->num_properties = new_num_properties;
+};
+
static int sbs_probe(struct i2c_client *client)
{
struct sbs_info *chip;
@@ -1210,6 +1253,8 @@ static int sbs_probe(struct i2c_client *client)
if (rc)
return rc;
+ sbs_remove_unsupported_properties(&psy_cfg, sbs_desc);
+
chip->power_supply = devm_power_supply_register(&client->dev, sbs_desc,
&psy_cfg);
if (IS_ERR(chip->power_supply))
---
base-commit: 11afac187274a6177a7ac82997f8691c0f469e41
change-id: 20240307-sbs-time-empty-now-error-322bc074d3f2
Best regards,
--
Nícolas F. R. A. Prado <nfraprado@collabora.com>
next reply other threads:[~2024-03-07 22:06 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-07 22:05 Nícolas F. R. A. Prado [this message]
2024-03-08 9:26 ` AngeloGioacchino Del Regno
2024-03-08 13:11 ` Nícolas F. R. A. Prado
2024-04-01 15:58 ` Sebastian Reichel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240307-sbs-time-empty-now-error-v1-1-18d0f8702330@collabora.com \
--to=nfraprado@collabora.com \
--cc=kernel@collabora.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=sre@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®