diff options
Diffstat (limited to 'drivers/staging/line6/pod.h')
| -rw-r--r-- | drivers/staging/line6/pod.h | 164 |
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 |
