Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.9.
  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) \
 21struct device_attribute dev_attr_##_name1 = __ATTR(_name2, _mode, _show, _store)
 22
 23#define LINE6_PARAM_R(PREFIX, prefix, type, param) \
 24static 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) \
 31LINE6_PARAM_R(PREFIX, prefix, type, param); \
 32static 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
 43static 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
 53static 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
 69static 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
 79static 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
127POD_PARAM_RW(int, tweak);
128POD_PARAM_RW(int, wah_position);
129POD_PARAM_RW(int, compression_gain);
130POD_PARAM_RW(int, vol_pedal_position);
131POD_PARAM_RW(int, compression_threshold);
132POD_PARAM_RW(int, pan);
133POD_PARAM_RW(int, amp_model_setup);
134POD_PARAM_RW(int, amp_model);
135POD_PARAM_RW(int, drive);
136POD_PARAM_RW(int, bass);
137POD_PARAM_RW(int, mid);
138POD_PARAM_RW(int, lowmid);
139POD_PARAM_RW(int, treble);
140POD_PARAM_RW(int, highmid);
141POD_PARAM_RW(int, chan_vol);
142POD_PARAM_RW(int, reverb_mix);
143POD_PARAM_RW(int, effect_setup);
144POD_PARAM_RW(int, band_1_frequency);
145POD_PARAM_RW(int, presence);
146POD_PARAM_RW(int, treble__bass);
147POD_PARAM_RW(int, noise_gate_enable);
148POD_PARAM_RW(int, gate_threshold);
149POD_PARAM_RW(int, gate_decay_time);
150POD_PARAM_RW(int, stomp_enable);
151POD_PARAM_RW(int, comp_enable);
152POD_PARAM_RW(int, stomp_time);
153POD_PARAM_RW(int, delay_enable);
154POD_PARAM_RW(int, mod_param_1);
155POD_PARAM_RW(int, delay_param_1);
156POD_PARAM_RW(int, delay_param_1_note_value);
157POD_PARAM_RW(int, band_2_frequency__bass);
158POD_PARAM_RW(int, delay_param_2);
159POD_PARAM_RW(int, delay_volume_mix);
160POD_PARAM_RW(int, delay_param_3);
161POD_PARAM_RW(int, reverb_enable);
162POD_PARAM_RW(int, reverb_type);
163POD_PARAM_RW(int, reverb_decay);
164POD_PARAM_RW(int, reverb_tone);
165POD_PARAM_RW(int, reverb_pre_delay);
166POD_PARAM_RW(int, reverb_pre_post);
167POD_PARAM_RW(int, band_2_frequency);
168POD_PARAM_RW(int, band_3_frequency__bass);
169POD_PARAM_RW(int, wah_enable);
170POD_PARAM_RW(int, modulation_lo_cut);
171POD_PARAM_RW(int, delay_reverb_lo_cut);
172POD_PARAM_RW(int, volume_pedal_minimum);
173POD_PARAM_RW(int, eq_pre_post);
174POD_PARAM_RW(int, volume_pre_post);
175POD_PARAM_RW(int, di_model);
176POD_PARAM_RW(int, di_delay);
177POD_PARAM_RW(int, mod_enable);
178POD_PARAM_RW(int, mod_param_1_note_value);
179POD_PARAM_RW(int, mod_param_2);
180POD_PARAM_RW(int, mod_param_3);
181POD_PARAM_RW(int, mod_param_4);
182POD_PARAM_RW(int, mod_param_5);
183POD_PARAM_RW(int, mod_volume_mix);
184POD_PARAM_RW(int, mod_pre_post);
185POD_PARAM_RW(int, modulation_model);
186POD_PARAM_RW(int, band_3_frequency);
187POD_PARAM_RW(int, band_4_frequency__bass);
188POD_PARAM_RW(int, mod_param_1_double_precision);
189POD_PARAM_RW(int, delay_param_1_double_precision);
190POD_PARAM_RW(int, eq_enable);
191POD_PARAM_RW(int, tap);
192POD_PARAM_RW(int, volume_tweak_pedal_assign);
193POD_PARAM_RW(int, band_5_frequency);
194POD_PARAM_RW(int, tuner);
195POD_PARAM_RW(int, mic_selection);
196POD_PARAM_RW(int, cabinet_model);
197POD_PARAM_RW(int, stomp_model);
198POD_PARAM_RW(int, roomlevel);
199POD_PARAM_RW(int, band_4_frequency);
200POD_PARAM_RW(int, band_6_frequency);
201POD_PARAM_RW(int, stomp_param_1_note_value);
202POD_PARAM_RW(int, stomp_param_2);
203POD_PARAM_RW(int, stomp_param_3);
204POD_PARAM_RW(int, stomp_param_4);
205POD_PARAM_RW(int, stomp_param_5);
206POD_PARAM_RW(int, stomp_param_6);
207POD_PARAM_RW(int, amp_switch_select);
208POD_PARAM_RW(int, delay_param_4);
209POD_PARAM_RW(int, delay_param_5);
210POD_PARAM_RW(int, delay_pre_post);
211POD_PARAM_RW(int, delay_model);
212POD_PARAM_RW(int, delay_verb_model);
213POD_PARAM_RW(int, tempo_msb);
214POD_PARAM_RW(int, tempo_lsb);
215POD_PARAM_RW(int, wah_model);
216POD_PARAM_RW(int, bypass_volume);
217POD_PARAM_RW(int, fx_loop_on_off);
218POD_PARAM_RW(int, tweak_param_select);
219POD_PARAM_RW(int, amp1_engage);
220POD_PARAM_RW(int, band_1_gain);
221POD_PARAM_RW(int, band_2_gain__bass);
222POD_PARAM_RW(int, band_2_gain);
223POD_PARAM_RW(int, band_3_gain__bass);
224POD_PARAM_RW(int, band_3_gain);
225POD_PARAM_RW(int, band_4_gain__bass);
226POD_PARAM_RW(int, band_5_gain__bass);
227POD_PARAM_RW(int, band_4_gain);
228POD_PARAM_RW(int, band_6_gain__bass);
229VARIAX_PARAM_R(int, body);
230VARIAX_PARAM_R(int, pickup1_enable);
231VARIAX_PARAM_R(int, pickup1_type);
232VARIAX_PARAM_R(float, pickup1_position);
233VARIAX_PARAM_R(float, pickup1_angle);
234VARIAX_PARAM_R(float, pickup1_level);
235VARIAX_PARAM_R(int, pickup2_enable);
236VARIAX_PARAM_R(int, pickup2_type);
237VARIAX_PARAM_R(float, pickup2_position);
238VARIAX_PARAM_R(float, pickup2_angle);
239VARIAX_PARAM_R(float, pickup2_level);
240VARIAX_PARAM_R(int, pickup_phase);
241VARIAX_PARAM_R(float, capacitance);
242VARIAX_PARAM_R(float, tone_resistance);
243VARIAX_PARAM_R(float, volume_resistance);
244VARIAX_PARAM_R(int, taper);
245VARIAX_PARAM_R(float, tone_dump);
246VARIAX_PARAM_R(int, save_tone);
247VARIAX_PARAM_R(float, volume_dump);
248VARIAX_PARAM_R(int, tuning_enable);
249VARIAX_PARAM_R(int, tuning6);
250VARIAX_PARAM_R(int, tuning5);
251VARIAX_PARAM_R(int, tuning4);
252VARIAX_PARAM_R(int, tuning3);
253VARIAX_PARAM_R(int, tuning2);
254VARIAX_PARAM_R(int, tuning1);
255VARIAX_PARAM_R(float, detune6);
256VARIAX_PARAM_R(float, detune5);
257VARIAX_PARAM_R(float, detune4);
258VARIAX_PARAM_R(float, detune3);
259VARIAX_PARAM_R(float, detune2);
260VARIAX_PARAM_R(float, detune1);
261VARIAX_PARAM_R(float, mix6);
262VARIAX_PARAM_R(float, mix5);
263VARIAX_PARAM_R(float, mix4);
264VARIAX_PARAM_R(float, mix3);
265VARIAX_PARAM_R(float, mix2);
266VARIAX_PARAM_R(float, mix1);
267VARIAX_PARAM_R(int, pickup_wiring);
268
269static DEVICE_ATTR(tweak, S_IWUSR | S_IRUGO, pod_get_tweak, pod_set_tweak);
270static DEVICE_ATTR(wah_position, S_IWUSR | S_IRUGO, pod_get_wah_position,
271		   pod_set_wah_position);
272static DEVICE_ATTR(compression_gain, S_IWUSR | S_IRUGO,
273		   pod_get_compression_gain, pod_set_compression_gain);
274static DEVICE_ATTR(vol_pedal_position, S_IWUSR | S_IRUGO,
275		   pod_get_vol_pedal_position, pod_set_vol_pedal_position);
276static DEVICE_ATTR(compression_threshold, S_IWUSR | S_IRUGO,
277		   pod_get_compression_threshold,
278		   pod_set_compression_threshold);
279static DEVICE_ATTR(pan, S_IWUSR | S_IRUGO, pod_get_pan, pod_set_pan);
280static DEVICE_ATTR(amp_model_setup, S_IWUSR | S_IRUGO, pod_get_amp_model_setup,
281		   pod_set_amp_model_setup);
282static DEVICE_ATTR(amp_model, S_IWUSR | S_IRUGO, pod_get_amp_model,
283		   pod_set_amp_model);
284static DEVICE_ATTR(drive, S_IWUSR | S_IRUGO, pod_get_drive, pod_set_drive);
285static DEVICE_ATTR(bass, S_IWUSR | S_IRUGO, pod_get_bass, pod_set_bass);
286static DEVICE_ATTR(mid, S_IWUSR | S_IRUGO, pod_get_mid, pod_set_mid);
287static DEVICE_ATTR(lowmid, S_IWUSR | S_IRUGO, pod_get_lowmid, pod_set_lowmid);
288static DEVICE_ATTR(treble, S_IWUSR | S_IRUGO, pod_get_treble, pod_set_treble);
289static DEVICE_ATTR(highmid, S_IWUSR | S_IRUGO, pod_get_highmid,
290		   pod_set_highmid);
291static DEVICE_ATTR(chan_vol, S_IWUSR | S_IRUGO, pod_get_chan_vol,
292		   pod_set_chan_vol);
293static DEVICE_ATTR(reverb_mix, S_IWUSR | S_IRUGO, pod_get_reverb_mix,
294		   pod_set_reverb_mix);
295static DEVICE_ATTR(effect_setup, S_IWUSR | S_IRUGO, pod_get_effect_setup,
296		   pod_set_effect_setup);
297static DEVICE_ATTR(band_1_frequency, S_IWUSR | S_IRUGO,
298		   pod_get_band_1_frequency, pod_set_band_1_frequency);
299static DEVICE_ATTR(presence, S_IWUSR | S_IRUGO, pod_get_presence,
300		   pod_set_presence);
301static DEVICE_ATTR2(treble__bass, treble, S_IWUSR | S_IRUGO,
302		    pod_get_treble__bass, pod_set_treble__bass);
303static DEVICE_ATTR(noise_gate_enable, S_IWUSR | S_IRUGO,
304		   pod_get_noise_gate_enable, pod_set_noise_gate_enable);
305static DEVICE_ATTR(gate_threshold, S_IWUSR | S_IRUGO, pod_get_gate_threshold,
306		   pod_set_gate_threshold);
307static DEVICE_ATTR(gate_decay_time, S_IWUSR | S_IRUGO, pod_get_gate_decay_time,
308		   pod_set_gate_decay_time);
309static DEVICE_ATTR(stomp_enable, S_IWUSR | S_IRUGO, pod_get_stomp_enable,
310		   pod_set_stomp_enable);
311static DEVICE_ATTR(comp_enable, S_IWUSR | S_IRUGO, pod_get_comp_enable,
312		   pod_set_comp_enable);
313static DEVICE_ATTR(stomp_time, S_IWUSR | S_IRUGO, pod_get_stomp_time,
314		   pod_set_stomp_time);
315static DEVICE_ATTR(delay_enable, S_IWUSR | S_IRUGO, pod_get_delay_enable,
316		   pod_set_delay_enable);
317static DEVICE_ATTR(mod_param_1, S_IWUSR | S_IRUGO, pod_get_mod_param_1,
318		   pod_set_mod_param_1);
319static DEVICE_ATTR(delay_param_1, S_IWUSR | S_IRUGO, pod_get_delay_param_1,
320		   pod_set_delay_param_1);
321static 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);
324static 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);
327static DEVICE_ATTR(delay_param_2, S_IWUSR | S_IRUGO, pod_get_delay_param_2,
328		   pod_set_delay_param_2);
329static DEVICE_ATTR(delay_volume_mix, S_IWUSR | S_IRUGO,
330		   pod_get_delay_volume_mix, pod_set_delay_volume_mix);
331static DEVICE_ATTR(delay_param_3, S_IWUSR | S_IRUGO, pod_get_delay_param_3,
332		   pod_set_delay_param_3);
333static DEVICE_ATTR(reverb_enable, S_IWUSR | S_IRUGO, pod_get_reverb_enable,
334		   pod_set_reverb_enable);
335static DEVICE_ATTR(reverb_type, S_IWUSR | S_IRUGO, pod_get_reverb_type,
336		   pod_set_reverb_type);
337static DEVICE_ATTR(reverb_decay, S_IWUSR | S_IRUGO, pod_get_reverb_decay,
338		   pod_set_reverb_decay);
339static DEVICE_ATTR(reverb_tone, S_IWUSR | S_IRUGO, pod_get_reverb_tone,
340		   pod_set_reverb_tone);
341static DEVICE_ATTR(reverb_pre_delay, S_IWUSR | S_IRUGO,
342		   pod_get_reverb_pre_delay, pod_set_reverb_pre_delay);
343static DEVICE_ATTR(reverb_pre_post, S_IWUSR | S_IRUGO, pod_get_reverb_pre_post,
344		   pod_set_reverb_pre_post);
345static DEVICE_ATTR(band_2_frequency, S_IWUSR | S_IRUGO,
346		   pod_get_band_2_frequency, pod_set_band_2_frequency);
347static 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);
350static DEVICE_ATTR(wah_enable, S_IWUSR | S_IRUGO, pod_get_wah_enable,
351		   pod_set_wah_enable);
352static DEVICE_ATTR(modulation_lo_cut, S_IWUSR | S_IRUGO,
353		   pod_get_modulation_lo_cut, pod_set_modulation_lo_cut);
354static DEVICE_ATTR(delay_reverb_lo_cut, S_IWUSR | S_IRUGO,
355		   pod_get_delay_reverb_lo_cut, pod_set_delay_reverb_lo_cut);
356static DEVICE_ATTR(volume_pedal_minimum, S_IWUSR | S_IRUGO,
357		   pod_get_volume_pedal_minimum, pod_set_volume_pedal_minimum);
358static DEVICE_ATTR(eq_pre_post, S_IWUSR | S_IRUGO, pod_get_eq_pre_post,
359		   pod_set_eq_pre_post);
360static DEVICE_ATTR(volume_pre_post, S_IWUSR | S_IRUGO, pod_get_volume_pre_post,
361		   pod_set_volume_pre_post);
362static DEVICE_ATTR(di_model, S_IWUSR | S_IRUGO, pod_get_di_model,
363		   pod_set_di_model);
364static DEVICE_ATTR(di_delay, S_IWUSR | S_IRUGO, pod_get_di_delay,
365		   pod_set_di_delay);
366static DEVICE_ATTR(mod_enable, S_IWUSR | S_IRUGO, pod_get_mod_enable,
367		   pod_set_mod_enable);
368static 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);
371static DEVICE_ATTR(mod_param_2, S_IWUSR | S_IRUGO, pod_get_mod_param_2,
372		   pod_set_mod_param_2);
373static DEVICE_ATTR(mod_param_3, S_IWUSR | S_IRUGO, pod_get_mod_param_3,
374		   pod_set_mod_param_3);
375static DEVICE_ATTR(mod_param_4, S_IWUSR | S_IRUGO, pod_get_mod_param_4,
376		   pod_set_mod_param_4);
377static DEVICE_ATTR(mod_param_5, S_IWUSR | S_IRUGO, pod_get_mod_param_5,
378		   pod_set_mod_param_5);
379static DEVICE_ATTR(mod_volume_mix, S_IWUSR | S_IRUGO, pod_get_mod_volume_mix,
380		   pod_set_mod_volume_mix);
381static DEVICE_ATTR(mod_pre_post, S_IWUSR | S_IRUGO, pod_get_mod_pre_post,
382		   pod_set_mod_pre_post);
383static DEVICE_ATTR(modulation_model, S_IWUSR | S_IRUGO,
384		   pod_get_modulation_model, pod_set_modulation_model);
385static DEVICE_ATTR(band_3_frequency, S_IWUSR | S_IRUGO,
386		   pod_get_band_3_frequency, pod_set_band_3_frequency);
387static 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);
390static 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);
393static 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);
396static DEVICE_ATTR(eq_enable, S_IWUSR | S_IRUGO, pod_get_eq_enable,
397		   pod_set_eq_enable);
398static DEVICE_ATTR(tap, S_IWUSR | S_IRUGO, pod_get_tap, pod_set_tap);
399static DEVICE_ATTR(volume_tweak_pedal_assign, S_IWUSR | S_IRUGO,
400		   pod_get_volume_tweak_pedal_assign,
401		   pod_set_volume_tweak_pedal_assign);
402static DEVICE_ATTR(band_5_frequency, S_IWUSR | S_IRUGO,
403		   pod_get_band_5_frequency, pod_set_band_5_frequency);
404static DEVICE_ATTR(tuner, S_IWUSR | S_IRUGO, pod_get_tuner, pod_set_tuner);
405static DEVICE_ATTR(mic_selection, S_IWUSR | S_IRUGO, pod_get_mic_selection,
406		   pod_set_mic_selection);
407static DEVICE_ATTR(cabinet_model, S_IWUSR | S_IRUGO, pod_get_cabinet_model,
408		   pod_set_cabinet_model);
409static DEVICE_ATTR(stomp_model, S_IWUSR | S_IRUGO, pod_get_stomp_model,
410		   pod_set_stomp_model);
411static DEVICE_ATTR(roomlevel, S_IWUSR | S_IRUGO, pod_get_roomlevel,
412		   pod_set_roomlevel);
413static DEVICE_ATTR(band_4_frequency, S_IWUSR | S_IRUGO,
414		   pod_get_band_4_frequency, pod_set_band_4_frequency);
415static DEVICE_ATTR(band_6_frequency, S_IWUSR | S_IRUGO,
416		   pod_get_band_6_frequency, pod_set_band_6_frequency);
417static 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);
420static DEVICE_ATTR(stomp_param_2, S_IWUSR | S_IRUGO, pod_get_stomp_param_2,
421		   pod_set_stomp_param_2);
422static DEVICE_ATTR(stomp_param_3, S_IWUSR | S_IRUGO, pod_get_stomp_param_3,
423		   pod_set_stomp_param_3);
424static DEVICE_ATTR(stomp_param_4, S_IWUSR | S_IRUGO, pod_get_stomp_param_4,
425		   pod_set_stomp_param_4);
426static DEVICE_ATTR(stomp_param_5, S_IWUSR | S_IRUGO, pod_get_stomp_param_5,
427		   pod_set_stomp_param_5);
428static DEVICE_ATTR(stomp_param_6, S_IWUSR | S_IRUGO, pod_get_stomp_param_6,
429		   pod_set_stomp_param_6);
430static DEVICE_ATTR(amp_switch_select, S_IWUSR | S_IRUGO,
431		   pod_get_amp_switch_select, pod_set_amp_switch_select);
432static DEVICE_ATTR(delay_param_4, S_IWUSR | S_IRUGO, pod_get_delay_param_4,
433		   pod_set_delay_param_4);
434static DEVICE_ATTR(delay_param_5, S_IWUSR | S_IRUGO, pod_get_delay_param_5,
435		   pod_set_delay_param_5);
436static DEVICE_ATTR(delay_pre_post, S_IWUSR | S_IRUGO, pod_get_delay_pre_post,
437		   pod_set_delay_pre_post);
438static DEVICE_ATTR(delay_model, S_IWUSR | S_IRUGO, pod_get_delay_model,
439		   pod_set_delay_model);
440static DEVICE_ATTR(delay_verb_model, S_IWUSR | S_IRUGO,
441		   pod_get_delay_verb_model, pod_set_delay_verb_model);
442static DEVICE_ATTR(tempo_msb, S_IWUSR | S_IRUGO, pod_get_tempo_msb,
443		   pod_set_tempo_msb);
444static DEVICE_ATTR(tempo_lsb, S_IWUSR | S_IRUGO, pod_get_tempo_lsb,
445		   pod_set_tempo_lsb);
446static DEVICE_ATTR(wah_model, S_IWUSR | S_IRUGO, pod_get_wah_model,
447		   pod_set_wah_model);
448static DEVICE_ATTR(bypass_volume, S_IWUSR | S_IRUGO, pod_get_bypass_volume,
449		   pod_set_bypass_volume);
450static DEVICE_ATTR(fx_loop_on_off, S_IWUSR | S_IRUGO, pod_get_fx_loop_on_off,
451		   pod_set_fx_loop_on_off);
452static DEVICE_ATTR(tweak_param_select, S_IWUSR | S_IRUGO,
453		   pod_get_tweak_param_select, pod_set_tweak_param_select);
454static DEVICE_ATTR(amp1_engage, S_IWUSR | S_IRUGO, pod_get_amp1_engage,
455		   pod_set_amp1_engage);
456static DEVICE_ATTR(band_1_gain, S_IWUSR | S_IRUGO, pod_get_band_1_gain,
457		   pod_set_band_1_gain);
458static 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);
460static DEVICE_ATTR(band_2_gain, S_IWUSR | S_IRUGO, pod_get_band_2_gain,
461		   pod_set_band_2_gain);
462static 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);
464static DEVICE_ATTR(band_3_gain, S_IWUSR | S_IRUGO, pod_get_band_3_gain,
465		   pod_set_band_3_gain);
466static 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);
468static 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);
470static DEVICE_ATTR(band_4_gain, S_IWUSR | S_IRUGO, pod_get_band_4_gain,
471		   pod_set_band_4_gain);
472static 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);
474static DEVICE_ATTR(body, S_IRUGO, variax_get_body, line6_nop_write);
475static DEVICE_ATTR(pickup1_enable, S_IRUGO, variax_get_pickup1_enable,
476		   line6_nop_write);
477static DEVICE_ATTR(pickup1_type, S_IRUGO, variax_get_pickup1_type,
478		   line6_nop_write);
479static DEVICE_ATTR(pickup1_position, S_IRUGO, variax_get_pickup1_position,
480		   line6_nop_write);
481static DEVICE_ATTR(pickup1_angle, S_IRUGO, variax_get_pickup1_angle,
482		   line6_nop_write);
483static DEVICE_ATTR(pickup1_level, S_IRUGO, variax_get_pickup1_level,
484		   line6_nop_write);
485static DEVICE_ATTR(pickup2_enable, S_IRUGO, variax_get_pickup2_enable,
486		   line6_nop_write);
487static DEVICE_ATTR(pickup2_type, S_IRUGO, variax_get_pickup2_type,
488		   line6_nop_write);
489static DEVICE_ATTR(pickup2_position, S_IRUGO, variax_get_pickup2_position,
490		   line6_nop_write);
491static DEVICE_ATTR(pickup2_angle, S_IRUGO, variax_get_pickup2_angle,
492		   line6_nop_write);
493static DEVICE_ATTR(pickup2_level, S_IRUGO, variax_get_pickup2_level,
494		   line6_nop_write);
495static DEVICE_ATTR(pickup_phase, S_IRUGO, variax_get_pickup_phase,
496		   line6_nop_write);
497static DEVICE_ATTR(capacitance, S_IRUGO, variax_get_capacitance,
498		   line6_nop_write);
499static DEVICE_ATTR(tone_resistance, S_IRUGO, variax_get_tone_resistance,
500		   line6_nop_write);
501static DEVICE_ATTR(volume_resistance, S_IRUGO, variax_get_volume_resistance,
502		   line6_nop_write);
503static DEVICE_ATTR(taper, S_IRUGO, variax_get_taper, line6_nop_write);
504static DEVICE_ATTR(tone_dump, S_IRUGO, variax_get_tone_dump, line6_nop_write);
505static DEVICE_ATTR(save_tone, S_IRUGO, variax_get_save_tone, line6_nop_write);
506static DEVICE_ATTR(volume_dump, S_IRUGO, variax_get_volume_dump,
507		   line6_nop_write);
508static DEVICE_ATTR(tuning_enable, S_IRUGO, variax_get_tuning_enable,
509		   line6_nop_write);
510static DEVICE_ATTR(tuning6, S_IRUGO, variax_get_tuning6, line6_nop_write);
511static DEVICE_ATTR(tuning5, S_IRUGO, variax_get_tuning5, line6_nop_write);
512static DEVICE_ATTR(tuning4, S_IRUGO, variax_get_tuning4, line6_nop_write);
513static DEVICE_ATTR(tuning3, S_IRUGO, variax_get_tuning3, line6_nop_write);
514static DEVICE_ATTR(tuning2, S_IRUGO, variax_get_tuning2, line6_nop_write);
515static DEVICE_ATTR(tuning1, S_IRUGO, variax_get_tuning1, line6_nop_write);
516static DEVICE_ATTR(detune6, S_IRUGO, variax_get_detune6, line6_nop_write);
517static DEVICE_ATTR(detune5, S_IRUGO, variax_get_detune5, line6_nop_write);
518static DEVICE_ATTR(detune4, S_IRUGO, variax_get_detune4, line6_nop_write);
519static DEVICE_ATTR(detune3, S_IRUGO, variax_get_detune3, line6_nop_write);
520static DEVICE_ATTR(detune2, S_IRUGO, variax_get_detune2, line6_nop_write);
521static DEVICE_ATTR(detune1, S_IRUGO, variax_get_detune1, line6_nop_write);
522static DEVICE_ATTR(mix6, S_IRUGO, variax_get_mix6, line6_nop_write);
523static DEVICE_ATTR(mix5, S_IRUGO, variax_get_mix5, line6_nop_write);
524static DEVICE_ATTR(mix4, S_IRUGO, variax_get_mix4, line6_nop_write);
525static DEVICE_ATTR(mix3, S_IRUGO, variax_get_mix3, line6_nop_write);
526static DEVICE_ATTR(mix2, S_IRUGO, variax_get_mix2, line6_nop_write);
527static DEVICE_ATTR(mix1, S_IRUGO, variax_get_mix1, line6_nop_write);
528static DEVICE_ATTR(pickup_wiring, S_IRUGO, variax_get_pickup_wiring,
529		   line6_nop_write);
530
531int 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
735void 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
909int 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
954void 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}