/*
 * Line6 Linux USB driver - 0.8.0
 *
 * Copyright (C) 2004-2009 Markus Grabner (grabner@icg.tugraz.at)
 *
 *	This program is free software; you can redistribute it and/or
 *	modify it under the terms of the GNU General Public License as
 *	published by the Free Software Foundation, version 2.
 *
 */

#include "driver.h"

#include <linux/usb.h>

#include "control.h"
#include "pod.h"
#include "usbdefs.h"
#include "variax.h"

#define DEVICE_ATTR2(_name1, _name2, _mode, _show, _store) \
struct device_attribute dev_attr_##_name1 = __ATTR(_name2, _mode, _show, _store)

#define LINE6_PARAM_R(PREFIX, prefix, type, param) \
static ssize_t prefix##_get_##param(struct device *dev, \
			struct device_attribute *attr, char *buf) \
{ \
	return prefix##_get_param_##type(dev, buf, PREFIX##_##param); \
}

#define LINE6_PARAM_RW(PREFIX, prefix, type, param) \
LINE6_PARAM_R(PREFIX, prefix, type, param); \
static ssize_t prefix##_set_##param(struct device *dev, \
		struct device_attribute *attr, const char *buf, size_t count) \
{ \
	return prefix##_set_param_##type(dev, buf, count, PREFIX##_##param); \
}

#define POD_PARAM_R(type, param) LINE6_PARAM_R(POD, pod, type, param)
#define POD_PARAM_RW(type, param) LINE6_PARAM_RW(POD, pod, type, param)
#define VARIAX_PARAM_R(type, param) LINE6_PARAM_R(VARIAX, variax, type, param)
#define VARIAX_PARAM_RW(type, param) LINE6_PARAM_RW(VARIAX, variax, type, param)

static ssize_t pod_get_param_int(struct device *dev, char *buf, int param)
{
	struct usb_interface *interface = to_usb_interface(dev);
	struct usb_line6_pod *pod = usb_get_intfdata(interface);
	int retval = line6_wait_dump(&pod->dumpreq, 0);
	if (retval < 0)
		return retval;
	return sprintf(buf, "%d\n", pod->prog_data.control[param]);
}

static ssize_t pod_set_param_int(struct device *dev, const char *buf,
				 size_t count, int param)
{
	struct usb_interface *interface = to_usb_interface(dev);
	struct usb_line6_pod *pod = usb_get_intfdata(interface);
	unsigned long value;
	int retval;

	retval = strict_strtoul(buf, 10, &value);
	if (retval)
		return retval;

	pod_transmit_parameter(pod, param, value);
	return count;
}

static ssize_t variax_get_param_int(struct device *dev, char *buf, int param)
{
	struct usb_interface *interface = to_usb_interface(dev);
	struct usb_line6_variax *variax = usb_get_intfdata(interface);
	int retval = line6_wait_dump(&variax->dumpreq, 0);
	if (retval < 0)
		return retval;
	return sprintf(buf, "%d\n", variax->model_data.control[param]);
}

static ssize_t variax_get_param_float(struct device *dev, char *buf, int param)
{
	/*
	   We do our own floating point handling here since floats in the
	   kernel are problematic for at least two reasons: - many distros
	   are still shipped with binary kernels optimized for the ancient
	   80386 without FPU
	   - there isn't a printf("%f")
	   (see http://www.kernelthread.com/publications/faq/335.html)
	 */

	static const int BIAS = 0x7f;
	static const int OFFSET = 0xf;
	static const int PRECISION = 1000;

	int len = 0;
	unsigned part_int, part_frac;
	struct usb_interface *interface = to_usb_interface(dev);
	struct usb_line6_variax *variax = usb_get_intfdata(interface);
	const unsigned char *p = variax->model_data.control + param;
	int retval = line6_wait_dump(&variax->dumpreq, 0);
	if (retval < 0)
		return retval;

	if ((p[0] == 0) && (p[1] == 0) && (p[2] == 0))
		part_int = part_frac = 0;
	else {
		int exponent = (((p[0] & 0x7f) << 1) | (p[1] >> 7)) - BIAS;
		unsigned mantissa = (p[1] << 8) | p[2] | 0x8000;
		exponent -= OFFSET;

		if (exponent >= 0) {
			part_int = mantissa << exponent;
			part_frac = 0;
		} else {
			part_int = mantissa >> -exponent;
			part_frac = (mantissa << (32 + exponent)) & 0xffffffff;
		}

		part_frac =
		    (part_frac / ((1UL << 31) / (PRECISION / 2 * 10)) + 5) / 10;
	}

	len +=
	    sprintf(buf + len, "%s%d.%03d\n", ((p[0] & 0x80) ? "-" : ""),
		    part_int, part_frac);
	return len;
}

