]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/staging/line6/variax.h
Merge branch 'master' into tk71
[mv-sheeva.git] / drivers / staging / line6 / variax.h
index ee330ba308986c3ce6f1f03ee2379fc069842731..e2999ab41b08dec80f6871574032fba1e8b29956 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * Line6 Linux USB driver - 0.8.0
+ * Line6 Linux USB driver - 0.9.1beta
  *
- * Copyright (C) 2004-2009 Markus Grabner (grabner@icg.tugraz.at)
+ * Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at)
  *
  *     This program is free software; you can redistribute it and/or
  *     modify it under the terms of the GNU General Public License as
 #ifndef VARIAX_H
 #define VARIAX_H
 
-
-#include "driver.h"
-
 #include <linux/spinlock.h>
 #include <linux/usb.h>
 #include <linux/wait.h>
-
 #include <sound/core.h>
 
+#include "driver.h"
 #include "dumprequest.h"
 
+#define VARIAX_STARTUP_DELAY1 1000
+#define VARIAX_STARTUP_DELAY3 100
+#define VARIAX_STARTUP_DELAY4 100
 
-#define VARIAX_ACTIVATE_DELAY 10
-#define VARIAX_STARTUP_DELAY 3
-
+/*
+       Stages of Variax startup procedure
+*/
+enum {
+       VARIAX_STARTUP_INIT = 1,
+       VARIAX_STARTUP_VERSIONREQ,
+       VARIAX_STARTUP_WAIT,
+       VARIAX_STARTUP_ACTIVATE,
+       VARIAX_STARTUP_DUMPREQ,
+       VARIAX_STARTUP_WORKQUEUE,
+       VARIAX_STARTUP_SETUP,
+       VARIAX_STARTUP_LAST = VARIAX_STARTUP_SETUP - 1
+};
 
 enum {
        VARIAX_DUMP_PASS1 = LINE6_DUMP_CURRENT,
@@ -34,75 +44,89 @@ enum {
        VARIAX_DUMP_PASS3
 };
 
-
 /**
-        Binary Variax model dump
+       Binary Variax model dump
 */
 struct variax_model {
        /**
-                Header information (including program name).
+               Header information (including program name).
        */
        unsigned char name[18];
 
        /**
-                Model parameters.
+               Model parameters.
        */
        unsigned char control[78 * 2];
 };
 
 struct usb_line6_variax {
        /**
-                Generic Line6 USB data.
+               Generic Line6 USB data.
        */
        struct usb_line6 line6;
 
        /**
-                Dump request structure.
-                Append two extra buffers for 3-pass data query.
+               Dump request structure.
+               Append two extra buffers for 3-pass data query.
        */
-       struct line6_dump_request dumpreq; struct line6_dump_reqbuf extrabuf[2];
+       struct line6_dump_request dumpreq;
+       struct line6_dump_reqbuf extrabuf[2];
 
        /**
-                Buffer for activation code.
+               Buffer for activation code.
        */
        unsigned char *buffer_activate;
 
        /**
-                Model number.
+               Model number.
        */
        int model;
 
        /**
-                Current model settings.
+               Current model settings.
        */
        struct variax_model model_data;
 
        /**
-                Name of current model bank.
+               Name of connected guitar.
+       */
+       unsigned char guitar[18];
+
+       /**
+               Name of current model bank.
        */
        unsigned char bank[18];
 
        /**
-                Position of volume dial.
+               Position of volume dial.
        */
        int volume;
 
        /**
-                Position of tone control dial.
+               Position of tone control dial.
        */
        int tone;
 
        /**
-                Timer for delayed activation request.
+               Handler for device initializaton.
        */
-       struct timer_list activate_timer;
-};
+       struct work_struct startup_work;
 
+       /**
+               Timers for device initializaton.
+       */
+       struct timer_list startup_timer1;
+       struct timer_list startup_timer2;
 
-extern void variax_disconnect(struct usb_interface *interface);
-extern int variax_init(struct usb_interface *interface,
-                      struct usb_line6_variax *variax);
-extern void variax_process_message(struct usb_line6_variax *variax);
+       /**
+               Current progress in startup procedure.
+       */
+       int startup_progress;
+};
 
+extern void line6_variax_disconnect(struct usb_interface *interface);
+extern int line6_variax_init(struct usb_interface *interface,
+                            struct usb_line6_variax *variax);
+extern void line6_variax_process_message(struct usb_line6_variax *variax);
 
 #endif