]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
HID: sony: PS3 Move enable LEDs and Rumble via BT
authorSimon Wood <simon@mungewell.org>
Wed, 10 Jun 2015 03:27:06 +0000 (21:27 -0600)
committerJiri Kosina <jkosina@suse.cz>
Fri, 12 Jun 2015 09:37:42 +0000 (11:37 +0200)
The LED and Rumble control only function via BT if the full output report
is sent. The large report still functions via USB.

Signed-off-by: Simon Wood <simon@mungewell.org>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-sony.c

index d9fa804770fed8e0fc49d8457003a5b040047c41..51cb1acce91d9f026cea69f1377550cce4bc7a1a 100644 (file)
@@ -902,6 +902,7 @@ struct motion_output_report_02 {
 #define DS4_REPORT_0x81_SIZE 7
 #define SIXAXIS_REPORT_0xF2_SIZE 17
 #define SIXAXIS_REPORT_0xF5_SIZE 8
+#define MOTION_REPORT_0x02_SIZE 49
 
 static DEFINE_SPINLOCK(sony_dev_list_lock);
 static LIST_HEAD(sony_device_list);
@@ -1746,7 +1747,7 @@ static void motion_state_worker(struct work_struct *work)
        struct motion_output_report_02 *report =
                (struct motion_output_report_02 *)sc->output_report_dmabuf;
 
-       memset(report, 0, sizeof(struct motion_output_report_02));
+       memset(report, 0, MOTION_REPORT_0x02_SIZE);
 
        report->type = 0x02; /* set leds */
        report->r = sc->led_state[0];
@@ -1757,8 +1758,7 @@ static void motion_state_worker(struct work_struct *work)
        report->rumble = max(sc->right, sc->left);
 #endif
 
-       hid_hw_output_report(hdev, (__u8 *)report,
-                       sizeof(struct motion_output_report_02));
+       hid_hw_output_report(hdev, (__u8 *)report, MOTION_REPORT_0x02_SIZE);
 }
 
 static int sony_allocate_output_report(struct sony_sc *sc)
@@ -1774,9 +1774,8 @@ static int sony_allocate_output_report(struct sony_sc *sc)
                sc->output_report_dmabuf = kmalloc(DS4_REPORT_0x05_SIZE,
                                                GFP_KERNEL);
        else if (sc->quirks & MOTION_CONTROLLER)
-               sc->output_report_dmabuf =
-                               kmalloc(sizeof(struct motion_output_report_02),
-                               GFP_KERNEL);
+               sc->output_report_dmabuf = kmalloc(MOTION_REPORT_0x02_SIZE,
+                                               GFP_KERNEL);
        else
                return 0;