POD_PARAM_RW(int, tweak);
POD_PARAM_RW(int, wah_position);
POD_PARAM_RW(int, compression_gain);
POD_PARAM_RW(int, vol_pedal_position);
POD_PARAM_RW(int, compression_threshold);
POD_PARAM_RW(int, pan);
POD_PARAM_RW(int, amp_model_setup);
POD_PARAM_RW(int, amp_model);
POD_PARAM_RW(int, drive);
POD_PARAM_RW(int, bass);
POD_PARAM_RW(int, mid);
POD_PARAM_RW(int, lowmid);
POD_PARAM_RW(int, treble);
POD_PARAM_RW(int, highmid);
POD_PARAM_RW(int, chan_vol);
POD_PARAM_RW(int, reverb_mix);
POD_PARAM_RW(int, effect_setup);
POD_PARAM_RW(int, band_1_frequency);
POD_PARAM_RW(int, presence);
POD_PARAM_RW(int, treble__bass);
POD_PARAM_RW(int, noise_gate_enable);
POD_PARAM_RW(int, gate_threshold);
POD_PARAM_RW(int, gate_decay_time);
POD_PARAM_RW(int, stomp_enable);
POD_PARAM_RW(int, comp_enable);
POD_PARAM_RW(int, stomp_time);
POD_PARAM_RW(int, delay_enable);
POD_PARAM_RW(int, mod_param_1);
POD_PARAM_RW(int, delay_param_1);
POD_PARAM_RW(int, delay_param_1_note_value);
POD_PARAM_RW(int, band_2_frequency__bass);
POD_PARAM_RW(int, delay_param_2);
POD_PARAM_RW(int, delay_volume_mix);
POD_PARAM_RW(int, delay_param_3);
POD_PARAM_RW(int, reverb_enable);
POD_PARAM_RW(int, reverb_type);
POD_PARAM_RW(int, reverb_decay);
POD_PARAM_RW(int, reverb_tone);
POD_PARAM_RW(int, reverb_pre_delay);
POD_PARAM_RW(int, reverb_pre_post);
POD_PARAM_RW(int, band_2_frequency);
POD_PARAM_RW(int, band_3_frequency__bass);
POD_PARAM_RW(int, wah_enable);
POD_PARAM_RW(int, modulation_lo_cut);
POD_PARAM_RW(int, delay_reverb_lo_cut);
POD_PARAM_RW(int, volume_pedal_minimum);
POD_PARAM_RW(int, eq_pre_post);
POD_PARAM_RW(int, volume_pre_post);
POD_PARAM_RW(int, di_model);
POD_PARAM_RW(int, di_delay);
POD_PARAM_RW(int, mod_enable);
POD_PARAM_RW(int, mod_param_1_note_value);
POD_PARAM_RW(int, mod_param_2);
POD_PARAM_RW(int, mod_param_3);
POD_PARAM_RW(int, mod_param_4);
POD_PARAM_RW(int, mod_param_5);
POD_PARAM_RW(int, mod_volume_mix);
POD_PARAM_RW(int, mod_pre_post);
POD_PARAM_RW(int, modulation_model);
POD_PARAM_RW(int, band_3_frequency);
POD_PARAM_RW(int, band_4_frequency__bass);
POD_PARAM_RW(int, mod_param_1_double_precision);
POD_PARAM_RW(int, delay_param_1_double_precision);
POD_PARAM_RW(int, eq_enable);
POD_PARAM_RW(int, tap);
POD_PARAM_RW(int, volume_tweak_pedal_assign);
POD_PARAM_RW(int, band_5_frequency);
POD_PARAM_RW(int, tuner);
POD_PARAM_RW(int, mic_selection);
POD_PARAM_RW(int, cabinet_model);
POD_PARAM_RW(int, stomp_model);
POD_PARAM_RW(int, roomlevel);
POD_PARAM_RW(int, band_4_frequency);
POD_PARAM_RW(int, band_6_frequency);
POD_PARAM_RW(int, stomp_param_1_note_value);
POD_PARAM_RW(int, stomp_param_2);
POD_PARAM_RW(int, stomp_param_3);
POD_PARAM_RW(int, stomp_param_4);
POD_PARAM_RW(int, stomp_param_5);
POD_PARAM_RW(int, stomp_param_6);
POD_PARAM_RW(int, amp_switch_select);
POD_PARAM_RW(int, delay_param_4);
POD_PARAM_RW(int, delay_param_5);
POD_PARAM_RW(int, delay_pre_post);
POD_PARAM_RW(int, delay_model);
POD_PARAM_RW(int, delay_verb_model);
POD_PARAM_RW(int, tempo_msb);
POD_PARAM_RW(int, tempo_lsb);
POD_PARAM_RW(int, wah_model);
POD_PARAM_RW(int, bypass_volume);
POD_PARAM_RW(int, fx_loop_on_off);
POD_PARAM_RW(int, tweak_param_select);
POD_PARAM_RW(int, amp1_engage);
POD_PARAM_RW(int, band_1_gain);
POD_PARAM_RW(int, band_2_gain__bass);
POD_PARAM_RW(int, band_2_gain);
POD_PARAM_RW(int, band_3_gain__bass);
POD_PARAM_RW(int, band_3_gain);
POD_PARAM_RW(int, band_4_gain__bass);
POD_PARAM_RW(int, band_5_gain__bass);
POD_PARAM_RW(int, band_4_gain);
POD_PARAM_RW(int, band_6_gain__bass);
VARIAX_PARAM_R(int, body);
VARIAX_PARAM_R(int, pickup1_enable);
VARIAX_PARAM_R(int, pickup1_type);
VARIAX_PARAM_R(float, pickup1_position);
VARIAX_PARAM_R(float, pickup1_angle);
VARIAX_PARAM_R(float, pickup1_level);
VARIAX_PARAM_R(int, pickup2_enable);
VARIAX_PARAM_R(int, pickup2_type);
VARIAX_PARAM_R(float, pickup2_position);
VARIAX_PARAM_R(float, pickup2_angle);
VARIAX_PARAM_R(float, pickup2_level);
VARIAX_PARAM_R(int, pickup_phase);
VARIAX_PARAM_R(float, capacitance);
VARIAX_PARAM_R(float, tone_resistance);
VARIAX_PARAM_R(float, volume_resistance);
VARIAX_PARAM_R(int, taper);
VARIAX_PARAM_R(float, tone_dump);
VARIAX_PARAM_R(int, save_tone);
VARIAX_PARAM_R(float, volume_dump);
VARIAX_PARAM_R(int, tuning_enable);
VARIAX_PARAM_R(int, tuning6);
VARIAX_PARAM_R(int, tuning5);
VARIAX_PARAM_R(int, tuning4);
VARIAX_PARAM_R(int, tuning3);
VARIAX_PARAM_R(int, tuning2);
VARIAX_PARAM_R(int, tuning1);
VARIAX_PARAM_R(float, detune6);
VARIAX_PARAM_R(float, detune5);
VARIAX_PARAM_R(float, detune4);
VARIAX_PARAM_R(float, detune3);
VARIAX_PARAM_R(float, detune2);
VARIAX_PARAM_R(float, detune1);
VARIAX_PARAM_R(float, mix6);
VARIAX_PARAM_R(float, mix5);
VARIAX_PARAM_R(float, mix4);
VARIAX_PARAM_R(float, mix3);
VARIAX_PARAM_R(float, mix2);
VARIAX_PARAM_R(float, mix1);
VARIAX_PARAM_R(int, pickup_wiring);

static DEVICE_ATTR(tweak, S_IWUSR | S_IRUGO, pod_get_tweak, pod_set_tweak);
static DEVICE_ATTR(wah_position, S_IWUSR | S_IRUGO, pod_get_wah_position,
		   pod_set_wah_position);
static DEVICE_ATTR(compression_gain, S_IWUSR | S_IRUGO,
		   pod_get_compression_gain, pod_set_compression_gain);
static DEVICE_ATTR(vol_pedal_position, S_IWUSR | S_IRUGO,
		   pod_get_vol_pedal_position, pod_set_vol_pedal_position);
static DEVICE_ATTR(compression_threshold, S_IWUSR | S_IRUGO,
		   pod_get_compression_threshold,
		   pod_set_compression_threshold);
static DEVICE_ATTR(pan, S_IWUSR | S_IRUGO, pod_get_pan, pod_set_pan);
static DEVICE_ATTR(amp_model_setup, S_IWUSR | S_IRUGO, pod_get_amp_model_setup,
		   pod_set_amp_model_setup);
static DEVICE_ATTR(amp_model, S_IWUSR | S_IRUGO, pod_get_amp_model,
		   pod_set_amp_model);
static DEVICE_ATTR(drive, S_IWUSR | S_IRUGO, pod_get_drive, pod_set_drive);
static DEVICE_ATTR(bass, S_IWUSR | S_IRUGO, pod_get_bass, pod_set_bass);
static DEVICE_ATTR(mid, S_IWUSR | S_IRUGO, pod_get_mid, pod_set_mid);
static DEVICE_ATTR(lowmid, S_IWUSR | S_IRUGO, pod_get_lowmid, pod_set_lowmid);
static DEVICE_ATTR(treble, S_IWUSR | S_IRUGO, pod_get_treble, pod_set_treble);
static DEVICE_ATTR(highmid, S_IWUSR | S_IRUGO, pod_get_highmid,
		   pod_set_highmid);
static DEVICE_ATTR(chan_vol, S_IWUSR | S_IRUGO, pod_get_chan_vol,
		   pod_set_chan_vol);
static DEVICE_ATTR(reverb_mix, S_IWUSR | S_IRUGO, pod_get_reverb_mix,
		   pod_set_reverb_mix);
static DEVICE_ATTR(effect_setup, S_IWUSR | S_IRUGO, pod_get_effect_setup,
		   pod_set_effect_setup);
static DEVICE_ATTR(band_1_frequency, S_IWUSR | S_IRUGO,
		   pod_get_band_1_frequency, pod_set_band_1_frequency);
static DEVICE_ATTR(presence, S_IWUSR | S_IRUGO, pod_get_presence,
		   pod_set_presence);
static DEVICE_ATTR2(treble__bass, treble, S_IWUSR | S_IRUGO,
		    pod_get_treble__bass, pod_set_treble__bass);
static DEVICE_ATTR(noise_gate_enable, S_IWUSR | S_IRUGO,
		   pod_get_noise_gate_enable, pod_set_noise_gate_enable);
static DEVICE_ATTR(gate_threshold, S_IWUSR | S_IRUGO, pod_get_gate_threshold,
		   pod_set_gate_threshold);
static DEVICE_ATTR(gate_decay_time, S_IWUSR | S_IRUGO, pod_get_gate_decay_time,
		   pod_set_gate_decay_time);
static DEVICE_ATTR(stomp_enable, S_IWUSR | S_IRUGO, pod_get_stomp_enable,
		   pod_set_stomp_enable);
static DEVICE_ATTR(comp_enable, S_IWUSR | S_IRUGO, pod_get_comp_enable,
		   pod_set_comp_enable);
static DEVICE_ATTR(stomp_time, S_IWUSR | S_IRUGO, pod_get_stomp_time,
		   pod_set_stomp_time);
static DEVICE_ATTR(delay_enable, S_IWUSR | S_IRUGO, pod_get_delay_enable,
		   pod_set_delay_enable);
static DEVICE_ATTR(mod_param_1, S_IWUSR | S_IRUGO, pod_get_mod_param_1,
		   pod_set_mod_param_1);
static DEVICE_ATTR(delay_param_1, S_IWUSR | S_IRUGO, pod_get_delay_param_1,
		   pod_set_delay_param_1);
static DEVICE_ATTR(delay_param_1_note_value, S_IWUSR | S_IRUGO,
		   pod_get_delay_param_1_note_value,
		   pod_set_delay_param_1_note_value);
static DEVICE_ATTR2(band_2_frequency__bass, band_2_frequency, S_IWUSR | S_IRUGO,
		    pod_get_band_2_frequency__bass,
		    pod_set_band_2_frequency__bass);
static DEVICE_ATTR(delay_param_2, S_IWUSR | S_IRUGO, pod_get_delay_param_2,
		   pod_set_delay_param_2);
static DEVICE_ATTR(delay_volume_mix, S_IWUSR | S_IRUGO,
		   pod_get_delay_volume_mix, pod_set_delay_volume_mix);
static DEVICE_ATTR(delay_param_3, S_IWUSR | S_IRUGO, pod_get_delay_param_3,
		   pod_set_delay_param_3);
static DEVICE_ATTR(reverb_enable, S_IWUSR | S_IRUGO, pod_get_reverb_enable,
		   pod_set_reverb_enable);
static DEVICE_ATTR(reverb_type, S_IWUSR | S_IRUGO, pod_get_reverb_type,
		   pod_set_reverb_type);
static DEVICE_ATTR(reverb_decay, S_IWUSR | S_IRUGO, pod_get_reverb_decay,
		   pod_set_reverb_decay);
static DEVICE_ATTR(reverb_tone, S_IWUSR | S_IRUGO, pod_get_reverb_tone,
		   pod_set_reverb_tone);
static DEVICE_ATTR(reverb_pre_delay, S_IWUSR | S_IRUGO,
		   pod_get_reverb_pre_delay, pod_set_reverb_pre_delay);
