[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <6bdbfe74-1765-408e-9192-e54accaa22f4@vdwaa.nl>
Date: Mon, 3 Nov 2025 22:31:01 +0100
From: Jelle van der Waa <jelle@...aa.nl>
To: Rong Zhang <i@...g.moe>, Ilpo Järvinen
<ilpo.jarvinen@...ux.intel.com>
Cc: Ike Panhc <ikepanhc@...il.com>, Mark Pearson <mpearson-lenovo@...ebb.ca>,
"Derek J. Clark" <derekjohn.clark@...il.com>,
Hans de Goede <hansg@...nel.org>, platform-driver-x86@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 0/2] platform/x86: ideapad-laptop: Add charge_types:Fast
(Rapid Charge)
On 11/2/25 20:24, Rong Zhang wrote:
> On Mon, 2025-11-03 at 02:57 +0800, Rong Zhang wrote:
>> Hi Jelle,
>>
>> On Sun, 2025-11-02 at 17:09 +0100, Jelle van der Waa wrote:
>>> On 10/20/25 21:24, Rong Zhang wrote:
>>>> The GBMD/SBMC interface on IdeaPad/ThinkBook supports Rapid Charge mode
>>>> (charge_types: Fast) in addition to Conservation Mode (charge_types:
>>>> Long_Life).
>>>>
>>>> This patchset exposes these two modes while carefully maintaining their
>>>> mutually exclusive state, which aligns with the behavior of manufacturer
>>>> utilities on Windows.
>>>>
>>>> Tested on ThinkBook 14 G7+ ASP.
>>>
>>> Tested this patch on my Lenovo Ideapad U330p, it now advertises that
>>> `Fast` is a supported charge_type although my laptop does not seem to
>>> support it:
>>>
>>> [root@...hlinux jelle]# cat /sys/class/power_supply/BAT1/charge_types
>>> Fast [Standard] Long_Life
>>> [root@...hlinux jelle]# echo 'Fast' >
>>> /sys/class/power_supply/BAT1/charge_types
>>> [root@...hlinux jelle]# cat /sys/class/power_supply/BAT1/charge_types
>>> Fast [Standard] Long_Life
>>
>> Ahh, then we need an approach to determine if it is supported on a
>> specific device.
>>
>> Glancing at the disassembled DSDT.dsl of my device, I found:
>>
>> Method (GBMD, 0, NotSerialized)
>> {
>> [...]
>> If ((One == QCGS))
>> {
>> Local0 |= 0x00020000
>> }
>> [...]
>> }
>>
>> BIT(17) of GBMD is 1 on my device. Maybe QCGS means "Quick CharGe
>> Supported?"
>>
>> With this assumption, I did some random Internet digging. The same bit
>> on other devices is called QKSP ("QuicK charge SuPported?"), SQCG
>> ("Support Quick CharGe?"), or QCBX (see below).
>>
>> Method (GBMD, 0, NotSerialized)
>> {
>> [...]
>> If ((One == QCBX))
>> {
>> If ((One == QCHO))
>> {
>> Local0 |= 0x04
>> }
>> }
>> [...]
>> If ((One == QCBX))
>> {
>> Local0 |= 0x00020000
>> }
>> [...]
>> }
>>
>> https://badland.io/static/acpidump.txt
>>
>> 0x04 is BIT(2)/GBMD_RAPID_CHARGE_STATE_BIT. With all these pieces of
>> information, I presume BIT(17) of GBMD is what we are searching for.
>>
>>> I'm wondering if the battery extension API allows to not advertise a
>>> property if it isn't supported or if it should at least return -EINVAL.
>>
>> We can achieve this by defining multiple struct power_supply_ext. See
>> drivers/power/supply/cros_charge-control.c.
>>
>> Could you test the patch below (based on "review-ilpo-next")?
>
> Note: this patch is just a quick PoC (I am going to sleep now, zzz...).
> ideapad_psy_ext_{get,set}_prop need to be reorganized to properly
> support your device. If `cat charge_types' doesn't show `Fast', we're
> in the right direction.
Thanks for the quick patch!
Tested it on my Ideapad U330p:
[root@...hlinux ~]# cat /sys/class/power_supply/BAT1/charge_types
[Standard] Long_Life
[root@...hlinux ~]# echo Long_Life >
/sys/class/power_supply/BAT1/charge_types
[root@...hlinux ~]# cat /sys/class/power_supply/BAT1/charge_types
Standard [Long_Life]
I'm however still waiting on the laptop to slowly charge to 80% to
confirm that charge limits are applied.
Greetings,
Jelle van der Waa
Powered by blists - more mailing lists