|
@@ -39,82 +39,20 @@ static void koneplus_profile_activated(struct koneplus_device *koneplus,
|
|
|
static int koneplus_send_control(struct usb_device *usb_dev, uint value,
|
|
|
enum koneplus_control_requests request)
|
|
|
{
|
|
|
- struct koneplus_control control;
|
|
|
+ struct roccat_common_control control;
|
|
|
|
|
|
if ((request == KONEPLUS_CONTROL_REQUEST_PROFILE_SETTINGS ||
|
|
|
request == KONEPLUS_CONTROL_REQUEST_PROFILE_BUTTONS) &&
|
|
|
value > 4)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- control.command = KONEPLUS_COMMAND_CONTROL;
|
|
|
+ control.command = ROCCAT_COMMON_COMMAND_CONTROL;
|
|
|
control.value = value;
|
|
|
control.request = request;
|
|
|
|
|
|
- return roccat_common_send(usb_dev, KONEPLUS_COMMAND_CONTROL,
|
|
|
- &control, sizeof(struct koneplus_control));
|
|
|
-}
|
|
|
-
|
|
|
-static int koneplus_receive_control_status(struct usb_device *usb_dev)
|
|
|
-{
|
|
|
- int retval;
|
|
|
- struct koneplus_control control;
|
|
|
-
|
|
|
- do {
|
|
|
- retval = roccat_common_receive(usb_dev, KONEPLUS_COMMAND_CONTROL,
|
|
|
- &control, sizeof(struct koneplus_control));
|
|
|
-
|
|
|
- /* check if we get a completely wrong answer */
|
|
|
- if (retval)
|
|
|
- return retval;
|
|
|
-
|
|
|
- if (control.value == KONEPLUS_CONTROL_REQUEST_STATUS_OK)
|
|
|
- return 0;
|
|
|
-
|
|
|
- /* indicates that hardware needs some more time to complete action */
|
|
|
- if (control.value == KONEPLUS_CONTROL_REQUEST_STATUS_WAIT) {
|
|
|
- msleep(500); /* windows driver uses 1000 */
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- /* seems to be critical - replug necessary */
|
|
|
- if (control.value == KONEPLUS_CONTROL_REQUEST_STATUS_OVERLOAD)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- hid_err(usb_dev, "koneplus_receive_control_status: "
|
|
|
- "unknown response value 0x%x\n", control.value);
|
|
|
- return -EINVAL;
|
|
|
- } while (1);
|
|
|
-}
|
|
|
-
|
|
|
-static int koneplus_send(struct usb_device *usb_dev, uint command,
|
|
|
- void const *buf, uint size)
|
|
|
-{
|
|
|
- int retval;
|
|
|
-
|
|
|
- retval = roccat_common_send(usb_dev, command, buf, size);
|
|
|
- if (retval)
|
|
|
- return retval;
|
|
|
-
|
|
|
- return koneplus_receive_control_status(usb_dev);
|
|
|
-}
|
|
|
-
|
|
|
-static int koneplus_select_profile(struct usb_device *usb_dev, uint number,
|
|
|
- enum koneplus_control_requests request)
|
|
|
-{
|
|
|
- int retval;
|
|
|
-
|
|
|
- retval = koneplus_send_control(usb_dev, number, request);
|
|
|
- if (retval)
|
|
|
- return retval;
|
|
|
-
|
|
|
- /* allow time to settle things - windows driver uses 500 */
|
|
|
- msleep(100);
|
|
|
-
|
|
|
- retval = koneplus_receive_control_status(usb_dev);
|
|
|
- if (retval)
|
|
|
- return retval;
|
|
|
-
|
|
|
- return 0;
|
|
|
+ return roccat_common_send_with_status(usb_dev,
|
|
|
+ ROCCAT_COMMON_COMMAND_CONTROL,
|
|
|
+ &control, sizeof(struct roccat_common_control));
|
|
|
}
|
|
|
|
|
|
static int koneplus_get_info(struct usb_device *usb_dev,
|
|
@@ -129,7 +67,7 @@ static int koneplus_get_profile_settings(struct usb_device *usb_dev,
|
|
|
{
|
|
|
int retval;
|
|
|
|
|
|
- retval = koneplus_select_profile(usb_dev, number,
|
|
|
+ retval = koneplus_send_control(usb_dev, number,
|
|
|
KONEPLUS_CONTROL_REQUEST_PROFILE_SETTINGS);
|
|
|
if (retval)
|
|
|
return retval;
|
|
@@ -141,7 +79,8 @@ static int koneplus_get_profile_settings(struct usb_device *usb_dev,
|
|
|
static int koneplus_set_profile_settings(struct usb_device *usb_dev,
|
|
|
struct koneplus_profile_settings const *settings)
|
|
|
{
|
|
|
- return koneplus_send(usb_dev, KONEPLUS_COMMAND_PROFILE_SETTINGS,
|
|
|
+ return roccat_common_send_with_status(usb_dev,
|
|
|
+ KONEPLUS_COMMAND_PROFILE_SETTINGS,
|
|
|
settings, sizeof(struct koneplus_profile_settings));
|
|
|
}
|
|
|
|
|
@@ -150,7 +89,7 @@ static int koneplus_get_profile_buttons(struct usb_device *usb_dev,
|
|
|
{
|
|
|
int retval;
|
|
|
|
|
|
- retval = koneplus_select_profile(usb_dev, number,
|
|
|
+ retval = koneplus_send_control(usb_dev, number,
|
|
|
KONEPLUS_CONTROL_REQUEST_PROFILE_BUTTONS);
|
|
|
if (retval)
|
|
|
return retval;
|
|
@@ -162,7 +101,8 @@ static int koneplus_get_profile_buttons(struct usb_device *usb_dev,
|
|
|
static int koneplus_set_profile_buttons(struct usb_device *usb_dev,
|
|
|
struct koneplus_profile_buttons const *buttons)
|
|
|
{
|
|
|
- return koneplus_send(usb_dev, KONEPLUS_COMMAND_PROFILE_BUTTONS,
|
|
|
+ return roccat_common_send_with_status(usb_dev,
|
|
|
+ KONEPLUS_COMMAND_PROFILE_BUTTONS,
|
|
|
buttons, sizeof(struct koneplus_profile_buttons));
|
|
|
}
|
|
|
|
|
@@ -187,7 +127,8 @@ static int koneplus_set_actual_profile(struct usb_device *usb_dev,
|
|
|
buf.size = sizeof(struct koneplus_actual_profile);
|
|
|
buf.actual_profile = new_profile;
|
|
|
|
|
|
- return koneplus_send(usb_dev, KONEPLUS_COMMAND_ACTUAL_PROFILE,
|
|
|
+ return roccat_common_send_with_status(usb_dev,
|
|
|
+ KONEPLUS_COMMAND_ACTUAL_PROFILE,
|
|
|
&buf, sizeof(struct koneplus_actual_profile));
|
|
|
}
|
|
|
|
|
@@ -231,7 +172,8 @@ static ssize_t koneplus_sysfs_write(struct file *fp, struct kobject *kobj,
|
|
|
return -EINVAL;
|
|
|
|
|
|
mutex_lock(&koneplus->koneplus_lock);
|
|
|
- retval = koneplus_send(usb_dev, command, buf, real_size);
|
|
|
+ retval = roccat_common_send_with_status(usb_dev, command,
|
|
|
+ buf, real_size);
|
|
|
mutex_unlock(&koneplus->koneplus_lock);
|
|
|
|
|
|
if (retval)
|