diff options
| author | Lucas Zampieri <lcasmz54@gmail.com> | 2026-03-14 01:05:30 +0000 |
|---|---|---|
| committer | Benjamin Tissoires <bentiss@kernel.org> | 2026-03-19 15:52:45 +0100 |
| commit | 4a58ae85c3f9b142ffba023d0f976978ade57d1b (patch) | |
| tree | bb1290dad98d07903b4ff6b846f2efa5223b37e0 /include/linux | |
| parent | 7a3ac62473f2bd213557e41aaab7a8f144037dfd (diff) | |
HID: input: Add support for multiple batteries per device
Add support for HID devices that report multiple batteries, each
identified by its report ID.
The hid_device->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 <lcasmz54@gmail.com>
Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/hid.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/include/linux/hid.h b/include/linux/hid.h index e4e2a5643bda..fb1a3f3ad9fa 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h @@ -648,6 +648,7 @@ enum hid_battery_status { * @avoid_query: if true, avoid querying battery (e.g., for stylus) * @present: if true, battery is present (may be dynamic) * @ratelimit_time: rate limiting for battery reports + * @list: list node for linking into hid_device's battery list */ struct hid_battery { struct hid_device *dev; @@ -662,6 +663,7 @@ struct hid_battery { bool avoid_query; bool present; ktime_t ratelimit_time; + struct list_head list; }; struct hid_driver; @@ -700,9 +702,10 @@ struct hid_device { #ifdef CONFIG_HID_BATTERY_STRENGTH /* * Power supply information for HID devices which report - * battery strength. battery is non-NULL if successfully registered. + * battery strength. Each battery is tracked separately in the + * batteries list. */ - struct hid_battery *battery; + struct list_head batteries; #endif unsigned long status; /* see STAT flags above */ @@ -766,7 +769,9 @@ static inline void hid_set_drvdata(struct hid_device *hdev, void *data) #ifdef CONFIG_HID_BATTERY_STRENGTH static inline struct hid_battery *hid_get_battery(struct hid_device *hdev) { - return hdev->battery; + if (list_empty(&hdev->batteries)) + return NULL; + return list_first_entry(&hdev->batteries, struct hid_battery, list); } #endif |
