]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
HID: hid-logitech: Compute combined pedals value
authorSimon Wood <gitsend@mungewell.org>
Sun, 18 Sep 2016 16:55:39 +0000 (10:55 -0600)
committerJiri Kosina <jkosina@suse.cz>
Mon, 26 Sep 2016 13:39:55 +0000 (15:39 +0200)
Add support for computing a combined accelerator/brake axis for wheels
which don't contain combined data in their HID stream.

This includes DFGT, G25, G27, G29 and Wii-Wheel.

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

index 79d34c2f639b144319e756a71b3a78aa7c3adf83..cc5c9ebd12a14c6df00ed54de61fecfc79f235d7 100644 (file)
@@ -332,6 +332,7 @@ int lg4ff_adjust_input_event(struct hid_device *hid, struct hid_field *field,
 int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
                u8 *rd, int size, struct lg_drv_data *drv_data)
 {
+       int offset;
        struct lg4ff_device_entry *entry = drv_data->device_props;
 
        if (!entry)
@@ -353,9 +354,25 @@ int lg4ff_raw_event(struct hid_device *hdev, struct hid_report *report,
                        rd[5] = rd[4];
                        rd[6] = 0x7F;
                        return 1;
+               case USB_DEVICE_ID_LOGITECH_G25_WHEEL:
+               case USB_DEVICE_ID_LOGITECH_G27_WHEEL:
+                       offset = 5;
+                       break;
+               case USB_DEVICE_ID_LOGITECH_DFGT_WHEEL:
+               case USB_DEVICE_ID_LOGITECH_G29_WHEEL:
+                       offset = 6;
+                       break;
+               case USB_DEVICE_ID_LOGITECH_WII_WHEEL:
+                       offset = 3;
+                       break;
                default:
                        return 0;
                }
+
+               /* Compute a combined axis when wheel does not supply it */
+               rd[offset] = (0xFF + rd[offset] - rd[offset+1]) >> 1;
+               rd[offset+1] = 0x7F;
+               return 1;
        }
 
        return 0;