]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/staging/line6/pod.h
Merge branch 'for-2.6.37' of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/asoc...
[mv-sheeva.git] / drivers / staging / line6 / pod.h
index 7051ca613819aac554cabc9ee7bfdddc2f153702..18b9d08c3288f7942dc3f4e1ea1e866283979c7a 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 POD_H
 #define POD_H
 
-
-#include "driver.h"
-
+#include <linux/interrupt.h>
 #include <linux/spinlock.h>
 #include <linux/usb.h>
 #include <linux/wait.h>
-#include <linux/workqueue.h>
 
 #include <sound/core.h>
 
+#include "driver.h"
 #include "dumprequest.h"
 
-
 /*
        PODxt Live interfaces
 */
 */
 #define POD_CONTROL_SIZE 0x80
 #define POD_BUFSIZE_DUMPREQ 7
-#define POD_STARTUP_DELAY 3
+#define POD_STARTUP_DELAY 1000
 
+/*
+       Stages of POD startup procedure
+*/
+enum {
+       POD_STARTUP_INIT = 1,
+       POD_STARTUP_DUMPREQ,
+       POD_STARTUP_VERSIONREQ,
+       POD_STARTUP_WORKQUEUE,
+       POD_STARTUP_SETUP,
+       POD_STARTUP_LAST = POD_STARTUP_SETUP - 1
+};
 
 /**
-        Data structure for values that need to be requested explicitly.
-        This is the case for system and tuner settings.
+       Data structure for values that need to be requested explicitly.
+       This is the case for system and tuner settings.
 */
 struct ValueWait {
-       unsigned short value;
+       int value;
        wait_queue_head_t wait;
 };
 
 /**
-        Binary PodXT Pro program dump
+       Binary PODxt Pro program dump
 */
 struct pod_program {
        /**
-                Header information (including program name).
+               Header information (including program name).
        */
        unsigned char header[0x20];
 
        /**
-                Program parameters.
+               Program parameters.
        */
        unsigned char control[POD_CONTROL_SIZE];
 };
 
 struct usb_line6_pod {
        /**
-                Generic Line6 USB data.
+               Generic Line6 USB data.
        */
        struct usb_line6 line6;
 
        /**
-                Dump request structure.
+               Dump request structure.
        */
        struct line6_dump_request dumpreq;
 
        /**
-                Current program number.
+               Current program number.
        */
        unsigned char channel_num;
 
        /**
-                Current program settings.
+               Current program settings.
        */
        struct pod_program prog_data;
 
        /**
-                Buffer for data retrieved from or to be stored on PODxt Pro.
+               Buffer for data retrieved from or to be stored on PODxt Pro.
        */
        struct pod_program prog_data_buf;
 
        /**
-                Buffer for requesting version number.
-       */
-       unsigned char *buffer_versionreq;
-
-       /**
-                Tuner mute mode.
+               Tuner mute mode.
        */
        struct ValueWait tuner_mute;
 
        /**
-                Tuner base frequency (typically 440Hz).
+               Tuner base frequency (typically 440Hz).
        */
        struct ValueWait tuner_freq;
 
        /**
-                Note received from tuner.
+               Note received from tuner.
        */
        struct ValueWait tuner_note;
 
        /**
-                Pitch value received from tuner.
+               Pitch value received from tuner.
        */
        struct ValueWait tuner_pitch;
 
        /**
-                Instrument monitor level.
+               Instrument monitor level.
        */
        struct ValueWait monitor_level;
 
        /**
-                Audio routing mode.
-                0: send processed guitar
-                1: send clean guitar
-                2: send clean guitar re-amp playback
-                3: send re-amp playback
+               Audio routing mode.
+               0: send processed guitar
+               1: send clean guitar
+               2: send clean guitar re-amp playback
+               3: send re-amp playback
        */
        struct ValueWait routing;
 
        /**
-                Wait for audio clipping event.
+               Wait for audio clipping event.
        */
        struct ValueWait clipping;
 
        /**
-                Bottom-half for creation of sysfs special files.
+               Timer for device initializaton.
        */
-       struct work_struct create_files_work;
+       struct timer_list startup_timer;
 
        /**
-                Dirty flags for access to parameter data.
+               Work handler for device initializaton.
        */
-       unsigned long param_dirty[POD_CONTROL_SIZE / sizeof(unsigned long)];
+       struct work_struct startup_work;
 
        /**
-                Some atomic flags.
+               Current progress in startup procedure.
        */
-       unsigned long atomic_flags;
+       int startup_progress;
+
+       /**
+               Dirty flags for access to parameter data.
+       */
+       unsigned long param_dirty[POD_CONTROL_SIZE / sizeof(unsigned long)];
 
        /**
-                Counter for startup process.
+               Some atomic flags.
        */
-       int startup_count;
+       unsigned long atomic_flags;
 
        /**
-                Serial number of device.
+               Serial number of device.
        */
        int serial_number;
 
        /**
-                Firmware version (x 100).
+               Firmware version (x 100).
        */
        int firmware_version;
 
        /**
-                Device ID.
+               Device ID.
        */
        int device_id;
 
        /**
-                Flag to indicate modification of current program settings.
+               Flag to indicate modification of current program settings.
        */
        char dirty;
 
        /**
-                Flag if initial firmware version request has been successful.
-       */
-       char versionreq_ok;
-
-       /**
-                Flag to enable MIDI postprocessing.
+               Flag to enable MIDI postprocessing.
        */
        char midi_postprocess;
 };
 
-
-extern void pod_disconnect(struct usb_interface *interface);
-extern int pod_init(struct usb_interface *interface, struct usb_line6_pod *pod);
-extern void pod_midi_postprocess(struct usb_line6_pod *pod,
-                                unsigned char *data, int length);
-extern void pod_process_message(struct usb_line6_pod *pod);
-extern void pod_receive_parameter(struct usb_line6_pod *pod, int param);
-extern void pod_transmit_parameter(struct usb_line6_pod *pod, int param,
-                                  int value);
-
+extern void line6_pod_disconnect(struct usb_interface *interface);
+extern int line6_pod_init(struct usb_interface *interface,
+                         struct usb_line6_pod *pod);
+extern void line6_pod_midi_postprocess(struct usb_line6_pod *pod,
+                                      unsigned char *data, int length);
+extern void line6_pod_process_message(struct usb_line6_pod *pod);
+extern void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
+                                        int value);
 
 #endif