Commit 9fddd74a authored by Frank Praznik's avatar Frank Praznik Committed by Jiri Kosina

HID: sony: Set the Sixaxis cable state correctly

Bit 3 in byte 31 of the Sixaxis report indicates whether the battery is
charging or not charging as opposed to whether or not the cable is plugged in.
As a result, when connected via USB and fully charged, the power_supply status
is wrongly reported as 'Discharging' instead of 'Full'.

Use the battery level value to set the cable state so that the power status
is reported correctly as that seems to be the only reliable way to determine the
cable status on the Sixaxis.
Signed-off-by: default avatarFrank Praznik <frank.praznik@oh.rr.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent ff0c57ac
...@@ -935,12 +935,13 @@ static void sixaxis_parse_report(struct sony_sc *sc, __u8 *rd, int size) ...@@ -935,12 +935,13 @@ static void sixaxis_parse_report(struct sony_sc *sc, __u8 *rd, int size)
if (rd[30] >= 0xee) { if (rd[30] >= 0xee) {
battery_capacity = 100; battery_capacity = 100;
battery_charging = !(rd[30] & 0x01); battery_charging = !(rd[30] & 0x01);
cable_state = 1;
} else { } else {
__u8 index = rd[30] <= 5 ? rd[30] : 5; __u8 index = rd[30] <= 5 ? rd[30] : 5;
battery_capacity = sixaxis_battery_capacity[index]; battery_capacity = sixaxis_battery_capacity[index];
battery_charging = 0; battery_charging = 0;
cable_state = 0;
} }
cable_state = !(rd[31] & 0x04);
spin_lock_irqsave(&sc->lock, flags); spin_lock_irqsave(&sc->lock, flags);
sc->cable_state = cable_state; sc->cable_state = cable_state;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment