Re: [PATCH 5.4 162/434] power: supply: cpcap-battery: Check voltage before orderly_poweroff

Pavel Machek
2019-12-30T10:14:24Z

[-- Attachment #1: Type: text/plain, Size: 2330 bytes --]

On Sun 2019-12-29 18:23:35, Greg Kroah-Hartman wrote:
> From: Tony Lindgren <tony@atomide.com>
>
> [ Upstream commit 639c1524da3b273d20c42ff2387d08eb4b12e903 ]
>
> We can get the low voltage interrupt trigger sometimes way too early,
> maybe because of CPU load spikes. This causes orderly_poweroff() be
> called too easily.
>
> Let's check the voltage before orderly_poweroff in case it was not
> yet a permanent condition. We will be getting more interrupts anyways
> if the condition persists.
>
> Let's also show the measured voltages for low battery and battery
> empty warnings since we have them.

I don't believe this is good idea for stable.

Yes, it may be useful on older batteries, but may cause too late
shutdowns on new batteries, or something like that. Certainly needs a
lot more testing than it got.

Best regards,
Pavel

> Cc: Merlijn Wajer <merlijn@wizzup.org>
> Cc: Pavel Machek <pavel@ucw.cz>
> Signed-off-by: Tony Lindgren <tony@atomide.com>
> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> Signed-off-by: Sasha Levin <sashal@kernel.org>
> ---
> drivers/power/supply/cpcap-battery.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/power/supply/cpcap-battery.c b/drivers/power/supply/cpcap-battery.c
> index 61d6447d1966..00a96e4a1cdc 100644
> --- a/drivers/power/supply/cpcap-battery.c
> +++ b/drivers/power/supply/cpcap-battery.c
> @@ -562,12 +562,14 @@ static irqreturn_t cpcap_battery_irq_thread(int irq, void *data)
> switch (d->action) {
> case CPCAP_BATTERY_IRQ_ACTION_BATTERY_LOW:
> if (latest->current_ua >= 0)
> - dev_warn(ddata->dev, "Battery low at 3.3V!\n");
> + dev_warn(ddata->dev, "Battery low at %imV!\n",
> + latest->voltage / 1000);
> break;
> case CPCAP_BATTERY_IRQ_ACTION_POWEROFF:
> - if (latest->current_ua >= 0) {
> + if (latest->current_ua >= 0 && latest->voltage <= 3200000) {
> dev_emerg(ddata->dev,
> - "Battery empty at 3.1V, powering off\n");
> + "Battery empty at %imV, powering off\n",
> + latest->voltage / 1000);
> orderly_poweroff(true);
> }
> break;

--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]