static DEVICE_ATTR(reverb_pre_post, S_IWUSR | S_IRUGO, pod_get_reverb_pre_post,
		   pod_set_reverb_pre_post);
static DEVICE_ATTR(band_2_frequency, S_IWUSR | S_IRUGO,
		   pod_get_band_2_frequency, pod_set_band_2_frequency);
static DEVICE_ATTR2(band_3_frequency__bass, band_3_frequency, S_IWUSR | S_IRUGO,
		    pod_get_band_3_frequency__bass,
		    pod_set_band_3_frequency__bass);
static DEVICE_ATTR(wah_enable, S_IWUSR | S_IRUGO, pod_get_wah_enable,
		   pod_set_wah_enable);
static DEVICE_ATTR(modulation_lo_cut, S_IWUSR | S_IRUGO,
		   pod_get_modulation_lo_cut, pod_set_modulation_lo_cut);
static DEVICE_ATTR(delay_reverb_lo_cut, S_IWUSR | S_IRUGO,
		   pod_get_delay_reverb_lo_cut, pod_set_delay_reverb_lo_cut);
static DEVICE_ATTR(volume_pedal_minimum, S_IWUSR | S_IRUGO,
		   pod_get_volume_pedal_minimum, pod_set_volume_pedal_minimum);
static DEVICE_ATTR(eq_pre_post, S_IWUSR | S_IRUGO, pod_get_eq_pre_post,
		   pod_set_eq_pre_post);
static DEVICE_ATTR(volume_pre_post, S_IWUSR | S_IRUGO, pod_get_volume_pre_post,
		   pod_set_volume_pre_post);
static DEVICE_ATTR(di_model, S_IWUSR | S_IRUGO, pod_get_di_model,
		   pod_set_di_model);
static DEVICE_ATTR(di_delay, S_IWUSR | S_IRUGO, pod_get_di_delay,
		   pod_set_di_delay);
static DEVICE_ATTR(mod_enable, S_IWUSR | S_IRUGO, pod_get_mod_enable,
		   pod_set_mod_enable);
static DEVICE_ATTR(mod_param_1_note_value, S_IWUSR | S_IRUGO,
		   pod_get_mod_param_1_note_value,
		   pod_set_mod_param_1_note_value);
static DEVICE_ATTR(mod_param_2, S_IWUSR | S_IRUGO, pod_get_mod_param_2,
		   pod_set_mod_param_2);
static DEVICE_ATTR(mod_param_3, S_IWUSR | S_IRUGO, pod_get_mod_param_3,
		   pod_set_mod_param_3);
static DEVICE_ATTR(mod_param_4, S_IWUSR | S_IRUGO, pod_get_mod_param_4,
		   pod_set_mod_param_4);
static DEVICE_ATTR(mod_param_5, S_IWUSR | S_IRUGO, pod_get_mod_param_5,
		   pod_set_mod_param_5);
static DEVICE_ATTR(mod_volume_mix, S_IWUSR | S_IRUGO, pod_get_mod_volume_mix,
		   pod_set_mod_volume_mix);
static DEVICE_ATTR(mod_pre_post, S_IWUSR | S_IRUGO, pod_get_mod_pre_post,
		   pod_set_mod_pre_post);
static DEVICE_ATTR(modulation_model, S_IWUSR | S_IRUGO,
		   pod_get_modulation_model, pod_set_modulation_model);
static DEVICE_ATTR(band_3_frequency, S_IWUSR | S_IRUGO,
		   pod_get_band_3_frequency, pod_set_band_3_frequency);
static DEVICE_ATTR2(band_4_frequency__bass, band_4_frequency, S_IWUSR | S_IRUGO,
		    pod_get_band_4_frequency__bass,
		    pod_set_band_4_frequency__bass);
static DEVICE_ATTR(mod_param_1_double_precision, S_IWUSR | S_IRUGO,
		   pod_get_mod_param_1_double_precision,
		   pod_set_mod_param_1_double_precision);
static DEVICE_ATTR(delay_param_1_double_precision, S_IWUSR | S_IRUGO,
		   pod_get_delay_param_1_double_precision,
		   pod_set_delay_param_1_double_precision);
static DEVICE_ATTR(eq_enable, S_IWUSR | S_IRUGO, pod_get_eq_enable,
		   pod_set_eq_enable);
static DEVICE_ATTR(tap, S_IWUSR | S_IRUGO, pod_get_tap, pod_set_tap);
static DEVICE_ATTR(volume_tweak_pedal_assign, S_IWUSR | S_IRUGO,
		   pod_get_volume_tweak_pedal_assign,
		   pod_set_volume_tweak_pedal_assign);
static DEVICE_ATTR(band_5_frequency, S_IWUSR | S_IRUGO,
		   pod_get_band_5_frequency, pod_set_band_5_frequency);
static DEVICE_ATTR(tuner, S_IWUSR | S_IRUGO, pod_get_tuner, pod_set_tuner);
static DEVICE_ATTR(mic_selection, S_IWUSR | S_IRUGO, pod_get_mic_selection,
		   pod_set_mic_selection);
static DEVICE_ATTR(cabinet_model, S_IWUSR | S_IRUGO, pod_get_cabinet_model,
		   pod_set_cabinet_model);
static DEVICE_ATTR(stomp_model, S_IWUSR | S_IRUGO, pod_get_stomp_model,
		   pod_set_stomp_model);
static DEVICE_ATTR(roomlevel, S_IWUSR | S_IRUGO, pod_get_roomlevel,
		   pod_set_roomlevel);
static DEVICE_ATTR(band_4_frequency, S_IWUSR | S_IRUGO,
		   pod_get_band_4_frequency, pod_set_band_4_frequency);
static DEVICE_ATTR(band_6_frequency, S_IWUSR | S_IRUGO,
		   pod_get_band_6_frequency, pod_set_band_6_frequency);
static DEVICE_ATTR(stomp_param_1_note_value, S_IWUSR | S_IRUGO,
		   pod_get_stomp_param_1_note_value,
		   pod_set_stomp_param_1_note_value);
