staging: line6: sync with upstream

Big upstream sync.

Signed-off-by: Markus Grabner <grabner@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
index 7051ca6..d8e38a9 100644
--- a/drivers/staging/line6/pod.h
+++ b/drivers/staging/line6/pod.h
@@ -1,7 +1,7 @@
 /*
- * Line6 Linux USB driver - 0.8.0
+ * Line6 Linux USB driver - 0.9.0
  *
- * 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
@@ -13,15 +13,14 @@
 #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"
 
 
@@ -42,163 +41,156 @@
 */
 #define POD_CONTROL_SIZE 0x80
 #define POD_BUFSIZE_DUMPREQ 7
-#define POD_STARTUP_DELAY 3
-
+#define POD_STARTUP_DELAY 3000
 
 /**
-	 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.
+	*/
+	struct work_struct startup_work;
+
+	/**
+		Current progress in startup procedure.
+	*/
+	int startup_progress;
+
+	/**
+		Dirty flags for access to parameter data.
 	*/
 	unsigned long param_dirty[POD_CONTROL_SIZE / sizeof(unsigned long)];
 
 	/**
-		 Some atomic flags.
+		Some atomic flags.
 	*/
 	unsigned long atomic_flags;
 
 	/**
-		 Counter for startup process.
-	*/
-	int startup_count;
-
-	/**
-		 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