DUALSHOCK4_CONTROLLER_BT)
 #define SONY_LED_SUPPORT (SIXAXIS_CONTROLLER | BUZZ_CONTROLLER |\
                                DUALSHOCK4_CONTROLLER | MOTION_CONTROLLER)
-#define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER | DUALSHOCK4_CONTROLLER)
+#define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER | DUALSHOCK4_CONTROLLER |\
+                               MOTION_CONTROLLER_BT)
 #define SONY_FF_SUPPORT (SIXAXIS_CONTROLLER | DUALSHOCK4_CONTROLLER |\
                                MOTION_CONTROLLER)
 
 {
        static const __u8 sixaxis_battery_capacity[] = { 0, 1, 25, 50, 75, 100 };
        unsigned long flags;
+       int offset;
        __u8 cable_state, battery_capacity, battery_charging;
 
        /*
         * It does not report the actual level while charging so it
         * is set to 100% while charging is in progress.
         */
-       if (rd[30] >= 0xee) {
+       offset = (sc->quirks & MOTION_CONTROLLER) ? 12 : 30;
+
+       if (rd[offset] >= 0xee) {
                battery_capacity = 100;
-               battery_charging = !(rd[30] & 0x01);
+               battery_charging = !(rd[offset] & 0x01);
                cable_state = 1;
        } else {
-               __u8 index = rd[30] <= 5 ? rd[30] : 5;
+               __u8 index = rd[offset] <= 5 ? rd[offset] : 5;
                battery_capacity = sixaxis_battery_capacity[index];
                battery_charging = 0;
                cable_state = 0;
                swap(rd[45], rd[46]);
                swap(rd[47], rd[48]);
 
+               sixaxis_parse_report(sc, rd, size);
+       } else if ((sc->quirks & MOTION_CONTROLLER_BT) && rd[0] == 0x01 && size == 49) {
                sixaxis_parse_report(sc, rd, size);
        } else if (((sc->quirks & DUALSHOCK4_CONTROLLER_USB) && rd[0] == 0x01 &&
                        size == 64) || ((sc->quirks & DUALSHOCK4_CONTROLLER_BT)
        int n, ret;
 
        if ((sc->quirks & DUALSHOCK4_CONTROLLER_BT) ||
+           (sc->quirks & MOTION_CONTROLLER_BT) ||
            (sc->quirks & SIXAXIS_CONTROLLER_BT)) {
                /*
                 * sony_get_bt_devaddr() attempts to parse the Bluetooth MAC