static DEVICE_ATTR(stomp_param_2, S_IWUSR | S_IRUGO, pod_get_stomp_param_2,
		   pod_set_stomp_param_2);
static DEVICE_ATTR(stomp_param_3, S_IWUSR | S_IRUGO, pod_get_stomp_param_3,
		   pod_set_stomp_param_3);
static DEVICE_ATTR(stomp_param_4, S_IWUSR | S_IRUGO, pod_get_stomp_param_4,
		   pod_set_stomp_param_4);
static DEVICE_ATTR(stomp_param_5, S_IWUSR | S_IRUGO, pod_get_stomp_param_5,
		   pod_set_stomp_param_5);
static DEVICE_ATTR(stomp_param_6, S_IWUSR | S_IRUGO, pod_get_stomp_param_6,
		   pod_set_stomp_param_6);
static DEVICE_ATTR(amp_switch_select, S_IWUSR | S_IRUGO,
		   pod_get_amp_switch_select, pod_set_amp_switch_select);
static DEVICE_ATTR(delay_param_4, S_IWUSR | S_IRUGO, pod_get_delay_param_4,
		   pod_set_delay_param_4);
static DEVICE_ATTR(delay_param_5, S_IWUSR | S_IRUGO, pod_get_delay_param_5,
		   pod_set_delay_param_5);
static DEVICE_ATTR(delay_pre_post, S_IWUSR | S_IRUGO, pod_get_delay_pre_post,
		   pod_set_delay_pre_post);
static DEVICE_ATTR(delay_model, S_IWUSR | S_IRUGO, pod_get_delay_model,
		   pod_set_delay_model);
static DEVICE_ATTR(delay_verb_model, S_IWUSR | S_IRUGO,
		   pod_get_delay_verb_model, pod_set_delay_verb_model);
static DEVICE_ATTR(tempo_msb, S_IWUSR | S_IRUGO, pod_get_tempo_msb,
		   pod_set_tempo_msb);
static DEVICE_ATTR(tempo_lsb, S_IWUSR | S_IRUGO, pod_get_tempo_lsb,
		   pod_set_tempo_lsb);
static DEVICE_ATTR(wah_model, S_IWUSR | S_IRUGO, pod_get_wah_model,
		   pod_set_wah_model);
static DEVICE_ATTR(bypass_volume, S_IWUSR | S_IRUGO, pod_get_bypass_volume,
		   pod_set_bypass_volume);
static DEVICE_ATTR(fx_loop_on_off, S_IWUSR | S_IRUGO, pod_get_fx_loop_on_off,
		   pod_set_fx_loop_on_off);
static DEVICE_ATTR(tweak_param_select, S_IWUSR | S_IRUGO,
		   pod_get_tweak_param_select, pod_set_tweak_param_select);
static DEVICE_ATTR(amp1_engage, S_IWUSR | S_IRUGO, pod_get_amp1_engage,
		   pod_set_amp1_engage);
static DEVICE_ATTR(band_1_gain, S_IWUSR | S_IRUGO, pod_get_band_1_gain,
		   pod_set_band_1_gain);
static DEVICE_ATTR2(band_2_gain__bass, band_2_gain, S_IWUSR | S_IRUGO,
		    pod_get_band_2_gain__bass, pod_set_band_2_gain__bass);
static DEVICE_ATTR(band_2_gain, S_IWUSR | S_IRUGO, pod_get_band_2_gain,
		   pod_set_band_2_gain);
static DEVICE_ATTR2(band_3_gain__bass, band_3_gain, S_IWUSR | S_IRUGO,
		    pod_get_band_3_gain__bass, pod_set_band_3_gain__bass);
static DEVICE_ATTR(band_3_gain, S_IWUSR | S_IRUGO, pod_get_band_3_gain,
		   pod_set_band_3_gain);
static DEVICE_ATTR2(band_4_gain__bass, band_4_gain, S_IWUSR | S_IRUGO,
		    pod_get_band_4_gain__bass, pod_set_band_4_gain__bass);
static DEVICE_ATTR2(band_5_gain__bass, band_5_gain, S_IWUSR | S_IRUGO,
		    pod_get_band_5_gain__bass, pod_set_band_5_gain__bass);
static DEVICE_ATTR(band_4_gain, S_IWUSR | S_IRUGO, pod_get_band_4_gain,
		   pod_set_band_4_gain);
static DEVICE_ATTR2(band_6_gain__bass, band_6_gain, S_IWUSR | S_IRUGO,
		    pod_get_band_6_gain__bass, pod_set_band_6_gain__bass);
static DEVICE_ATTR(body, S_IRUGO, variax_get_body, line6_nop_write);
static DEVICE_ATTR(pickup1_enable, S_IRUGO, variax_get_pickup1_enable,
		   line6_nop_write);
static DEVICE_ATTR(pickup1_type, S_IRUGO, variax_get_pickup1_type,
		   line6_nop_write);
static DEVICE_ATTR(pickup1_position, S_IRUGO, variax_get_pickup1_position,
		   line6_nop_write);
static DEVICE_ATTR(pickup1_angle, S_IRUGO, variax_get_pickup1_angle,
		   line6_nop_write);
static DEVICE_ATTR(pickup1_level, S_IRUGO, variax_get_pickup1_level,
		   line6_nop_write);
static DEVICE_ATTR(pickup2_enable, S_IRUGO, variax_get_pickup2_enable,
		   line6_nop_write);
static DEVICE_ATTR(pickup2_type, S_IRUGO, variax_get_pickup2_type,
		   line6_nop_write);
static DEVICE_ATTR(pickup2_position, S_IRUGO, variax_get_pickup2_position,
		   line6_nop_write);
static DEVICE_ATTR(pickup2_angle, S_IRUGO, variax_get_pickup2_angle,
		   line6_nop_write);
static DEVICE_ATTR(pickup2_level, S_IRUGO, variax_get_pickup2_level,
		   line6_nop_write);
static DEVICE_ATTR(pickup_phase, S_IRUGO, variax_get_pickup_phase,
		   line6_nop_write);
static DEVICE_ATTR(capacitance, S_IRUGO, variax_get_capacitance,
		   line6_nop_write);
static DEVICE_ATTR(tone_resistance, S_IRUGO, variax_get_tone_resistance,
		   line6_nop_write);
static DEVICE_ATTR(volume_resistance, S_IRUGO, variax_get_volume_resistance,
		   line6_nop_write);
static DEVICE_ATTR(taper, S_IRUGO, variax_get_taper, line6_nop_write);
static DEVICE_ATTR(tone_dump, S_IRUGO, variax_get_tone_dump, line6_nop_write);
static DEVICE_ATTR(save_tone, S_IRUGO, variax_get_save_tone, line6_nop_write);
static DEVICE_ATTR(volume_dump, S_IRUGO, variax_get_volume_dump,
		   line6_nop_write);
static DEVICE_ATTR(tuning_enable, S_IRUGO, variax_get_tuning_enable,
		   line6_nop_write);
static DEVICE_ATTR(tuning6, S_IRUGO, variax_get_tuning6, line6_nop_write);
static DEVICE_ATTR(tuning5, S_IRUGO, variax_get_tuning5, line6_nop_write);
static DEVICE_ATTR(tuning4, S_IRUGO, variax_get_tuning4, line6_nop_write);
static DEVICE_ATTR(tuning3, S_IRUGO, variax_get_tuning3, line6_nop_write);
static DEVICE_ATTR(tuning2, S_IRUGO, variax_get_tuning2, line6_nop_write);
static DEVICE_ATTR(tuning1, S_IRUGO, variax_get_tuning1, line6_nop_write);
static DEVICE_ATTR(detune6, S_IRUGO, variax_get_detune6, line6_nop_write);
static DEVICE_ATTR(detune5, S_IRUGO, variax_get_detune5, line6_nop_write);
static DEVICE_ATTR(detune4, S_IRUGO, variax_get_detune4, line6_nop_write);
static DEVICE_ATTR(detune3, S_IRUGO, variax_get_detune3, line6_nop_write);
static DEVICE_ATTR(detune2, S_IRUGO, variax_get_detune2, line6_nop_write);
static DEVICE_ATTR(detune1, S_IRUGO, variax_get_detune1, line6_nop_write);
static DEVICE_ATTR(mix6, S_IRUGO, variax_get_mix6, line6_nop_write);
static DEVICE_ATTR(mix5, S_IRUGO, variax_get_mix5, line6_nop_write);
static DEVICE_ATTR(mix4, S_IRUGO, variax_get_mix4, line6_nop_write);
static DEVICE_ATTR(mix3, S_IRUGO, variax_get_mix3, line6_nop_write);
static DEVICE_ATTR(mix2, S_IRUGO, variax_get_mix2, line6_nop_write);
static DEVICE_ATTR(mix1, S_IRUGO, variax_get_mix1, line6_nop_write);
static DEVICE_ATTR(pickup_wiring, S_IRUGO, variax_get_pickup_wiring,
		   line6_nop_write);

int pod_create_files(int firmware, int type, struct device *dev)
{
	int err;
	CHECK_RETURN(device_create_file(dev, &dev_attr_tweak));
	CHECK_RETURN(device_create_file(dev, &dev_attr_wah_position));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		CHECK_RETURN(device_create_file
			     (dev, &dev_attr_compression_gain));
	CHECK_RETURN(device_create_file(dev, &dev_attr_vol_pedal_position));
	CHECK_RETURN(device_create_file(dev, &dev_attr_compression_threshold));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pan));
	CHECK_RETURN(device_create_file(dev, &dev_attr_amp_model_setup));
	if (firmware >= 200)
		CHECK_RETURN(device_create_file(dev, &dev_attr_amp_model));
	CHECK_RETURN(device_create_file(dev, &dev_attr_drive));
	CHECK_RETURN(device_create_file(dev, &dev_attr_bass));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_mid));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_lowmid));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_treble));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_highmid));
	CHECK_RETURN(device_create_file(dev, &dev_attr_chan_vol));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_mix));
	CHECK_RETURN(device_create_file(dev, &dev_attr_effect_setup));
	if (firmware >= 200)
		CHECK_RETURN(device_create_file
			     (dev, &dev_attr_band_1_frequency));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_presence));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_treble__bass));
	CHECK_RETURN(device_create_file(dev, &dev_attr_noise_gate_enable));
	CHECK_RETURN(device_create_file(dev, &dev_attr_gate_threshold));
	CHECK_RETURN(device_create_file(dev, &dev_attr_gate_decay_time));
	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_enable));
	CHECK_RETURN(device_create_file(dev, &dev_attr_comp_enable));
	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_time));
	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_enable));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_1));
	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_1));
	CHECK_RETURN(device_create_file
		     (dev, &dev_attr_delay_param_1_note_value));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_2_frequency__bass));
	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_2));
	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_volume_mix));
	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_3));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_enable));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_type));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_decay));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_tone));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		CHECK_RETURN(device_create_file
			     (dev, &dev_attr_reverb_pre_delay));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		CHECK_RETURN(device_create_file
			     (dev, &dev_attr_reverb_pre_post));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_2_frequency));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_3_frequency__bass));
	CHECK_RETURN(device_create_file(dev, &dev_attr_wah_enable));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		CHECK_RETURN(device_create_file
			     (dev, &dev_attr_modulation_lo_cut));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		CHECK_RETURN(device_create_file
			     (dev, &dev_attr_delay_reverb_lo_cut));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_volume_pedal_minimum));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_eq_pre_post));
	CHECK_RETURN(device_create_file(dev, &dev_attr_volume_pre_post));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_di_model));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_di_delay));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_enable));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_1_note_value));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_2));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_3));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_4));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_5));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_volume_mix));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mod_pre_post));
	CHECK_RETURN(device_create_file(dev, &dev_attr_modulation_model));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_3_frequency));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_4_frequency__bass));
	CHECK_RETURN(device_create_file
		     (dev, &dev_attr_mod_param_1_double_precision));
	CHECK_RETURN(device_create_file
		     (dev, &dev_attr_delay_param_1_double_precision));
	if (firmware >= 200)
		CHECK_RETURN(device_create_file(dev, &dev_attr_eq_enable));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tap));
	CHECK_RETURN(device_create_file
		     (dev, &dev_attr_volume_tweak_pedal_assign));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_5_frequency));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mic_selection));
	CHECK_RETURN(device_create_file(dev, &dev_attr_cabinet_model));
	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_model));
	CHECK_RETURN(device_create_file(dev, &dev_attr_roomlevel));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_4_frequency));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_6_frequency));
	CHECK_RETURN(device_create_file
		     (dev, &dev_attr_stomp_param_1_note_value));
	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_2));
	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_3));
	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_4));
	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_5));
	CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_6));
	if ((type & (LINE6_BITS_LIVE)) != 0)
		CHECK_RETURN(device_create_file
			     (dev, &dev_attr_amp_switch_select));
	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_4));
	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_5));
	CHECK_RETURN(device_create_file(dev, &dev_attr_delay_pre_post));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_delay_model));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		CHECK_RETURN(device_create_file
			     (dev, &dev_attr_delay_verb_model));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tempo_msb));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tempo_lsb));
	if (firmware >= 300)
		CHECK_RETURN(device_create_file(dev, &dev_attr_wah_model));
	if (firmware >= 214)
		CHECK_RETURN(device_create_file(dev, &dev_attr_bypass_volume));
	if ((type & (LINE6_BITS_PRO)) != 0)
		CHECK_RETURN(device_create_file(dev, &dev_attr_fx_loop_on_off));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tweak_param_select));
	CHECK_RETURN(device_create_file(dev, &dev_attr_amp1_engage));
	if (firmware >= 200)
		CHECK_RETURN(device_create_file(dev, &dev_attr_band_1_gain));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_2_gain__bass));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_2_gain));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_3_gain__bass));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_3_gain));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_4_gain__bass));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_5_gain__bass));
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_4_gain));
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			CHECK_RETURN(device_create_file
				     (dev, &dev_attr_band_6_gain__bass));
	return 0;
}
EXPORT_SYMBOL(pod_create_files);

