blob: f8326f587e38829d417679c34dbb79f892b43543 [file] [log] [blame]
Markus Grabner705ecec2009-02-27 19:43:04 -08001/*
Markus Grabnere1a164d2010-08-23 01:08:25 +02002 * Line6 Linux USB driver - 0.9.1beta
Markus Grabner705ecec2009-02-27 19:43:04 -08003 *
Markus Grabner1027f4762010-08-12 01:35:30 +02004 * Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at)
Markus Grabner705ecec2009-02-27 19:43:04 -08005 *
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
Markus Grabner705ecec2009-02-27 19:43:04 -080012#include <linux/usb.h>
13
14#include "control.h"
Markus Grabner1027f4762010-08-12 01:35:30 +020015#include "driver.h"
Markus Grabner705ecec2009-02-27 19:43:04 -080016#include "pod.h"
17#include "usbdefs.h"
18#include "variax.h"
19
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -080020#define DEVICE_ATTR2(_name1, _name2, _mode, _show, _store) \
21struct device_attribute dev_attr_##_name1 = __ATTR(_name2, _mode, _show, _store)
Markus Grabner705ecec2009-02-27 19:43:04 -080022
23#define LINE6_PARAM_R(PREFIX, prefix, type, param) \
Shawn Bohrer2a20bf62009-11-15 22:17:55 -060024static ssize_t prefix##_get_##param(struct device *dev, \
Greg Kroah-Hartman77491e52009-02-27 20:25:43 -080025 struct device_attribute *attr, char *buf) \
Markus Grabner705ecec2009-02-27 19:43:04 -080026{ \
Shawn Bohrer2a20bf62009-11-15 22:17:55 -060027 return prefix##_get_param_##type(dev, buf, PREFIX##_##param); \
Markus Grabner705ecec2009-02-27 19:43:04 -080028}
29
30#define LINE6_PARAM_RW(PREFIX, prefix, type, param) \
31LINE6_PARAM_R(PREFIX, prefix, type, param); \
Shawn Bohrer2a20bf62009-11-15 22:17:55 -060032static ssize_t prefix##_set_##param(struct device *dev, \
Greg Kroah-Hartman77491e52009-02-27 20:25:43 -080033 struct device_attribute *attr, const char *buf, size_t count) \
Markus Grabner705ecec2009-02-27 19:43:04 -080034{ \
Shawn Bohrer2a20bf62009-11-15 22:17:55 -060035 return prefix##_set_param_##type(dev, buf, count, PREFIX##_##param); \
Markus Grabner705ecec2009-02-27 19:43:04 -080036}
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
Markus Grabner705ecec2009-02-27 19:43:04 -080043static 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);
Markus Grabner1027f4762010-08-12 01:35:30 +020047 int retval = line6_dump_wait_interruptible(&pod->dumpreq);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -080048 if (retval < 0)
49 return retval;
Markus Grabner705ecec2009-02-27 19:43:04 -080050 return sprintf(buf, "%d\n", pod->prog_data.control[param]);
51}
52
Shawn Bohreracdc10212009-11-15 22:17:54 -060053static ssize_t pod_set_param_int(struct device *dev, const char *buf,
54 size_t count, int param)
Markus Grabner705ecec2009-02-27 19:43:04 -080055{
56 struct usb_interface *interface = to_usb_interface(dev);
57 struct usb_line6_pod *pod = usb_get_intfdata(interface);
Johannes Thumshirn336cab92012-06-27 21:26:00 +020058 u8 value;
Shawn Bohrer49da3dd2009-11-15 22:17:56 -060059 int retval;
60
Johannes Thumshirn336cab92012-06-27 21:26:00 +020061 retval = kstrtou8(buf, 10, &value);
Shawn Bohrer49da3dd2009-11-15 22:17:56 -060062 if (retval)
63 return retval;
64
Markus Grabner1027f4762010-08-12 01:35:30 +020065 line6_pod_transmit_parameter(pod, param, value);
Markus Grabner705ecec2009-02-27 19:43:04 -080066 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);
Markus Grabner1027f4762010-08-12 01:35:30 +020073 int retval = line6_dump_wait_interruptible(&variax->dumpreq);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -080074 if (retval < 0)
75 return retval;
Markus Grabner705ecec2009-02-27 19:43:04 -080076 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 /*
Markus Grabner1027f4762010-08-12 01:35:30 +020082 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.
Shawn Bohreracdc10212009-11-15 22:17:54 -060087 */
Markus Grabner705ecec2009-02-27 19:43:04 -080088
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;
Markus Grabner1027f4762010-08-12 01:35:30 +020098 int retval = line6_dump_wait_interruptible(&variax->dumpreq);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -080099 if (retval < 0)
100 return retval;
Markus Grabner705ecec2009-02-27 19:43:04 -0800101
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800102 if ((p[0] == 0) && (p[1] == 0) && (p[2] == 0))
Markus Grabner705ecec2009-02-27 19:43:04 -0800103 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
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800109 if (exponent >= 0) {
Markus Grabner705ecec2009-02-27 19:43:04 -0800110 part_int = mantissa << exponent;
111 part_frac = 0;
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800112 } else {
Markus Grabner705ecec2009-02-27 19:43:04 -0800113 part_int = mantissa >> -exponent;
114 part_frac = (mantissa << (32 + exponent)) & 0xffffffff;
115 }
116
Shawn Bohreracdc10212009-11-15 22:17:54 -0600117 part_frac =
118 (part_frac / ((1UL << 31) / (PRECISION / 2 * 10)) + 5) / 10;
Markus Grabner705ecec2009-02-27 19:43:04 -0800119 }
120
Shawn Bohreracdc10212009-11-15 22:17:54 -0600121 len +=
122 sprintf(buf + len, "%s%d.%03d\n", ((p[0] & 0x80) ? "-" : ""),
123 part_int, part_frac);
Markus Grabner705ecec2009-02-27 19:43:04 -0800124 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
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800269static 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,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600271 pod_set_wah_position);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800272static DEVICE_ATTR(compression_gain, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600273 pod_get_compression_gain, pod_set_compression_gain);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800274static DEVICE_ATTR(vol_pedal_position, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600275 pod_get_vol_pedal_position, pod_set_vol_pedal_position);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800276static DEVICE_ATTR(compression_threshold, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600277 pod_get_compression_threshold,
278 pod_set_compression_threshold);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800279static 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,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600281 pod_set_amp_model_setup);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800282static DEVICE_ATTR(amp_model, S_IWUSR | S_IRUGO, pod_get_amp_model,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600283 pod_set_amp_model);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800284static 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,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600290 pod_set_highmid);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800291static DEVICE_ATTR(chan_vol, S_IWUSR | S_IRUGO, pod_get_chan_vol,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600292 pod_set_chan_vol);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800293static DEVICE_ATTR(reverb_mix, S_IWUSR | S_IRUGO, pod_get_reverb_mix,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600294 pod_set_reverb_mix);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800295static DEVICE_ATTR(effect_setup, S_IWUSR | S_IRUGO, pod_get_effect_setup,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600296 pod_set_effect_setup);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800297static DEVICE_ATTR(band_1_frequency, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600298 pod_get_band_1_frequency, pod_set_band_1_frequency);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800299static DEVICE_ATTR(presence, S_IWUSR | S_IRUGO, pod_get_presence,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600300 pod_set_presence);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800301static DEVICE_ATTR2(treble__bass, treble, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600302 pod_get_treble__bass, pod_set_treble__bass);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800303static DEVICE_ATTR(noise_gate_enable, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600304 pod_get_noise_gate_enable, pod_set_noise_gate_enable);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800305static DEVICE_ATTR(gate_threshold, S_IWUSR | S_IRUGO, pod_get_gate_threshold,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600306 pod_set_gate_threshold);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800307static DEVICE_ATTR(gate_decay_time, S_IWUSR | S_IRUGO, pod_get_gate_decay_time,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600308 pod_set_gate_decay_time);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800309static DEVICE_ATTR(stomp_enable, S_IWUSR | S_IRUGO, pod_get_stomp_enable,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600310 pod_set_stomp_enable);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800311static DEVICE_ATTR(comp_enable, S_IWUSR | S_IRUGO, pod_get_comp_enable,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600312 pod_set_comp_enable);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800313static DEVICE_ATTR(stomp_time, S_IWUSR | S_IRUGO, pod_get_stomp_time,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600314 pod_set_stomp_time);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800315static DEVICE_ATTR(delay_enable, S_IWUSR | S_IRUGO, pod_get_delay_enable,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600316 pod_set_delay_enable);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800317static DEVICE_ATTR(mod_param_1, S_IWUSR | S_IRUGO, pod_get_mod_param_1,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600318 pod_set_mod_param_1);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800319static DEVICE_ATTR(delay_param_1, S_IWUSR | S_IRUGO, pod_get_delay_param_1,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600320 pod_set_delay_param_1);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800321static DEVICE_ATTR(delay_param_1_note_value, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600322 pod_get_delay_param_1_note_value,
323 pod_set_delay_param_1_note_value);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800324static DEVICE_ATTR2(band_2_frequency__bass, band_2_frequency, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600325 pod_get_band_2_frequency__bass,
326 pod_set_band_2_frequency__bass);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800327static DEVICE_ATTR(delay_param_2, S_IWUSR | S_IRUGO, pod_get_delay_param_2,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600328 pod_set_delay_param_2);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800329static DEVICE_ATTR(delay_volume_mix, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600330 pod_get_delay_volume_mix, pod_set_delay_volume_mix);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800331static DEVICE_ATTR(delay_param_3, S_IWUSR | S_IRUGO, pod_get_delay_param_3,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600332 pod_set_delay_param_3);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800333static DEVICE_ATTR(reverb_enable, S_IWUSR | S_IRUGO, pod_get_reverb_enable,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600334 pod_set_reverb_enable);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800335static DEVICE_ATTR(reverb_type, S_IWUSR | S_IRUGO, pod_get_reverb_type,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600336 pod_set_reverb_type);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800337static DEVICE_ATTR(reverb_decay, S_IWUSR | S_IRUGO, pod_get_reverb_decay,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600338 pod_set_reverb_decay);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800339static DEVICE_ATTR(reverb_tone, S_IWUSR | S_IRUGO, pod_get_reverb_tone,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600340 pod_set_reverb_tone);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800341static DEVICE_ATTR(reverb_pre_delay, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600342 pod_get_reverb_pre_delay, pod_set_reverb_pre_delay);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800343static DEVICE_ATTR(reverb_pre_post, S_IWUSR | S_IRUGO, pod_get_reverb_pre_post,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600344 pod_set_reverb_pre_post);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800345static DEVICE_ATTR(band_2_frequency, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600346 pod_get_band_2_frequency, pod_set_band_2_frequency);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800347static DEVICE_ATTR2(band_3_frequency__bass, band_3_frequency, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600348 pod_get_band_3_frequency__bass,
349 pod_set_band_3_frequency__bass);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800350static DEVICE_ATTR(wah_enable, S_IWUSR | S_IRUGO, pod_get_wah_enable,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600351 pod_set_wah_enable);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800352static DEVICE_ATTR(modulation_lo_cut, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600353 pod_get_modulation_lo_cut, pod_set_modulation_lo_cut);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800354static DEVICE_ATTR(delay_reverb_lo_cut, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600355 pod_get_delay_reverb_lo_cut, pod_set_delay_reverb_lo_cut);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800356static DEVICE_ATTR(volume_pedal_minimum, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600357 pod_get_volume_pedal_minimum, pod_set_volume_pedal_minimum);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800358static DEVICE_ATTR(eq_pre_post, S_IWUSR | S_IRUGO, pod_get_eq_pre_post,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600359 pod_set_eq_pre_post);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800360static DEVICE_ATTR(volume_pre_post, S_IWUSR | S_IRUGO, pod_get_volume_pre_post,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600361 pod_set_volume_pre_post);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800362static DEVICE_ATTR(di_model, S_IWUSR | S_IRUGO, pod_get_di_model,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600363 pod_set_di_model);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800364static DEVICE_ATTR(di_delay, S_IWUSR | S_IRUGO, pod_get_di_delay,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600365 pod_set_di_delay);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800366static DEVICE_ATTR(mod_enable, S_IWUSR | S_IRUGO, pod_get_mod_enable,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600367 pod_set_mod_enable);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800368static DEVICE_ATTR(mod_param_1_note_value, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600369 pod_get_mod_param_1_note_value,
370 pod_set_mod_param_1_note_value);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800371static DEVICE_ATTR(mod_param_2, S_IWUSR | S_IRUGO, pod_get_mod_param_2,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600372 pod_set_mod_param_2);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800373static DEVICE_ATTR(mod_param_3, S_IWUSR | S_IRUGO, pod_get_mod_param_3,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600374 pod_set_mod_param_3);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800375static DEVICE_ATTR(mod_param_4, S_IWUSR | S_IRUGO, pod_get_mod_param_4,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600376 pod_set_mod_param_4);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800377static DEVICE_ATTR(mod_param_5, S_IWUSR | S_IRUGO, pod_get_mod_param_5,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600378 pod_set_mod_param_5);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800379static DEVICE_ATTR(mod_volume_mix, S_IWUSR | S_IRUGO, pod_get_mod_volume_mix,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600380 pod_set_mod_volume_mix);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800381static DEVICE_ATTR(mod_pre_post, S_IWUSR | S_IRUGO, pod_get_mod_pre_post,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600382 pod_set_mod_pre_post);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800383static DEVICE_ATTR(modulation_model, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600384 pod_get_modulation_model, pod_set_modulation_model);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800385static DEVICE_ATTR(band_3_frequency, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600386 pod_get_band_3_frequency, pod_set_band_3_frequency);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800387static DEVICE_ATTR2(band_4_frequency__bass, band_4_frequency, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600388 pod_get_band_4_frequency__bass,
389 pod_set_band_4_frequency__bass);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800390static DEVICE_ATTR(mod_param_1_double_precision, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600391 pod_get_mod_param_1_double_precision,
392 pod_set_mod_param_1_double_precision);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800393static DEVICE_ATTR(delay_param_1_double_precision, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600394 pod_get_delay_param_1_double_precision,
395 pod_set_delay_param_1_double_precision);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800396static DEVICE_ATTR(eq_enable, S_IWUSR | S_IRUGO, pod_get_eq_enable,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600397 pod_set_eq_enable);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800398static DEVICE_ATTR(tap, S_IWUSR | S_IRUGO, pod_get_tap, pod_set_tap);
399static DEVICE_ATTR(volume_tweak_pedal_assign, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600400 pod_get_volume_tweak_pedal_assign,
401 pod_set_volume_tweak_pedal_assign);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800402static DEVICE_ATTR(band_5_frequency, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600403 pod_get_band_5_frequency, pod_set_band_5_frequency);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800404static 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,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600406 pod_set_mic_selection);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800407static DEVICE_ATTR(cabinet_model, S_IWUSR | S_IRUGO, pod_get_cabinet_model,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600408 pod_set_cabinet_model);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800409static DEVICE_ATTR(stomp_model, S_IWUSR | S_IRUGO, pod_get_stomp_model,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600410 pod_set_stomp_model);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800411static DEVICE_ATTR(roomlevel, S_IWUSR | S_IRUGO, pod_get_roomlevel,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600412 pod_set_roomlevel);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800413static DEVICE_ATTR(band_4_frequency, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600414 pod_get_band_4_frequency, pod_set_band_4_frequency);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800415static DEVICE_ATTR(band_6_frequency, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600416 pod_get_band_6_frequency, pod_set_band_6_frequency);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800417static DEVICE_ATTR(stomp_param_1_note_value, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600418 pod_get_stomp_param_1_note_value,
419 pod_set_stomp_param_1_note_value);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800420static DEVICE_ATTR(stomp_param_2, S_IWUSR | S_IRUGO, pod_get_stomp_param_2,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600421 pod_set_stomp_param_2);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800422static DEVICE_ATTR(stomp_param_3, S_IWUSR | S_IRUGO, pod_get_stomp_param_3,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600423 pod_set_stomp_param_3);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800424static DEVICE_ATTR(stomp_param_4, S_IWUSR | S_IRUGO, pod_get_stomp_param_4,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600425 pod_set_stomp_param_4);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800426static DEVICE_ATTR(stomp_param_5, S_IWUSR | S_IRUGO, pod_get_stomp_param_5,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600427 pod_set_stomp_param_5);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800428static DEVICE_ATTR(stomp_param_6, S_IWUSR | S_IRUGO, pod_get_stomp_param_6,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600429 pod_set_stomp_param_6);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800430static DEVICE_ATTR(amp_switch_select, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600431 pod_get_amp_switch_select, pod_set_amp_switch_select);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800432static DEVICE_ATTR(delay_param_4, S_IWUSR | S_IRUGO, pod_get_delay_param_4,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600433 pod_set_delay_param_4);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800434static DEVICE_ATTR(delay_param_5, S_IWUSR | S_IRUGO, pod_get_delay_param_5,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600435 pod_set_delay_param_5);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800436static DEVICE_ATTR(delay_pre_post, S_IWUSR | S_IRUGO, pod_get_delay_pre_post,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600437 pod_set_delay_pre_post);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800438static DEVICE_ATTR(delay_model, S_IWUSR | S_IRUGO, pod_get_delay_model,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600439 pod_set_delay_model);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800440static DEVICE_ATTR(delay_verb_model, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600441 pod_get_delay_verb_model, pod_set_delay_verb_model);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800442static DEVICE_ATTR(tempo_msb, S_IWUSR | S_IRUGO, pod_get_tempo_msb,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600443 pod_set_tempo_msb);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800444static DEVICE_ATTR(tempo_lsb, S_IWUSR | S_IRUGO, pod_get_tempo_lsb,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600445 pod_set_tempo_lsb);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800446static DEVICE_ATTR(wah_model, S_IWUSR | S_IRUGO, pod_get_wah_model,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600447 pod_set_wah_model);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800448static DEVICE_ATTR(bypass_volume, S_IWUSR | S_IRUGO, pod_get_bypass_volume,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600449 pod_set_bypass_volume);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800450static DEVICE_ATTR(fx_loop_on_off, S_IWUSR | S_IRUGO, pod_get_fx_loop_on_off,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600451 pod_set_fx_loop_on_off);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800452static DEVICE_ATTR(tweak_param_select, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600453 pod_get_tweak_param_select, pod_set_tweak_param_select);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800454static DEVICE_ATTR(amp1_engage, S_IWUSR | S_IRUGO, pod_get_amp1_engage,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600455 pod_set_amp1_engage);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800456static DEVICE_ATTR(band_1_gain, S_IWUSR | S_IRUGO, pod_get_band_1_gain,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600457 pod_set_band_1_gain);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800458static DEVICE_ATTR2(band_2_gain__bass, band_2_gain, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600459 pod_get_band_2_gain__bass, pod_set_band_2_gain__bass);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800460static DEVICE_ATTR(band_2_gain, S_IWUSR | S_IRUGO, pod_get_band_2_gain,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600461 pod_set_band_2_gain);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800462static DEVICE_ATTR2(band_3_gain__bass, band_3_gain, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600463 pod_get_band_3_gain__bass, pod_set_band_3_gain__bass);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800464static DEVICE_ATTR(band_3_gain, S_IWUSR | S_IRUGO, pod_get_band_3_gain,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600465 pod_set_band_3_gain);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800466static DEVICE_ATTR2(band_4_gain__bass, band_4_gain, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600467 pod_get_band_4_gain__bass, pod_set_band_4_gain__bass);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800468static DEVICE_ATTR2(band_5_gain__bass, band_5_gain, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600469 pod_get_band_5_gain__bass, pod_set_band_5_gain__bass);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800470static DEVICE_ATTR(band_4_gain, S_IWUSR | S_IRUGO, pod_get_band_4_gain,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600471 pod_set_band_4_gain);
Greg Kroah-Hartmana3a972a2010-11-18 11:21:04 -0800472static DEVICE_ATTR2(band_6_gain__bass, band_6_gain, S_IWUSR | S_IRUGO,
Shawn Bohreracdc10212009-11-15 22:17:54 -0600473 pod_get_band_6_gain__bass, pod_set_band_6_gain__bass);
Markus Grabner705ecec2009-02-27 19:43:04 -0800474static DEVICE_ATTR(body, S_IRUGO, variax_get_body, line6_nop_write);
Shawn Bohreracdc10212009-11-15 22:17:54 -0600475static 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);
Markus Grabner705ecec2009-02-27 19:43:04 -0800503static 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);
Shawn Bohreracdc10212009-11-15 22:17:54 -0600506static 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);
Markus Grabner705ecec2009-02-27 19:43:04 -0800510static 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);
Shawn Bohreracdc10212009-11-15 22:17:54 -0600528static DEVICE_ATTR(pickup_wiring, S_IRUGO, variax_get_pickup_wiring,
529 line6_nop_write);
Markus Grabner705ecec2009-02-27 19:43:04 -0800530
Markus Grabner1027f4762010-08-12 01:35:30 +0200531int line6_pod_create_files(int firmware, int type, struct device *dev)
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800532{
Markus Grabner705ecec2009-02-27 19:43:04 -0800533 int err;
534 CHECK_RETURN(device_create_file(dev, &dev_attr_tweak));
535 CHECK_RETURN(device_create_file(dev, &dev_attr_wah_position));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800536 if ((type & (LINE6_BITS_PODXTALL)) != 0)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600537 CHECK_RETURN(device_create_file
538 (dev, &dev_attr_compression_gain));
Markus Grabner705ecec2009-02-27 19:43:04 -0800539 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));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800543 if (firmware >= 200)
544 CHECK_RETURN(device_create_file(dev, &dev_attr_amp_model));
Markus Grabner705ecec2009-02-27 19:43:04 -0800545 CHECK_RETURN(device_create_file(dev, &dev_attr_drive));
546 CHECK_RETURN(device_create_file(dev, &dev_attr_bass));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800547 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));
Markus Grabner705ecec2009-02-27 19:43:04 -0800555 CHECK_RETURN(device_create_file(dev, &dev_attr_chan_vol));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800556 if ((type & (LINE6_BITS_PODXTALL)) != 0)
557 CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_mix));
Markus Grabner705ecec2009-02-27 19:43:04 -0800558 CHECK_RETURN(device_create_file(dev, &dev_attr_effect_setup));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800559 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600560 CHECK_RETURN(device_create_file
561 (dev, &dev_attr_band_1_frequency));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800562 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));
Markus Grabner705ecec2009-02-27 19:43:04 -0800566 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));
Shawn Bohreracdc10212009-11-15 22:17:54 -0600575 CHECK_RETURN(device_create_file
576 (dev, &dev_attr_delay_param_1_note_value));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800577 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
578 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600579 CHECK_RETURN(device_create_file
580 (dev, &dev_attr_band_2_frequency__bass));
Markus Grabner705ecec2009-02-27 19:43:04 -0800581 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));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800584 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)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600593 CHECK_RETURN(device_create_file
594 (dev, &dev_attr_reverb_pre_delay));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800595 if ((type & (LINE6_BITS_PODXTALL)) != 0)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600596 CHECK_RETURN(device_create_file
597 (dev, &dev_attr_reverb_pre_post));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800598 if ((type & (LINE6_BITS_PODXTALL)) != 0)
599 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600600 CHECK_RETURN(device_create_file
601 (dev, &dev_attr_band_2_frequency));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800602 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
603 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600604 CHECK_RETURN(device_create_file
605 (dev, &dev_attr_band_3_frequency__bass));
Markus Grabner705ecec2009-02-27 19:43:04 -0800606 CHECK_RETURN(device_create_file(dev, &dev_attr_wah_enable));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800607 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600608 CHECK_RETURN(device_create_file
609 (dev, &dev_attr_modulation_lo_cut));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800610 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600611 CHECK_RETURN(device_create_file
612 (dev, &dev_attr_delay_reverb_lo_cut));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800613 if ((type & (LINE6_BITS_PODXTALL)) != 0)
614 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600615 CHECK_RETURN(device_create_file
616 (dev, &dev_attr_volume_pedal_minimum));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800617 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
618 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600619 CHECK_RETURN(device_create_file
620 (dev, &dev_attr_eq_pre_post));
Markus Grabner705ecec2009-02-27 19:43:04 -0800621 CHECK_RETURN(device_create_file(dev, &dev_attr_volume_pre_post));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800622 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));
Markus Grabner705ecec2009-02-27 19:43:04 -0800626 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));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800631 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
632 CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_5));
Markus Grabner705ecec2009-02-27 19:43:04 -0800633 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));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800636 if ((type & (LINE6_BITS_PODXTALL)) != 0)
637 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600638 CHECK_RETURN(device_create_file
639 (dev, &dev_attr_band_3_frequency));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800640 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
641 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600642 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));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800648 if (firmware >= 200)
649 CHECK_RETURN(device_create_file(dev, &dev_attr_eq_enable));
Markus Grabner705ecec2009-02-27 19:43:04 -0800650 CHECK_RETURN(device_create_file(dev, &dev_attr_tap));
Shawn Bohreracdc10212009-11-15 22:17:54 -0600651 CHECK_RETURN(device_create_file
652 (dev, &dev_attr_volume_tweak_pedal_assign));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800653 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
654 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600655 CHECK_RETURN(device_create_file
656 (dev, &dev_attr_band_5_frequency));
Markus Grabner705ecec2009-02-27 19:43:04 -0800657 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));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800662 if ((type & (LINE6_BITS_PODXTALL)) != 0)
663 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600664 CHECK_RETURN(device_create_file
665 (dev, &dev_attr_band_4_frequency));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800666 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
667 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600668 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));
Markus Grabner705ecec2009-02-27 19:43:04 -0800672 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));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800677 if ((type & (LINE6_BITS_LIVE)) != 0)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600678 CHECK_RETURN(device_create_file
679 (dev, &dev_attr_amp_switch_select));
Markus Grabner705ecec2009-02-27 19:43:04 -0800680 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));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800683 if ((type & (LINE6_BITS_PODXTALL)) != 0)
684 CHECK_RETURN(device_create_file(dev, &dev_attr_delay_model));
685 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600686 CHECK_RETURN(device_create_file
687 (dev, &dev_attr_delay_verb_model));
Markus Grabner705ecec2009-02-27 19:43:04 -0800688 CHECK_RETURN(device_create_file(dev, &dev_attr_tempo_msb));
689 CHECK_RETURN(device_create_file(dev, &dev_attr_tempo_lsb));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800690 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));
Markus Grabner705ecec2009-02-27 19:43:04 -0800696 CHECK_RETURN(device_create_file(dev, &dev_attr_tweak_param_select));
697 CHECK_RETURN(device_create_file(dev, &dev_attr_amp1_engage));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800698 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)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600702 CHECK_RETURN(device_create_file
703 (dev, &dev_attr_band_2_gain__bass));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800704 if ((type & (LINE6_BITS_PODXTALL)) != 0)
705 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600706 CHECK_RETURN(device_create_file
707 (dev, &dev_attr_band_2_gain));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800708 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
709 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600710 CHECK_RETURN(device_create_file
711 (dev, &dev_attr_band_3_gain__bass));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800712 if ((type & (LINE6_BITS_PODXTALL)) != 0)
713 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600714 CHECK_RETURN(device_create_file
715 (dev, &dev_attr_band_3_gain));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800716 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
717 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600718 CHECK_RETURN(device_create_file
719 (dev, &dev_attr_band_4_gain__bass));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800720 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
721 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600722 CHECK_RETURN(device_create_file
723 (dev, &dev_attr_band_5_gain__bass));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800724 if ((type & (LINE6_BITS_PODXTALL)) != 0)
725 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600726 CHECK_RETURN(device_create_file
727 (dev, &dev_attr_band_4_gain));
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800728 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
729 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600730 CHECK_RETURN(device_create_file
731 (dev, &dev_attr_band_6_gain__bass));
732 return 0;
Markus Grabner705ecec2009-02-27 19:43:04 -0800733}
734
Markus Grabner1027f4762010-08-12 01:35:30 +0200735void line6_pod_remove_files(int firmware, int type, struct device *dev)
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800736{
Markus Grabner705ecec2009-02-27 19:43:04 -0800737 device_remove_file(dev, &dev_attr_tweak);
738 device_remove_file(dev, &dev_attr_wah_position);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800739 if ((type & (LINE6_BITS_PODXTALL)) != 0)
740 device_remove_file(dev, &dev_attr_compression_gain);
Markus Grabner705ecec2009-02-27 19:43:04 -0800741 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);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800745 if (firmware >= 200)
746 device_remove_file(dev, &dev_attr_amp_model);
Markus Grabner705ecec2009-02-27 19:43:04 -0800747 device_remove_file(dev, &dev_attr_drive);
748 device_remove_file(dev, &dev_attr_bass);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800749 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);
Markus Grabner705ecec2009-02-27 19:43:04 -0800757 device_remove_file(dev, &dev_attr_chan_vol);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800758 if ((type & (LINE6_BITS_PODXTALL)) != 0)
759 device_remove_file(dev, &dev_attr_reverb_mix);
Markus Grabner705ecec2009-02-27 19:43:04 -0800760 device_remove_file(dev, &dev_attr_effect_setup);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800761 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);
Markus Grabner705ecec2009-02-27 19:43:04 -0800767 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);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800777 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
778 if (firmware >= 200)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600779 device_remove_file(dev,
780 &dev_attr_band_2_frequency__bass);
Markus Grabner705ecec2009-02-27 19:43:04 -0800781 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);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800784 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)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600801 device_remove_file(dev,
802 &dev_attr_band_3_frequency__bass);
Markus Grabner705ecec2009-02-27 19:43:04 -0800803 device_remove_file(dev, &dev_attr_wah_enable);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800804 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);
Markus Grabner705ecec2009-02-27 19:43:04 -0800814 device_remove_file(dev, &dev_attr_volume_pre_post);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800815 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);
Markus Grabner705ecec2009-02-27 19:43:04 -0800819 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);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800824 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
825 device_remove_file(dev, &dev_attr_mod_param_5);
Markus Grabner705ecec2009-02-27 19:43:04 -0800826 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);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800829 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)
Shawn Bohreracdc10212009-11-15 22:17:54 -0600834 device_remove_file(dev,
835 &dev_attr_band_4_frequency__bass);
Markus Grabner705ecec2009-02-27 19:43:04 -0800836 device_remove_file(dev, &dev_attr_mod_param_1_double_precision);
837 device_remove_file(dev, &dev_attr_delay_param_1_double_precision);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800838 if (firmware >= 200)
839 device_remove_file(dev, &dev_attr_eq_enable);
Markus Grabner705ecec2009-02-27 19:43:04 -0800840 device_remove_file(dev, &dev_attr_tap);
841 device_remove_file(dev, &dev_attr_volume_tweak_pedal_assign);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800842 if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
843 if (firmware >= 200)
844 device_remove_file(dev, &dev_attr_band_5_frequency);
Markus Grabner705ecec2009-02-27 19:43:04 -0800845 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);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800850 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);
Markus Grabner705ecec2009-02-27 19:43:04 -0800856 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);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800862 if ((type & (LINE6_BITS_LIVE)) != 0)
863 device_remove_file(dev, &dev_attr_amp_switch_select);
Markus Grabner705ecec2009-02-27 19:43:04 -0800864 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);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800867 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);
Markus Grabner705ecec2009-02-27 19:43:04 -0800871 device_remove_file(dev, &dev_attr_tempo_msb);
872 device_remove_file(dev, &dev_attr_tempo_lsb);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800873 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);
Markus Grabner705ecec2009-02-27 19:43:04 -0800879 device_remove_file(dev, &dev_attr_tweak_param_select);
880 device_remove_file(dev, &dev_attr_amp1_engage);
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800881 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);
Markus Grabner705ecec2009-02-27 19:43:04 -0800907}
Markus Grabner705ecec2009-02-27 19:43:04 -0800908
Markus Grabner1027f4762010-08-12 01:35:30 +0200909int line6_variax_create_files(int firmware, int type, struct device *dev)
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800910{
Markus Grabner705ecec2009-02-27 19:43:04 -0800911 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));
Shawn Bohreracdc10212009-11-15 22:17:54 -0600951 return 0;
Markus Grabner705ecec2009-02-27 19:43:04 -0800952}
953
Markus Grabner1027f4762010-08-12 01:35:30 +0200954void line6_variax_remove_files(int firmware, int type, struct device *dev)
Greg Kroah-Hartman9a92fad2009-02-27 22:40:27 -0800955{
Markus Grabner705ecec2009-02-27 19:43:04 -0800956 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}