* [PATCH 1/4] rtc: pcf2127: remove redundant break statement in switch-case
2026-03-11 20:02 [PATCH 0/4] rtc: pcf2127: add support for battery low voltage detection Hugo Villeneuve
@ 2026-03-11 20:02 ` Hugo Villeneuve
2026-03-11 20:02 ` [PATCH 2/4] rtc: pcf2127: add pcf2127_pwrmng_get/set Hugo Villeneuve
` (4 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Hugo Villeneuve @ 2026-03-11 20:02 UTC (permalink / raw)
To: alexandre.belloni
Cc: linux-rtc, linux-kernel, hugo, bruno.thomsen, giampiero,
p.rosenberger, antonio, Hugo Villeneuve
From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
Remove unreachable break statement after return.
Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
---
drivers/rtc/rtc-pcf2127.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c
index bb4fe81d3d62c..e2e9746027348 100644
--- a/drivers/rtc/rtc-pcf2127.c
+++ b/drivers/rtc/rtc-pcf2127.c
@@ -404,8 +404,6 @@ static int pcf2127_param_set(struct device *dev, struct rtc_param *param)
PCF2127_CTRL3_PM,
FIELD_PREP(PCF2127_CTRL3_PM, mode + value));
- break;
-
default:
return -EINVAL;
}
--
2.47.3
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH 2/4] rtc: pcf2127: add pcf2127_pwrmng_get/set
2026-03-11 20:02 [PATCH 0/4] rtc: pcf2127: add support for battery low voltage detection Hugo Villeneuve
2026-03-11 20:02 ` [PATCH 1/4] rtc: pcf2127: remove redundant break statement in switch-case Hugo Villeneuve
@ 2026-03-11 20:02 ` Hugo Villeneuve
2026-08-06 12:53 ` Stefan Kerkmann
2026-03-11 20:02 ` [PATCH 3/4] rtc: add battery low voltage detection feature Hugo Villeneuve
` (3 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Hugo Villeneuve @ 2026-03-11 20:02 UTC (permalink / raw)
To: alexandre.belloni
Cc: linux-rtc, linux-kernel, hugo, bruno.thomsen, giampiero,
p.rosenberger, antonio, Hugo Villeneuve
From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
Add common functions to get/set the pwrmng field in the CTRL3 register,
used by pcf2127_param_get() and pcf2127_param_set().
Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
---
These functions will also be used in the following patch
to add battery low detection.
---
drivers/rtc/rtc-pcf2127.c | 42 +++++++++++++++++++++++++++------------
1 file changed, 29 insertions(+), 13 deletions(-)
diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c
index e2e9746027348..0605295026564 100644
--- a/drivers/rtc/rtc-pcf2127.c
+++ b/drivers/rtc/rtc-pcf2127.c
@@ -213,6 +213,30 @@ struct pcf2127 {
bool ts_valid[PCF2127_MAX_TS_SUPPORTED]; /* Timestamp valid indication. */
};
+static int pcf2127_pwrmng_get(struct device *dev, u8 *pwrmng)
+{
+ struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
+ u32 value;
+ int ret;
+
+ ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL3, &value);
+ if (ret < 0)
+ return ret;
+
+ *pwrmng = FIELD_GET(PCF2127_CTRL3_PM, value);
+
+ return 0;
+}
+
+static int pcf2127_pwrmng_set(struct device *dev, u8 pwrmng)
+{
+ struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
+
+ return regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL3,
+ PCF2127_CTRL3_PM,
+ FIELD_PREP(PCF2127_CTRL3_PM, pwrmng));
+}
+
/*
* In the routines that deal directly with the pcf2127 hardware, we use
* rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch.
@@ -337,18 +361,15 @@ static int pcf2127_rtc_set_time(struct device *dev, struct rtc_time *tm)
static int pcf2127_param_get(struct device *dev, struct rtc_param *param)
{
- struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
- u32 value;
+ u8 value;
int ret;
switch (param->param) {
case RTC_PARAM_BACKUP_SWITCH_MODE:
- ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL3, &value);
+ ret = pcf2127_pwrmng_get(dev, &value);
if (ret < 0)
return ret;
- value = FIELD_GET(PCF2127_CTRL3_PM, value);
-
if (value < 0x3)
param->uvalue = RTC_BSM_LEVEL;
else if (value < 0x6)
@@ -367,19 +388,16 @@ static int pcf2127_param_get(struct device *dev, struct rtc_param *param)
static int pcf2127_param_set(struct device *dev, struct rtc_param *param)
{
- struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
u8 mode = 0;
- u32 value;
+ u8 value;
int ret;
switch (param->param) {
case RTC_PARAM_BACKUP_SWITCH_MODE:
- ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL3, &value);
+ ret = pcf2127_pwrmng_get(dev, &value);
if (ret < 0)
return ret;
- value = FIELD_GET(PCF2127_CTRL3_PM, value);
-
if (value > 5)
value -= 5;
else if (value > 2)
@@ -400,9 +418,7 @@ static int pcf2127_param_set(struct device *dev, struct rtc_param *param)
return -EINVAL;
}
- return regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL3,
- PCF2127_CTRL3_PM,
- FIELD_PREP(PCF2127_CTRL3_PM, mode + value));
+ return pcf2127_pwrmng_set(dev, mode + value);
default:
return -EINVAL;
--
2.47.3
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH 2/4] rtc: pcf2127: add pcf2127_pwrmng_get/set
2026-03-11 20:02 ` [PATCH 2/4] rtc: pcf2127: add pcf2127_pwrmng_get/set Hugo Villeneuve
@ 2026-08-06 12:53 ` Stefan Kerkmann
0 siblings, 0 replies; 11+ messages in thread
From: Stefan Kerkmann @ 2026-08-06 12:53 UTC (permalink / raw)
To: Hugo Villeneuve, alexandre.belloni
Cc: linux-rtc, linux-kernel, bruno.thomsen, giampiero, p.rosenberger,
antonio, Hugo Villeneuve
On 3/11/26 21:02, Hugo Villeneuve wrote:
> From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
>
> Add common functions to get/set the pwrmng field in the CTRL3 register,
> used by pcf2127_param_get() and pcf2127_param_set().
>
> Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> ---
> These functions will also be used in the following patch
> to add battery low detection.
> ---
> drivers/rtc/rtc-pcf2127.c | 42 +++++++++++++++++++++++++++------------
> 1 file changed, 29 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c
> index e2e9746027348..0605295026564 100644
> --- a/drivers/rtc/rtc-pcf2127.c
> +++ b/drivers/rtc/rtc-pcf2127.c
> @@ -213,6 +213,30 @@ struct pcf2127 {
> bool ts_valid[PCF2127_MAX_TS_SUPPORTED]; /* Timestamp valid indication. */
> };
>
> +static int pcf2127_pwrmng_get(struct device *dev, u8 *pwrmng)
> +{
> + struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
> + u32 value;
> + int ret;
> +
> + ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL3, &value);
> + if (ret < 0)
> + return ret;
> +
> + *pwrmng = FIELD_GET(PCF2127_CTRL3_PM, value);
> +
> + return 0;
> +}
> +
> +static int pcf2127_pwrmng_set(struct device *dev, u8 pwrmng)
> +{
> + struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
> +
> + return regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL3,
> + PCF2127_CTRL3_PM,
> + FIELD_PREP(PCF2127_CTRL3_PM, pwrmng));
> +}
> +
> /*
> * In the routines that deal directly with the pcf2127 hardware, we use
> * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch.
> @@ -337,18 +361,15 @@ static int pcf2127_rtc_set_time(struct device *dev, struct rtc_time *tm)
>
> static int pcf2127_param_get(struct device *dev, struct rtc_param *param)
> {
> - struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
> - u32 value;
> + u8 value;
> int ret;
>
> switch (param->param) {
> case RTC_PARAM_BACKUP_SWITCH_MODE:
> - ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL3, &value);
> + ret = pcf2127_pwrmng_get(dev, &value);
> if (ret < 0)
> return ret;
>
> - value = FIELD_GET(PCF2127_CTRL3_PM, value);
> -
> if (value < 0x3)
> param->uvalue = RTC_BSM_LEVEL;
> else if (value < 0x6)
> @@ -367,19 +388,16 @@ static int pcf2127_param_get(struct device *dev, struct rtc_param *param)
>
> static int pcf2127_param_set(struct device *dev, struct rtc_param *param)
> {
> - struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
> u8 mode = 0;
> - u32 value;
> + u8 value;
> int ret;
>
> switch (param->param) {
> case RTC_PARAM_BACKUP_SWITCH_MODE:
> - ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL3, &value);
> + ret = pcf2127_pwrmng_get(dev, &value);
> if (ret < 0)
> return ret;
>
> - value = FIELD_GET(PCF2127_CTRL3_PM, value);
> -
> if (value > 5)
> value -= 5;
> else if (value > 2)
> @@ -400,9 +418,7 @@ static int pcf2127_param_set(struct device *dev, struct rtc_param *param)
> return -EINVAL;
> }
>
> - return regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL3,
> - PCF2127_CTRL3_PM,
> - FIELD_PREP(PCF2127_CTRL3_PM, mode + value));
> + return pcf2127_pwrmng_set(dev, mode + value);
>
> default:
> return -EINVAL;
Reviewed-by: Stefan Kerkmann <s.kerkmann@pengutronix.de>
--
Pengutronix e.K. | Stefan Kerkmann |
Steuerwalder Str. 21 | https://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-128 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 3/4] rtc: add battery low voltage detection feature
2026-03-11 20:02 [PATCH 0/4] rtc: pcf2127: add support for battery low voltage detection Hugo Villeneuve
2026-03-11 20:02 ` [PATCH 1/4] rtc: pcf2127: remove redundant break statement in switch-case Hugo Villeneuve
2026-03-11 20:02 ` [PATCH 2/4] rtc: pcf2127: add pcf2127_pwrmng_get/set Hugo Villeneuve
@ 2026-03-11 20:02 ` Hugo Villeneuve
2026-08-06 12:55 ` Stefan Kerkmann
2026-03-11 20:02 ` [PATCH 4/4] rtc: pcf2127: support battery low voltage detection function Hugo Villeneuve
` (2 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Hugo Villeneuve @ 2026-03-11 20:02 UTC (permalink / raw)
To: alexandre.belloni
Cc: linux-rtc, linux-kernel, hugo, bruno.thomsen, giampiero,
p.rosenberger, antonio, Hugo Villeneuve
From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
Some RTCs have a battery low voltage detection function. Add new feature
so that it can be enabled, disabled or queried at runtime.
Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
---
include/uapi/linux/rtc.h | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/include/uapi/linux/rtc.h b/include/uapi/linux/rtc.h
index 97aca4503a6a3..596eec119bb3a 100644
--- a/include/uapi/linux/rtc.h
+++ b/include/uapi/linux/rtc.h
@@ -134,18 +134,23 @@ struct rtc_param {
#define RTC_FEATURE_CORRECTION 5
#define RTC_FEATURE_BACKUP_SWITCH_MODE 6
#define RTC_FEATURE_ALARM_WAKEUP_ONLY 7
-#define RTC_FEATURE_CNT 8
+#define RTC_FEATURE_BATTERY_LOW_DETECT 8
+#define RTC_FEATURE_CNT 9
/* parameter list */
#define RTC_PARAM_FEATURES 0
#define RTC_PARAM_CORRECTION 1
#define RTC_PARAM_BACKUP_SWITCH_MODE 2
+#define RTC_PARAM_BATTERY_LOW_DETECT 3
#define RTC_BSM_DISABLED 0
#define RTC_BSM_DIRECT 1
#define RTC_BSM_LEVEL 2
#define RTC_BSM_STANDBY 3
+#define RTC_BATTERY_LOW_DETECT_DISABLED 0
+#define RTC_BATTERY_LOW_DETECT_ENABLED 1
+
#define RTC_MAX_FREQ 8192
--
2.47.3
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH 3/4] rtc: add battery low voltage detection feature
2026-03-11 20:02 ` [PATCH 3/4] rtc: add battery low voltage detection feature Hugo Villeneuve
@ 2026-08-06 12:55 ` Stefan Kerkmann
0 siblings, 0 replies; 11+ messages in thread
From: Stefan Kerkmann @ 2026-08-06 12:55 UTC (permalink / raw)
To: Hugo Villeneuve, alexandre.belloni
Cc: linux-rtc, linux-kernel, bruno.thomsen, giampiero, p.rosenberger,
antonio, Hugo Villeneuve
On 3/11/26 21:02, Hugo Villeneuve wrote:
> From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
>
> Some RTCs have a battery low voltage detection function. Add new feature
> so that it can be enabled, disabled or queried at runtime.
>
> Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> ---
> include/uapi/linux/rtc.h | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/include/uapi/linux/rtc.h b/include/uapi/linux/rtc.h
> index 97aca4503a6a3..596eec119bb3a 100644
> --- a/include/uapi/linux/rtc.h
> +++ b/include/uapi/linux/rtc.h
> @@ -134,18 +134,23 @@ struct rtc_param {
> #define RTC_FEATURE_CORRECTION 5
> #define RTC_FEATURE_BACKUP_SWITCH_MODE 6
> #define RTC_FEATURE_ALARM_WAKEUP_ONLY 7
> -#define RTC_FEATURE_CNT 8
> +#define RTC_FEATURE_BATTERY_LOW_DETECT 8
> +#define RTC_FEATURE_CNT 9
>
> /* parameter list */
> #define RTC_PARAM_FEATURES 0
> #define RTC_PARAM_CORRECTION 1
> #define RTC_PARAM_BACKUP_SWITCH_MODE 2
> +#define RTC_PARAM_BATTERY_LOW_DETECT 3
>
> #define RTC_BSM_DISABLED 0
> #define RTC_BSM_DIRECT 1
> #define RTC_BSM_LEVEL 2
> #define RTC_BSM_STANDBY 3
>
> +#define RTC_BATTERY_LOW_DETECT_DISABLED 0
> +#define RTC_BATTERY_LOW_DETECT_ENABLED 1
> +
> #define RTC_MAX_FREQ 8192
>
>
I have opened a PR against util-linux to add support and tested the patchset
with the extended hwclock binary.
See: https://github.com/util-linux/util-linux/pull/4513
Reviewed-by: Stefan Kerkmann <s.kerkmann@pengutronix.de>
Tested-by: Stefan Kerkmann <s.kerkmann@pengutronix.de>
--
Pengutronix e.K. | Stefan Kerkmann |
Steuerwalder Str. 21 | https://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-128 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 4/4] rtc: pcf2127: support battery low voltage detection function
2026-03-11 20:02 [PATCH 0/4] rtc: pcf2127: add support for battery low voltage detection Hugo Villeneuve
` (2 preceding siblings ...)
2026-03-11 20:02 ` [PATCH 3/4] rtc: add battery low voltage detection feature Hugo Villeneuve
@ 2026-03-11 20:02 ` Hugo Villeneuve
2026-08-06 12:55 ` Stefan Kerkmann
2026-07-29 15:18 ` [PATCH 0/4] rtc: pcf2127: add support for battery low voltage detection Stefan Kerkmann
2026-08-25 7:31 ` Marc Kleine-Budde
5 siblings, 1 reply; 11+ messages in thread
From: Hugo Villeneuve @ 2026-03-11 20:02 UTC (permalink / raw)
To: alexandre.belloni
Cc: linux-rtc, linux-kernel, hugo, bruno.thomsen, giampiero,
p.rosenberger, antonio, Hugo Villeneuve
From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
Add support for parameter RTC_PARAM_BATTERY_LOW_DETECT in RTC_PARAM_SET
ioctl to enable/disable/query battery low voltage detection. This is
especially relevant on the pcf2131 where this function is disabled by
default, contrary to the pcf2127.
Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
---
drivers/rtc/rtc-pcf2127.c | 60 ++++++++++++++++++++++++++++++++-------
1 file changed, 50 insertions(+), 10 deletions(-)
diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c
index 0605295026564..05b08867ffcb3 100644
--- a/drivers/rtc/rtc-pcf2127.c
+++ b/drivers/rtc/rtc-pcf2127.c
@@ -364,12 +364,12 @@ static int pcf2127_param_get(struct device *dev, struct rtc_param *param)
u8 value;
int ret;
+ ret = pcf2127_pwrmng_get(dev, &value);
+ if (ret < 0)
+ return ret;
+
switch (param->param) {
case RTC_PARAM_BACKUP_SWITCH_MODE:
- ret = pcf2127_pwrmng_get(dev, &value);
- if (ret < 0)
- return ret;
-
if (value < 0x3)
param->uvalue = RTC_BSM_LEVEL;
else if (value < 0x6)
@@ -379,6 +379,14 @@ static int pcf2127_param_get(struct device *dev, struct rtc_param *param)
break;
+ case RTC_PARAM_BATTERY_LOW_DETECT:
+ if (value == 0x0 || value == 0x3)
+ param->uvalue = RTC_BATTERY_LOW_DETECT_ENABLED;
+ else
+ param->uvalue = RTC_BATTERY_LOW_DETECT_DISABLED;
+
+ break;
+
default:
return -EINVAL;
}
@@ -392,12 +400,12 @@ static int pcf2127_param_set(struct device *dev, struct rtc_param *param)
u8 value;
int ret;
+ ret = pcf2127_pwrmng_get(dev, &value);
+ if (ret < 0)
+ return ret;
+
switch (param->param) {
case RTC_PARAM_BACKUP_SWITCH_MODE:
- ret = pcf2127_pwrmng_get(dev, &value);
- if (ret < 0)
- return ret;
-
if (value > 5)
value -= 5;
else if (value > 2)
@@ -418,13 +426,45 @@ static int pcf2127_param_set(struct device *dev, struct rtc_param *param)
return -EINVAL;
}
- return pcf2127_pwrmng_set(dev, mode + value);
+ break;
+
+ case RTC_PARAM_BATTERY_LOW_DETECT:
+ if (value > 5) {
+ value -= 5;
+ mode = 5;
+ } else if (value > 2) {
+ value -= 3;
+ mode = 3;
+ }
+
+ switch (param->uvalue) {
+ case RTC_BATTERY_LOW_DETECT_DISABLED:
+ if (mode != 5)
+ if (value == 0)
+ value = 1;
+
+ break;
+ case RTC_BATTERY_LOW_DETECT_ENABLED:
+ if (mode != 5)
+ value = 0; /* Enable battery low detection. */
+ else
+ return -EINVAL; /*
+ * battery low detection can't be enabled if
+ * battery switch over is disabled.
+ */
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ break;
default:
return -EINVAL;
}
- return 0;
+ return pcf2127_pwrmng_set(dev, mode + value);
}
static int pcf2127_rtc_ioctl(struct device *dev,
--
2.47.3
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH 4/4] rtc: pcf2127: support battery low voltage detection function
2026-03-11 20:02 ` [PATCH 4/4] rtc: pcf2127: support battery low voltage detection function Hugo Villeneuve
@ 2026-08-06 12:55 ` Stefan Kerkmann
0 siblings, 0 replies; 11+ messages in thread
From: Stefan Kerkmann @ 2026-08-06 12:55 UTC (permalink / raw)
To: Hugo Villeneuve, alexandre.belloni
Cc: linux-rtc, linux-kernel, bruno.thomsen, giampiero, p.rosenberger,
antonio, Hugo Villeneuve
On 3/11/26 21:02, Hugo Villeneuve wrote:
> From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
>
> Add support for parameter RTC_PARAM_BATTERY_LOW_DETECT in RTC_PARAM_SET
> ioctl to enable/disable/query battery low voltage detection. This is
> especially relevant on the pcf2131 where this function is disabled by
> default, contrary to the pcf2127.
>
> Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> ---
> drivers/rtc/rtc-pcf2127.c | 60 ++++++++++++++++++++++++++++++++-------
> 1 file changed, 50 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c
> index 0605295026564..05b08867ffcb3 100644
> --- a/drivers/rtc/rtc-pcf2127.c
> +++ b/drivers/rtc/rtc-pcf2127.c
> @@ -364,12 +364,12 @@ static int pcf2127_param_get(struct device *dev, struct rtc_param *param)
> u8 value;
> int ret;
>
> + ret = pcf2127_pwrmng_get(dev, &value);
> + if (ret < 0)
> + return ret;
> +
> switch (param->param) {
> case RTC_PARAM_BACKUP_SWITCH_MODE:
> - ret = pcf2127_pwrmng_get(dev, &value);
> - if (ret < 0)
> - return ret;
> -
> if (value < 0x3)
> param->uvalue = RTC_BSM_LEVEL;
> else if (value < 0x6)
> @@ -379,6 +379,14 @@ static int pcf2127_param_get(struct device *dev, struct rtc_param *param)
>
> break;
>
> + case RTC_PARAM_BATTERY_LOW_DETECT:
> + if (value == 0x0 || value == 0x3)
> + param->uvalue = RTC_BATTERY_LOW_DETECT_ENABLED;
> + else
> + param->uvalue = RTC_BATTERY_LOW_DETECT_DISABLED;
> +
> + break;
> +
> default:
> return -EINVAL;
> }
> @@ -392,12 +400,12 @@ static int pcf2127_param_set(struct device *dev, struct rtc_param *param)
> u8 value;
> int ret;
>
> + ret = pcf2127_pwrmng_get(dev, &value);
> + if (ret < 0)
> + return ret;
> +
> switch (param->param) {
> case RTC_PARAM_BACKUP_SWITCH_MODE:
> - ret = pcf2127_pwrmng_get(dev, &value);
> - if (ret < 0)
> - return ret;
> -
> if (value > 5)
> value -= 5;
> else if (value > 2)
> @@ -418,13 +426,45 @@ static int pcf2127_param_set(struct device *dev, struct rtc_param *param)
> return -EINVAL;
> }
>
> - return pcf2127_pwrmng_set(dev, mode + value);
> + break;
> +
> + case RTC_PARAM_BATTERY_LOW_DETECT:
> + if (value > 5) {
> + value -= 5;
> + mode = 5;
> + } else if (value > 2) {
> + value -= 3;
> + mode = 3;
> + }
> +
> + switch (param->uvalue) {
> + case RTC_BATTERY_LOW_DETECT_DISABLED:
> + if (mode != 5)
> + if (value == 0)
> + value = 1;
> +
> + break;
> + case RTC_BATTERY_LOW_DETECT_ENABLED:
> + if (mode != 5)
> + value = 0; /* Enable battery low detection. */
> + else
> + return -EINVAL; /*
> + * battery low detection can't be enabled if
> + * battery switch over is disabled.
> + */
> + break;
> +
> + default:
> + return -EINVAL;
> + }
> +
> + break;
>
> default:
> return -EINVAL;
> }
>
> - return 0;
> + return pcf2127_pwrmng_set(dev, mode + value);
> }
>
> static int pcf2127_rtc_ioctl(struct device *dev,
Works as expected, thank you!
Reviewed-by: Stefan Kerkmann <s.kerkmann@pengutronix.de>
Tested-by: Stefan Kerkmann <s.kerkmann@pengutronix.de>
--
Pengutronix e.K. | Stefan Kerkmann |
Steuerwalder Str. 21 | https://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-128 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/4] rtc: pcf2127: add support for battery low voltage detection
2026-03-11 20:02 [PATCH 0/4] rtc: pcf2127: add support for battery low voltage detection Hugo Villeneuve
` (3 preceding siblings ...)
2026-03-11 20:02 ` [PATCH 4/4] rtc: pcf2127: support battery low voltage detection function Hugo Villeneuve
@ 2026-07-29 15:18 ` Stefan Kerkmann
2026-08-25 12:59 ` Hugo Villeneuve
2026-08-25 7:31 ` Marc Kleine-Budde
5 siblings, 1 reply; 11+ messages in thread
From: Stefan Kerkmann @ 2026-07-29 15:18 UTC (permalink / raw)
To: Hugo Villeneuve, alexandre.belloni
Cc: linux-rtc, linux-kernel, bruno.thomsen, giampiero, p.rosenberger,
antonio, Hugo Villeneuve
Hello Hugo,
On 3/11/26 21:02, Hugo Villeneuve wrote:
> From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
>
> Hello,
> this patch series adds support for battery low voltage detection configuration
> for RTC devicesm, with specifc changes targeted at the pcf2127/2131 devices.
>
> The origin of this patch goes back to the initial commit to add support for the
> PCF2131 device. On the PCF2131, the battery low voltage detection is disabled by
> default at the hardware level, contrary to the PCF2127 where it is enabled by
> default. Because of that, a lot of people are stuck with a PCF2131 RTC device
> using a battery backup, but unable to use it!
>
> A lot of people are writing to me in private emails to report this as a bug
> in the PCF2131 driver. Others (and me) have proposed to implement device tree
> properties to enable these functions, but this was rejected [1][2][3].
>
> It is important to note that some projects do not have the luxury to modify
> the bootloder to enable that function at boot, and for these having a DT
> property that could be put in a DT overlay would simplify a lot their life.
> Also having to rely on a userspace application to configure the RTC is also
> not ideal, as some projects use stock Debian distros (for example), and
> adding a new application to their repository is not trivial or easy.
>
> So as the next best thing, this patch aims to add what is missing in the driver,
> the ability to enable/disable the battery low voltage detection with ioctls,
> similarly to what is done with the BSM.
>
Thank you for the series. We have customer that has this exact use case:
Enabling the backup battery switch-over and low battery detection on a pcf2131
rtc. With util-linux's hwclock the former can already be enabled e.g. hwclock
--param-set bsm <xyz> and for the later this patch series would enable it as well.
> This patch has been tested on a custom board with a PCF2131 and using my
> userspace application:
>
> git clone -b batlow_param git@git.hugovil.com:repos/hvrtc.git
>
If this series gets merged I can sent a PR to util-linux to enable the low
battery detection via hwclock as well.
> Thank you.
>
> Link: https://lore.kernel.org/linux-rtc/20190910143945.9364-1-bruno.thomsen@gmail.com/ [1]
> Link: https://lore.kernel.org/linux-rtc/20191211163354.GC1463890@piout.net/ [2]
> Link: https://lore.kernel.org/linux-rtc/20230123170731.6064430c50f5fb7b484d8734@hugovil.com/ [3]
>
> Hugo Villeneuve (4):
> rtc: pcf2127: remove redundant break statement in switch-case
> rtc: pcf2127: add pcf2127_pwrmng_get/set
> rtc: add battery low voltage detection feature
> rtc: pcf2127: support battery low voltage detection function
>
> drivers/rtc/rtc-pcf2127.c | 94 ++++++++++++++++++++++++++++++---------
> include/uapi/linux/rtc.h | 7 ++-
> 2 files changed, 80 insertions(+), 21 deletions(-)
>
>
> base-commit: 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f
Best regards,
Stefan
--
Pengutronix e.K. | Stefan Kerkmann |
Steuerwalder Str. 21 | https://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-128 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH 0/4] rtc: pcf2127: add support for battery low voltage detection
2026-07-29 15:18 ` [PATCH 0/4] rtc: pcf2127: add support for battery low voltage detection Stefan Kerkmann
@ 2026-08-25 12:59 ` Hugo Villeneuve
0 siblings, 0 replies; 11+ messages in thread
From: Hugo Villeneuve @ 2026-08-25 12:59 UTC (permalink / raw)
To: Stefan Kerkmann
Cc: alexandre.belloni, linux-rtc, linux-kernel, bruno.thomsen,
giampiero, p.rosenberger, antonio, Hugo Villeneuve
Hi Stefan,
On Wed, 29 Jul 2026 17:18:59 +0200
Stefan Kerkmann <s.kerkmann@pengutronix.de> wrote:
> Hello Hugo,
>
> On 3/11/26 21:02, Hugo Villeneuve wrote:
> > From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> >
> > Hello,
> > this patch series adds support for battery low voltage detection configuration
> > for RTC devicesm, with specifc changes targeted at the pcf2127/2131 devices.
> >
> > The origin of this patch goes back to the initial commit to add support for the
> > PCF2131 device. On the PCF2131, the battery low voltage detection is disabled by
> > default at the hardware level, contrary to the PCF2127 where it is enabled by
> > default. Because of that, a lot of people are stuck with a PCF2131 RTC device
> > using a battery backup, but unable to use it!
> >
> > A lot of people are writing to me in private emails to report this as a bug
> > in the PCF2131 driver. Others (and me) have proposed to implement device tree
> > properties to enable these functions, but this was rejected [1][2][3].
> >
> > It is important to note that some projects do not have the luxury to modify
> > the bootloder to enable that function at boot, and for these having a DT
> > property that could be put in a DT overlay would simplify a lot their life.
> > Also having to rely on a userspace application to configure the RTC is also
> > not ideal, as some projects use stock Debian distros (for example), and
> > adding a new application to their repository is not trivial or easy.
> >
> > So as the next best thing, this patch aims to add what is missing in the driver,
> > the ability to enable/disable the battery low voltage detection with ioctls,
> > similarly to what is done with the BSM.
> >
>
> Thank you for the series. We have customer that has this exact use case:
Ok, a lot of people affected by this...
>
> Enabling the backup battery switch-over and low battery detection on a pcf2131
> rtc. With util-linux's hwclock the former can already be enabled e.g. hwclock
> --param-set bsm <xyz> and for the later this patch series would enable it as well.
>
> > This patch has been tested on a custom board with a PCF2131 and using my
> > userspace application:
> >
> > git clone -b batlow_param git@git.hugovil.com:repos/hvrtc.git
> >
>
> If this series gets merged I can sent a PR to util-linux to enable the low
> battery detection via hwclock as well.
Good.
Unfortunately, I haven't received any feedback from the RTC
maintainer(s) about this series, nor have I received any answers
to my previous inquiries about this problem.
I send patches to other kernel subsystem, and eventually I always
receive feedback, but RTC seems to be in a
different category. I sometimes wonder if there is still an
active RTC maintainer...
Hugo.
> > Thank you.
> >
> > Link: https://lore.kernel.org/linux-rtc/20190910143945.9364-1-bruno.thomsen@gmail.com/ [1]
> > Link: https://lore.kernel.org/linux-rtc/20191211163354.GC1463890@piout.net/ [2]
> > Link: https://lore.kernel.org/linux-rtc/20230123170731.6064430c50f5fb7b484d8734@hugovil.com/ [3]
> >
> > Hugo Villeneuve (4):
> > rtc: pcf2127: remove redundant break statement in switch-case
> > rtc: pcf2127: add pcf2127_pwrmng_get/set
> > rtc: add battery low voltage detection feature
> > rtc: pcf2127: support battery low voltage detection function
> >
> > drivers/rtc/rtc-pcf2127.c | 94 ++++++++++++++++++++++++++++++---------
> > include/uapi/linux/rtc.h | 7 ++-
> > 2 files changed, 80 insertions(+), 21 deletions(-)
> >
> >
> > base-commit: 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f
>
> Best regards,
> Stefan
>
> --
> Pengutronix e.K. | Stefan Kerkmann |
> Steuerwalder Str. 21 | https://www.pengutronix.de/ |
> 31137 Hildesheim, Germany | Phone: +49-5121-206917-128 |
> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
--
Hugo Villeneuve
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/4] rtc: pcf2127: add support for battery low voltage detection
2026-03-11 20:02 [PATCH 0/4] rtc: pcf2127: add support for battery low voltage detection Hugo Villeneuve
` (4 preceding siblings ...)
2026-07-29 15:18 ` [PATCH 0/4] rtc: pcf2127: add support for battery low voltage detection Stefan Kerkmann
@ 2026-08-25 7:31 ` Marc Kleine-Budde
5 siblings, 0 replies; 11+ messages in thread
From: Marc Kleine-Budde @ 2026-08-25 7:31 UTC (permalink / raw)
To: Hugo Villeneuve
Cc: alexandre.belloni, linux-rtc, linux-kernel, bruno.thomsen,
giampiero, p.rosenberger, antonio, Hugo Villeneuve
[-- Attachment #1: Type: text/plain, Size: 2966 bytes --]
Hello Alexandre,
can you pick up this patch? It has been tested by Stefan Kerkmann and
it's working for our use case.
regards,
Marc
On 11.03.2026 16:02:26, Hugo Villeneuve wrote:
> From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
>
> Hello,
> this patch series adds support for battery low voltage detection configuration
> for RTC devicesm, with specifc changes targeted at the pcf2127/2131 devices.
>
> The origin of this patch goes back to the initial commit to add support for the
> PCF2131 device. On the PCF2131, the battery low voltage detection is disabled by
> default at the hardware level, contrary to the PCF2127 where it is enabled by
> default. Because of that, a lot of people are stuck with a PCF2131 RTC device
> using a battery backup, but unable to use it!
>
> A lot of people are writing to me in private emails to report this as a bug
> in the PCF2131 driver. Others (and me) have proposed to implement device tree
> properties to enable these functions, but this was rejected [1][2][3].
>
> It is important to note that some projects do not have the luxury to modify
> the bootloder to enable that function at boot, and for these having a DT
> property that could be put in a DT overlay would simplify a lot their life.
> Also having to rely on a userspace application to configure the RTC is also
> not ideal, as some projects use stock Debian distros (for example), and
> adding a new application to their repository is not trivial or easy.
>
> So as the next best thing, this patch aims to add what is missing in the driver,
> the ability to enable/disable the battery low voltage detection with ioctls,
> similarly to what is done with the BSM.
>
> This patch has been tested on a custom board with a PCF2131 and using my
> userspace application:
>
> git clone -b batlow_param git@git.hugovil.com:repos/hvrtc.git
>
> Thank you.
>
> Link: https://lore.kernel.org/linux-rtc/20190910143945.9364-1-bruno.thomsen@gmail.com/ [1]
> Link: https://lore.kernel.org/linux-rtc/20191211163354.GC1463890@piout.net/ [2]
> Link: https://lore.kernel.org/linux-rtc/20230123170731.6064430c50f5fb7b484d8734@hugovil.com/ [3]
>
> Hugo Villeneuve (4):
> rtc: pcf2127: remove redundant break statement in switch-case
> rtc: pcf2127: add pcf2127_pwrmng_get/set
> rtc: add battery low voltage detection feature
> rtc: pcf2127: support battery low voltage detection function
>
> drivers/rtc/rtc-pcf2127.c | 94 ++++++++++++++++++++++++++++++---------
> include/uapi/linux/rtc.h | 7 ++-
> 2 files changed, 80 insertions(+), 21 deletions(-)
>
>
> base-commit: 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f
> --
> 2.47.3
>
>
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung Nürnberg | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread