]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/hid/hid-roccat-isku.c
HID: roccat: add support for IskuFX
[mirror_ubuntu-bionic-kernel.git] / drivers / hid / hid-roccat-isku.c
index 1219998a02d66e98ca11cecf0c740044b6801deb..8023751d525766ae16b32f8a8943f8c5f9b0796e 100644 (file)
@@ -130,14 +130,14 @@ static ssize_t isku_sysfs_read(struct file *fp, struct kobject *kobj,
        if (off >= real_size)
                return 0;
 
-       if (off != 0 || count != real_size)
+       if (off != 0 || count > real_size)
                return -EINVAL;
 
        mutex_lock(&isku->isku_lock);
-       retval = isku_receive(usb_dev, command, buf, real_size);
+       retval = isku_receive(usb_dev, command, buf, count);
        mutex_unlock(&isku->isku_lock);
 
-       return retval ? retval : real_size;
+       return retval ? retval : count;
 }
 
 static ssize_t isku_sysfs_write(struct file *fp, struct kobject *kobj,
@@ -150,15 +150,15 @@ static ssize_t isku_sysfs_write(struct file *fp, struct kobject *kobj,
        struct usb_device *usb_dev = interface_to_usbdev(to_usb_interface(dev));
        int retval;
 
-       if (off != 0 || count != real_size)
+       if (off != 0 || count > real_size)
                return -EINVAL;
 
        mutex_lock(&isku->isku_lock);
        retval = roccat_common2_send_with_status(usb_dev, command,
-                       (void *)buf, real_size);
+                       (void *)buf, count);
        mutex_unlock(&isku->isku_lock);
 
-       return retval ? retval : real_size;
+       return retval ? retval : count;
 }
 
 #define ISKU_SYSFS_W(thingy, THINGY) \
@@ -216,6 +216,7 @@ ISKU_SYSFS_RW(light, LIGHT)
 ISKU_SYSFS_RW(key_mask, KEY_MASK)
 ISKU_SYSFS_RW(last_set, LAST_SET)
 ISKU_SYSFS_W(talk, TALK)
+ISKU_SYSFS_W(talkfx, TALKFX)
 ISKU_SYSFS_R(info, INFO)
 ISKU_SYSFS_W(control, CONTROL)
 ISKU_SYSFS_W(reset, RESET)
@@ -232,6 +233,7 @@ static struct bin_attribute isku_bin_attributes[] = {
        ISKU_BIN_ATTR_RW(key_mask, KEY_MASK),
        ISKU_BIN_ATTR_RW(last_set, LAST_SET),
        ISKU_BIN_ATTR_W(talk, TALK),
+       ISKU_BIN_ATTR_W(talkfx, TALKFX),
        ISKU_BIN_ATTR_R(info, INFO),
        ISKU_BIN_ATTR_W(control, CONTROL),
        ISKU_BIN_ATTR_W(reset, RESET),
@@ -405,6 +407,7 @@ static int isku_raw_event(struct hid_device *hdev,
 
 static const struct hid_device_id isku_devices[] = {
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKU) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKUFX) },
        { }
 };
 
@@ -443,5 +446,5 @@ module_init(isku_init);
 module_exit(isku_exit);
 
 MODULE_AUTHOR("Stefan Achatz");
-MODULE_DESCRIPTION("USB Roccat Isku driver");
+MODULE_DESCRIPTION("USB Roccat Isku/FX driver");
 MODULE_LICENSE("GPL v2");