<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/linux.git/drivers/hid/hid-input.c, branch linux-7.2.y</title>
<subtitle>Linux kernel stable tree (mirror)</subtitle>
<id>https://git.radix-linux.su/kernel/linux.git/atom?h=linux-7.2.y</id>
<link rel='self' href='https://git.radix-linux.su/kernel/linux.git/atom?h=linux-7.2.y'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/'/>
<updated>2026-08-27T12:35:26+00:00</updated>
<entry>
<title>HID: input: read battery capacity from its actual report offset</title>
<updated>2026-08-27T12:35:26+00:00</updated>
<author>
<name>Jose Villaseñor Montfort</name>
<email>pepemontfort@gmail.com</email>
</author>
<published>2026-07-28T20:13:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=bf05f17b8439ab8da12f669c4f2ca6de3474b307'/>
<id>urn:sha1:bf05f17b8439ab8da12f669c4f2ca6de3474b307</id>
<content type='text'>
commit d07644524b6511b622ee7b0e2e68c9ee43d522a4 upstream.

hidinput_query_battery_capacity() assumes the state-of-charge value is
the first byte following the report ID (buf[1]) and ignores where the
battery field actually sits within the report.

An Apple Magic Trackpad 2 precedes the AbsoluteStateOfCharge byte with a
byte of status flags in its battery reports, so this query returns the
flags byte instead of the charge level.

The device happens to make that easy to observe, because it exposes the
same cell twice: its report descriptor declares AbsoluteStateOfCharge in
two reports (0x90 and 0x9b), so hidinput_setup_battery() registers two
power supplies. Only the first one is refreshed by hid-magicmouse -- it
uses hid_get_battery(), which returns the first battery of the list --
and that refresh goes through the report event path, which parses the
field correctly. Nothing ever reports the second one, so every read of
its capacity takes the query path above. On a USB-C Magic Trackpad over
USB, on an unpatched 7.1.5:

  hid-&lt;serial&gt;-battery-144 = 100%  (Charging)      &lt;- report event path
  hid-&lt;serial&gt;-battery-155 =   3%  (Discharging)   &lt;- query path

Both are the same physical battery. A raw HIDIOCGINPUT of the two
reports at that same moment:

  report 0x90 -&gt; [90 03 64]
  report 0x9b -&gt; [9b 03 64 64 00 00 10 00 00 00 00 00 00 00]
                     ^flags ^SoC = 0x64 = 100%

The device answers correctly in both cases; only the offset the kernel
reads the capacity from is wrong. 0x03 is the flags byte (present,
charging), reported as "3%".

Bluetooth takes the same query path for its capacity, where the trackpad
reported a bogus near-constant ~4% -- 0b100, the FullyCharged flag --
regardless of the real charge.

Store the battery field's offset within the report at setup time and use
it when querying, so the capacity is read from its real position. The
report event path already parses the field correctly through the HID
core; only the explicit GET_REPORT query was wrong.

Devices whose capacity field is the first field in the report have a
report_offset of 0 and are unaffected (buf[1 + 0] == buf[1]).

Fixes: 581c4484769e ("HID: input: map digitizer battery usage")
Cc: stable@vger.kernel.org
Signed-off-by: Jose Villaseñor Montfort &lt;pepemontfort@gmail.com&gt;
Reviewed-by: Alec Hall &lt;signshop.alec@gmail.com&gt;
Signed-off-by: Jiri Kosina &lt;jkosina@suse.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>HID: magicmouse: fix battery reporting for Bluetooth Magic Trackpad USB-C</title>
<updated>2026-08-27T12:35:25+00:00</updated>
<author>
<name>Andrei Fed</name>
<email>andfed.net@gmail.com</email>
</author>
<published>2026-07-06T17:55:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=8384a2e1a9abd3634556f71ce3bf882876308238'/>
<id>urn:sha1:8384a2e1a9abd3634556f71ce3bf882876308238</id>
<content type='text'>
commit a1556b48efc157fdda07b52ecc56c7bd1e1786f0 upstream.

The Apple Magic Trackpad 2 (USB-C) reports a wildly wrong battery
capacity over Bluetooth, for example a constant 4% for a pack that is
actually at 74%.

The device's battery input report (0x90) is laid out as
[report-id][status][charge]. hid-input's synchronous capacity query,
hidinput_query_battery_capacity(), assumes the common
[report-id][capacity] layout and returns buf[1], which for this device
is the status byte rather than the charge (buf[2]).

magicmouse_fetch_battery(), which requests the battery report through
hid_hw_request() so the reply is decoded via the report descriptor at
the correct field offset, is gated to the USB models and never runs
over Bluetooth. The device does not push battery reports on its own
either, except a single one at connect time, which is delivered while
probe holds driver_input_lock and is silently dropped. All userspace
reads therefore go through the misparsing query, and the device is
stuck reporting its status byte as the capacity.

