aboutsummaryrefslogtreecommitdiff
path: root/drivers/staging/line6/pod.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/line6/pod.h')
-rw-r--r--drivers/staging/line6/pod.h164
1 files changed, 31 insertions, 133 deletions
diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
index 7051ca61381..3e3f1671337 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.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
@@ -12,18 +12,13 @@
#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 "dumprequest.h"
-
+#include "driver.h"
/*
PODxt Live interfaces
@@ -42,163 +37,66 @@
*/
#define POD_CONTROL_SIZE 0x80
#define POD_BUFSIZE_DUMPREQ 7
-#define POD_STARTUP_DELAY 3
-
-
-/**
- Data structure for values that need to be requested explicitly.
- This is the case for system and tuner settings.
-*/
-struct ValueWait {
- unsigned short value;
- wait_queue_head_t wait;
-};
+#define POD_STARTUP_DELAY 1000
-/**
- Binary PodXT Pro program dump
+/*
+ Stages of POD startup procedure
*/
-struct pod_program {
- /**
- Header information (including program name).
- */
- unsigned char header[0x20];
-
- /**
- Program parameters.
- */
- unsigned char control[POD_CONTROL_SIZE];
+enum {
+ POD_STARTUP_INIT = 1,
+ POD_STARTUP_VERSIONREQ,
+ POD_STARTUP_WORKQUEUE,
+ POD_STARTUP_SETUP,
+ POD_STARTUP_LAST = POD_STARTUP_SETUP - 1
};
struct usb_line6_pod {
/**
- Generic Line6 USB data.
+ Generic Line6 USB data.
*/
struct usb_line6 line6;
/**
- Dump request structure.
- */
- struct line6_dump_request dumpreq;
-
- /**
- Current program number.
- */
- unsigned char channel_num;
-
- /**
- Current program settings.
- */
- struct pod_program prog_data;
-
- /**
- 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.
- */
- struct ValueWait tuner_mute;
-
- /**
- Tuner base frequency (typically 440Hz).
- */
- struct ValueWait tuner_freq;
-
- /**
- Note received from tuner.
- */
- struct ValueWait tuner_note;
-
- /**
- Pitch value received from tuner.
+ Instrument monitor level.
*/
- struct ValueWait tuner_pitch;
+ int monitor_level;
/**
- Instrument monitor level.
+ Timer for device initializaton.
*/
- struct ValueWait monitor_level;
+ struct timer_list startup_timer;
/**
- Audio routing mode.
- 0: send processed guitar
- 1: send clean guitar
- 2: send clean guitar re-amp playback
- 3: send re-amp playback
+ Work handler for device initializaton.
*/
- struct ValueWait routing;
+ struct work_struct startup_work;
/**
- Wait for audio clipping event.
+ Current progress in startup procedure.
*/
- struct ValueWait clipping;
+ int startup_progress;
/**
- Bottom-half for creation of sysfs special files.
- */
- struct work_struct create_files_work;
-
- /**
- Dirty flags for access to parameter data.
- */
- unsigned long param_dirty[POD_CONTROL_SIZE / sizeof(unsigned long)];
-
- /**
- 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.
- */
- char dirty;
-
- /**
- Flag if initial firmware version request has been successful.
- */
- char versionreq_ok;
-
- /**
- 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_process_message(struct usb_line6_pod *pod);
+extern void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
+ u8 value);
#endif