From: Linus Walleij <linusw@kernel.org>
To: Sebastian Reichel <sre@kernel.org>
Cc: linux-pm@vger.kernel.org, Linus Walleij <linusw@kernel.org>
Subject: [PATCH 04/15] power: supply: ab8500_fg: Drop nonexistent AB8505 controls
Date: Wed, 16 Sep 2026 08:49:26 +0200 [thread overview]
Message-ID: <20260916-ab8500-charging-v1-4-e986ed321cc6@kernel.org> (raw)
In-Reply-To: <20260916-ab8500-charging-v1-0-e986ed321cc6@kernel.org>
The AB8505 RTC register map has no register at offset 0x15, but
the fuel-gauge driver initializes and exposes that offset as a
power-cut flag-time control. PcutCtlAndStatus bit 4, exposed as
powercut_flag, is reserved as well.
Remove both nonexistent controls and their internal configuration
field so the driver no longer accesses reserved hardware locations.
Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
drivers/power/supply/ab8500-bm.h | 3 --
drivers/power/supply/ab8500_bmdata.c | 1 -
drivers/power/supply/ab8500_fg.c | 85 ------------------------------------
3 files changed, 89 deletions(-)
diff --git a/drivers/power/supply/ab8500-bm.h b/drivers/power/supply/ab8500-bm.h
index b73fccdc76d2..209744c77c3d 100644
--- a/drivers/power/supply/ab8500-bm.h
+++ b/drivers/power/supply/ab8500-bm.h
@@ -245,7 +245,6 @@ enum bup_vch_sel {
#define AB8505_RTC_PCUT_CTL_STATUS_REG 0x12
#define AB8505_RTC_PCUT_TIME_REG 0x13
#define AB8505_RTC_PCUT_MAX_TIME_REG 0x14
-#define AB8505_RTC_PCUT_FLAG_TIME_REG 0x15
#define AB8505_RTC_PCUT_RESTART_REG 0x16
#define AB8505_RTC_PCUT_DEBOUNCE_REG 0x17
@@ -286,7 +285,6 @@ struct ab8500_fg;
* battery full while in maintenance, in per cent
* @pcut_enable: Enable power cut feature in ab8505
* @pcut_max_time: Max time threshold
- * @pcut_flag_time: Flagtime threshold
* @pcut_max_restart: Max number of restarts
* @pcut_debounce_time: Sets battery debounce time
*/
@@ -307,7 +305,6 @@ struct ab8500_fg_parameters {
int maint_thres;
bool pcut_enable;
u8 pcut_max_time;
- u8 pcut_flag_time;
u8 pcut_max_restart;
u8 pcut_debounce_time;
};
diff --git a/drivers/power/supply/ab8500_bmdata.c b/drivers/power/supply/ab8500_bmdata.c
index 19ed52852804..d7fd2d313ff1 100644
--- a/drivers/power/supply/ab8500_bmdata.c
+++ b/drivers/power/supply/ab8500_bmdata.c
@@ -98,7 +98,6 @@ static const struct ab8500_fg_parameters fg = {
.user_cap_limit = 15,
.pcut_enable = 1,
.pcut_max_time = 127,
- .pcut_flag_time = 112,
.pcut_max_restart = 15,
.pcut_debounce_time = 2,
};
diff --git a/drivers/power/supply/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c
index c5eaa32c4a2d..70e29c9e8108 100644
--- a/drivers/power/supply/ab8500_fg.c
+++ b/drivers/power/supply/ab8500_fg.c
@@ -2355,14 +2355,6 @@ static int ab8500_fg_init_hw_registers(struct ab8500_fg *di)
goto out;
}
- ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
- AB8505_RTC_PCUT_FLAG_TIME_REG, di->bm->fg_params->pcut_flag_time);
-
- if (ret) {
- dev_err(di->dev, "%s write failed AB8505_RTC_PCUT_FLAG_TIME_REG\n", __func__);
- goto out;
- }
-
ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
AB8505_RTC_PCUT_RESTART_REG, di->bm->fg_params->pcut_max_restart);
@@ -2569,56 +2561,6 @@ static int ab8500_fg_sysfs_init(struct ab8500_fg *di)
return ret;
}
-static ssize_t ab8505_powercut_flagtime_read(struct device *dev,
- struct device_attribute *attr,
- char *buf)
-{
- int ret;
- u8 reg_value;
- struct power_supply *psy = dev_to_psy(dev);
- struct ab8500_fg *di = power_supply_get_drvdata(psy);
-
- ret = abx500_get_register_interruptible(di->dev, AB8500_RTC,
- AB8505_RTC_PCUT_FLAG_TIME_REG, ®_value);
-
- if (ret < 0) {
- dev_err(dev, "Failed to read AB8505_RTC_PCUT_FLAG_TIME_REG\n");
- goto fail;
- }
-
- return sysfs_emit(buf, "%d\n", (reg_value & 0x7F));
-
-fail:
- return ret;
-}
-
-static ssize_t ab8505_powercut_flagtime_write(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
-{
- int ret;
- int reg_value;
- struct power_supply *psy = dev_to_psy(dev);
- struct ab8500_fg *di = power_supply_get_drvdata(psy);
-
- if (kstrtoint(buf, 10, ®_value))
- goto fail;
-
- if (reg_value > 0x7F) {
- dev_err(dev, "Incorrect parameter, echo 0 (1.98s) - 127 (15.625ms) for flagtime\n");
- goto fail;
- }
-
- ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
- AB8505_RTC_PCUT_FLAG_TIME_REG, (u8)reg_value);
-
- if (ret < 0)
- dev_err(dev, "Failed to set AB8505_RTC_PCUT_FLAG_TIME_REG\n");
-
-fail:
- return count;
-}
-
static ssize_t ab8505_powercut_maxtime_read(struct device *dev,
struct device_attribute *attr,
char *buf)
@@ -2815,30 +2757,6 @@ static ssize_t ab8505_powercut_write(struct device *dev,
return count;
}
-static ssize_t ab8505_powercut_flag_read(struct device *dev,
- struct device_attribute *attr,
- char *buf)
-{
-
- int ret;
- u8 reg_value;
- struct power_supply *psy = dev_to_psy(dev);
- struct ab8500_fg *di = power_supply_get_drvdata(psy);
-
- ret = abx500_get_register_interruptible(di->dev, AB8500_RTC,
- AB8505_RTC_PCUT_CTL_STATUS_REG, ®_value);
-
- if (ret < 0) {
- dev_err(dev, "Failed to read AB8505_RTC_PCUT_CTL_STATUS_REG\n");
- goto fail;
- }
-
- return sysfs_emit(buf, "%d\n", ((reg_value & 0x10) >> 4));
-
-fail:
- return ret;
-}
-
static ssize_t ab8505_powercut_debounce_read(struct device *dev,
struct device_attribute *attr,
char *buf)
@@ -2913,8 +2831,6 @@ static ssize_t ab8505_powercut_enable_status_read(struct device *dev,
}
static struct device_attribute ab8505_fg_sysfs_psy_attrs[] = {
- __ATTR(powercut_flagtime, (S_IRUGO | S_IWUSR | S_IWGRP),
- ab8505_powercut_flagtime_read, ab8505_powercut_flagtime_write),
__ATTR(powercut_maxtime, (S_IRUGO | S_IWUSR | S_IWGRP),
ab8505_powercut_maxtime_read, ab8505_powercut_maxtime_write),
__ATTR(powercut_restart_max, (S_IRUGO | S_IWUSR | S_IWGRP),
@@ -2924,7 +2840,6 @@ static struct device_attribute ab8505_fg_sysfs_psy_attrs[] = {
ab8505_powercut_restart_counter_read, NULL),
__ATTR(powercut_enable, (S_IRUGO | S_IWUSR | S_IWGRP),
ab8505_powercut_read, ab8505_powercut_write),
- __ATTR(powercut_flag, S_IRUGO, ab8505_powercut_flag_read, NULL),
__ATTR(powercut_debounce_time, (S_IRUGO | S_IWUSR | S_IWGRP),
ab8505_powercut_debounce_read, ab8505_powercut_debounce_write),
__ATTR(powercut_enable_status, S_IRUGO,
--
2.55.0
next prev parent reply other threads:[~2026-09-16 6:49 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-16 6:49 [PATCH 00/15] power: supply: Fix AB8500 and AB8505 charging Linus Walleij
2026-09-16 6:49 ` [PATCH 01/15] power: supply: ab8500_fg: Accept status from supplied power Linus Walleij
2026-09-16 6:49 ` [PATCH 02/15] power: supply: ab8500_fg: Report sub-percent charge changes Linus Walleij
2026-09-16 6:49 ` [PATCH 03/15] power: supply: ab8500: Correct register definitions Linus Walleij
2026-09-16 6:49 ` Linus Walleij [this message]
2026-09-16 6:49 ` [PATCH 05/15] power: supply: ab8500_btemp: Fix event temperature reporting Linus Walleij
2026-09-16 6:49 ` [PATCH 06/15] power: supply: ab8500: Preserve battery termination current Linus Walleij
2026-09-16 6:49 ` [PATCH 07/15] power: supply: ab8500_charger: Fix AC charger re-enable Linus Walleij
2026-09-16 6:49 ` [PATCH 08/15] power: supply: ab8500_charger: Decode AB8505 USB status Linus Walleij
2026-09-16 6:49 ` [PATCH 09/15] power: supply: ab8500_charger: Respect AB8505 register layout Linus Walleij
2026-09-16 6:49 ` [PATCH 10/15] power: supply: ab8500_charger: Handle detection errors Linus Walleij
2026-09-16 6:49 ` [PATCH 11/15] power: supply: ab8500_charger: Skip absent AB8505 main charger Linus Walleij
2026-09-16 6:49 ` [PATCH 12/15] power: supply: ab8500_charger: Retry AB8505 USB detection Linus Walleij
2026-09-16 6:49 ` [PATCH 13/15] power: supply: ab8500_charger: Recover inactive AB8505 charger Linus Walleij
2026-09-16 6:49 ` [PATCH 14/15] power: supply: ab8500_fg: Finalize current measurements Linus Walleij
2026-09-16 6:49 ` [PATCH 15/15] power: supply: ab8500_fg: Avoid reserved AB8505 CCConf bit Linus Walleij
2026-10-02 22:07 ` [PATCH 00/15] power: supply: Fix AB8500 and AB8505 charging Linus Walleij
2026-10-04 19:33 ` 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=20260916-ab8500-charging-v1-4-e986ed321cc6@kernel.org \
--to=linusw@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