Enabling the fetch for Bluetooth is not sufficient on its own: user
space reacts to the power_supply registration immediately, so a query
is typically already in flight when the fetch reply is parsed.
hidinput_get_battery_property() stores the query result and marks the
battery as queried without rechecking whether a report arrived while
it was waiting, clobbering the just-reported correct value with the
misparsed one.

Fix this by adding HID_BATTERY_QUIRK_AVOID_QUERY for the Bluetooth
Magic Trackpad USB-C so the misparsing query path is never used, and
by fetching the battery at the end of probe for this device. hidp has
no asynchronous request() callback, so the fetch is serviced
synchronously via __hid_request() while probe still holds
driver_input_lock; call hid_device_io_start() first so the reply is
processed instead of being discarded.

Tested with a Magic Trackpad USB-C (004c:0324) over Bluetooth on
6.18.37: the reported capacity now matches the device (verified against
a raw GET_REPORT of report 0x90) and updates on reconnect.

Fixes: 87a2f10395c8 ("HID: magicmouse: Apple Magic Trackpad 2 USB-C driver support")
Cc: stable@vger.kernel.org
Signed-off-by: Andrei Fed &lt;andfed.net@gmail.com&gt;
Signed-off-by: Jiri Kosina &lt;jkosina@suse.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>Merge branch 'for-7.2/core' into for-linus</title>
<updated>2026-06-16T19:57:57+00:00</updated>
<author>
<name>Jiri Kosina</name>
<email>jkosina@suse.com</email>
</author>
<published>2026-06-16T19:57:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=b0e0c869271b957c47ae41c2b0a5e2a1779b0978'/>
<id>urn:sha1:b0e0c869271b957c47ae41c2b0a5e2a1779b0978</id>
<content type='text'>
</content>
</entry>
<entry>
<title>HID: Input: Add battery list cleanup with devm action</title>
<updated>2026-06-02T08:28:39+00:00</updated>
<author>
<name>Rafael Passos</name>
<email>rafael@rcpassos.me</email>
</author>
<published>2026-06-02T03:05:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=426e5846eba75feaf1c9c6c119cb153610192da1'/>
<id>urn:sha1:426e5846eba75feaf1c9c6c119cb153610192da1</id>
<content type='text'>
The batteries list (hdev-&gt;batteries) is not cleaned up during
hidinput_disconnect(), but struct hid_battery entries are allocated
with devm_kzalloc.
When a driver is unbound (e.g. during devicereprobe), devm frees those
entries while their list_head nodesremain dangling in hdev-&gt;batteries,
which persists across rebinds.

Link: https://lore.kernel.org/all/20260602011949.2825852-1-rafael@rcpassos.me/
Fixes: 4a58ae85c3f9 ("HID: input: Add support for multiple batteries per device")
Signed-off-by: Rafael Passos &lt;rafael@rcpassos.me&gt;
Acked-by: Lucas Zampieri &lt;lcasmz54@gmail.com&gt;
Signed-off-by: Benjamin Tissoires &lt;bentiss@kernel.org&gt;
</content>
</entry>
<entry>
<title>hid: Pen battery quirk for Surface Pro 12in</title>
<updated>2026-06-01T16:36:22+00:00</updated>
<author>
<name>Harrison Vanderbyl</name>
<email>harrison.vanderbyl@gmail.com</email>
</author>
<published>2026-05-29T01:16:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=3a1e4e77e3eea841f58b48086d6ee5bd7c1da87e'/>
<id>urn:sha1:3a1e4e77e3eea841f58b48086d6ee5bd7c1da87e</id>
<content type='text'>
The pen setup for this device uses bluetooth for
communicating battery levels and status instead of
reporting it over i2c.

Without this quirk, the device either reports an
extra, broken phantom battery, or hangs.

