|
@@ -15,19 +15,8 @@
|
|
|
#include "driver.h"
|
|
|
#include "variax.h"
|
|
|
|
|
|
-#define VARIAX_MODEL_HEADER_LENGTH 7
|
|
|
-#define VARIAX_MODEL_MESSAGE_LENGTH 199
|
|
|
#define VARIAX_OFFSET_ACTIVATE 7
|
|
|
|
|
|
-/*
|
|
|
- This message is sent by the device during initialization and identifies
|
|
|
- the connected guitar model.
|
|
|
-*/
|
|
|
-static const char variax_init_model[] = {
|
|
|
- 0xf0, 0x00, 0x01, 0x0c, 0x07, 0x00, 0x69, 0x02,
|
|
|
- 0x00
|
|
|
-};
|
|
|
-
|
|
|
/*
|
|
|
This message is sent by the device during initialization and identifies
|
|
|
the connected guitar version.
|
|
@@ -49,22 +38,6 @@ static const char variax_activate[] = {
|
|
|
0xf7
|
|
|
};
|
|
|
|
|
|
-static const char variax_request_bank[] = {
|
|
|
- 0xf0, 0x00, 0x01, 0x0c, 0x07, 0x00, 0x6d, 0xf7
|
|
|
-};
|
|
|
-
|
|
|
-static const char variax_request_model1[] = {
|
|
|
- 0xf0, 0x00, 0x01, 0x0c, 0x07, 0x00, 0x3c, 0x00,
|
|
|
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x03,
|
|
|
- 0x00, 0x00, 0x00, 0xf7
|
|
|
-};
|
|
|
-
|
|
|
-static const char variax_request_model2[] = {
|
|
|
- 0xf0, 0x00, 0x01, 0x0c, 0x07, 0x00, 0x3c, 0x00,
|
|
|
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x03,
|
|
|
- 0x00, 0x00, 0x00, 0xf7
|
|
|
-};
|
|
|
-
|
|
|
/* forward declarations: */
|
|
|
static void variax_startup2(unsigned long data);
|
|
|
static void variax_startup4(unsigned long data);
|
|
@@ -134,19 +107,6 @@ static void variax_startup4(unsigned long data)
|
|
|
static void variax_startup5(unsigned long data)
|
|
|
{
|
|
|
struct usb_line6_variax *variax = (struct usb_line6_variax *)data;
|
|
|
- CHECK_STARTUP_PROGRESS(variax->startup_progress,
|
|
|
- VARIAX_STARTUP_DUMPREQ);
|
|
|
-
|
|
|
- /* current model dump: */
|
|
|
- line6_dump_request_async(&variax->dumpreq, &variax->line6, 0,
|
|
|
- VARIAX_DUMP_PASS1);
|
|
|
- /* passes 2 and 3 are performed implicitly before entering
|
|
|
- * variax_startup6.
|
|
|
- */
|
|
|
-}
|
|
|
-
|
|
|
-static void variax_startup6(struct usb_line6_variax *variax)
|
|
|
-{
|
|
|
CHECK_STARTUP_PROGRESS(variax->startup_progress,
|
|
|
VARIAX_STARTUP_WORKQUEUE);
|
|
|
|
|
@@ -154,7 +114,7 @@ static void variax_startup6(struct usb_line6_variax *variax)
|
|
|
schedule_work(&variax->startup_work);
|
|
|
}
|
|
|
|
|
|
-static void variax_startup7(struct work_struct *work)
|
|
|
+static void variax_startup6(struct work_struct *work)
|
|
|
{
|
|
|
struct usb_line6_variax *variax =
|
|
|
container_of(work, struct usb_line6_variax, startup_work);
|
|
@@ -178,8 +138,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
|
|
|
|
|
|
case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE:
|
|
|
case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST:
|
|
|
- line6_dump_request_async(&variax->dumpreq, &variax->line6, 0,
|
|
|
- VARIAX_DUMP_PASS1);
|
|
|
break;
|
|
|
|
|
|
case LINE6_RESET:
|
|
@@ -187,41 +145,14 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
|
|
|
break;
|
|
|
|
|
|
case LINE6_SYSEX_BEGIN:
|
|
|
- if (memcmp(buf + 1, variax_request_model1 + 1,
|
|
|
- VARIAX_MODEL_HEADER_LENGTH - 1) == 0) {
|
|
|
- if (variax->line6.message_length ==
|
|
|
- VARIAX_MODEL_MESSAGE_LENGTH) {
|
|
|
- switch (variax->dumpreq.in_progress) {
|
|
|
- case VARIAX_DUMP_PASS1:
|
|
|
- line6_dump_request_async
|
|
|
- (&variax->dumpreq, &variax->line6,
|
|
|
- 1, VARIAX_DUMP_PASS2);
|
|
|
- break;
|
|
|
-
|
|
|
- case VARIAX_DUMP_PASS2:
|
|
|
- line6_dump_request_async
|
|
|
- (&variax->dumpreq, &variax->line6,
|
|
|
- 2, VARIAX_DUMP_PASS3);
|
|
|
- }
|
|
|
- } else {
|
|
|
- dev_dbg(variax->line6.ifcdev,
|
|
|
- "illegal length %d of model data\n",
|
|
|
- variax->line6.message_length);
|
|
|
- line6_dump_finished(&variax->dumpreq);
|
|
|
- }
|
|
|
- } else if (memcmp(buf + 1, variax_request_bank + 1,
|
|
|
- sizeof(variax_request_bank) - 2) == 0) {
|
|
|
- line6_dump_finished(&variax->dumpreq);
|
|
|
- variax_startup6(variax);
|
|
|
- } else if (memcmp(buf + 1, variax_init_version + 1,
|
|
|
- sizeof(variax_init_version) - 1) == 0) {
|
|
|
+ if (memcmp(buf + 1, variax_init_version + 1,
|
|
|
+ sizeof(variax_init_version) - 1) == 0) {
|
|
|
variax_startup3(variax);
|
|
|
} else if (memcmp(buf + 1, variax_init_done + 1,
|
|
|
sizeof(variax_init_done) - 1) == 0) {
|
|
|
/* notify of complete initialization: */
|
|
|
variax_startup4((unsigned long)variax);
|
|
|
}
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
case LINE6_SYSEX_END:
|
|
@@ -248,11 +179,6 @@ static void variax_destruct(struct usb_interface *interface)
|
|
|
del_timer(&variax->startup_timer2);
|
|
|
cancel_work_sync(&variax->startup_work);
|
|
|
|
|
|
- /* free dump request data: */
|
|
|
- line6_dumpreq_destructbuf(&variax->dumpreq, 2);
|
|
|
- line6_dumpreq_destructbuf(&variax->dumpreq, 1);
|
|
|
- line6_dumpreq_destruct(&variax->dumpreq);
|
|
|
-
|
|
|
kfree(variax->buffer_activate);
|
|
|
}
|
|
|
|
|
@@ -266,36 +192,12 @@ static int variax_try_init(struct usb_interface *interface,
|
|
|
|
|
|
init_timer(&variax->startup_timer1);
|
|
|
init_timer(&variax->startup_timer2);
|
|
|
- INIT_WORK(&variax->startup_work, variax_startup7);
|
|
|
+ INIT_WORK(&variax->startup_work, variax_startup6);
|
|
|
|
|
|
if ((interface == NULL) || (variax == NULL))
|
|
|
return -ENODEV;
|
|
|
|
|
|
/* initialize USB buffers: */
|
|
|
- err = line6_dumpreq_init(&variax->dumpreq, variax_request_model1,
|
|
|
- sizeof(variax_request_model1));
|
|
|
-
|
|
|
- if (err < 0) {
|
|
|
- dev_err(&interface->dev, "Out of memory\n");
|
|
|
- return err;
|
|
|
- }
|
|
|
-
|
|
|
- err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_model2,
|
|
|
- sizeof(variax_request_model2), 1);
|
|
|
-
|
|
|
- if (err < 0) {
|
|
|
- dev_err(&interface->dev, "Out of memory\n");
|
|
|
- return err;
|
|
|
- }
|
|
|
-
|
|
|
- err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_bank,
|
|
|
- sizeof(variax_request_bank), 2);
|
|
|
-
|
|
|
- if (err < 0) {
|
|
|
- dev_err(&interface->dev, "Out of memory\n");
|
|
|
- return err;
|
|
|
- }
|
|
|
-
|
|
|
variax->buffer_activate = kmemdup(variax_activate,
|
|
|
sizeof(variax_activate), GFP_KERNEL);
|
|
|
|