void pod_remove_files(int firmware, int type, struct device *dev)
{
	device_remove_file(dev, &dev_attr_tweak);
	device_remove_file(dev, &dev_attr_wah_position);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_compression_gain);
	device_remove_file(dev, &dev_attr_vol_pedal_position);
	device_remove_file(dev, &dev_attr_compression_threshold);
	device_remove_file(dev, &dev_attr_pan);
	device_remove_file(dev, &dev_attr_amp_model_setup);
	if (firmware >= 200)
		device_remove_file(dev, &dev_attr_amp_model);
	device_remove_file(dev, &dev_attr_drive);
	device_remove_file(dev, &dev_attr_bass);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_mid);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_lowmid);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_treble);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_highmid);
	device_remove_file(dev, &dev_attr_chan_vol);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_reverb_mix);
	device_remove_file(dev, &dev_attr_effect_setup);
	if (firmware >= 200)
		device_remove_file(dev, &dev_attr_band_1_frequency);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_presence);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_treble__bass);
	device_remove_file(dev, &dev_attr_noise_gate_enable);
	device_remove_file(dev, &dev_attr_gate_threshold);
	device_remove_file(dev, &dev_attr_gate_decay_time);
	device_remove_file(dev, &dev_attr_stomp_enable);
	device_remove_file(dev, &dev_attr_comp_enable);
	device_remove_file(dev, &dev_attr_stomp_time);
	device_remove_file(dev, &dev_attr_delay_enable);
	device_remove_file(dev, &dev_attr_mod_param_1);
	device_remove_file(dev, &dev_attr_delay_param_1);
	device_remove_file(dev, &dev_attr_delay_param_1_note_value);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev,
					   &dev_attr_band_2_frequency__bass);
	device_remove_file(dev, &dev_attr_delay_param_2);
	device_remove_file(dev, &dev_attr_delay_volume_mix);
	device_remove_file(dev, &dev_attr_delay_param_3);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_reverb_enable);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_reverb_type);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_reverb_decay);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_reverb_tone);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_reverb_pre_delay);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_reverb_pre_post);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_2_frequency);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev,
					   &dev_attr_band_3_frequency__bass);
	device_remove_file(dev, &dev_attr_wah_enable);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_modulation_lo_cut);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_delay_reverb_lo_cut);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_volume_pedal_minimum);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_eq_pre_post);
	device_remove_file(dev, &dev_attr_volume_pre_post);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_di_model);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_di_delay);
	device_remove_file(dev, &dev_attr_mod_enable);
	device_remove_file(dev, &dev_attr_mod_param_1_note_value);
	device_remove_file(dev, &dev_attr_mod_param_2);
	device_remove_file(dev, &dev_attr_mod_param_3);
	device_remove_file(dev, &dev_attr_mod_param_4);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_mod_param_5);
	device_remove_file(dev, &dev_attr_mod_volume_mix);
	device_remove_file(dev, &dev_attr_mod_pre_post);
	device_remove_file(dev, &dev_attr_modulation_model);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_3_frequency);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev,
					   &dev_attr_band_4_frequency__bass);
	device_remove_file(dev, &dev_attr_mod_param_1_double_precision);
	device_remove_file(dev, &dev_attr_delay_param_1_double_precision);
	if (firmware >= 200)
		device_remove_file(dev, &dev_attr_eq_enable);
	device_remove_file(dev, &dev_attr_tap);
	device_remove_file(dev, &dev_attr_volume_tweak_pedal_assign);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_5_frequency);
	device_remove_file(dev, &dev_attr_tuner);
	device_remove_file(dev, &dev_attr_mic_selection);
	device_remove_file(dev, &dev_attr_cabinet_model);
	device_remove_file(dev, &dev_attr_stomp_model);
	device_remove_file(dev, &dev_attr_roomlevel);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_4_frequency);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_6_frequency);
	device_remove_file(dev, &dev_attr_stomp_param_1_note_value);
	device_remove_file(dev, &dev_attr_stomp_param_2);
	device_remove_file(dev, &dev_attr_stomp_param_3);
	device_remove_file(dev, &dev_attr_stomp_param_4);
	device_remove_file(dev, &dev_attr_stomp_param_5);
	device_remove_file(dev, &dev_attr_stomp_param_6);
	if ((type & (LINE6_BITS_LIVE)) != 0)
		device_remove_file(dev, &dev_attr_amp_switch_select);
	device_remove_file(dev, &dev_attr_delay_param_4);
	device_remove_file(dev, &dev_attr_delay_param_5);
	device_remove_file(dev, &dev_attr_delay_pre_post);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_delay_model);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		device_remove_file(dev, &dev_attr_delay_verb_model);
	device_remove_file(dev, &dev_attr_tempo_msb);
	device_remove_file(dev, &dev_attr_tempo_lsb);
	if (firmware >= 300)
		device_remove_file(dev, &dev_attr_wah_model);
	if (firmware >= 214)
		device_remove_file(dev, &dev_attr_bypass_volume);
	if ((type & (LINE6_BITS_PRO)) != 0)
		device_remove_file(dev, &dev_attr_fx_loop_on_off);
	device_remove_file(dev, &dev_attr_tweak_param_select);
	device_remove_file(dev, &dev_attr_amp1_engage);
	if (firmware >= 200)
		device_remove_file(dev, &dev_attr_band_1_gain);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_2_gain__bass);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_2_gain);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_3_gain__bass);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_3_gain);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_4_gain__bass);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_5_gain__bass);
	if ((type & (LINE6_BITS_PODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_4_gain);
	if ((type & (LINE6_BITS_BASSPODXTALL)) != 0)
		if (firmware >= 200)
			device_remove_file(dev, &dev_attr_band_6_gain__bass);
}
EXPORT_SYMBOL(pod_remove_files);

int variax_create_files(int firmware, int type, struct device *dev)
{
	int err;
	CHECK_RETURN(device_create_file(dev, &dev_attr_body));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_enable));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_type));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_position));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_angle));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup1_level));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_enable));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_type));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_position));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_angle));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup2_level));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup_phase));
	CHECK_RETURN(device_create_file(dev, &dev_attr_capacitance));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tone_resistance));
	CHECK_RETURN(device_create_file(dev, &dev_attr_volume_resistance));
	CHECK_RETURN(device_create_file(dev, &dev_attr_taper));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tone_dump));
	CHECK_RETURN(device_create_file(dev, &dev_attr_save_tone));
	CHECK_RETURN(device_create_file(dev, &dev_attr_volume_dump));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning_enable));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning6));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning5));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning4));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning3));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning2));
	CHECK_RETURN(device_create_file(dev, &dev_attr_tuning1));
	CHECK_RETURN(device_create_file(dev, &dev_attr_detune6));
	CHECK_RETURN(device_create_file(dev, &dev_attr_detune5));
	CHECK_RETURN(device_create_file(dev, &dev_attr_detune4));
	CHECK_RETURN(device_create_file(dev, &dev_attr_detune3));
	CHECK_RETURN(device_create_file(dev, &dev_attr_detune2));
	CHECK_RETURN(device_create_file(dev, &dev_attr_detune1));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mix6));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mix5));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mix4));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mix3));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mix2));
	CHECK_RETURN(device_create_file(dev, &dev_attr_mix1));
	CHECK_RETURN(device_create_file(dev, &dev_attr_pickup_wiring));
	return 0;
}
EXPORT_SYMBOL(variax_create_files);