Signed-off-by: Harrison Vanderbyl &lt;harrison.vanderbyl@gmail.com&gt;
Acked-by: Jiri Kosina &lt;jkosina@suse.com&gt;
Signed-off-by: Benjamin Tissoires &lt;bentiss@kernel.org&gt;
</content>
</entry>
<entry>
<title>Merge branch 'for-7.1/core-v2' into for-linus</title>
<updated>2026-04-16T19:01:18+00:00</updated>
<author>
<name>Jiri Kosina</name>
<email>jkosina@suse.com</email>
</author>
<published>2026-04-16T19:01:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=d4eb7b2da66c848709e31585b9c371fa234abc39'/>
<id>urn:sha1:d4eb7b2da66c848709e31585b9c371fa234abc39</id>
<content type='text'>
- fixed handling of 0-sized reports (Dmitry Torokhov)
- convert core code to __free() (Dmitry Torokhov)
- support for multiple batteries per HID device (Lucas Zampieri)
</content>
</entry>
<entry>
<title>Input: add keycodes for contextual AI usages (HUTRR119)</title>
<updated>2026-03-29T20:02:11+00:00</updated>
<author>
<name>Akshai Murari</name>
<email>akshaim@google.com</email>
</author>
<published>2026-03-27T06:54:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=45065a5095c7773fb98c35d60c20c3b513540597'/>
<id>urn:sha1:45065a5095c7773fb98c35d60c20c3b513540597</id>
<content type='text'>
HUTRR119 introduces new usages for keys intended to invoke AI agents
based on the current context. These are useful with the increasing
number of operating systems with integrated Large Language Models

Add new key definitions for KEY_ACTION_ON_SELECTION,
KEY_CONTEXTUAL_INSERT and KEY_CONTEXTUAL_QUERY

Signed-off-by: Akshai Murari &lt;akshaim@google.com&gt;
Acked-by: Dmitry Torokhov &lt;dmitry.torokhov@gmail.com&gt;
Signed-off-by: Jiri Kosina &lt;jkosina@suse.com&gt;
</content>
</entry>
<entry>
<title>HID: input: Add support for multiple batteries per device</title>
<updated>2026-03-19T14:52:45+00:00</updated>
<author>
<name>Lucas Zampieri</name>
<email>lcasmz54@gmail.com</email>
</author>
<published>2026-03-14T01:05:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=4a58ae85c3f9b142ffba023d0f976978ade57d1b'/>
<id>urn:sha1:4a58ae85c3f9b142ffba023d0f976978ade57d1b</id>
<content type='text'>
Add support for HID devices that report multiple batteries, each
identified by its report ID.

The hid_device-&gt;battery pointer is replaced with a batteries list.
Batteries are named using the pattern hid-{uniq}-battery-{report_id}.
The hid_get_battery() helper returns the first battery in the list for
backwards compatibility with single-battery drivers.

Signed-off-by: Lucas Zampieri &lt;lcasmz54@gmail.com&gt;
Signed-off-by: Benjamin Tissoires &lt;bentiss@kernel.org&gt;
</content>
</entry>
<entry>
<title>HID: input: Introduce struct hid_battery and refactor battery code</title>
<updated>2026-03-19T14:52:45+00:00</updated>
<author>
<name>Lucas Zampieri</name>
<email>lcasmz54@gmail.com</email>
</author>
<published>2026-03-14T01:05:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=7a3ac62473f2bd213557e41aaab7a8f144037dfd'/>
<id>urn:sha1:7a3ac62473f2bd213557e41aaab7a8f144037dfd</id>
<content type='text'>
Introduce struct hid_battery to encapsulate individual battery state,
preparing for future multi-battery support.

The new structure contains all battery-related fields previously stored
directly in hid_device (capacity, min, max, report_type, report_id,
charge_status, etc.). The hid_device-&gt;battery pointer type changes from
struct power_supply* to struct hid_battery*, and all battery functions
are refactored accordingly.

A hid_get_battery() helper is added for external drivers, with
hid-apple.c and hid-magicmouse.c updated to use the new API. The
hid-input-test.c KUnit tests are also updated for the new structure.

No functional changes for single-battery devices.

Signed-off-by: Lucas Zampieri &lt;lcasmz54@gmail.com&gt;
Signed-off-by: Benjamin Tissoires &lt;bentiss@kernel.org&gt;
</content>
</entry>
<entry>
<title>HID: input: Convert battery code to devm_*</title>
<updated>2026-03-19T14:52:45+00:00</updated>
<author>
<name>Lucas Zampieri</name>
<email>lcasmz54@gmail.com</email>
</author>
<published>2026-03-14T01:05:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=5a9df498581a2e12fd960ddeb1da41dd771d9000'/>
<id>urn:sha1:5a9df498581a2e12fd960ddeb1da41dd771d9000</id>
<content type='text'>
Convert the HID battery code to use devm_* managed resource APIs for
the power_supply_desc allocation, battery name string, and power supply
registration.

The error path uses devm_kfree() to clean up allocated memory if
devm_power_supply_register() fails, preventing memory waste on repeated
setup attempts. The hidinput_cleanup_battery() function is removed as
devm handles cleanup automatically.

Signed-off-by: Lucas Zampieri &lt;lcasmz54@gmail.com&gt;
Signed-off-by: Benjamin Tissoires &lt;bentiss@kernel.org&gt;
</content>
</entry>
</feed>
