1 /*
2  * Line6 Linux USB driver - 0.9.1beta
3  *
4  * Copyright (C) 2004-2010 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 #include <linux/usb.h>
13 
14 #include "control.h"
15 #include "driver.h"
16 #include "pod.h"
17 #include "usbdefs.h"
18 #include "variax.h"
19 
20 #define DEVICE_ATTR2(_name1, _name2, _mode, _show, _store) \
21 struct device_attribute dev_attr_##_name1 = __ATTR(_name2, _mode, _show, _store)
22 
23 #define LINE6_PARAM_R(PREFIX, prefix, type, param) \
24 static ssize_t prefix##_get_##param(struct device *dev, \
25 			struct device_attribute *attr, char *buf) \
26 { \
27 	return prefix##_get_param_##type(dev, buf, PREFIX##_##param); \
28 }
29 
30 #define LINE6_PARAM_RW(PREFIX, prefix, type, param) \
31 LINE6_PARAM_R(PREFIX, prefix, type, param); \
32 static ssize_t prefix##_set_##param(struct device *dev, \
33 		struct device_attribute *attr, const char *buf, size_t count) \
34 { \
35 	return prefix##_set_param_##type(dev, buf, count, PREFIX##_##param); \
36 }
37 
38 #define POD_PARAM_R(type, param) LINE6_PARAM_R(POD, pod, type, param)
39 #define POD_PARAM_RW(type, param) LINE6_PARAM_RW(POD, pod, type, param)
40 #define VARIAX_PARAM_R(type, param) LINE6_PARAM_R(VARIAX, variax, type, param)
41 #define VARIAX_PARAM_RW(type, param) LINE6_PARAM_RW(VARIAX, variax, type, param)
42 
pod_get_param_int(struct device * dev,char * buf,int param)43 static ssize_t pod_get_param_int(struct device *dev, char *buf, int param)
44 {
45 	struct usb_interface *interface = to_usb_interface(dev);
46 	struct usb_line6_pod *pod = usb_get_intfdata(interface);
47 	int retval = line6_dump_wait_interruptible(&pod->dumpreq);
48 	if (retval < 0)
49 		return retval;
50 	return sprintf(buf, "%d\n", pod->prog_data.control[param]);
51 }
52 
pod_set_param_int(struct device * dev,const char * buf,size_t count,int param)53 static ssize_t pod_set_param_int(struct device *dev, const char *buf,
54 				 size_t count, int param)
55 {
56 	struct usb_interface *interface = to_usb_interface(dev);
57 	struct usb_line6_pod *pod = usb_get_intfdata(interface);
58 	unsigned long value;
59 	int retval;
60 
61 	retval = strict_strtoul(buf, 10, &value);
62 	if (retval)
63 		return retval;
64 
65 	line6_pod_transmit_parameter(pod, param, value);
66 	return count;
67 }
68 
variax_get_param_int(struct device * dev,char * buf,int param)69 static ssize_t variax_get_param_int(struct device *dev, char *buf, int param)
70 {
71 	struct usb_interface *interface = to_usb_interface(dev);
72 	struct usb_line6_variax *variax = usb_get_intfdata(interface);
73 	int retval = line6_dump_wait_interruptible(&variax->dumpreq);
74 	if (retval < 0)
75 		return retval;
76 	return sprintf(buf, "%d\n", variax->model_data.control[param]);
77 }
78 
variax_get_param_float(struct device * dev,char * buf,int param)79 static ssize_t variax_get_param_float(struct device *dev, char *buf, int param)
80 {
81 	/*
82 	   We do our own floating point handling here since at the time
83 	   this code was written (Jan 2006) it was highly discouraged to
84 	   use floating point arithmetic in the kernel. If you think that
85 	   this no longer applies, feel free to replace this by generic
86 	   floating point code.
87 	 */
88 
89 	static const int BIAS = 0x7f;
90 	static const int OFFSET = 0xf;
91 	static const int PRECISION = 1000;
92 
93 	int len = 0;
94 	unsigned part_int, part_frac;
95 	struct usb_interface *interface = to_usb_interface(dev);
96 	struct usb_line6_variax *variax = usb_get_intfdata(interface);
97 	const unsigned char *p = variax->model_data.control + param;
98 	int retval = line6_dump_wait_interruptible(&variax->dumpreq);
99 	if (retval < 0)
100 		return retval;
101 
102 	if ((p[0] == 0) && (p[1] == 0) && (p[2] == 0))
103 		part_int = part_frac = 0;
104 	else {
105 		int exponent = (((p[0] & 0x7f) << 1) | (p[1] >> 7)) - BIAS;
106 		unsigned mantissa = (p[1] << 8) | p[2] | 0x8000;
107 		exponent -= OFFSET;
108 
109 		if (exponent >= 0) {
110 			part_int = mantissa << exponent;
111 			part_frac = 0;
112 		} else {
113 			part_int = mantissa >> -exponent;
114 			part_frac = (mantissa << (32 + exponent)) & 0xffffffff;
115 		}
116 
117 		part_frac =
118 		    (part_frac / ((1UL << 31) / (PRECISION / 2 * 10)) + 5) / 10;
119 	}
120 
121 	len +=
122 	    sprintf(buf + len, "%s%d.%03d\n", ((p[0] & 0x80) ? "-" : ""),
123 		    part_int, part_frac);
124 	return len;
125 }
126 
127 POD_PARAM_RW(int, tweak);
128 POD_PARAM_RW(int, wah_position);
129 POD_PARAM_RW(int, compression_gain);
130 POD_PARAM_RW(int, vol_pedal_position);
131 POD_PARAM_RW(int, compression_threshold);
132 POD_PARAM_RW(int, pan);
133 POD_PARAM_RW(int, amp_model_setup);
134 POD_PARAM_RW(int, amp_model);
135 POD_PARAM_RW(int, drive);
136 POD_PARAM_RW(int, bass);
137 POD_PARAM_RW(int, mid);
138 POD_PARAM_RW(int, lowmid);
139 POD_PARAM_RW(int, treble);
140 POD_PARAM_RW(int, highmid);
141 POD_PARAM_RW(int, chan_vol);
142 POD_PARAM_RW(int, reverb_mix);
143 POD_PARAM_RW(int, effect_setup);
144 POD_PARAM_RW(int, band_1_frequency);
145 POD_PARAM_RW(int, presence);
146 POD_PARAM_RW(int, treble__bass);
147 POD_PARAM_RW(int, noise_gate_enable);
148 POD_PARAM_RW(int, gate_threshold);
149 POD_PARAM_RW(int, gate_decay_time);
150 POD_PARAM_RW(int, stomp_enable);
151 POD_PARAM_RW(int, comp_enable);
152 POD_PARAM_RW(int, stomp_time);
153 POD_PARAM_RW(int, delay_enable);
154 POD_PARAM_RW(int, mod_param_1);
155 POD_PARAM_RW(int, delay_param_1);
156 POD_PARAM_RW(int, delay_param_1_note_value);
157 POD_PARAM_RW(int, band_2_frequency__bass);
158 POD_PARAM_RW(int, delay_param_2);
159 POD_PARAM_RW(int, delay_volume_mix);
160 POD_PARAM_RW(int, delay_param_3);
161 POD_PARAM_RW(int, reverb_enable);
162 POD_PARAM_RW(int, reverb_type);
163 POD_PARAM_RW(int, reverb_decay);
164 POD_PARAM_RW(int, reverb_tone);
165 POD_PARAM_RW(int, reverb_pre_delay);
166 POD_PARAM_RW(int, reverb_pre_post);
167 POD_PARAM_RW(int, band_2_frequency);
168 POD_PARAM_RW(int, band_3_frequency__bass);
169 POD_PARAM_RW(int, wah_enable);
170 POD_PARAM_RW(int, modulation_lo_cut);
171 POD_PARAM_RW(int, delay_reverb_lo_cut);
172 POD_PARAM_RW(int, volume_pedal_minimum);
173 POD_PARAM_RW(int, eq_pre_post);
174 POD_PARAM_RW(int, volume_pre_post);
175 POD_PARAM_RW(int, di_model);
176 POD_PARAM_RW(int, di_delay);
177 POD_PARAM_RW(int, mod_enable);
178 POD_PARAM_RW(int, mod_param_1_note_value);
179 POD_PARAM_RW(int, mod_param_2);
180 POD_PARAM_RW(int, mod_param_3);
181 POD_PARAM_RW(int, mod_param_4);
182 POD_PARAM_RW(int, mod_param_5);
183 POD_PARAM_RW(int, mod_volume_mix);
184 POD_PARAM_RW(int, mod_pre_post);
185 POD_PARAM_RW(int, modulation_model);
186 POD_PARAM_RW(int, band_3_frequency);
187 POD_PARAM_RW(int, band_4_frequency__bass);
188 POD_PARAM_RW(int, mod_param_1_double_precision);
189 POD_PARAM_RW(int, delay_param_1_double_precision);
190 POD_PARAM_RW(int, eq_enable);
191 POD_PARAM_RW(int, tap);
192 POD_PARAM_RW(int, volume_tweak_pedal_assign);
193 POD_PARAM_RW(int, band_5_frequency);
194 POD_PARAM_RW(int, tuner);
195 POD_PARAM_RW(int, mic_selection);
196 POD_PARAM_RW(int, cabinet_model);
197 POD_PARAM_RW(int, stomp_model);
198 POD_PARAM_RW(int, roomlevel);
199 POD_PARAM_RW(int, band_4_frequency);
200 POD_PARAM_RW(int, band_6_frequency);
201 POD_PARAM_RW(int, stomp_param_1_note_value);
202 POD_PARAM_RW(int, stomp_param_2);
203 POD_PARAM_RW(int, stomp_param_3);
204 POD_PARAM_RW(int, stomp_param_4);
205 POD_PARAM_RW(int, stomp_param_5);
206 POD_PARAM_RW(int, stomp_param_6);
207 POD_PARAM_RW(int, amp_switch_select);
208 POD_PARAM_RW(int, delay_param_4);
209 POD_PARAM_RW(int, delay_param_5);
210 POD_PARAM_RW(int, delay_pre_post);
211 POD_PARAM_RW(int, delay_model);
212 POD_PARAM_RW(int, delay_verb_model);
213 POD_PARAM_RW(int, tempo_msb);
214 POD_PARAM_RW(int, tempo_lsb);
215 POD_PARAM_RW(int, wah_model);
216 POD_PARAM_RW(int, bypass_volume);
217 POD_PARAM_RW(int, fx_loop_on_off);
218 POD_PARAM_RW(int, tweak_param_select);
219 POD_PARAM_RW(int, amp1_engage);
220 POD_PARAM_RW(int, band_1_gain);
221 POD_PARAM_RW(int, band_2_gain__bass);
222 POD_PARAM_RW(int, band_2_gain);
223 POD_PARAM_RW(int, band_3_gain__bass);
224 POD_PARAM_RW(int, band_3_gain);
225 POD_PARAM_RW(int, band_4_gain__bass);
226 POD_PARAM_RW(int, band_5_gain__bass);
227 POD_PARAM_RW(int, band_4_gain);
228 POD_PARAM_RW(int, band_6_gain__bass);
229 VARIAX_PARAM_R(int, body);
230 VARIAX_PARAM_R(int, pickup1_enable);
231 VARIAX_PARAM_R(int, pickup1_type);
232 VARIAX_PARAM_R(float, pickup1_position);
233 VARIAX_PARAM_R(float, pickup1_angle);
234 VARIAX_PARAM_R(float, pickup1_level);
235 VARIAX_PARAM_R(int, pickup2_enable);
236 VARIAX_PARAM_R(int, pickup2_type);
237 VARIAX_PARAM_R(float, pickup2_position);
238 VARIAX_PARAM_R(float, pickup2_angle);
239 VARIAX_PARAM_R(float, pickup2_level);
240 VARIAX_PARAM_R(int, pickup_phase);
241 VARIAX_PARAM_R(float, capacitance);
242 VARIAX_PARAM_R(float, tone_resistance);
243 VARIAX_PARAM_R(float, volume_resistance);
244 VARIAX_PARAM_R(int, taper);
245 VARIAX_PARAM_R(float, tone_dump);
246 VARIAX_PARAM_R(int, save_tone);
247 VARIAX_PARAM_R(float, volume_dump);
248 VARIAX_PARAM_R(int, tuning_enable);
249 VARIAX_PARAM_R(int, tuning6);
250 VARIAX_PARAM_R(int, tuning5);
251 VARIAX_PARAM_R(int, tuning4);
252 VARIAX_PARAM_R(int, tuning3);
253 VARIAX_PARAM_R(int, tuning2);
254 VARIAX_PARAM_R(int, tuning1);
255 VARIAX_PARAM_R(float, detune6);
256 VARIAX_PARAM_R(float, detune5);
257 VARIAX_PARAM_R(float, detune4);
258 VARIAX_PARAM_R(float, detune3);
259 VARIAX_PARAM_R(float, detune2);
260 VARIAX_PARAM_R(float, detune1);
261 VARIAX_PARAM_R(float, mix6);
262 VARIAX_PARAM_R(float, mix5);
263 VARIAX_PARAM_R(float, mix4);
264 VARIAX_PARAM_R(float, mix3);
265 VARIAX_PARAM_R(float, mix2);
266 VARIAX_PARAM_R(float, mix1);
267 VARIAX_PARAM_R(int, pickup_wiring);
268 
269 static DEVICE_ATTR(tweak, S_IWUSR | S_IRUGO, pod_get_tweak, pod_set_tweak);
270 static DEVICE_ATTR(wah_position, S_IWUSR | S_IRUGO, pod_get_wah_position,
271 		   pod_set_wah_position);
272 static DEVICE_ATTR(compression_gain, S_IWUSR | S_IRUGO,
273 		   pod_get_compression_gain, pod_set_compression_gain);
274 static DEVICE_ATTR(vol_pedal_position, S_IWUSR | S_IRUGO,
275 		   pod_get_vol_pedal_position, pod_set_vol_pedal_position);
276 static DEVICE_ATTR(compression_threshold, S_IWUSR | S_IRUGO,
277 		   pod_get_compression_threshold,
278 		   pod_set_compression_threshold);
279 static DEVICE_ATTR(pan, S_IWUSR | S_IRUGO, pod_get_pan, pod_set_pan);
280 static DEVICE_ATTR(amp_model_setup, S_IWUSR | S_IRUGO, pod_get_amp_model_setup,
281 		   pod_set_amp_model_setup);
282 static DEVICE_ATTR(amp_model, S_IWUSR | S_IRUGO, pod_get_amp_model,
283 		   pod_set_amp_model);
284 static DEVICE_ATTR(drive, S_IWUSR | S_IRUGO, pod_get_drive, pod_set_drive);
285 static DEVICE_ATTR(bass, S_IWUSR | S_IRUGO, pod_get_bass, pod_set_bass);
286 static DEVICE_ATTR(mid, S_IWUSR | S_IRUGO, pod_get_mid, pod_set_mid);
287 static DEVICE_ATTR(lowmid, S_IWUSR | S_IRUGO, pod_get_lowmid, pod_set_lowmid);
288 static DEVICE_ATTR(treble, S_IWUSR | S_IRUGO, pod_get_treble, pod_set_treble);
289 static DEVICE_ATTR(highmid, S_IWUSR | S_IRUGO, pod_get_highmid,
290 		   pod_set_highmid);
291 static DEVICE_ATTR(chan_vol, S_IWUSR | S_IRUGO, pod_get_chan_vol,
292 		   pod_set_chan_vol);
293 static DEVICE_ATTR(reverb_mix, S_IWUSR | S_IRUGO, pod_get_reverb_mix,
294 		   pod_set_reverb_mix);
295 static DEVICE_ATTR(effect_setup, S_IWUSR | S_IRUGO, pod_get_effect_setup,
296 		   pod_set_effect_setup);
297 static DEVICE_ATTR(band_1_frequency, S_IWUSR | S_IRUGO,
298 		   pod_get_band_1_frequency, pod_set_band_1_frequency);
299 static DEVICE_ATTR(presence, S_IWUSR | S_IRUGO, pod_get_presence,
300 		   pod_set_presence);
301 static DEVICE_ATTR2(treble__bass, treble, S_IWUSR | S_IRUGO,
302 		    pod_get_treble__bass, pod_set_treble__bass);
303 static DEVICE_ATTR(noise_gate_enable, S_IWUSR | S_IRUGO,
304 		   pod_get_noise_gate_enable, pod_set_noise_gate_enable);
305 static DEVICE_ATTR(gate_threshold, S_IWUSR | S_IRUGO, pod_get_gate_threshold,
306 		   pod_set_gate_threshold);
307 static DEVICE_ATTR(gate_decay_time, S_IWUSR | S_IRUGO, pod_get_gate_decay_time,
308 		   pod_set_gate_decay_time);
309 static DEVICE_ATTR(stomp_enable, S_IWUSR | S_IRUGO, pod_get_stomp_enable,
310 		   pod_set_stomp_enable);
311 static DEVICE_ATTR(comp_enable, S_IWUSR | S_IRUGO, pod_get_comp_enable,
312 		   pod_set_comp_enable);
313 static DEVICE_ATTR(stomp_time, S_IWUSR | S_IRUGO, pod_get_stomp_time,
314 		   pod_set_stomp_time);
315 static DEVICE_ATTR(delay_enable, S_IWUSR | S_IRUGO, pod_get_delay_enable,
316 		   pod_set_delay_enable);
317 static DEVICE_ATTR(mod_param_1, S_IWUSR | S_IRUGO, pod_get_mod_param_1,
318 		   pod_set_mod_param_1);
319 static DEVICE_ATTR(delay_param_1, S_IWUSR | S_IRUGO, pod_get_delay_param_1,
320 		   pod_set_delay_param_1);
321 static DEVICE_ATTR(delay_param_1_note_value, S_IWUSR | S_IRUGO,
322 		   pod_get_delay_param_1_note_value,
323 		   pod_set_delay_param_1_note_value);
324 static DEVICE_ATTR2(band_2_frequency__bass, band_2_frequency, S_IWUSR | S_IRUGO,
325 		    pod_get_band_2_frequency__bass,
326 		    pod_set_band_2_frequency__bass);
327 static DEVICE_ATTR(delay_param_2, S_IWUSR | S_IRUGO, pod_get_delay_param_2,
328 		   pod_set_delay_param_2);
329 static DEVICE_ATTR(delay_volume_mix, S_IWUSR | S_IRUGO,
330 		   pod_get_delay_volume_mix, pod_set_delay_volume_mix);
331 static DEVICE_ATTR(delay_param_3, S_IWUSR | S_IRUGO, pod_get_delay_param_3,
332 		   pod_set_delay_param_3);
333 static DEVICE_ATTR(reverb_enable, S_IWUSR | S_IRUGO, pod_get_reverb_enable,
334 		   pod_set_reverb_enable);
335 static DEVICE_ATTR(reverb_type, S_IWUSR | S_IRUGO, pod_get_reverb_type,
336 		   pod_set_reverb_type);
337 static DEVICE_ATTR(reverb_decay, S_IWUSR | S_IRUGO, pod_get_reverb_decay,
338 		   pod_set_reverb_decay);
339 static DEVICE_ATTR(reverb_tone, S_IWUSR | S_IRUGO, pod_get_reverb_tone,
340 		   pod_set_reverb_tone);
341 static DEVICE_ATTR(reverb_pre_delay, S_IWUSR | S_IRUGO,
342 		   pod_get_reverb_pre_delay, pod_set_reverb_pre_delay);
343 static DEVICE_ATTR(reverb_pre_post, S_IWUSR | S_IRUGO, pod_get_reverb_pre_post,
344 		   pod_set_reverb_pre_post);
345 static DEVICE_ATTR(band_2_frequency, S_IWUSR | S_IRUGO,
346 		   pod_get_band_2_frequency, pod_set_band_2_frequency);
347 static DEVICE_ATTR2(band_3_frequency__bass, band_3_frequency, S_IWUSR | S_IRUGO,
348 		    pod_get_band_3_frequency__bass,
349 		    pod_set_band_3_frequency__bass);
350 static DEVICE_ATTR(wah_enable, S_IWUSR | S_IRUGO, pod_get_wah_enable,
351 		   pod_set_wah_enable);
352 static DEVICE_ATTR(modulation_lo_cut, S_IWUSR | S_IRUGO,
353 		   pod_get_modulation_lo_cut, pod_set_modulation_lo_cut);
354 static DEVICE_ATTR(delay_reverb_lo_cut, S_IWUSR | S_IRUGO,
355 		   pod_get_delay_reverb_lo_cut, pod_set_delay_reverb_lo_cut);
356 static DEVICE_ATTR(volume_pedal_minimum, S_IWUSR | S_IRUGO,
357 		   pod_get_volume_pedal_minimum, pod_set_volume_pedal_minimum);
358 static DEVICE_ATTR(eq_pre_post, S_IWUSR | S_IRUGO, pod_get_eq_pre_post,
359 		   pod_set_eq_pre_post);
360 static DEVICE_ATTR(volume_pre_post, S_IWUSR | S_IRUGO, pod_get_volume_pre_post,
361 		   pod_set_volume_pre_post);
362 static DEVICE_ATTR(di_model, S_IWUSR | S_IRUGO, pod_get_di_model,
363 		   pod_set_di_model);
364 static DEVICE_ATTR(di_delay, S_IWUSR | S_IRUGO, pod_get_di_delay,
365 		   pod_set_di_delay);
366 static DEVICE_ATTR(mod_enable, S_IWUSR | S_IRUGO, pod_get_mod_enable,
367 		   pod_set_mod_enable);
368 static DEVICE_ATTR(mod_param_1_note_value, S_IWUSR | S_IRUGO,
369 		   pod_get_mod_param_1_note_value,
370 		   pod_set_mod_param_1_note_value);
371 static DEVICE_ATTR(mod_param_2, S_IWUSR | S_IRUGO, pod_get_mod_param_2,
372 		   pod_set_mod_param_2);
373 static DEVICE_ATTR(mod_param_3, S_IWUSR | S_IRUGO, pod_get_mod_param_3,
374 		   pod_set_mod_param_3);
375 static DEVICE_ATTR(mod_param_4, S_IWUSR | S_IRUGO, pod_get_mod_param_4,
376 		   pod_set_mod_param_4);
377 static DEVICE_ATTR(mod_param_5, S_IWUSR | S_IRUGO, pod_get_mod_param_5,
378 		   pod_set_mod_param_5);
379 static DEVICE_ATTR(mod_volume_mix, S_IWUSR | S_IRUGO, pod_get_mod_volume_mix,
380 		   pod_set_mod_volume_mix);
381 static DEVICE_ATTR(mod_pre_post, S_IWUSR | S_IRUGO, pod_get_mod_pre_post,
382 		   pod_set_mod_pre_post);
383 static DEVICE_ATTR(modulation_model, S_IWUSR | S_IRUGO,
384 		   pod_get_modulation_model, pod_set_modulation_model);
385 static DEVICE_ATTR(band_3_frequency, S_IWUSR | S_IRUGO,
386 		   pod_get_band_3_frequency, pod_set_band_3_frequency);
387 static DEVICE_ATTR2(band_4_frequency__bass, band_4_frequency, S_IWUSR | S_IRUGO,
388 		    pod_get_band_4_frequency__bass,
389 		    pod_set_band_4_frequency__bass);
390 static DEVICE_ATTR(mod_param_1_double_precision, S_IWUSR | S_IRUGO,
391 		   pod_get_mod_param_1_double_precision,
392 		   pod_set_mod_param_1_double_precision);
393 static DEVICE_ATTR(delay_param_1_double_precision, S_IWUSR | S_IRUGO,
394 		   pod_get_delay_param_1_double_precision,
395 		   pod_set_delay_param_1_double_precision);
396 static DEVICE_ATTR(eq_enable, S_IWUSR | S_IRUGO, pod_get_eq_enable,
397 		   pod_set_eq_enable);
398 static DEVICE_ATTR(tap, S_IWUSR | S_IRUGO, pod_get_tap, pod_set_tap);
399 static DEVICE_ATTR(volume_tweak_pedal_assign, S_IWUSR | S_IRUGO,
400 		   pod_get_volume_tweak_pedal_assign,
401 		   pod_set_volume_tweak_pedal_assign);
402 static DEVICE_ATTR(band_5_frequency, S_IWUSR | S_IRUGO,
403 		   pod_get_band_5_frequency, pod_set_band_5_frequency);
404 static DEVICE_ATTR(tuner, S_IWUSR | S_IRUGO, pod_get_tuner, pod_set_tuner);
405 static DEVICE_ATTR(mic_selection, S_IWUSR | S_IRUGO, pod_get_mic_selection,
406 		   pod_set_mic_selection);
407 static DEVICE_ATTR(cabinet_model, S_IWUSR | S_IRUGO, pod_get_cabinet_model,
408 		   pod_set_cabinet_model);
409 static DEVICE_ATTR(stomp_model, S_IWUSR | S_IRUGO, pod_get_stomp_model,
410 		   pod_set_stomp_model);
411 static DEVICE_ATTR(roomlevel, S_IWUSR | S_IRUGO, pod_get_roomlevel,
412 		   pod_set_roomlevel);
413 static DEVICE_ATTR(band_4_frequency, S_IWUSR | S_IRUGO,
414 		   pod_get_band_4_frequency, pod_set_band_4_frequency);
415 static DEVICE_ATTR(band_6_frequency, S_IWUSR | S_IRUGO,
416 		   pod_get_band_6_frequency, pod_set_band_6_frequency);
417 static DEVICE_ATTR(stomp_param_1_note_value, S_IWUSR | S_IRUGO,
418 		   pod_get_stomp_param_1_note_value,
419 		   pod_set_stomp_param_1_note_value);
420 static DEVICE_ATTR(stomp_param_2, S_IWUSR | S_IRUGO, pod_get_stomp_param_2,
421 		   pod_set_stomp_param_2);
422 static DEVICE_ATTR(stomp_param_3, S_IWUSR | S_IRUGO, pod_get_stomp_param_3,
423 		   pod_set_stomp_param_3);
424 static DEVICE_ATTR(stomp_param_4, S_IWUSR | S_IRUGO, pod_get_stomp_param_4,
425 		   pod_set_stomp_param_4);
426 static DEVICE_ATTR(stomp_param_5, S_IWUSR | S_IRUGO, pod_get_stomp_param_5,
427 		   pod_set_stomp_param_5);
428 static DEVICE_ATTR(stomp_param_6, S_IWUSR | S_IRUGO, pod_get_stomp_param_6,
429 		   pod_set_stomp_param_6);
430 static DEVICE_ATTR(amp_switch_select, S_IWUSR | S_IRUGO,
431 		   pod_get_amp_switch_select, pod_set_amp_switch_select);
432 static DEVICE_ATTR(delay_param_4, S_IWUSR | S_IRUGO, pod_get_delay_param_4,
433 		   pod_set_delay_param_4);
434 static DEVICE_ATTR(delay_param_5, S_IWUSR | S_IRUGO, pod_get_delay_param_5,
435 		   pod_set_delay_param_5);
436 static DEVICE_ATTR(delay_pre_post, S_IWUSR | S_IRUGO, pod_get_delay_pre_post,
437 		   pod_set_delay_pre_post);
438 static DEVICE_ATTR(delay_model, S_IWUSR | S_IRUGO, pod_get_delay_model,
439 		   pod_set_delay_model);
440 static DEVICE_ATTR(delay_verb_model, S_IWUSR | S_IRUGO,
441 		   pod_get_delay_verb_model, pod_set_delay_verb_model);
442 static DEVICE_ATTR(tempo_msb, S_IWUSR | S_IRUGO, pod_get_tempo_msb,
443 		   pod_set_tempo_msb);
444 static DEVICE_ATTR(tempo_lsb, S_IWUSR | S_IRUGO, pod_get_tempo_lsb,
445 		   pod_set_tempo_lsb);
446 static DEVICE_ATTR(wah_model, S_IWUSR | S_IRUGO, pod_get_wah_model,
447 		   pod_set_wah_model);
448 static DEVICE_ATTR(bypass_volume, S_IWUSR | S_IRUGO, pod_get_bypass_volume,
449 		   pod_set_bypass_volume);
450 static DEVICE_ATTR(fx_loop_on_off, S_IWUSR | S_IRUGO, pod_get_fx_loop_on_off,
451 		   pod_set_fx_loop_on_off);
452 static DEVICE_ATTR(tweak_param_select, S_IWUSR | S_IRUGO,
453 		   pod_get_tweak_param_select, pod_set_tweak_param_select);
454 static DEVICE_ATTR(amp1_engage, S_IWUSR | S_IRUGO, pod_get_amp1_engage,
455 		   pod_set_amp1_engage);
456 static DEVICE_ATTR(band_1_gain, S_IWUSR | S_IRUGO, pod_get_band_1_gain,
457 		   pod_set_band_1_gain);
458 static DEVICE_ATTR2(band_2_gain__bass, band_2_gain, S_IWUSR | S_IRUGO,
459 		    pod_get_band_2_gain__bass, pod_set_band_2_gain__bass);
460 static DEVICE_ATTR(band_2_gain, S_IWUSR | S_IRUGO, pod_get_band_2_gain,
461 		   pod_set_band_2_gain);
462 static DEVICE_ATTR2(band_3_gain__bass, band_3_gain, S_IWUSR | S_IRUGO,
463 		    pod_get_band_3_gain__bass, pod_set_band_3_gain__bass);
464 static DEVICE_ATTR(band_3_gain, S_IWUSR | S_IRUGO, pod_get_band_3_gain,
465 		   pod_set_band_3_gain);
466 static DEVICE_ATTR2(band_4_gain__bass, band_4_gain, S_IWUSR | S_IRUGO,
467 		    pod_get_band_4_gain__bass, pod_set_band_4_gain__bass);
468 static DEVICE_ATTR2(band_5_gain__bass, band_5_gain, S_IWUSR | S_IRUGO,
469 		    pod_get_band_5_gain__bass, pod_set_band_5_gain__bass);
470 static DEVICE_ATTR(band_4_gain, S_IWUSR | S_IRUGO, pod_get_band_4_gain,
471 		   pod_set_band_4_gain);
472 static DEVICE_ATTR2(band_6_gain__bass, band_6_gain, S_IWUSR | S_IRUGO,
473 		    pod_get_band_6_gain__bass, pod_set_band_6_gain__bass);
474 static DEVICE_ATTR(body, S_IRUGO, variax_get_body, line6_nop_write);
475 static DEVICE_ATTR(pickup1_enable, S_IRUGO, variax_get_pickup1_enable,
476 		   line6_nop_write);
477 static DEVICE_ATTR(pickup1_type, S_IRUGO, variax_get_pickup1_type,
478 		   line6_nop_write);
479 static DEVICE_ATTR(pickup1_position, S_IRUGO, variax_get_pickup1_position,
480 		   line6_nop_write);
481 static DEVICE_ATTR(pickup1_angle, S_IRUGO, variax_get_pickup1_angle,
482 		   line6_nop_write);
483 static DEVICE_ATTR(pickup1_level, S_IRUGO, variax_get_pickup1_level,
484 		   line6_nop_write);
485 static DEVICE_ATTR(pickup2_enable, S_IRUGO, variax_get_pickup2_enable,
486 		   line6_nop_write);
487 static DEVICE_ATTR(pickup2_type, S_IRUGO, variax_get_pickup2_type,
488 		   line6_nop_write);
489 static DEVICE_ATTR(pickup2_position, S_IRUGO, variax_get_pickup2_position,
490 		   line6_nop_write);
491 static DEVICE_ATTR(pickup2_angle, S_IRUGO, variax_get_pickup2_angle,
492 		   line6_nop_write);
493 static DEVICE_ATTR(pickup2_level, S_IRUGO, variax_get_pickup2_level,
494 		   line6_nop_write);
495 static DEVICE_ATTR(pickup_phase, S_IRUGO, variax_get_pickup_phase,
496 		   line6_nop_write);
497 static DEVICE_ATTR(capacitance, S_IRUGO, variax_get_capacitance,
498 		   line6_nop_write);
499 static DEVICE_ATTR(tone_resistance, S_IRUGO, variax_get_tone_resistance,
500 		   line6_nop_write);
501 static DEVICE_ATTR(volume_resistance, S_IRUGO, variax_get_volume_resistance,
502 		   line6_nop_write);
503 static DEVICE_ATTR(taper, S_IRUGO, variax_get_taper, line6_nop_write);
504 static DEVICE_ATTR(tone_dump, S_IRUGO, variax_get_tone_dump, line6_nop_write);
505 static DEVICE_ATTR(save_tone, S_IRUGO, variax_get_save_tone, line6_nop_write);
506 static DEVICE_ATTR(volume_dump, S_IRUGO, variax_get_volume_dump,
507 		   line6_nop_write);
508 static DEVICE_ATTR(tuning_enable, S_IRUGO, variax_get_tuning_enable,
509 		   line6_nop_write);
510 static DEVICE_ATTR(tuning6, S_IRUGO, variax_get_tuning6, line6_nop_write);
511 static DEVICE_ATTR(tuning5, S_IRUGO, variax_get_tuning5, line6_nop_write);
512 static DEVICE_ATTR(tuning4, S_IRUGO, variax_get_tuning4, line6_nop_write);
513 static DEVICE_ATTR(tuning3, S_IRUGO, variax_get_tuning3, line6_nop_write);
514 static DEVICE_ATTR(tuning2, S_IRUGO, variax_get_tuning2, line6_nop_write);
515 static DEVICE_ATTR(tuning1, S_IRUGO, variax_get_tuning1, line6_nop_write);
516 static DEVICE_ATTR(detune6, S_IRUGO, variax_get_detune6, line6_nop_write);
517 static DEVICE_ATTR(detune5, S_IRUGO, variax_get_detune5, line6_nop_write);
518 static DEVICE_ATTR(detune4, S_IRUGO, variax_get_detune4, line6_nop_write);
519 static DEVICE_ATTR(detune3, S_IRUGO, variax_get_detune3, line6_nop_write);
520 static DEVICE_ATTR(detune2, S_IRUGO, variax_get_detune2, line6_nop_write);
521 static DEVICE_ATTR(detune1, S_IRUGO, variax_get_detune1, line6_nop_write);
522 static DEVICE_ATTR(mix6, S_IRUGO, variax_get_mix6, line6_nop_write);
523 static DEVICE_ATTR(mix5, S_IRUGO, variax_get_mix5, line6_nop_write);
524 static DEVICE_ATTR(mix4, S_IRUGO, variax_get_mix4, line6_nop_write);
525 static DEVICE_ATTR(mix3, S_IRUGO, variax_get_mix3, line6_nop_write);
526 static DEVICE_ATTR(mix2, S_IRUGO, variax_get_mix2, line6_nop_write);
527 static DEVICE_ATTR(mix1, S_IRUGO, variax_get_mix1, line6_nop_write);
528 static DEVICE_ATTR(pickup_wiring, S_IRUGO, variax_get_pickup_wiring,
529 		   line6_nop_write);
530 
line6_pod_create_files(int firmware,int type,struct device * dev)531 int line6_pod_create_files(int firmware, int type, struct device *dev)
532 {
533 	int err;
534 	CHECK_RETURN(device_create_file(dev, &dev_attr_tweak));
535 	CHECK_RETURN(device_create_file(dev, &dev_attr_wah_position));
536 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
537 		CHECK_RETURN(device_create_file
538 			     (dev, &dev_attr_compression_gain));
539 	CHECK_RETURN(device_create_file(dev, &dev_attr_vol_pedal_position));
540 	CHECK_RETURN(device_create_file(dev, &dev_attr_compression_threshold));
541 	CHECK_RETURN(device_create_file(dev, &dev_attr_pan));
542 	CHECK_RETURN(device_create_file(dev, &dev_attr_amp_model_setup));
543 	if (firmware >= 200)
544 		CHECK_RETURN(device_create_file(dev, &dev_attr_amp_model));
545 	CHECK_RETURN(device_create_file(dev, &dev_attr_drive));
546 	CHECK_RETURN(device_create_file(dev, &dev_attr_bass));
547 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
548 		CHECK_RETURN(device_create_file(dev, &dev_attr_mid));
549 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
550 		CHECK_RETURN(device_create_file(dev, &dev_attr_lowmid));
551 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
552 		CHECK_RETURN(device_create_file(dev, &dev_attr_treble));
553 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
554 		CHECK_RETURN(device_create_file(dev, &dev_attr_highmid));
555 	CHECK_RETURN(device_create_file(dev, &dev_attr_chan_vol));
556 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
557 		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_mix));
558 	CHECK_RETURN(device_create_file(dev, &dev_attr_effect_setup));
559 	if (firmware >= 200)
560 		CHECK_RETURN(device_create_file
561 			     (dev, &dev_attr_band_1_frequency));
562 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
563 		CHECK_RETURN(device_create_file(dev, &dev_attr_presence));
564 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
565 		CHECK_RETURN(device_create_file(dev, &dev_attr_treble__bass));
566 	CHECK_RETURN(device_create_file(dev, &dev_attr_noise_gate_enable));
567 	CHECK_RETURN(device_create_file(dev, &dev_attr_gate_threshold));
568 	CHECK_RETURN(device_create_file(dev, &dev_attr_gate_decay_time));
569 	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_enable));
570 	CHECK_RETURN(device_create_file(dev, &dev_attr_comp_enable));
571 	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_time));
572 	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_enable));
573 	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_1));
574 	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_1));
575 	CHECK_RETURN(device_create_file
576 		     (dev, &dev_attr_delay_param_1_note_value));
577 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
578 		if (firmware >= 200)
579 			CHECK_RETURN(device_create_file
580 				     (dev, &dev_attr_band_2_frequency__bass));
581 	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_2));
582 	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_volume_mix));
583 	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_3));
584 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
585 		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_enable));
586 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
587 		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_type));
588 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
589 		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_decay));
590 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
591 		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_tone));
592 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
593 		CHECK_RETURN(device_create_file
594 			     (dev, &dev_attr_reverb_pre_delay));
595 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
596 		CHECK_RETURN(device_create_file
597 			     (dev, &dev_attr_reverb_pre_post));
598 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
599 		if (firmware >= 200)
600 			CHECK_RETURN(device_create_file
601 				     (dev, &dev_attr_band_2_frequency));
602 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
603 		if (firmware >= 200)
604 			CHECK_RETURN(device_create_file
605 				     (dev, &dev_attr_band_3_frequency__bass));
606 	CHECK_RETURN(device_create_file(dev, &dev_attr_wah_enable));
607 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
608 		CHECK_RETURN(device_create_file
609 			     (dev, &dev_attr_modulation_lo_cut));
610 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
611 		CHECK_RETURN(device_create_file
612 			     (dev, &dev_attr_delay_reverb_lo_cut));
613 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
614 		if (firmware >= 200)
615 			CHECK_RETURN(device_create_file
616 				     (dev, &dev_attr_volume_pedal_minimum));
617 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
618 		if (firmware >= 200)
619 			CHECK_RETURN(device_create_file
620 				     (dev, &dev_attr_eq_pre_post));
621 	CHECK_RETURN(device_create_file(dev, &dev_attr_volume_pre_post));
622 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
623 		CHECK_RETURN(device_create_file(dev, &dev_attr_di_model));
624 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
625 		CHECK_RETURN(device_create_file(dev, &dev_attr_di_delay));
626 	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_enable));
627 	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_1_note_value));
628 	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_2));
629 	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_3));
630 	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_4));
631 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
632 		CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_5));
633 	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_volume_mix));
634 	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_pre_post));
635 	CHECK_RETURN(device_create_file(dev, &dev_attr_modulation_model));
636 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
637 		if (firmware >= 200)
638 			CHECK_RETURN(device_create_file
639 				     (dev, &dev_attr_band_3_frequency));
640 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
641 		if (firmware >= 200)
642 			CHECK_RETURN(device_create_file
643 				     (dev, &dev_attr_band_4_frequency__bass));
644 	CHECK_RETURN(device_create_file
645 		     (dev, &dev_attr_mod_param_1_double_precision));
646 	CHECK_RETURN(device_create_file
647 		     (dev, &dev_attr_delay_param_1_double_precision));
648 	if (firmware >= 200)
649 		CHECK_RETURN(device_create_file(dev, &dev_attr_eq_enable));
650 	CHECK_RETURN(device_create_file(dev, &dev_attr_tap));
651 	CHECK_RETURN(device_create_file
652 		     (dev, &dev_attr_volume_tweak_pedal_assign));
653 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
654 		if (firmware >= 200)
655 			CHECK_RETURN(device_create_file
656 				     (dev, &dev_attr_band_5_frequency));
657 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner));
658 	CHECK_RETURN(device_create_file(dev, &dev_attr_mic_selection));
659 	CHECK_RETURN(device_create_file(dev, &dev_attr_cabinet_model));
660 	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_model));
661 	CHECK_RETURN(device_create_file(dev, &dev_attr_roomlevel));
662 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
663 		if (firmware >= 200)
664 			CHECK_RETURN(device_create_file
665 				     (dev, &dev_attr_band_4_frequency));
666 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
667 		if (firmware >= 200)
668 			CHECK_RETURN(device_create_file
669 				     (dev, &dev_attr_band_6_frequency));
670 	CHECK_RETURN(device_create_file
671 		     (dev, &dev_attr_stomp_param_1_note_value));
672 	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_2));
673 	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_3));
674 	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_4));
675 	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_5));
676 	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_6));
677 	if ((type & (LINE6_BITS_LIVE)) != 0)
678 		CHECK_RETURN(device_create_file
679 			     (dev, &dev_attr_amp_switch_select));
680 	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_4));
681 	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_5));
682 	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_pre_post));
683 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
684 		CHECK_RETURN(device_create_file(dev, &dev_attr_delay_model));
685 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
686 		CHECK_RETURN(device_create_file
687 			     (dev, &dev_attr_delay_verb_model));
688 	CHECK_RETURN(device_create_file(dev, &dev_attr_tempo_msb));
689 	CHECK_RETURN(device_create_file(dev, &dev_attr_tempo_lsb));
690 	if (firmware >= 300)
691 		CHECK_RETURN(device_create_file(dev, &dev_attr_wah_model));
692 	if (firmware >= 214)
693 		CHECK_RETURN(device_create_file(dev, &dev_attr_bypass_volume));
694 	if ((type & (LINE6_BITS_PRO)) != 0)
695 		CHECK_RETURN(device_create_file(dev, &dev_attr_fx_loop_on_off));
696 	CHECK_RETURN(device_create_file(dev, &dev_attr_tweak_param_select));
697 	CHECK_RETURN(device_create_file(dev, &dev_attr_amp1_engage));
698 	if (firmware >= 200)
699 		CHECK_RETURN(device_create_file(dev, &dev_attr_band_1_gain));
700 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
701 		if (firmware >= 200)
702 			CHECK_RETURN(device_create_file
703 				     (dev, &dev_attr_band_2_gain__bass));
704 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
705 		if (firmware >= 200)
706 			CHECK_RETURN(device_create_file
707 				     (dev, &dev_attr_band_2_gain));
708 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
709 		if (firmware >= 200)
710 			CHECK_RETURN(device_create_file
711 				     (dev, &dev_attr_band_3_gain__bass));
712 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
713 		if (firmware >= 200)
714 			CHECK_RETURN(device_create_file
715 				     (dev, &dev_attr_band_3_gain));
716 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
717 		if (firmware >= 200)
718 			CHECK_RETURN(device_create_file
719 				     (dev, &dev_attr_band_4_gain__bass));
720 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
721 		if (firmware >= 200)
722 			CHECK_RETURN(device_create_file
723 				     (dev, &dev_attr_band_5_gain__bass));
724 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
725 		if (firmware >= 200)
726 			CHECK_RETURN(device_create_file
727 				     (dev, &dev_attr_band_4_gain));
728 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
729 		if (firmware >= 200)
730 			CHECK_RETURN(device_create_file
731 				     (dev, &dev_attr_band_6_gain__bass));
732 	return 0;
733 }
734 
line6_pod_remove_files(int firmware,int type,struct device * dev)735 void line6_pod_remove_files(int firmware, int type, struct device *dev)
736 {
737 	device_remove_file(dev, &dev_attr_tweak);
738 	device_remove_file(dev, &dev_attr_wah_position);
739 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
740 		device_remove_file(dev, &dev_attr_compression_gain);
741 	device_remove_file(dev, &dev_attr_vol_pedal_position);
742 	device_remove_file(dev, &dev_attr_compression_threshold);
743 	device_remove_file(dev, &dev_attr_pan);
744 	device_remove_file(dev, &dev_attr_amp_model_setup);
745 	if (firmware >= 200)
746 		device_remove_file(dev, &dev_attr_amp_model);
747 	device_remove_file(dev, &dev_attr_drive);
748 	device_remove_file(dev, &dev_attr_bass);
749 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
750 		device_remove_file(dev, &dev_attr_mid);
751 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
752 		device_remove_file(dev, &dev_attr_lowmid);
753 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
754 		device_remove_file(dev, &dev_attr_treble);
755 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
756 		device_remove_file(dev, &dev_attr_highmid);
757 	device_remove_file(dev, &dev_attr_chan_vol);
758 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
759 		device_remove_file(dev, &dev_attr_reverb_mix);
760 	device_remove_file(dev, &dev_attr_effect_setup);
761 	if (firmware >= 200)
762 		device_remove_file(dev, &dev_attr_band_1_frequency);
763 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
764 		device_remove_file(dev, &dev_attr_presence);
765 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
766 		device_remove_file(dev, &dev_attr_treble__bass);
767 	device_remove_file(dev, &dev_attr_noise_gate_enable);
768 	device_remove_file(dev, &dev_attr_gate_threshold);
769 	device_remove_file(dev, &dev_attr_gate_decay_time);
770 	device_remove_file(dev, &dev_attr_stomp_enable);
771 	device_remove_file(dev, &dev_attr_comp_enable);
772 	device_remove_file(dev, &dev_attr_stomp_time);
773 	device_remove_file(dev, &dev_attr_delay_enable);
774 	device_remove_file(dev, &dev_attr_mod_param_1);
775 	device_remove_file(dev, &dev_attr_delay_param_1);
776 	device_remove_file(dev, &dev_attr_delay_param_1_note_value);
777 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
778 		if (firmware >= 200)
779 			device_remove_file(dev,
780 					   &dev_attr_band_2_frequency__bass);
781 	device_remove_file(dev, &dev_attr_delay_param_2);
782 	device_remove_file(dev, &dev_attr_delay_volume_mix);
783 	device_remove_file(dev, &dev_attr_delay_param_3);
784 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
785 		device_remove_file(dev, &dev_attr_reverb_enable);
786 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
787 		device_remove_file(dev, &dev_attr_reverb_type);
788 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
789 		device_remove_file(dev, &dev_attr_reverb_decay);
790 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
791 		device_remove_file(dev, &dev_attr_reverb_tone);
792 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
793 		device_remove_file(dev, &dev_attr_reverb_pre_delay);
794 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
795 		device_remove_file(dev, &dev_attr_reverb_pre_post);
796 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
797 		if (firmware >= 200)
798 			device_remove_file(dev, &dev_attr_band_2_frequency);
799 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
800 		if (firmware >= 200)
801 			device_remove_file(dev,
802 					   &dev_attr_band_3_frequency__bass);
803 	device_remove_file(dev, &dev_attr_wah_enable);
804 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
805 		device_remove_file(dev, &dev_attr_modulation_lo_cut);
806 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
807 		device_remove_file(dev, &dev_attr_delay_reverb_lo_cut);
808 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
809 		if (firmware >= 200)
810 			device_remove_file(dev, &dev_attr_volume_pedal_minimum);
811 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
812 		if (firmware >= 200)
813 			device_remove_file(dev, &dev_attr_eq_pre_post);
814 	device_remove_file(dev, &dev_attr_volume_pre_post);
815 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
816 		device_remove_file(dev, &dev_attr_di_model);
817 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
818 		device_remove_file(dev, &dev_attr_di_delay);
819 	device_remove_file(dev, &dev_attr_mod_enable);
820 	device_remove_file(dev, &dev_attr_mod_param_1_note_value);
821 	device_remove_file(dev, &dev_attr_mod_param_2);
822 	device_remove_file(dev, &dev_attr_mod_param_3);
823 	device_remove_file(dev, &dev_attr_mod_param_4);
824 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
825 		device_remove_file(dev, &dev_attr_mod_param_5);
826 	device_remove_file(dev, &dev_attr_mod_volume_mix);
827 	device_remove_file(dev, &dev_attr_mod_pre_post);
828 	device_remove_file(dev, &dev_attr_modulation_model);
829 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
830 		if (firmware >= 200)
831 			device_remove_file(dev, &dev_attr_band_3_frequency);
832 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
833 		if (firmware >= 200)
834 			device_remove_file(dev,
835 					   &dev_attr_band_4_frequency__bass);
836 	device_remove_file(dev, &dev_attr_mod_param_1_double_precision);
837 	device_remove_file(dev, &dev_attr_delay_param_1_double_precision);
838 	if (firmware >= 200)
839 		device_remove_file(dev, &dev_attr_eq_enable);
840 	device_remove_file(dev, &dev_attr_tap);
841 	device_remove_file(dev, &dev_attr_volume_tweak_pedal_assign);
842 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
843 		if (firmware >= 200)
844 			device_remove_file(dev, &dev_attr_band_5_frequency);
845 	device_remove_file(dev, &dev_attr_tuner);
846 	device_remove_file(dev, &dev_attr_mic_selection);
847 	device_remove_file(dev, &dev_attr_cabinet_model);
848 	device_remove_file(dev, &dev_attr_stomp_model);
849 	device_remove_file(dev, &dev_attr_roomlevel);
850 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
851 		if (firmware >= 200)
852 			device_remove_file(dev, &dev_attr_band_4_frequency);
853 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
854 		if (firmware >= 200)
855 			device_remove_file(dev, &dev_attr_band_6_frequency);
856 	device_remove_file(dev, &dev_attr_stomp_param_1_note_value);
857 	device_remove_file(dev, &dev_attr_stomp_param_2);
858 	device_remove_file(dev, &dev_attr_stomp_param_3);
859 	device_remove_file(dev, &dev_attr_stomp_param_4);
860 	device_remove_file(dev, &dev_attr_stomp_param_5);
861 	device_remove_file(dev, &dev_attr_stomp_param_6);
862 	if ((type & (LINE6_BITS_LIVE)) != 0)
863 		device_remove_file(dev, &dev_attr_amp_switch_select);
864 	device_remove_file(dev, &dev_attr_delay_param_4);
865 	device_remove_file(dev, &dev_attr_delay_param_5);
866 	device_remove_file(dev, &dev_attr_delay_pre_post);
867 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
868 		device_remove_file(dev, &dev_attr_delay_model);
869 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
870 		device_remove_file(dev, &dev_attr_delay_verb_model);
871 	device_remove_file(dev, &dev_attr_tempo_msb);
872 	device_remove_file(dev, &dev_attr_tempo_lsb);
873 	if (firmware >= 300)
874 		device_remove_file(dev, &dev_attr_wah_model);
875 	if (firmware >= 214)
876 		device_remove_file(dev, &dev_attr_bypass_volume);
877 	if ((type & (LINE6_BITS_PRO)) != 0)
878 		device_remove_file(dev, &dev_attr_fx_loop_on_off);
879 	device_remove_file(dev, &dev_attr_tweak_param_select);
880 	device_remove_file(dev, &dev_attr_amp1_engage);
881 	if (firmware >= 200)
882 		device_remove_file(dev, &dev_attr_band_1_gain);
883 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
884 		if (firmware >= 200)
885 			device_remove_file(dev, &dev_attr_band_2_gain__bass);
886 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
887 		if (firmware >= 200)
888 			device_remove_file(dev, &dev_attr_band_2_gain);
889 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
890 		if (firmware >= 200)
891 			device_remove_file(dev, &dev_attr_band_3_gain__bass);
892 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
893 		if (firmware >= 200)
894 			device_remove_file(dev, &dev_attr_band_3_gain);
895 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
896 		if (firmware >= 200)
897 			device_remove_file(dev, &dev_attr_band_4_gain__bass);
898 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
899 		if (firmware >= 200)
900 			device_remove_file(dev, &dev_attr_band_5_gain__bass);
901 	if ((type & (LINE6_BITS_PODXTALL)) != 0)
902 		if (firmware >= 200)
903 			device_remove_file(dev, &dev_attr_band_4_gain);
904 	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
905 		if (firmware >= 200)
906 			device_remove_file(dev, &dev_attr_band_6_gain__bass);
907 }
908 
line6_variax_create_files(int firmware,int type,struct device * dev)909 int line6_variax_create_files(int firmware, int type, struct device *dev)
910 {
911 	int err;
912 	CHECK_RETURN(device_create_file(dev, &dev_attr_body));
913 	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_enable));
914 	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_type));
915 	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_position));
916 	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_angle));
917 	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_level));
918 	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_enable));
919 	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_type));
920 	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_position));
921 	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_angle));
922 	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_level));
923 	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup_phase));
924 	CHECK_RETURN(device_create_file(dev, &dev_attr_capacitance));
925 	CHECK_RETURN(device_create_file(dev, &dev_attr_tone_resistance));
926 	CHECK_RETURN(device_create_file(dev, &dev_attr_volume_resistance));
927 	CHECK_RETURN(device_create_file(dev, &dev_attr_taper));
928 	CHECK_RETURN(device_create_file(dev, &dev_attr_tone_dump));
929 	CHECK_RETURN(device_create_file(dev, &dev_attr_save_tone));
930 	CHECK_RETURN(device_create_file(dev, &dev_attr_volume_dump));
931 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning_enable));
932 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning6));
933 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning5));
934 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning4));
935 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning3));
936 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning2));
937 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning1));
938 	CHECK_RETURN(device_create_file(dev, &dev_attr_detune6));
939 	CHECK_RETURN(device_create_file(dev, &dev_attr_detune5));
940 	CHECK_RETURN(device_create_file(dev, &dev_attr_detune4));
941 	CHECK_RETURN(device_create_file(dev, &dev_attr_detune3));
942 	CHECK_RETURN(device_create_file(dev, &dev_attr_detune2));
943 	CHECK_RETURN(device_create_file(dev, &dev_attr_detune1));
944 	CHECK_RETURN(device_create_file(dev, &dev_attr_mix6));
945 	CHECK_RETURN(device_create_file(dev, &dev_attr_mix5));
946 	CHECK_RETURN(device_create_file(dev, &dev_attr_mix4));
947 	CHECK_RETURN(device_create_file(dev, &dev_attr_mix3));
948 	CHECK_RETURN(device_create_file(dev, &dev_attr_mix2));
949 	CHECK_RETURN(device_create_file(dev, &dev_attr_mix1));
950 	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup_wiring));
951 	return 0;
952 }
953 
line6_variax_remove_files(int firmware,int type,struct device * dev)954 void line6_variax_remove_files(int firmware, int type, struct device *dev)
955 {
956 	device_remove_file(dev, &dev_attr_body);
957 	device_remove_file(dev, &dev_attr_pickup1_enable);
958 	device_remove_file(dev, &dev_attr_pickup1_type);
959 	device_remove_file(dev, &dev_attr_pickup1_position);
960 	device_remove_file(dev, &dev_attr_pickup1_angle);
961 	device_remove_file(dev, &dev_attr_pickup1_level);
962 	device_remove_file(dev, &dev_attr_pickup2_enable);
963 	device_remove_file(dev, &dev_attr_pickup2_type);
964 	device_remove_file(dev, &dev_attr_pickup2_position);
965 	device_remove_file(dev, &dev_attr_pickup2_angle);
966 	device_remove_file(dev, &dev_attr_pickup2_level);
967 	device_remove_file(dev, &dev_attr_pickup_phase);
968 	device_remove_file(dev, &dev_attr_capacitance);
969 	device_remove_file(dev, &dev_attr_tone_resistance);
970 	device_remove_file(dev, &dev_attr_volume_resistance);
971 	device_remove_file(dev, &dev_attr_taper);
972 	device_remove_file(dev, &dev_attr_tone_dump);
973 	device_remove_file(dev, &dev_attr_save_tone);
974 	device_remove_file(dev, &dev_attr_volume_dump);
975 	device_remove_file(dev, &dev_attr_tuning_enable);
976 	device_remove_file(dev, &dev_attr_tuning6);
977 	device_remove_file(dev, &dev_attr_tuning5);
978 	device_remove_file(dev, &dev_attr_tuning4);
979 	device_remove_file(dev, &dev_attr_tuning3);
980 	device_remove_file(dev, &dev_attr_tuning2);
981 	device_remove_file(dev, &dev_attr_tuning1);
982 	device_remove_file(dev, &dev_attr_detune6);
983 	device_remove_file(dev, &dev_attr_detune5);
984 	device_remove_file(dev, &dev_attr_detune4);
985 	device_remove_file(dev, &dev_attr_detune3);
986 	device_remove_file(dev, &dev_attr_detune2);
987 	device_remove_file(dev, &dev_attr_detune1);
988 	device_remove_file(dev, &dev_attr_mix6);
989 	device_remove_file(dev, &dev_attr_mix5);
990 	device_remove_file(dev, &dev_attr_mix4);
991 	device_remove_file(dev, &dev_attr_mix3);
992 	device_remove_file(dev, &dev_attr_mix2);
993 	device_remove_file(dev, &dev_attr_mix1);
994 	device_remove_file(dev, &dev_attr_pickup_wiring);
995 }
996