mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 08:33:17 +02:00
HID: steelseries: Fix battery requests stopping after some time
In some cases, the headset receiver will answer one of our requests with garbage, or not at all. This is a problem when we only request battery information once we've received a battery response, as we might never get to request battery information again. If the data from the receiver could not be parsed, and there's no pending battery requests, schedule a new request. Signed-off-by: Bastien Nocera <hadess@hadess.net> Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
parent
c9a50b9090
commit
138a339e39
|
|
@ -603,8 +603,11 @@ static int steelseries_headset_raw_event(struct hid_device *hdev,
|
|||
hid_dbg(sd->hdev,
|
||||
"Parsing raw event for Arctis 1 headset (%*ph)\n", size, read_buf);
|
||||
if (size < ARCTIS_1_BATTERY_RESPONSE_LEN ||
|
||||
memcmp (read_buf, arctis_1_battery_request, sizeof(arctis_1_battery_request)))
|
||||
memcmp(read_buf, arctis_1_battery_request, sizeof(arctis_1_battery_request))) {
|
||||
if (!delayed_work_pending(&sd->battery_work))
|
||||
goto request_battery;
|
||||
return 0;
|
||||
}
|
||||
if (read_buf[2] == 0x01) {
|
||||
connected = false;
|
||||
capacity = 100;
|
||||
|
|
@ -631,6 +634,7 @@ static int steelseries_headset_raw_event(struct hid_device *hdev,
|
|||
power_supply_changed(sd->battery);
|
||||
}
|
||||
|
||||
request_battery:
|
||||
spin_lock_irqsave(&sd->lock, flags);
|
||||
if (!sd->removed)
|
||||
schedule_delayed_work(&sd->battery_work,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user