[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <91e0d952fd774e769e2d24ce2165df18@xiaomi.com>
Date: Mon, 22 Sep 2025 09:29:20 +0000
From: 卢国宏 <luguohong@...omi.com>
To: Dmitry Torokhov <dmitry.torokhov@...il.com>,
José Expósito <jose.exposito89@...il.com>
CC: "linux-input@...r.kernel.org" <linux-input@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"jikos@...nel.org" <jikos@...nel.org>, "bentiss@...nel.org"
<bentiss@...nel.org>, 李鹏 <lipeng43@...omi.com>,
Fei1 Jiang 蒋飞 <jiangfei1@...omi.com>,
宋密密 <songmimi@...omi.com>, 卢国宏
<luguohong@...omi.com>
Subject: 答复: [External Mail]Re: The zero power level of the HID device in kernel 6.12 is not reported from the kernel to the upper layer.
Hi, jose!
I don't see any Android handling of ""Fully Discharged" value (0x00850047), section 31.3.1"".
________________________________________
发件人: Dmitry Torokhov <dmitry.torokhov@...il.com>
发送时间: 2025年9月19日 23:04
收件人: José Expósito
抄送: 卢国宏; linux-input@...r.kernel.org; linux-kernel@...r.kernel.org; jikos@...nel.org; bentiss@...nel.org; 李鹏; Fei1 Jiang 蒋飞; 宋密密
主题: [External Mail]Re: The zero power level of the HID device in kernel 6.12 is not reported from the kernel to the upper layer.
[外部邮件] 此邮件来源于小米公司外部,请谨慎处理。若对邮件安全性存疑,请将邮件转发给misec@...omi.com进行反馈
Hi,
On Fri, Sep 19, 2025 at 10:40:38AM +0200, José Expósito wrote:
> Hi 卢国宏,
>
> Thanks for reporting this issue.
>
> In the furure, when reporting bugs, it is prefered to send them to the
> mailing list (linux-input@...r.kernel.org and linux-kernel@...r.kernel.org)
> to discuss them in public.
>
> Let me forward your email to the mailing list and also CC Dmitry, the
> author of that code, who might help us understand the problem.
>
> On Tue, Sep 16, 2025 at 12:29:32PM +0000, 卢国宏 wrote:
> > Hi, jose!
> >
> > We encountered a problem where the zero battery level of the HID device
> > in kernel 6.12 was not reported from the kernel to the upper layer.
> > I checked the HID protocol and it doesn't say that there is no need to
> > report the zero power of the HID device. For details, see page 381 of
> > the HID protocol, 31.4 Battery Measures. "Absolute State Of Charge DV
> > The predicted remaining battery capacity expressed as a percentage of
> > design capacity. (Units are %. The value may be greater than 100%.)".
> > However, in the file hid-input.c in kernel 6.12, the following code:
> >
> > static void hidinput_update_battery(struct hid_device *dev, unsigned int usage,
> > int value)
> > {
> > int capacity;
> >
> > if (!dev->battery)
> > return;
> >
> > if (hidinput_update_battery_charge_status(dev, usage, value)) {
> > power_supply_changed(dev->battery);
> > return;
> > }
> >
> > if (value == 0 || value < dev->battery_min || value > dev->battery_max)
> > return;
> >
> > capacity = hidinput_scale_battery_capacity(dev, value);
> >
> > ......
> >
> > }
> >
> > The parameter value is the power level. When the value is 0, the above code
> > returns without reporting.
> > Is this a problem?
> > We're currently experiencing this issue on Android 16. The upper layer of
> > Android needs to receive a zero battery level before it can take appropriate
> > action.
What kind of action are we talking about? Section 31 of the HID
specification defines events for "Smart Battery" ("To comply with the
Smart Battery Specification, the Battery System must support the
functions defined in the Battery and Charger usage tables. For details,
see Section 4.2, “Battery System Page (x85).”) and is typically used for
"battery pack for cellular phones (principal source), the battery
pack(s) for notebook computers (auxiliary source), and the sealed
batteries in uninterruptible power supplies (auxiliary source)."
Is your use case main battery or battery in a stylus or some other
peripheral?
--->>>
What we are discussing is the code implementation of Section 31 of the HID protocol: 31 Battery System Page (0x85).
Our scenario is: an Android phone is connected to a handle via USB. The handle is a HID device with a battery. The power of the battery in the handle is sent to the bottom layer (kernel) of the phone via USB. The bottom layer of the phone then reports this power to the upper layer of Android through the HID driver.
> > Could you please help me evaluate whether we should remove the behavior of
> > returning to zero battery?
> >
> > Thanks!
> > #/******本邮件及其附件含有小米公司的保密信息,仅限于发送给上面地址中列出的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本邮件! This e-mail and its attachments contain confidential information from XIAOMI, which is intended only for the person or entity whose address is listed above. Any use of the information contained herein in any way (including, but not limited to, total or partial disclosure, reproduction, or dissemination) by persons other than the intended recipient(s) is prohibited. If you receive this e-mail in error, please notify the sender by phone or email immediately and delete it!******/#
>
> It indeed looks like it could be problematic.
>
> Values are allowed ot be grater than 100, however, I didn't find
> any references to negative values. Since it is a percentage, it
> make sense to limit it to 0%, i.e., not allowing negative values.
>
> I think that removing the "value == 0" check, or replacing it with
> "value < 0" should fix the issue.
If we are dealing with peripherals (stylus for example) - for which this
piece of code was written - how a battery powered peripheral that is
fully discharged can communicate it's battery state of 0?
--->>>
Our controller is like a power bank. When the battery level is above 0, it will charge the phone. When the battery level reaches 0, it will stop charging the phone. Because the controller consumes very little power, it can still work for a while. However, you need to inform the phone of the 0 battery level so that the phone will display a relevant prompt.
I think we have observed bogus reports with 0 values (IIRC trying to
query battery strength when stylus is not in proximity would yield
responses with 0 strength).
Thanks.
--
Dmitry
#/******本邮件及其附件含有小米公司的保密信息,仅限于发送给上面地址中列出的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本邮件! This e-mail and its attachments contain confidential information from XIAOMI, which is intended only for the person or entity whose address is listed above. Any use of the information contained herein in any way (including, but not limited to, total or partial disclosure, reproduction, or dissemination) by persons other than the intended recipient(s) is prohibited. If you receive this e-mail in error, please notify the sender by phone or email immediately and delete it!******/#
Powered by blists - more mailing lists