HID: sony: Set the Sixaxis cable state correctly
authorFrank Praznik <frank.praznik@oh.rr.com>
Fri, 29 Aug 2014 17:11:52 +0000 (13:11 -0400)
committerJiri Kosina <jkosina@suse.cz>
Mon, 1 Sep 2014 09:20:52 +0000 (11:20 +0200)
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: Frank Praznik <frank.praznik@oh.rr.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-sony.c

index c372368e438c7d486fa54b64d2f29ea49dcb218d..ecc6616ab550097f1c78a1bafb345fb6c36d9310 100644 (file)
@@ -935,12 +935,13 @@ static void sixaxis_parse_report(struct sony_sc *sc, __u8 *rd, int size)
        if (rd[30] >= 0xee) {
                battery_capacity = 100;
                battery_charging = !(rd[30] & 0x01);
+               cable_state = 1;
        } else {
                __u8 index = rd[30] <= 5 ? rd[30] : 5;
                battery_capacity = sixaxis_battery_capacity[index];
                battery_charging = 0;
+               cable_state = 0;
        }
-       cable_state = !(rd[31] & 0x04);
 
        spin_lock_irqsave(&sc->lock, flags);
        sc->cable_state = cable_state;