1705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner/*
2e1a164d7a3e05aae15eb603ee8f1b77446480a3bMarkus Grabner * Line6 Linux USB driver - 0.9.1beta
3705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner *
41027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabner * Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at)
5705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner *
6705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner *	This program is free software; you can redistribute it and/or
7705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner *	modify it under the terms of the GNU General Public License as
8705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner *	published by the Free Software Foundation, version 2.
9705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner *
10705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner */
11705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
12705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner#include <linux/usb.h>
13705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
14705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner#include "control.h"
151027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabner#include "driver.h"
16705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner#include "pod.h"
17705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner#include "usbdefs.h"
18705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner#include "variax.h"
19705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
209a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman#define DEVICE_ATTR2(_name1, _name2, _mode, _show, _store) \
219a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartmanstruct device_attribute dev_attr_##_name1 = __ATTR(_name2, _mode, _show, _store)
22705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
23705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner#define LINE6_PARAM_R(PREFIX, prefix, type, param) \
242a20bf6f1a945994f5c43308b6dd8b7058e2c290Shawn Bohrerstatic ssize_t prefix##_get_##param(struct device *dev, \
2577491e524ccb78adfad9cdc1b0b175c4e9fd0368Greg Kroah-Hartman			struct device_attribute *attr, char *buf) \
26705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner{ \
272a20bf6f1a945994f5c43308b6dd8b7058e2c290Shawn Bohrer	return prefix##_get_param_##type(dev, buf, PREFIX##_##param); \
28705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner}
29705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
30705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner#define LINE6_PARAM_RW(PREFIX, prefix, type, param) \
31705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerLINE6_PARAM_R(PREFIX, prefix, type, param); \
322a20bf6f1a945994f5c43308b6dd8b7058e2c290Shawn Bohrerstatic ssize_t prefix##_set_##param(struct device *dev, \
3377491e524ccb78adfad9cdc1b0b175c4e9fd0368Greg Kroah-Hartman		struct device_attribute *attr, const char *buf, size_t count) \
34705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner{ \
352a20bf6f1a945994f5c43308b6dd8b7058e2c290Shawn Bohrer	return prefix##_set_param_##type(dev, buf, count, PREFIX##_##param); \
36705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner}
37705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
38705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner#define POD_PARAM_R(type, param) LINE6_PARAM_R(POD, pod, type, param)
39705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner#define POD_PARAM_RW(type, param) LINE6_PARAM_RW(POD, pod, type, param)
40705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner#define VARIAX_PARAM_R(type, param) LINE6_PARAM_R(VARIAX, variax, type, param)
41705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner#define VARIAX_PARAM_RW(type, param) LINE6_PARAM_RW(VARIAX, variax, type, param)
42705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
43705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic ssize_t pod_get_param_int(struct device *dev, char *buf, int param)
44705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner{
45705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	struct usb_interface *interface = to_usb_interface(dev);
46705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	struct usb_line6_pod *pod = usb_get_intfdata(interface);
471027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabner	int retval = line6_dump_wait_interruptible(&pod->dumpreq);
489a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (retval < 0)
499a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		return retval;
50705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	return sprintf(buf, "%d\n", pod->prog_data.control[param]);
51705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner}
52705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
53acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic ssize_t pod_set_param_int(struct device *dev, const char *buf,
54acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				 size_t count, int param)
55705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner{
56705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	struct usb_interface *interface = to_usb_interface(dev);
57705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	struct usb_line6_pod *pod = usb_get_intfdata(interface);
5849da3dd935c52542ef21daa585c01401867dddadShawn Bohrer	unsigned long value;
5949da3dd935c52542ef21daa585c01401867dddadShawn Bohrer	int retval;
6049da3dd935c52542ef21daa585c01401867dddadShawn Bohrer
6149da3dd935c52542ef21daa585c01401867dddadShawn Bohrer	retval = strict_strtoul(buf, 10, &value);
6249da3dd935c52542ef21daa585c01401867dddadShawn Bohrer	if (retval)
6349da3dd935c52542ef21daa585c01401867dddadShawn Bohrer		return retval;
6449da3dd935c52542ef21daa585c01401867dddadShawn Bohrer
651027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabner	line6_pod_transmit_parameter(pod, param, value);
66705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	return count;
67705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner}
68705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
69705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic ssize_t variax_get_param_int(struct device *dev, char *buf, int param)
70705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner{
71705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	struct usb_interface *interface = to_usb_interface(dev);
72705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	struct usb_line6_variax *variax = usb_get_intfdata(interface);
731027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabner	int retval = line6_dump_wait_interruptible(&variax->dumpreq);
749a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (retval < 0)
759a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		return retval;
76705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	return sprintf(buf, "%d\n", variax->model_data.control[param]);
77705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner}
78705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
79705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic ssize_t variax_get_param_float(struct device *dev, char *buf, int param)
80705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner{
81705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	/*
821027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabner	   We do our own floating point handling here since at the time
831027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabner	   this code was written (Jan 2006) it was highly discouraged to
841027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabner	   use floating point arithmetic in the kernel. If you think that
851027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabner	   this no longer applies, feel free to replace this by generic
861027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabner	   floating point code.
87acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer	 */
88705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
89705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	static const int BIAS = 0x7f;
90705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	static const int OFFSET = 0xf;
91705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	static const int PRECISION = 1000;
92705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
93705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	int len = 0;
94705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	unsigned part_int, part_frac;
95705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	struct usb_interface *interface = to_usb_interface(dev);
96705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	struct usb_line6_variax *variax = usb_get_intfdata(interface);
97705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	const unsigned char *p = variax->model_data.control + param;
981027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabner	int retval = line6_dump_wait_interruptible(&variax->dumpreq);
999a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (retval < 0)
1009a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		return retval;
101705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
1029a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((p[0] == 0) && (p[1] == 0) && (p[2] == 0))
103705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner		part_int = part_frac = 0;
104705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	else {
105705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner		int exponent = (((p[0] & 0x7f) << 1) | (p[1] >> 7)) - BIAS;
106705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner		unsigned mantissa = (p[1] << 8) | p[2] | 0x8000;
107705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner		exponent -= OFFSET;
108705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
1099a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (exponent >= 0) {
110705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner			part_int = mantissa << exponent;
111705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner			part_frac = 0;
1129a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		} else {
113705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner			part_int = mantissa >> -exponent;
114705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner			part_frac = (mantissa << (32 + exponent)) & 0xffffffff;
115705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner		}
116705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
117acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		part_frac =
118acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    (part_frac / ((1UL << 31) / (PRECISION / 2 * 10)) + 5) / 10;
119705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	}
120705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
121acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer	len +=
122acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer	    sprintf(buf + len, "%s%d.%03d\n", ((p[0] & 0x80) ? "-" : ""),
123acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    part_int, part_frac);
124705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	return len;
125705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner}
126705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
127705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, tweak);
128705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, wah_position);
129705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, compression_gain);
130705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, vol_pedal_position);
131705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, compression_threshold);
132705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, pan);
133705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, amp_model_setup);
134705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, amp_model);
135705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, drive);
136705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, bass);
137705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, mid);
138705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, lowmid);
139705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, treble);
140705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, highmid);
141705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, chan_vol);
142705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, reverb_mix);
143705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, effect_setup);
144705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_1_frequency);
145705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, presence);
146705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, treble__bass);
147705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, noise_gate_enable);
148705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, gate_threshold);
149705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, gate_decay_time);
150705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, stomp_enable);
151705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, comp_enable);
152705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, stomp_time);
153705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_enable);
154705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, mod_param_1);
155705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_param_1);
156705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_param_1_note_value);
157705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_2_frequency__bass);
158705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_param_2);
159705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_volume_mix);
160705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_param_3);
161705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, reverb_enable);
162705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, reverb_type);
163705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, reverb_decay);
164705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, reverb_tone);
165705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, reverb_pre_delay);
166705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, reverb_pre_post);
167705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_2_frequency);
168705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_3_frequency__bass);
169705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, wah_enable);
170705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, modulation_lo_cut);
171705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_reverb_lo_cut);
172705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, volume_pedal_minimum);
173705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, eq_pre_post);
174705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, volume_pre_post);
175705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, di_model);
176705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, di_delay);
177705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, mod_enable);
178705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, mod_param_1_note_value);
179705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, mod_param_2);
180705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, mod_param_3);
181705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, mod_param_4);
182705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, mod_param_5);
183705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, mod_volume_mix);
184705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, mod_pre_post);
185705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, modulation_model);
186705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_3_frequency);
187705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_4_frequency__bass);
188705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, mod_param_1_double_precision);
189705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_param_1_double_precision);
190705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, eq_enable);
191705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, tap);
192705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, volume_tweak_pedal_assign);
193705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_5_frequency);
194705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, tuner);
195705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, mic_selection);
196705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, cabinet_model);
197705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, stomp_model);
198705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, roomlevel);
199705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_4_frequency);
200705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_6_frequency);
201705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, stomp_param_1_note_value);
202705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, stomp_param_2);
203705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, stomp_param_3);
204705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, stomp_param_4);
205705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, stomp_param_5);
206705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, stomp_param_6);
207705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, amp_switch_select);
208705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_param_4);
209705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_param_5);
210705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_pre_post);
211705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_model);
212705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, delay_verb_model);
213705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, tempo_msb);
214705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, tempo_lsb);
215705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, wah_model);
216705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, bypass_volume);
217705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, fx_loop_on_off);
218705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, tweak_param_select);
219705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, amp1_engage);
220705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_1_gain);
221705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_2_gain__bass);
222705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_2_gain);
223705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_3_gain__bass);
224705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_3_gain);
225705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_4_gain__bass);
226705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_5_gain__bass);
227705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_4_gain);
228705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerPOD_PARAM_RW(int, band_6_gain__bass);
229705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, body);
230705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, pickup1_enable);
231705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, pickup1_type);
232705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, pickup1_position);
233705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, pickup1_angle);
234705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, pickup1_level);
235705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, pickup2_enable);
236705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, pickup2_type);
237705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, pickup2_position);
238705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, pickup2_angle);
239705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, pickup2_level);
240705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, pickup_phase);
241705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, capacitance);
242705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, tone_resistance);
243705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, volume_resistance);
244705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, taper);
245705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, tone_dump);
246705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, save_tone);
247705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, volume_dump);
248705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, tuning_enable);
249705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, tuning6);
250705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, tuning5);
251705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, tuning4);
252705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, tuning3);
253705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, tuning2);
254705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, tuning1);
255705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, detune6);
256705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, detune5);
257705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, detune4);
258705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, detune3);
259705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, detune2);
260705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, detune1);
261705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, mix6);
262705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, mix5);
263705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, mix4);
264705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, mix3);
265705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, mix2);
266705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(float, mix1);
267705ececd1c60d0f5d6ef2a719008847883516970Markus GrabnerVARIAX_PARAM_R(int, pickup_wiring);
268705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
269a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(tweak, S_IWUSR | S_IRUGO, pod_get_tweak, pod_set_tweak);
270a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(wah_position, S_IWUSR | S_IRUGO, pod_get_wah_position,
271acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_wah_position);
272a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(compression_gain, S_IWUSR | S_IRUGO,
273acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_compression_gain, pod_set_compression_gain);
274a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(vol_pedal_position, S_IWUSR | S_IRUGO,
275acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_vol_pedal_position, pod_set_vol_pedal_position);
276a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(compression_threshold, S_IWUSR | S_IRUGO,
277acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_compression_threshold,
278acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_compression_threshold);
279a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(pan, S_IWUSR | S_IRUGO, pod_get_pan, pod_set_pan);
280a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(amp_model_setup, S_IWUSR | S_IRUGO, pod_get_amp_model_setup,
281acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_amp_model_setup);
282a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(amp_model, S_IWUSR | S_IRUGO, pod_get_amp_model,
283acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_amp_model);
284a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(drive, S_IWUSR | S_IRUGO, pod_get_drive, pod_set_drive);
285a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(bass, S_IWUSR | S_IRUGO, pod_get_bass, pod_set_bass);
286a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(mid, S_IWUSR | S_IRUGO, pod_get_mid, pod_set_mid);
287a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(lowmid, S_IWUSR | S_IRUGO, pod_get_lowmid, pod_set_lowmid);
288a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(treble, S_IWUSR | S_IRUGO, pod_get_treble, pod_set_treble);
289a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(highmid, S_IWUSR | S_IRUGO, pod_get_highmid,
290acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_highmid);
291a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(chan_vol, S_IWUSR | S_IRUGO, pod_get_chan_vol,
292acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_chan_vol);
293a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(reverb_mix, S_IWUSR | S_IRUGO, pod_get_reverb_mix,
294acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_reverb_mix);
295a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(effect_setup, S_IWUSR | S_IRUGO, pod_get_effect_setup,
296acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_effect_setup);
297a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(band_1_frequency, S_IWUSR | S_IRUGO,
298acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_band_1_frequency, pod_set_band_1_frequency);
299a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(presence, S_IWUSR | S_IRUGO, pod_get_presence,
300acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_presence);
301a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR2(treble__bass, treble, S_IWUSR | S_IRUGO,
302acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    pod_get_treble__bass, pod_set_treble__bass);
303a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(noise_gate_enable, S_IWUSR | S_IRUGO,
304acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_noise_gate_enable, pod_set_noise_gate_enable);
305a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(gate_threshold, S_IWUSR | S_IRUGO, pod_get_gate_threshold,
306acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_gate_threshold);
307a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(gate_decay_time, S_IWUSR | S_IRUGO, pod_get_gate_decay_time,
308acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_gate_decay_time);
309a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(stomp_enable, S_IWUSR | S_IRUGO, pod_get_stomp_enable,
310acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_stomp_enable);
311a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(comp_enable, S_IWUSR | S_IRUGO, pod_get_comp_enable,
312acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_comp_enable);
313a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(stomp_time, S_IWUSR | S_IRUGO, pod_get_stomp_time,
314acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_stomp_time);
315a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_enable, S_IWUSR | S_IRUGO, pod_get_delay_enable,
316acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_delay_enable);
317a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(mod_param_1, S_IWUSR | S_IRUGO, pod_get_mod_param_1,
318acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_mod_param_1);
319a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_param_1, S_IWUSR | S_IRUGO, pod_get_delay_param_1,
320acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_delay_param_1);
321a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_param_1_note_value, S_IWUSR | S_IRUGO,
322acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_delay_param_1_note_value,
323acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_delay_param_1_note_value);
324a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR2(band_2_frequency__bass, band_2_frequency, S_IWUSR | S_IRUGO,
325acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    pod_get_band_2_frequency__bass,
326acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    pod_set_band_2_frequency__bass);
327a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_param_2, S_IWUSR | S_IRUGO, pod_get_delay_param_2,
328acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_delay_param_2);
329a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_volume_mix, S_IWUSR | S_IRUGO,
330acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_delay_volume_mix, pod_set_delay_volume_mix);
331a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_param_3, S_IWUSR | S_IRUGO, pod_get_delay_param_3,
332acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_delay_param_3);
333a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(reverb_enable, S_IWUSR | S_IRUGO, pod_get_reverb_enable,
334acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_reverb_enable);
335a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(reverb_type, S_IWUSR | S_IRUGO, pod_get_reverb_type,
336acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_reverb_type);
337a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(reverb_decay, S_IWUSR | S_IRUGO, pod_get_reverb_decay,
338acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_reverb_decay);
339a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(reverb_tone, S_IWUSR | S_IRUGO, pod_get_reverb_tone,
340acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_reverb_tone);
341a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(reverb_pre_delay, S_IWUSR | S_IRUGO,
342acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_reverb_pre_delay, pod_set_reverb_pre_delay);
343a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(reverb_pre_post, S_IWUSR | S_IRUGO, pod_get_reverb_pre_post,
344acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_reverb_pre_post);
345a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(band_2_frequency, S_IWUSR | S_IRUGO,
346acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_band_2_frequency, pod_set_band_2_frequency);
347a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR2(band_3_frequency__bass, band_3_frequency, S_IWUSR | S_IRUGO,
348acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    pod_get_band_3_frequency__bass,
349acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    pod_set_band_3_frequency__bass);
350a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(wah_enable, S_IWUSR | S_IRUGO, pod_get_wah_enable,
351acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_wah_enable);
352a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(modulation_lo_cut, S_IWUSR | S_IRUGO,
353acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_modulation_lo_cut, pod_set_modulation_lo_cut);
354a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_reverb_lo_cut, S_IWUSR | S_IRUGO,
355acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_delay_reverb_lo_cut, pod_set_delay_reverb_lo_cut);
356a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(volume_pedal_minimum, S_IWUSR | S_IRUGO,
357acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_volume_pedal_minimum, pod_set_volume_pedal_minimum);
358a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(eq_pre_post, S_IWUSR | S_IRUGO, pod_get_eq_pre_post,
359acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_eq_pre_post);
360a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(volume_pre_post, S_IWUSR | S_IRUGO, pod_get_volume_pre_post,
361acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_volume_pre_post);
362a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(di_model, S_IWUSR | S_IRUGO, pod_get_di_model,
363acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_di_model);
364a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(di_delay, S_IWUSR | S_IRUGO, pod_get_di_delay,
365acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_di_delay);
366a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(mod_enable, S_IWUSR | S_IRUGO, pod_get_mod_enable,
367acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_mod_enable);
368a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(mod_param_1_note_value, S_IWUSR | S_IRUGO,
369acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_mod_param_1_note_value,
370acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_mod_param_1_note_value);
371a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(mod_param_2, S_IWUSR | S_IRUGO, pod_get_mod_param_2,
372acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_mod_param_2);
373a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(mod_param_3, S_IWUSR | S_IRUGO, pod_get_mod_param_3,
374acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_mod_param_3);
375a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(mod_param_4, S_IWUSR | S_IRUGO, pod_get_mod_param_4,
376acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_mod_param_4);
377a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(mod_param_5, S_IWUSR | S_IRUGO, pod_get_mod_param_5,
378acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_mod_param_5);
379a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(mod_volume_mix, S_IWUSR | S_IRUGO, pod_get_mod_volume_mix,
380acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_mod_volume_mix);
381a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(mod_pre_post, S_IWUSR | S_IRUGO, pod_get_mod_pre_post,
382acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_mod_pre_post);
383a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(modulation_model, S_IWUSR | S_IRUGO,
384acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_modulation_model, pod_set_modulation_model);
385a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(band_3_frequency, S_IWUSR | S_IRUGO,
386acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_band_3_frequency, pod_set_band_3_frequency);
387a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR2(band_4_frequency__bass, band_4_frequency, S_IWUSR | S_IRUGO,
388acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    pod_get_band_4_frequency__bass,
389acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    pod_set_band_4_frequency__bass);
390a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(mod_param_1_double_precision, S_IWUSR | S_IRUGO,
391acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_mod_param_1_double_precision,
392acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_mod_param_1_double_precision);
393a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_param_1_double_precision, S_IWUSR | S_IRUGO,
394acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_delay_param_1_double_precision,
395acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_delay_param_1_double_precision);
396a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(eq_enable, S_IWUSR | S_IRUGO, pod_get_eq_enable,
397acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_eq_enable);
398a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(tap, S_IWUSR | S_IRUGO, pod_get_tap, pod_set_tap);
399a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(volume_tweak_pedal_assign, S_IWUSR | S_IRUGO,
400acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_volume_tweak_pedal_assign,
401acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_volume_tweak_pedal_assign);
402a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(band_5_frequency, S_IWUSR | S_IRUGO,
403acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_band_5_frequency, pod_set_band_5_frequency);
404a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(tuner, S_IWUSR | S_IRUGO, pod_get_tuner, pod_set_tuner);
405a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(mic_selection, S_IWUSR | S_IRUGO, pod_get_mic_selection,
406acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_mic_selection);
407a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(cabinet_model, S_IWUSR | S_IRUGO, pod_get_cabinet_model,
408acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_cabinet_model);
409a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(stomp_model, S_IWUSR | S_IRUGO, pod_get_stomp_model,
410acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_stomp_model);
411a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(roomlevel, S_IWUSR | S_IRUGO, pod_get_roomlevel,
412acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_roomlevel);
413a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(band_4_frequency, S_IWUSR | S_IRUGO,
414acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_band_4_frequency, pod_set_band_4_frequency);
415a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(band_6_frequency, S_IWUSR | S_IRUGO,
416acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_band_6_frequency, pod_set_band_6_frequency);
417a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(stomp_param_1_note_value, S_IWUSR | S_IRUGO,
418acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_stomp_param_1_note_value,
419acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_stomp_param_1_note_value);
420a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(stomp_param_2, S_IWUSR | S_IRUGO, pod_get_stomp_param_2,
421acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_stomp_param_2);
422a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(stomp_param_3, S_IWUSR | S_IRUGO, pod_get_stomp_param_3,
423acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_stomp_param_3);
424a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(stomp_param_4, S_IWUSR | S_IRUGO, pod_get_stomp_param_4,
425acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_stomp_param_4);
426a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(stomp_param_5, S_IWUSR | S_IRUGO, pod_get_stomp_param_5,
427acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_stomp_param_5);
428a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(stomp_param_6, S_IWUSR | S_IRUGO, pod_get_stomp_param_6,
429acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_stomp_param_6);
430a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(amp_switch_select, S_IWUSR | S_IRUGO,
431acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_amp_switch_select, pod_set_amp_switch_select);
432a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_param_4, S_IWUSR | S_IRUGO, pod_get_delay_param_4,
433acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_delay_param_4);
434a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_param_5, S_IWUSR | S_IRUGO, pod_get_delay_param_5,
435acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_delay_param_5);
436a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_pre_post, S_IWUSR | S_IRUGO, pod_get_delay_pre_post,
437acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_delay_pre_post);
438a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_model, S_IWUSR | S_IRUGO, pod_get_delay_model,
439acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_delay_model);
440a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(delay_verb_model, S_IWUSR | S_IRUGO,
441acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_delay_verb_model, pod_set_delay_verb_model);
442a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(tempo_msb, S_IWUSR | S_IRUGO, pod_get_tempo_msb,
443acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_tempo_msb);
444a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(tempo_lsb, S_IWUSR | S_IRUGO, pod_get_tempo_lsb,
445acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_tempo_lsb);
446a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(wah_model, S_IWUSR | S_IRUGO, pod_get_wah_model,
447acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_wah_model);
448a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(bypass_volume, S_IWUSR | S_IRUGO, pod_get_bypass_volume,
449acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_bypass_volume);
450a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(fx_loop_on_off, S_IWUSR | S_IRUGO, pod_get_fx_loop_on_off,
451acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_fx_loop_on_off);
452a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(tweak_param_select, S_IWUSR | S_IRUGO,
453acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_get_tweak_param_select, pod_set_tweak_param_select);
454a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(amp1_engage, S_IWUSR | S_IRUGO, pod_get_amp1_engage,
455acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_amp1_engage);
456a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(band_1_gain, S_IWUSR | S_IRUGO, pod_get_band_1_gain,
457acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_band_1_gain);
458a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR2(band_2_gain__bass, band_2_gain, S_IWUSR | S_IRUGO,
459acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    pod_get_band_2_gain__bass, pod_set_band_2_gain__bass);
460a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(band_2_gain, S_IWUSR | S_IRUGO, pod_get_band_2_gain,
461acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_band_2_gain);
462a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR2(band_3_gain__bass, band_3_gain, S_IWUSR | S_IRUGO,
463acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    pod_get_band_3_gain__bass, pod_set_band_3_gain__bass);
464a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(band_3_gain, S_IWUSR | S_IRUGO, pod_get_band_3_gain,
465acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_band_3_gain);
466a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR2(band_4_gain__bass, band_4_gain, S_IWUSR | S_IRUGO,
467acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    pod_get_band_4_gain__bass, pod_set_band_4_gain__bass);
468a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR2(band_5_gain__bass, band_5_gain, S_IWUSR | S_IRUGO,
469acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    pod_get_band_5_gain__bass, pod_set_band_5_gain__bass);
470a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR(band_4_gain, S_IWUSR | S_IRUGO, pod_get_band_4_gain,
471acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   pod_set_band_4_gain);
472a3a972a053010bfd61c13cfa4ce688d4eebd9a19Greg Kroah-Hartmanstatic DEVICE_ATTR2(band_6_gain__bass, band_6_gain, S_IWUSR | S_IRUGO,
473acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		    pod_get_band_6_gain__bass, pod_set_band_6_gain__bass);
474705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(body, S_IRUGO, variax_get_body, line6_nop_write);
475acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(pickup1_enable, S_IRUGO, variax_get_pickup1_enable,
476acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
477acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(pickup1_type, S_IRUGO, variax_get_pickup1_type,
478acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
479acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(pickup1_position, S_IRUGO, variax_get_pickup1_position,
480acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
481acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(pickup1_angle, S_IRUGO, variax_get_pickup1_angle,
482acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
483acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(pickup1_level, S_IRUGO, variax_get_pickup1_level,
484acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
485acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(pickup2_enable, S_IRUGO, variax_get_pickup2_enable,
486acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
487acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(pickup2_type, S_IRUGO, variax_get_pickup2_type,
488acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
489acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(pickup2_position, S_IRUGO, variax_get_pickup2_position,
490acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
491acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(pickup2_angle, S_IRUGO, variax_get_pickup2_angle,
492acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
493acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(pickup2_level, S_IRUGO, variax_get_pickup2_level,
494acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
495acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(pickup_phase, S_IRUGO, variax_get_pickup_phase,
496acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
497acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(capacitance, S_IRUGO, variax_get_capacitance,
498acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
499acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(tone_resistance, S_IRUGO, variax_get_tone_resistance,
500acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
501acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(volume_resistance, S_IRUGO, variax_get_volume_resistance,
502acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
503705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(taper, S_IRUGO, variax_get_taper, line6_nop_write);
504705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(tone_dump, S_IRUGO, variax_get_tone_dump, line6_nop_write);
505705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(save_tone, S_IRUGO, variax_get_save_tone, line6_nop_write);
506acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(volume_dump, S_IRUGO, variax_get_volume_dump,
507acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
508acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(tuning_enable, S_IRUGO, variax_get_tuning_enable,
509acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
510705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(tuning6, S_IRUGO, variax_get_tuning6, line6_nop_write);
511705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(tuning5, S_IRUGO, variax_get_tuning5, line6_nop_write);
512705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(tuning4, S_IRUGO, variax_get_tuning4, line6_nop_write);
513705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(tuning3, S_IRUGO, variax_get_tuning3, line6_nop_write);
514705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(tuning2, S_IRUGO, variax_get_tuning2, line6_nop_write);
515705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(tuning1, S_IRUGO, variax_get_tuning1, line6_nop_write);
516705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(detune6, S_IRUGO, variax_get_detune6, line6_nop_write);
517705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(detune5, S_IRUGO, variax_get_detune5, line6_nop_write);
518705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(detune4, S_IRUGO, variax_get_detune4, line6_nop_write);
519705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(detune3, S_IRUGO, variax_get_detune3, line6_nop_write);
520705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(detune2, S_IRUGO, variax_get_detune2, line6_nop_write);
521705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(detune1, S_IRUGO, variax_get_detune1, line6_nop_write);
522705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(mix6, S_IRUGO, variax_get_mix6, line6_nop_write);
523705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(mix5, S_IRUGO, variax_get_mix5, line6_nop_write);
524705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(mix4, S_IRUGO, variax_get_mix4, line6_nop_write);
525705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(mix3, S_IRUGO, variax_get_mix3, line6_nop_write);
526705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(mix2, S_IRUGO, variax_get_mix2, line6_nop_write);
527705ececd1c60d0f5d6ef2a719008847883516970Markus Grabnerstatic DEVICE_ATTR(mix1, S_IRUGO, variax_get_mix1, line6_nop_write);
528acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrerstatic DEVICE_ATTR(pickup_wiring, S_IRUGO, variax_get_pickup_wiring,
529acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		   line6_nop_write);
530705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
5311027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabnerint line6_pod_create_files(int firmware, int type, struct device *dev)
5329a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman{
533705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	int err;
534705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tweak));
535705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_wah_position));
5369a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
537acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		CHECK_RETURN(device_create_file
538acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			     (dev, &dev_attr_compression_gain));
539705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_vol_pedal_position));
540705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_compression_threshold));
541705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pan));
542705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_amp_model_setup));
5439a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (firmware >= 200)
5449a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_amp_model));
545705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_drive));
546705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_bass));
5479a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
5489a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_mid));
5499a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
5509a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_lowmid));
5519a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
5529a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_treble));
5539a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
5549a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_highmid));
555705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_chan_vol));
5569a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
5579a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_mix));
558705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_effect_setup));
5599a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (firmware >= 200)
560acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		CHECK_RETURN(device_create_file
561acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			     (dev, &dev_attr_band_1_frequency));
5629a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
5639a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_presence));
5649a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
5659a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_treble__bass));
566705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_noise_gate_enable));
567705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_gate_threshold));
568705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_gate_decay_time));
569705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_enable));
570705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_comp_enable));
571705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_time));
572705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_enable));
573705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_1));
574705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_1));
575acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer	CHECK_RETURN(device_create_file
576acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		     (dev, &dev_attr_delay_param_1_note_value));
5779a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
5789a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
579acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
580acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_2_frequency__bass));
581705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_2));
582705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_volume_mix));
583705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_3));
5849a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
5859a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_enable));
5869a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
5879a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_type));
5889a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
5899a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_decay));
5909a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
5919a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_tone));
5929a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
593acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		CHECK_RETURN(device_create_file
594acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			     (dev, &dev_attr_reverb_pre_delay));
5959a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
596acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		CHECK_RETURN(device_create_file
597acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			     (dev, &dev_attr_reverb_pre_post));
5989a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
5999a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
600acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
601acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_2_frequency));
6029a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
6039a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
604acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
605acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_3_frequency__bass));
606705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_wah_enable));
6079a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
608acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		CHECK_RETURN(device_create_file
609acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			     (dev, &dev_attr_modulation_lo_cut));
6109a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
611acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		CHECK_RETURN(device_create_file
612acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			     (dev, &dev_attr_delay_reverb_lo_cut));
6139a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
6149a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
615acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
616acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_volume_pedal_minimum));
6179a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
6189a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
619acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
620acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_eq_pre_post));
621705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_volume_pre_post));
6229a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
6239a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_di_model));
6249a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
6259a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_di_delay));
626705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_enable));
627705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_1_note_value));
628705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_2));
629705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_3));
630705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_4));
6319a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
6329a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_5));
633705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_volume_mix));
634705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_pre_post));
635705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_modulation_model));
6369a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
6379a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
638acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
639acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_3_frequency));
6409a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
6419a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
642acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
643acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_4_frequency__bass));
644acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer	CHECK_RETURN(device_create_file
645acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		     (dev, &dev_attr_mod_param_1_double_precision));
646acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer	CHECK_RETURN(device_create_file
647acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		     (dev, &dev_attr_delay_param_1_double_precision));
6489a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (firmware >= 200)
6499a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_eq_enable));
650705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tap));
651acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer	CHECK_RETURN(device_create_file
652acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		     (dev, &dev_attr_volume_tweak_pedal_assign));
6539a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
6549a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
655acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
656acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_5_frequency));
657705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner));
658705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mic_selection));
659705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_cabinet_model));
660705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_model));
661705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_roomlevel));
6629a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
6639a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
664acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
665acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_4_frequency));
6669a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
6679a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
668acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
669acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_6_frequency));
670acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer	CHECK_RETURN(device_create_file
671acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		     (dev, &dev_attr_stomp_param_1_note_value));
672705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_2));
673705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_3));
674705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_4));
675705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_5));
676705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_6));
6779a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_LIVE)) != 0)
678acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		CHECK_RETURN(device_create_file
679acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			     (dev, &dev_attr_amp_switch_select));
680705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_4));
681705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_5));
682705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_pre_post));
6839a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
6849a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_delay_model));
6859a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
686acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer		CHECK_RETURN(device_create_file
687acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			     (dev, &dev_attr_delay_verb_model));
688705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tempo_msb));
689705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tempo_lsb));
6909a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (firmware >= 300)
6919a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_wah_model));
6929a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (firmware >= 214)
6939a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_bypass_volume));
6949a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PRO)) != 0)
6959a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_fx_loop_on_off));
696705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tweak_param_select));
697705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_amp1_engage));
6989a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (firmware >= 200)
6999a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		CHECK_RETURN(device_create_file(dev, &dev_attr_band_1_gain));
7009a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
7019a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
702acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
703acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_2_gain__bass));
7049a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7059a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
706acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
707acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_2_gain));
7089a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
7099a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
710acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
711acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_3_gain__bass));
7129a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7139a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
714acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
715acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_3_gain));
7169a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
7179a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
718acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
719acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_4_gain__bass));
7209a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
7219a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
722acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
723acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_5_gain__bass));
7249a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7259a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
726acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
727acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_4_gain));
7289a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
7299a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
730acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			CHECK_RETURN(device_create_file
731acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer				     (dev, &dev_attr_band_6_gain__bass));
732acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer	return 0;
733705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner}
734705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
7351027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabnervoid line6_pod_remove_files(int firmware, int type, struct device *dev)
7369a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman{
737705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tweak);
738705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_wah_position);
7399a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7409a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_compression_gain);
741705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_vol_pedal_position);
742705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_compression_threshold);
743705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pan);
744705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_amp_model_setup);
7459a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (firmware >= 200)
7469a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_amp_model);
747705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_drive);
748705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_bass);
7499a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7509a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_mid);
7519a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
7529a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_lowmid);
7539a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7549a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_treble);
7559a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
7569a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_highmid);
757705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_chan_vol);
7589a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7599a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_reverb_mix);
760705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_effect_setup);
7619a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (firmware >= 200)
7629a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_band_1_frequency);
7639a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7649a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_presence);
7659a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
7669a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_treble__bass);
767705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_noise_gate_enable);
768705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_gate_threshold);
769705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_gate_decay_time);
770705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_stomp_enable);
771705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_comp_enable);
772705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_stomp_time);
773705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_delay_enable);
774705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mod_param_1);
775705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_delay_param_1);
776705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_delay_param_1_note_value);
7779a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
7789a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
779acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			device_remove_file(dev,
780acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer					   &dev_attr_band_2_frequency__bass);
781705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_delay_param_2);
782705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_delay_volume_mix);
783705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_delay_param_3);
7849a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7859a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_reverb_enable);
7869a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7879a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_reverb_type);
7889a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7899a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_reverb_decay);
7909a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7919a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_reverb_tone);
7929a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7939a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_reverb_pre_delay);
7949a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7959a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_reverb_pre_post);
7969a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
7979a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
7989a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_2_frequency);
7999a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8009a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
801acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			device_remove_file(dev,
802acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer					   &dev_attr_band_3_frequency__bass);
803705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_wah_enable);
8049a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8059a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_modulation_lo_cut);
8069a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8079a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_delay_reverb_lo_cut);
8089a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
8099a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
8109a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_volume_pedal_minimum);
8119a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8129a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
8139a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_eq_pre_post);
814705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_volume_pre_post);
8159a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8169a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_di_model);
8179a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8189a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_di_delay);
819705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mod_enable);
820705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mod_param_1_note_value);
821705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mod_param_2);
822705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mod_param_3);
823705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mod_param_4);
8249a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8259a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_mod_param_5);
826705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mod_volume_mix);
827705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mod_pre_post);
828705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_modulation_model);
8299a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
8309a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
8319a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_3_frequency);
8329a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8339a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
834acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer			device_remove_file(dev,
835acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer					   &dev_attr_band_4_frequency__bass);
836705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mod_param_1_double_precision);
837705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_delay_param_1_double_precision);
8389a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (firmware >= 200)
8399a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_eq_enable);
840705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tap);
841705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_volume_tweak_pedal_assign);
8429a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8439a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
8449a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_5_frequency);
845705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tuner);
846705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mic_selection);
847705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_cabinet_model);
848705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_stomp_model);
849705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_roomlevel);
8509a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
8519a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
8529a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_4_frequency);
8539a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8549a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
8559a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_6_frequency);
856705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_stomp_param_1_note_value);
857705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_stomp_param_2);
858705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_stomp_param_3);
859705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_stomp_param_4);
860705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_stomp_param_5);
861705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_stomp_param_6);
8629a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_LIVE)) != 0)
8639a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_amp_switch_select);
864705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_delay_param_4);
865705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_delay_param_5);
866705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_delay_pre_post);
8679a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
8689a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_delay_model);
8699a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8709a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_delay_verb_model);
871705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tempo_msb);
872705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tempo_lsb);
8739a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (firmware >= 300)
8749a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_wah_model);
8759a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (firmware >= 214)
8769a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_bypass_volume);
8779a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PRO)) != 0)
8789a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_fx_loop_on_off);
879705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tweak_param_select);
880705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_amp1_engage);
8819a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if (firmware >= 200)
8829a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		device_remove_file(dev, &dev_attr_band_1_gain);
8839a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8849a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
8859a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_2_gain__bass);
8869a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
8879a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
8889a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_2_gain);
8899a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8909a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
8919a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_3_gain__bass);
8929a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
8939a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
8949a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_3_gain);
8959a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8969a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
8979a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_4_gain__bass);
8989a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
8999a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
9009a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_5_gain__bass);
9019a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_PODXTALL)) != 0)
9029a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
9039a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_4_gain);
9049a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
9059a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman		if (firmware >= 200)
9069a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman			device_remove_file(dev, &dev_attr_band_6_gain__bass);
907705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner}
908705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
9091027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabnerint line6_variax_create_files(int firmware, int type, struct device *dev)
9109a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman{
911705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	int err;
912705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_body));
913705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_enable));
914705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_type));
915705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_position));
916705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_angle));
917705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_level));
918705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_enable));
919705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_type));
920705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_position));
921705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_angle));
922705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_level));
923705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup_phase));
924705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_capacitance));
925705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tone_resistance));
926705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_volume_resistance));
927705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_taper));
928705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tone_dump));
929705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_save_tone));
930705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_volume_dump));
931705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning_enable));
932705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning6));
933705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning5));
934705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning4));
935705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning3));
936705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning2));
937705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning1));
938705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_detune6));
939705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_detune5));
940705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_detune4));
941705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_detune3));
942705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_detune2));
943705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_detune1));
944705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mix6));
945705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mix5));
946705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mix4));
947705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mix3));
948705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mix2));
949705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_mix1));
950705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup_wiring));
951acdc102181212481f94d0483f5a7a7f9f6cbafd3Shawn Bohrer	return 0;
952705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner}
953705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner
9541027f476f507ef7ed9919cd3e3d32310f3985da1Markus Grabnervoid line6_variax_remove_files(int firmware, int type, struct device *dev)
9559a92fadcc6731de03d6bdcf8fbfce08533d13523Greg Kroah-Hartman{
956705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_body);
957705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pickup1_enable);
958705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pickup1_type);
959705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pickup1_position);
960705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pickup1_angle);
961705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pickup1_level);
962705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pickup2_enable);
963705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pickup2_type);
964705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pickup2_position);
965705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pickup2_angle);
966705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pickup2_level);
967705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pickup_phase);
968705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_capacitance);
969705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tone_resistance);
970705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_volume_resistance);
971705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_taper);
972705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tone_dump);
973705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_save_tone);
974705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_volume_dump);
975705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tuning_enable);
976705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tuning6);
977705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tuning5);
978705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tuning4);
979705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tuning3);
980705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tuning2);
981705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_tuning1);
982705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_detune6);
983705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_detune5);
984705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_detune4);
985705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_detune3);
986705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_detune2);
987705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_detune1);
988705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mix6);
989705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mix5);
990705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mix4);
991705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mix3);
992705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mix2);
993705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_mix1);
994705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner	device_remove_file(dev, &dev_attr_pickup_wiring);
995705ececd1c60d0f5d6ef2a719008847883516970Markus Grabner}
996