HID: i2c-hid: fix race condition reading reports
[firefly-linux-kernel-4.4.55.git] / drivers / hid / hid-roccat-common.c
index 74f704032627eb0a30920f69de78c1d3b9df4263..e84089998900b783d22bb577f84079a4e71e8256 100644 (file)
@@ -65,10 +65,11 @@ int roccat_common2_send(struct usb_device *usb_dev, uint report_id,
 EXPORT_SYMBOL_GPL(roccat_common2_send);
 
 enum roccat_common2_control_states {
-       ROCCAT_COMMON_CONTROL_STATUS_OVERLOAD = 0,
+       ROCCAT_COMMON_CONTROL_STATUS_CRITICAL = 0,
        ROCCAT_COMMON_CONTROL_STATUS_OK = 1,
        ROCCAT_COMMON_CONTROL_STATUS_INVALID = 2,
-       ROCCAT_COMMON_CONTROL_STATUS_WAIT = 3,
+       ROCCAT_COMMON_CONTROL_STATUS_BUSY = 3,
+       ROCCAT_COMMON_CONTROL_STATUS_CRITICAL_NEW = 4,
 };
 
 static int roccat_common2_receive_control_status(struct usb_device *usb_dev)
@@ -88,13 +89,12 @@ static int roccat_common2_receive_control_status(struct usb_device *usb_dev)
                switch (control.value) {
                case ROCCAT_COMMON_CONTROL_STATUS_OK:
                        return 0;
-               case ROCCAT_COMMON_CONTROL_STATUS_WAIT:
+               case ROCCAT_COMMON_CONTROL_STATUS_BUSY:
                        msleep(500);
                        continue;
                case ROCCAT_COMMON_CONTROL_STATUS_INVALID:
-
-               case ROCCAT_COMMON_CONTROL_STATUS_OVERLOAD:
-                       /* seems to be critical - replug necessary */
+               case ROCCAT_COMMON_CONTROL_STATUS_CRITICAL:
+               case ROCCAT_COMMON_CONTROL_STATUS_CRITICAL_NEW:
                        return -EINVAL;
                default:
                        dev_err(&usb_dev->dev,