• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/staging/line6/
1/*
2 * Line6 Linux USB driver - 0.8.0
3 *
4 * Copyright (C) 2004-2009 Markus Grabner (grabner@icg.tugraz.at)
5 *
6 *	This program is free software; you can redistribute it and/or
7 *	modify it under the terms of the GNU General Public License as
8 *	published by the Free Software Foundation, version 2.
9 *
10 */
11
12#ifndef POD_H
13#define POD_H
14
15
16#include "driver.h"
17
18#include <linux/spinlock.h>
19#include <linux/usb.h>
20#include <linux/wait.h>
21#include <linux/workqueue.h>
22
23#include <sound/core.h>
24
25#include "dumprequest.h"
26
27
28/*
29	PODxt Live interfaces
30*/
31#define PODXTLIVE_INTERFACE_POD    0
32#define PODXTLIVE_INTERFACE_VARIAX 1
33
34/*
35	Locate name in binary program dump
36*/
37#define	POD_NAME_OFFSET 0
38#define	POD_NAME_LENGTH 16
39
40/*
41	Other constants
42*/
43#define POD_CONTROL_SIZE 0x80
44#define POD_BUFSIZE_DUMPREQ 7
45#define POD_STARTUP_DELAY 3
46
47
48/**
49	 Data structure for values that need to be requested explicitly.
50	 This is the case for system and tuner settings.
51*/
52struct ValueWait {
53	unsigned short value;
54	wait_queue_head_t wait;
55};
56
57/**
58	 Binary PodXT Pro program dump
59*/
60struct pod_program {
61	/**
62		 Header information (including program name).
63	*/
64	unsigned char header[0x20];
65
66	/**
67		 Program parameters.
68	*/
69	unsigned char control[POD_CONTROL_SIZE];
70};
71
72struct usb_line6_pod {
73	/**
74		 Generic Line6 USB data.
75	*/
76	struct usb_line6 line6;
77
78	/**
79		 Dump request structure.
80	*/
81	struct line6_dump_request dumpreq;
82
83	/**
84		 Current program number.
85	*/
86	unsigned char channel_num;
87
88	/**
89		 Current program settings.
90	*/
91	struct pod_program prog_data;
92
93	/**
94		 Buffer for data retrieved from or to be stored on PODxt Pro.
95	*/
96	struct pod_program prog_data_buf;
97
98	/**
99		 Buffer for requesting version number.
100	*/
101	unsigned char *buffer_versionreq;
102
103	/**
104		 Tuner mute mode.
105	*/
106	struct ValueWait tuner_mute;
107
108	/**
109		 Tuner base frequency (typically 440Hz).
110	*/
111	struct ValueWait tuner_freq;
112
113	/**
114		 Note received from tuner.
115	*/
116	struct ValueWait tuner_note;
117
118	/**
119		 Pitch value received from tuner.
120	*/
121	struct ValueWait tuner_pitch;
122
123	/**
124		 Instrument monitor level.
125	*/
126	struct ValueWait monitor_level;
127
128	/**
129		 Audio routing mode.
130		 0: send processed guitar
131		 1: send clean guitar
132		 2: send clean guitar re-amp playback
133		 3: send re-amp playback
134	*/
135	struct ValueWait routing;
136
137	/**
138		 Wait for audio clipping event.
139	*/
140	struct ValueWait clipping;
141
142	/**
143		 Bottom-half for creation of sysfs special files.
144	*/
145	struct work_struct create_files_work;
146
147	/**
148		 Dirty flags for access to parameter data.
149	*/
150	unsigned long param_dirty[POD_CONTROL_SIZE / sizeof(unsigned long)];
151
152	/**
153		 Some atomic flags.
154	*/
155	unsigned long atomic_flags;
156
157	/**
158		 Counter for startup process.
159	*/
160	int startup_count;
161
162	/**
163		 Serial number of device.
164	*/
165	int serial_number;
166
167	/**
168		 Firmware version (x 100).
169	*/
170	int firmware_version;
171
172	/**
173		 Device ID.
174	*/
175	int device_id;
176
177	/**
178		 Flag to indicate modification of current program settings.
179	*/
180	char dirty;
181
182	/**
183		 Flag if initial firmware version request has been successful.
184	*/
185	char versionreq_ok;
186
187	/**
188		 Flag to enable MIDI postprocessing.
189	*/
190	char midi_postprocess;
191};
192
193
194extern void pod_disconnect(struct usb_interface *interface);
195extern int pod_init(struct usb_interface *interface, struct usb_line6_pod *pod);
196extern void pod_midi_postprocess(struct usb_line6_pod *pod,
197				 unsigned char *data, int length);
198extern void pod_process_message(struct usb_line6_pod *pod);
199extern void pod_receive_parameter(struct usb_line6_pod *pod, int param);
200extern void pod_transmit_parameter(struct usb_line6_pod *pod, int param,
201				   int value);
202
203
204#endif
205