void variax_remove_files(int firmware, int type, struct device *dev)
{
	device_remove_file(dev, &dev_attr_body);
	device_remove_file(dev, &dev_attr_pickup1_enable);
	device_remove_file(dev, &dev_attr_pickup1_type);
	device_remove_file(dev, &dev_attr_pickup1_position);
	device_remove_file(dev, &dev_attr_pickup1_angle);
	device_remove_file(dev, &dev_attr_pickup1_level);
	device_remove_file(dev, &dev_attr_pickup2_enable);
	device_remove_file(dev, &dev_attr_pickup2_type);
	device_remove_file(dev, &dev_attr_pickup2_position);
	device_remove_file(dev, &dev_attr_pickup2_angle);
	device_remove_file(dev, &dev_attr_pickup2_level);
	device_remove_file(dev, &dev_attr_pickup_phase);
	device_remove_file(dev, &dev_attr_capacitance);
	device_remove_file(dev, &dev_attr_tone_resistance);
	device_remove_file(dev, &dev_attr_volume_resistance);
	device_remove_file(dev, &dev_attr_taper);
	device_remove_file(dev, &dev_attr_tone_dump);
	device_remove_file(dev, &dev_attr_save_tone);
	device_remove_file(dev, &dev_attr_volume_dump);
	device_remove_file(dev, &dev_attr_tuning_enable);
	device_remove_file(dev, &dev_attr_tuning6);
	device_remove_file(dev, &dev_attr_tuning5);
	device_remove_file(dev, &dev_attr_tuning4);
	device_remove_file(dev, &dev_attr_tuning3);
	device_remove_file(dev, &dev_attr_tuning2);
	device_remove_file(dev, &dev_attr_tuning1);
	device_remove_file(dev, &dev_attr_detune6);
	device_remove_file(dev, &dev_attr_detune5);
	device_remove_file(dev, &dev_attr_detune4);
	device_remove_file(dev, &dev_attr_detune3);
	device_remove_file(dev, &dev_attr_detune2);
	device_remove_file(dev, &dev_attr_detune1);
	device_remove_file(dev, &dev_attr_mix6);
	device_remove_file(dev, &dev_attr_mix5);
	device_remove_file(dev, &dev_attr_mix4);
	device_remove_file(dev, &dev_attr_mix3);
	device_remove_file(dev, &dev_attr_mix2);
	device_remove_file(dev, &dev_attr_mix1);
	device_remove_file(dev, &dev_attr_pickup_wiring);
}
EXPORT_SYMBOL(variax_remove_files);
