HID_REQ_GET_REPORT);
        if (ret != CP2112_GPIO_CONFIG_LENGTH) {
                hid_err(hdev, "error requesting GPIO config: %d\n", ret);
+               if (ret >= 0)
+                       ret = -EIO;
                goto exit;
        }
 
        ret = hid_hw_raw_request(hdev, CP2112_GPIO_CONFIG, buf,
                                 CP2112_GPIO_CONFIG_LENGTH, HID_FEATURE_REPORT,
                                 HID_REQ_SET_REPORT);
-       if (ret < 0) {
+       if (ret != CP2112_GPIO_CONFIG_LENGTH) {
                hid_err(hdev, "error setting GPIO config: %d\n", ret);
+               if (ret >= 0)
+                       ret = -EIO;
                goto exit;
        }
 
 
 exit:
        mutex_unlock(&dev->lock);
-       return ret < 0 ? ret : -EIO;
+       return ret;
 }
 
 static void cp2112_gpio_set(struct gpio_chip *chip, unsigned offset, int value)