[kernel] r19798 - in dists/sid/linux/debian: . config/kernelarch-x86 patches patches/features/all/line6

Ben Hutchings benh at alioth.debian.org
Sun Feb 10 00:54:44 UTC 2013


Author: benh
Date: Sun Feb 10 00:54:43 2013
New Revision: 19798

Log:
[x86] sound: Enable LINE6_USB as module (Closes: #700211)

Apply upstream changes up to Linux 3.8-rc1, since they include many
important bug fixes and also remove a fair amount of crap.

Added:
   dists/sid/linux/debian/patches/features/all/line6/
   dists/sid/linux/debian/patches/features/all/line6/0001-line6-fix-memory-leaks-in-line6_init_midi.patch
   dists/sid/linux/debian/patches/features/all/line6/0002-staging-line6-add-Pod-HD300-support.patch
   dists/sid/linux/debian/patches/features/all/line6/0003-staging-line6-add-missing-MIDI-postprocessing-case-f.patch
   dists/sid/linux/debian/patches/features/all/line6/0004-staging-line6-use-smallest-iso-ep-packet-size.patch
   dists/sid/linux/debian/patches/features/all/line6/0005-staging-line6-alloc-free-buffers-in-hw_params-hw_fre.patch
   dists/sid/linux/debian/patches/features/all/line6/0006-Staging-line6-Use-kmemdup-rather-than-duplicating-it.patch
   dists/sid/linux/debian/patches/features/all/line6/0007-Staging-line6-NULL-dereference-in-dev_err.patch
   dists/sid/linux/debian/patches/features/all/line6/0008-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch
   dists/sid/linux/debian/patches/features/all/line6/0009-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch
   dists/sid/linux/debian/patches/features/all/line6/0010-staging-line6-Remove-obsolete-code.patch
   dists/sid/linux/debian/patches/features/all/line6/0011-staging-line6-refactor-device-information-and-add-PO.patch
   dists/sid/linux/debian/patches/features/all/line6/0012-staging-line6-fix-memory-leak-in-.hw_params.patch
   dists/sid/linux/debian/patches/features/all/line6/0013-staging-line6-fix-playback-urb-transfer-buffer-calcu.patch
   dists/sid/linux/debian/patches/features/all/line6/0014-staging-line6-eliminate-useless-index_out-variable.patch
   dists/sid/linux/debian/patches/features/all/line6/0015-staging-line6-eliminate-useless-NULL-checks.patch
   dists/sid/linux/debian/patches/features/all/line6/0016-staging-line6-wait-for-urbs-in-snd_line6_prepare.patch
   dists/sid/linux/debian/patches/features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch
   dists/sid/linux/debian/patches/features/all/line6/0018-staging-line6-removed-obsolete-code.patch
   dists/sid/linux/debian/patches/features/all/line6/0019-staging-line6-use-source-select-control-for-UX2-devi.patch
   dists/sid/linux/debian/patches/features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch
   dists/sid/linux/debian/patches/features/all/line6/0021-Staging-line6-remove-unneeded-initialization.patch
   dists/sid/linux/debian/patches/features/all/line6/0022-Staging-line6-only-allocate-a-buffer-if-it-is-needed.patch
   dists/sid/linux/debian/patches/features/all/line6/0023-Staging-line6-remove-teardown-code-from-module_exit-.patch
   dists/sid/linux/debian/patches/features/all/line6/0024-Staging-line6-use-module_usb_driver.patch
   dists/sid/linux/debian/patches/features/all/line6/0025-staging-line6-toneport.c-remove-err-usage.patch
   dists/sid/linux/debian/patches/features/all/line6/0026-staging-line6-midibuf.c-changed-printk-KERN_DEBUG-.-.patch
   dists/sid/linux/debian/patches/features/all/line6/0027-staging-line6-midi.c-Added-space-between-switch-and-.patch
   dists/sid/linux/debian/patches/features/all/line6/0028-staging-line6-pcm.c-Removed-trailing-whitespace.patch
   dists/sid/linux/debian/patches/features/all/line6/0029-staging-line6-config.h-Remove-CHECKPOINT-macro.patch
   dists/sid/linux/debian/patches/features/all/line6/0030-staging-line6-config.h-Delete-unused-header.patch
   dists/sid/linux/debian/patches/features/all/line6/0031-staging-line6-changed-interface-of-line6_transmit_pa.patch
   dists/sid/linux/debian/patches/features/all/line6/0032-staging-line6-Changed-some-strict_strtouls-to-kstrto.patch
   dists/sid/linux/debian/patches/features/all/line6/0033-staging-line6-changed-interface-of-line6_pod_transmi.patch
   dists/sid/linux/debian/patches/features/all/line6/0034-staging-line6-adjusted-interface-of-line6_send_progr.patch
   dists/sid/linux/debian/patches/features/all/line6/0035-staging-line6-changed-interface-of-pod_send_channel.patch
   dists/sid/linux/debian/patches/features/all/line6/0036-staging-line6-control.c-eliminate-strict_strtoul-in-.patch
   dists/sid/linux/debian/patches/features/all/line6/0037-staging-line6-Exchanged-strict_strtoul-with-kstrtou8.patch
   dists/sid/linux/debian/patches/features/all/line6/0038-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch
   dists/sid/linux/debian/patches/features/all/line6/0039-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch
   dists/sid/linux/debian/patches/features/all/line6/0040-staging-line6-pcm.c-Changed-simple_strtoul-to-kstrto.patch
   dists/sid/linux/debian/patches/features/all/line6/0041-staging-line6-variax.c-Eliminated-remaining-strict_s.patch
   dists/sid/linux/debian/patches/features/all/line6/0042-staging-line6-drop-unused-line6_devices-array.patch
   dists/sid/linux/debian/patches/features/all/line6/0043-staging-line6-drop-unused-line6_index-and-line6_id-a.patch
   dists/sid/linux/debian/patches/features/all/line6/0044-staging-line6-wrap-80-char-lines-in-capture.c.patch
   dists/sid/linux/debian/patches/features/all/line6/0045-staging-line6-fix-quoted-string-across-lines-in-midi.patch
   dists/sid/linux/debian/patches/features/all/line6/0046-staging-line6-shorten-comment-below-80-chars-in-pcm..patch
   dists/sid/linux/debian/patches/features/all/line6/0047-staging-line6-drop-trailing-whitespace-in-pcm.h.patch
   dists/sid/linux/debian/patches/features/all/line6/0048-staging-line6-wrap-lines-to-80-chars-in-playback.c.patch
   dists/sid/linux/debian/patches/features/all/line6/0049-staging-line6-replace-deprecated-strict_strtol-in-to.patch
   dists/sid/linux/debian/patches/features/all/line6/0050-staging-line6-wrap-lines-to-80-chars-in-usbdefs.h.patch
   dists/sid/linux/debian/patches/features/all/line6/0051-staging-line6-wrap-comment-to-80-chars-in-variax.c.patch
   dists/sid/linux/debian/patches/features/all/line6/0052-staging-line6-replace-DEBUG_MESSAGES-with-dev_dbg.patch
   dists/sid/linux/debian/patches/features/all/line6/0053-staging-line6-drop-unused-DEBUG_MESSAGES-macro.patch
   dists/sid/linux/debian/patches/features/all/line6/0054-staging-line6-drop-unused-CONFIG_LINE6_USB_DEBUG.patch
   dists/sid/linux/debian/patches/features/all/line6/0055-staging-line6-drop-control-URB-dumping-code.patch
   dists/sid/linux/debian/patches/features/all/line6/0056-staging-line6-drop-CONTROL-from-CONFIG_LINE6_USB_DUM.patch
   dists/sid/linux/debian/patches/features/all/line6/0057-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_CTRL.patch
   dists/sid/linux/debian/patches/features/all/line6/0058-staging-line6-drop-MIDI-dumping-code.patch
   dists/sid/linux/debian/patches/features/all/line6/0059-staging-line6-drop-MIDI-from-CONFIG_LINE6_USB_DUMP_A.patch
   dists/sid/linux/debian/patches/features/all/line6/0060-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_MIDI.patch
   dists/sid/linux/debian/patches/features/all/line6/0061-staging-line6-drop-channel-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0062-staging-line6-drop-clip-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0063-staging-line6-drop-unused-param_dirty-bitmap.patch
   dists/sid/linux/debian/patches/features/all/line6/0064-staging-line6-drop-dirty-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0065-staging-line6-drop-dump-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0066-staging-line6-drop-dump_buf-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0067-staging-line6-drop-monitor_level-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0068-staging-line6-change-monitor_level-type-ValueWait-in.patch
   dists/sid/linux/debian/patches/features/all/line6/0069-staging-line6-drop-name-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0070-staging-line6-drop-name_buf-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0071-staging-line6-drop-retrieve_amp_setup-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0072-staging-line6-drop-retrieve_channel-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0073-staging-line6-drop-retrieve_effects_setup-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0074-staging-line6-drop-store_amp_setup-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0075-staging-line6-drop-store_channel-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0076-staging-line6-drop-store_effects_setup-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0077-staging-line6-drop-routing-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0078-staging-line6-drop-tuner_freq-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0079-staging-line6-drop-tuner_note-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0080-staging-line6-drop-tuner_mute-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0081-staging-line6-drop-tuner_pitch-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0082-staging-line6-drop-finish-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0083-staging-line6-drop-midi_postprocess-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0084-staging-line6-drop-midi_mask_receive.patch
   dists/sid/linux/debian/patches/features/all/line6/0085-staging-line6-drop-midi_mask_transmit.patch
   dists/sid/linux/debian/patches/features/all/line6/0086-staging-line6-drop-midi_postprocess-flag.patch
   dists/sid/linux/debian/patches/features/all/line6/0087-staging-line6-drop-pod.c-raw-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0088-staging-line6-drop-tuner-param-filtering.patch
   dists/sid/linux/debian/patches/features/all/line6/0089-staging-line6-drop-variax-model-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0090-staging-line6-drop-variax-volume-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0091-staging-line6-drop-variax-tone-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0092-staging-line6-drop-variax-name-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0093-staging-line6-drop-variax-bank-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0094-staging-line6-drop-variax-dump-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0095-staging-line6-drop-variax-active-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0096-staging-line6-drop-variax-guitar-sysfs-attr.patch
   dists/sid/linux/debian/patches/features/all/line6/0097-staging-line6-drop-variax-raw-sysfs-attrs.patch
   dists/sid/linux/debian/patches/features/all/line6/0098-staging-line6-drop-CONFIG_LINE6_USB_RAW.patch
   dists/sid/linux/debian/patches/features/all/line6/0099-staging-line6-drop-amp-effects-dump-request-triggers.patch
   dists/sid/linux/debian/patches/features/all/line6/0100-staging-line6-drop-MIDI-parameter-sysfs-attrs.patch
   dists/sid/linux/debian/patches/features/all/line6/0101-staging-line6-drop-pod-prog_data-buffers.patch
   dists/sid/linux/debian/patches/features/all/line6/0102-staging-line6-drop-unused-pod-atomic_flags-field.patch
   dists/sid/linux/debian/patches/features/all/line6/0103-staging-line6-drop-variax-model_data-field.patch
   dists/sid/linux/debian/patches/features/all/line6/0104-staging-line6-drop-dump-requests-from-variax-startup.patch
   dists/sid/linux/debian/patches/features/all/line6/0105-staging-line6-drop-dump-requests-from-pod-startup.patch
   dists/sid/linux/debian/patches/features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch
Modified:
   dists/sid/linux/debian/changelog
   dists/sid/linux/debian/config/kernelarch-x86/config
   dists/sid/linux/debian/patches/series

Modified: dists/sid/linux/debian/changelog
==============================================================================
--- dists/sid/linux/debian/changelog	Sat Feb  9 17:04:43 2013	(r19797)
+++ dists/sid/linux/debian/changelog	Sun Feb 10 00:54:43 2013	(r19798)
@@ -128,6 +128,8 @@
       invert_brightness=1
   * [amd64] edac: Enable EDAC_SBRIDGE as module (Closes: #699283)
   * SCSI: Add virtio_scsi driver (Closes: #686636)
+  * [x86] sound: Enable LINE6_USB as module (Closes: #700211)
+    - Apply upstream changes up to Linux 3.8-rc1
 
   [ Aurelien Jarno ]
   * [armhf/vexpress] Add kernel udebs.

Modified: dists/sid/linux/debian/config/kernelarch-x86/config
==============================================================================
--- dists/sid/linux/debian/config/kernelarch-x86/config	Sat Feb  9 17:04:43 2013	(r19797)
+++ dists/sid/linux/debian/config/kernelarch-x86/config	Sun Feb 10 00:54:43 2013	(r19798)
@@ -1289,6 +1289,13 @@
 CONFIG_EASYCAP=m
 
 ##
+## file: drivers/staging/line6/Kconfig
+##
+CONFIG_LINE6_USB=m
+# CONFIG_LINE6_USB_DUMP_PCM is not set
+# CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set
+
+##
 ## file: drivers/staging/media/go7007/Kconfig
 ##
 # CONFIG_VIDEO_GO7007 is not set

Added: dists/sid/linux/debian/patches/features/all/line6/0001-line6-fix-memory-leaks-in-line6_init_midi.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0001-line6-fix-memory-leaks-in-line6_init_midi.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,41 @@
+From: Jesper Juhl <jj at chaosbits.net>
+Date: Mon, 24 Oct 2011 23:41:37 +0200
+Subject: [001/106] line6: fix memory leaks in line6_init_midi()
+
+commit 982d6ab50115025c63f4b9f7175614008c41d449 upstream.
+
+If the first call to line6_midibuf_init() fails we'll leak a little
+bit of memory. If the second call fails we'll leak a bit more. This
+happens when we return from the function and the local variable
+'line6midi' goes out of scope.
+
+Signed-off-by: Jesper Juhl <jj at chaosbits.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/midi.c |    9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
+index e554a2d..86c50cf 100644
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -391,12 +391,17 @@ int line6_init_midi(struct usb_line6 *line6)
+ 		return -ENOMEM;
+ 
+ 	err = line6_midibuf_init(&line6midi->midibuf_in, MIDI_BUFFER_SIZE, 0);
+-	if (err < 0)
++	if (err < 0) {
++		kfree(line6midi);
+ 		return err;
++	}
+ 
+ 	err = line6_midibuf_init(&line6midi->midibuf_out, MIDI_BUFFER_SIZE, 1);
+-	if (err < 0)
++	if (err < 0) {
++		kfree(line6midi->midibuf_in.buf);
++		kfree(line6midi);
+ 		return err;
++	}
+ 
+ 	line6midi->line6 = line6;
+ 	line6midi->midi_mask_transmit = 1;

Added: dists/sid/linux/debian/patches/features/all/line6/0002-staging-line6-add-Pod-HD300-support.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0002-staging-line6-add-Pod-HD300-support.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,354 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Wed, 23 Nov 2011 08:20:42 +0000
+Subject: [002/106] staging: line6: add Pod HD300 support
+
+commit 16dc10401133d16d13a5eea7da2a71d2080e32a1 upstream.
+
+The Pod HD device family uses new MIDI SysEx messages and therefore
+cannot reuse the existing Pod code.  Instead of hardcoding Pod HD MIDI
+messages into the driver, leave MIDI up to userspace.  This driver
+simply presents MIDI and pcm ALSA devices.
+
+This device is similar to the Pod except that it has 48 kHz audio and
+does not respond to Pod SysEx messages.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/Makefile  |    3 +-
+ drivers/staging/line6/driver.c  |   24 +++++-
+ drivers/staging/line6/pcm.c     |    1 +
+ drivers/staging/line6/podhd.c   |  158 +++++++++++++++++++++++++++++++++++++++
+ drivers/staging/line6/podhd.h   |   30 ++++++++
+ drivers/staging/line6/usbdefs.h |    2 +
+ 6 files changed, 216 insertions(+), 2 deletions(-)
+ create mode 100644 drivers/staging/line6/podhd.c
+ create mode 100644 drivers/staging/line6/podhd.h
+
+diff --git a/drivers/staging/line6/Makefile b/drivers/staging/line6/Makefile
+index de6bd12..34a2dda 100644
+--- a/drivers/staging/line6/Makefile
++++ b/drivers/staging/line6/Makefile
+@@ -12,4 +12,5 @@ line6usb-y := 		\
+ 		playback.o	\
+ 		pod.o		\
+ 		toneport.o	\
+-		variax.o
++		variax.o	\
++		podhd.o
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index 851b762..a71a5af 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -21,6 +21,7 @@
+ #include "midi.h"
+ #include "playback.h"
+ #include "pod.h"
++#include "podhd.h"
+ #include "revision.h"
+ #include "toneport.h"
+ #include "usbdefs.h"
+@@ -49,6 +50,7 @@ static const struct usb_device_id line6_id_table[] = {
+ 	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_TONEPORT_UX1)},
+ 	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_TONEPORT_UX2)},
+ 	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_VARIAX)},
++	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD300)},
+ 	{},
+ };
+ 
+@@ -72,7 +74,8 @@ static struct line6_properties line6_properties_table[] = {
+ 	{ "TonePortGX",    "TonePort GX",      LINE6_BIT_TONEPORT_GX,   LINE6_BIT_PCM               },
+ 	{ "TonePortUX1",   "TonePort UX1",     LINE6_BIT_TONEPORT_UX1,  LINE6_BIT_PCM               },
+ 	{ "TonePortUX2",   "TonePort UX2",     LINE6_BIT_TONEPORT_UX2,  LINE6_BIT_PCM               },
+-	{ "Variax",        "Variax Workbench", LINE6_BIT_VARIAX,        LINE6_BIT_CONTROL           }
++	{ "Variax",        "Variax Workbench", LINE6_BIT_VARIAX,        LINE6_BIT_CONTROL           },
++	{ "PODHD300",      "POD HD300",        LINE6_BIT_PODHD300,      LINE6_BIT_CONTROL_PCM_HWMON },
+ };
+ /* *INDENT-ON* */
+ 
+@@ -437,6 +440,9 @@ static void line6_data_received(struct urb *urb)
+ 						  line6);
+ 			break;
+ 
++		case LINE6_DEVID_PODHD300:
++			break; /* let userspace handle MIDI */
++
+ 		case LINE6_DEVID_PODXTLIVE:
+ 			switch (line6->interface_number) {
+ 			case PODXTLIVE_INTERFACE_POD:
+@@ -812,6 +818,7 @@ static int line6_probe(struct usb_interface *interface,
+ 	case LINE6_DEVID_BASSPODXTPRO:
+ 	case LINE6_DEVID_PODXT:
+ 	case LINE6_DEVID_PODXTPRO:
++	case LINE6_DEVID_PODHD300:
+ 		alternate = 5;
+ 		break;
+ 
+@@ -865,6 +872,12 @@ static int line6_probe(struct usb_interface *interface,
+ 		ep_write = 0x03;
+ 		break;
+ 
++	case LINE6_DEVID_PODHD300:
++		size = sizeof(struct usb_line6_podhd);
++		ep_read = 0x84;
++		ep_write = 0x03;
++		break;
++
+ 	case LINE6_DEVID_POCKETPOD:
+ 		size = sizeof(struct usb_line6_pod);
+ 		ep_read = 0x82;
+@@ -1017,6 +1030,11 @@ static int line6_probe(struct usb_interface *interface,
+ 		ret = line6_pod_init(interface, (struct usb_line6_pod *)line6);
+ 		break;
+ 
++	case LINE6_DEVID_PODHD300:
++		ret = line6_podhd_init(interface,
++				       (struct usb_line6_podhd *)line6);
++		break;
++
+ 	case LINE6_DEVID_PODXTLIVE:
+ 		switch (interface_number) {
+ 		case PODXTLIVE_INTERFACE_POD:
+@@ -1139,6 +1157,10 @@ static void line6_disconnect(struct usb_interface *interface)
+ 			line6_pod_disconnect(interface);
+ 			break;
+ 
++		case LINE6_DEVID_PODHD300:
++			line6_podhd_disconnect(interface);
++			break;
++
+ 		case LINE6_DEVID_PODXTLIVE:
+ 			switch (interface_number) {
+ 			case PODXTLIVE_INTERFACE_POD:
+diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
+index 9d4c8a6..f56c642 100644
+--- a/drivers/staging/line6/pcm.c
++++ b/drivers/staging/line6/pcm.c
+@@ -403,6 +403,7 @@ int line6_init_pcm(struct usb_line6 *line6,
+ 	case LINE6_DEVID_PODXT:
+ 	case LINE6_DEVID_PODXTLIVE:
+ 	case LINE6_DEVID_PODXTPRO:
++	case LINE6_DEVID_PODHD300:
+ 		ep_read = 0x82;
+ 		ep_write = 0x01;
+ 		break;
+diff --git a/drivers/staging/line6/podhd.c b/drivers/staging/line6/podhd.c
+new file mode 100644
+index 0000000..6c0f7f2
+--- /dev/null
++++ b/drivers/staging/line6/podhd.c
+@@ -0,0 +1,158 @@
++/*
++ * Line6 Pod HD
++ *
++ * Copyright (C) 2011 Stefan Hajnoczi <stefanha at gmail.com>
++ *
++ *	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 <sound/core.h>
++#include <sound/pcm.h>
++
++#include "audio.h"
++#include "driver.h"
++#include "pcm.h"
++#include "podhd.h"
++
++#define PODHD_BYTES_PER_FRAME 6	/* 24bit audio (stereo) */
++
++static struct snd_ratden podhd_ratden = {
++	.num_min = 48000,
++	.num_max = 48000,
++	.num_step = 1,
++	.den = 1,
++};
++
++static struct line6_pcm_properties podhd_pcm_properties = {
++	.snd_line6_playback_hw = {
++				  .info = (SNDRV_PCM_INFO_MMAP |
++					   SNDRV_PCM_INFO_INTERLEAVED |
++					   SNDRV_PCM_INFO_BLOCK_TRANSFER |
++					   SNDRV_PCM_INFO_MMAP_VALID |
++					   SNDRV_PCM_INFO_PAUSE |
++#ifdef CONFIG_PM
++					   SNDRV_PCM_INFO_RESUME |
++#endif
++					   SNDRV_PCM_INFO_SYNC_START),
++				  .formats = SNDRV_PCM_FMTBIT_S24_3LE,
++				  .rates = SNDRV_PCM_RATE_48000,
++				  .rate_min = 48000,
++				  .rate_max = 48000,
++				  .channels_min = 2,
++				  .channels_max = 2,
++				  .buffer_bytes_max = 60000,
++				  .period_bytes_min = 64,
++				  .period_bytes_max = 8192,
++				  .periods_min = 1,
++				  .periods_max = 1024},
++	.snd_line6_capture_hw = {
++				 .info = (SNDRV_PCM_INFO_MMAP |
++					  SNDRV_PCM_INFO_INTERLEAVED |
++					  SNDRV_PCM_INFO_BLOCK_TRANSFER |
++					  SNDRV_PCM_INFO_MMAP_VALID |
++#ifdef CONFIG_PM
++					  SNDRV_PCM_INFO_RESUME |
++#endif
++					  SNDRV_PCM_INFO_SYNC_START),
++				 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
++				 .rates = SNDRV_PCM_RATE_48000,
++				 .rate_min = 48000,
++				 .rate_max = 48000,
++				 .channels_min = 2,
++				 .channels_max = 2,
++				 .buffer_bytes_max = 60000,
++				 .period_bytes_min = 64,
++				 .period_bytes_max = 8192,
++				 .periods_min = 1,
++				 .periods_max = 1024},
++	.snd_line6_rates = {
++			    .nrats = 1,
++			    .rats = &podhd_ratden},
++	.bytes_per_frame = PODHD_BYTES_PER_FRAME
++};
++
++/*
++	POD HD destructor.
++*/
++static void podhd_destruct(struct usb_interface *interface)
++{
++	struct usb_line6_podhd *podhd = usb_get_intfdata(interface);
++	struct usb_line6 *line6;
++
++	if (podhd == NULL)
++		return;
++	line6 = &podhd->line6;
++	if (line6 == NULL)
++		return;
++	line6_cleanup_audio(line6);
++}
++
++/*
++	Try to init POD HD device.
++*/
++static int podhd_try_init(struct usb_interface *interface,
++			  struct usb_line6_podhd *podhd)
++{
++	int err;
++	struct usb_line6 *line6 = &podhd->line6;
++
++	if ((interface == NULL) || (podhd == NULL))
++		return -ENODEV;
++
++	/* initialize audio system: */
++	err = line6_init_audio(line6);
++	if (err < 0)
++		return err;
++
++	/* initialize MIDI subsystem: */
++	err = line6_init_midi(line6);
++	if (err < 0)
++		return err;
++
++	/* initialize PCM subsystem: */
++	err = line6_init_pcm(line6, &podhd_pcm_properties);
++	if (err < 0)
++		return err;
++
++	/* register USB audio system: */
++	err = line6_register_audio(line6);
++	return err;
++}
++
++/*
++	Init POD HD device (and clean up in case of failure).
++*/
++int line6_podhd_init(struct usb_interface *interface,
++		     struct usb_line6_podhd *podhd)
++{
++	int err = podhd_try_init(interface, podhd);
++
++	if (err < 0)
++		podhd_destruct(interface);
++
++	return err;
++}
++
++/*
++	POD HD device disconnected.
++*/
++void line6_podhd_disconnect(struct usb_interface *interface)
++{
++	struct usb_line6_podhd *podhd;
++
++	if (interface == NULL)
++		return;
++	podhd = usb_get_intfdata(interface);
++
++	if (podhd != NULL) {
++		struct snd_line6_pcm *line6pcm = podhd->line6.line6pcm;
++
++		if (line6pcm != NULL)
++			line6_pcm_disconnect(line6pcm);
++	}
++
++	podhd_destruct(interface);
++}
+diff --git a/drivers/staging/line6/podhd.h b/drivers/staging/line6/podhd.h
+new file mode 100644
+index 0000000..652f740
+--- /dev/null
++++ b/drivers/staging/line6/podhd.h
+@@ -0,0 +1,30 @@
++/*
++ * Line6 Pod HD
++ *
++ * Copyright (C) 2011 Stefan Hajnoczi <stefanha at gmail.com>
++ *
++ *	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.
++ *
++ */
++
++#ifndef PODHD_H
++#define PODHD_H
++
++#include <linux/usb.h>
++
++#include "driver.h"
++
++struct usb_line6_podhd {
++	/**
++		Generic Line6 USB data.
++	*/
++	struct usb_line6 line6;
++};
++
++extern void line6_podhd_disconnect(struct usb_interface *interface);
++extern int line6_podhd_init(struct usb_interface *interface,
++			    struct usb_line6_podhd *podhd);
++
++#endif /* PODHD_H */
+diff --git a/drivers/staging/line6/usbdefs.h b/drivers/staging/line6/usbdefs.h
+index c6dffe6..4e13364 100644
+--- a/drivers/staging/line6/usbdefs.h
++++ b/drivers/staging/line6/usbdefs.h
+@@ -36,6 +36,7 @@
+ #define LINE6_DEVID_TONEPORT_UX1  0x4141
+ #define LINE6_DEVID_TONEPORT_UX2  0x4142
+ #define LINE6_DEVID_VARIAX        0x534d
++#define LINE6_DEVID_PODHD300      0x5057
+ 
+ #define LINE6_BIT_BASSPODXT       (1 <<  0)
+ #define LINE6_BIT_BASSPODXTLIVE   (1 <<  1)
+@@ -54,6 +55,7 @@
+ #define LINE6_BIT_TONEPORT_UX1    (1 << 14)
+ #define LINE6_BIT_TONEPORT_UX2    (1 << 15)
+ #define LINE6_BIT_VARIAX          (1 << 16)
++#define LINE6_BIT_PODHD300        (1 << 17)
+ 
+ #define LINE6_BITS_PRO		(LINE6_BIT_BASSPODXTPRO | \
+ 				 LINE6_BIT_PODXTPRO)

Added: dists/sid/linux/debian/patches/features/all/line6/0003-staging-line6-add-missing-MIDI-postprocessing-case-f.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0003-staging-line6-add-missing-MIDI-postprocessing-case-f.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,31 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Wed, 23 Nov 2011 08:20:43 +0000
+Subject: [003/106] staging: line6: add missing MIDI postprocessing case for
+ POD HD300
+
+commit 1dc403ffecae26ae52414488e326761a9ae10de7 upstream.
+
+The driver leaves MIDI processing up to userspace for the POD HD300
+device.  Add a missing case statement to skip MIDI postprocessing in the
+driver.  This change has no effect other than silencing a printk:
+
+  line6usb driver bug: missing case in linux/drivers/staging/line6/midi.c:179
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/midi.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
+index 86c50cf..ed5577f 100644
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -173,6 +173,7 @@ static int send_midi_async(struct usb_line6 *line6, unsigned char *data,
+ 		break;
+ 
+ 	case LINE6_DEVID_VARIAX:
++	case LINE6_DEVID_PODHD300:
+ 		break;
+ 
+ 	default:

Added: dists/sid/linux/debian/patches/features/all/line6/0004-staging-line6-use-smallest-iso-ep-packet-size.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0004-staging-line6-use-smallest-iso-ep-packet-size.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,44 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Wed, 23 Nov 2011 08:20:44 +0000
+Subject: [004/106] staging: line6: use smallest iso ep packet size
+
+commit 3b08db37cb04a80dccac8c2d7b03690b5f179487 upstream.
+
+The POD HD300 isochronous endpoints have different max packet sizes for
+read and write.  Using the read endpoint max packet size may be too
+large for the write endpoint.  Instead we should use the minimum of both
+endpoints to be sure the size is acceptable.
+
+In theory we could decouple read and write packet sizes but the driver
+currently uses a single size which I chose not to mess with since other
+features like software monitoring may depend on a single packet size for
+both endpoints.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/pcm.c |   11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
+index f56c642..ae98434 100644
+--- a/drivers/staging/line6/pcm.c
++++ b/drivers/staging/line6/pcm.c
+@@ -452,9 +452,14 @@ int line6_init_pcm(struct usb_line6 *line6,
+ 	line6pcm->line6 = line6;
+ 	line6pcm->ep_audio_read = ep_read;
+ 	line6pcm->ep_audio_write = ep_write;
+-	line6pcm->max_packet_size = usb_maxpacket(line6->usbdev,
+-						  usb_rcvintpipe(line6->usbdev,
+-								 ep_read), 0);
++
++	/* Read and write buffers are sized identically, so choose minimum */
++	line6pcm->max_packet_size = min(
++			usb_maxpacket(line6->usbdev,
++				usb_rcvisocpipe(line6->usbdev, ep_read), 0),
++			usb_maxpacket(line6->usbdev,
++				usb_sndisocpipe(line6->usbdev, ep_write), 1));
++
+ 	line6pcm->properties = properties;
+ 	line6->line6pcm = line6pcm;
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0005-staging-line6-alloc-free-buffers-in-hw_params-hw_fre.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0005-staging-line6-alloc-free-buffers-in-hw_params-hw_fre.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,161 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Wed, 23 Nov 2011 08:20:45 +0000
+Subject: [005/106] staging: line6: alloc/free buffers in hw_params/hw_free
+
+commit 140e28b83c4a31831cbf293d9cab20c603821202 upstream.
+
+It is unsafe to free buffers in line6_pcm_stop(), which is not allowed
+to sleep, since urbs cannot be killed completely there and only
+unlinked.  This means I/O may still be in progress and the URB
+completion function still gets invoked.  This may result in memory
+corruption when buffer_in is freed but I/O is still pending.
+
+Additionally, line6_pcm_start() is not supposed to sleep so it should
+not use kmalloc(GFP_KERNEL).
+
+These issues can be resolved by performing buffer allocation/freeing in
+the .hw_params/.hw_free callbacks instead.  The ALSA documentation also
+recommends doing buffer allocation/freeing in these callbacks.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/capture.c  |   15 +++++++++++++++
+ drivers/staging/line6/pcm.c      |   24 ------------------------
+ drivers/staging/line6/playback.c |   15 +++++++++++++++
+ 3 files changed, 30 insertions(+), 24 deletions(-)
+
+diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c
+index 9647154..d9da7ed 100644
+--- a/drivers/staging/line6/capture.c
++++ b/drivers/staging/line6/capture.c
+@@ -9,6 +9,7 @@
+  *
+  */
+ 
++#include <linux/slab.h>
+ #include <sound/core.h>
+ #include <sound/pcm.h>
+ #include <sound/pcm_params.h>
+@@ -319,6 +320,15 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream,
+ 	}
+ 	/* -- [FD] end */
+ 
++	line6pcm->buffer_in = kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
++				      line6pcm->max_packet_size, GFP_KERNEL);
++
++	if (!line6pcm->buffer_in) {
++		dev_err(line6pcm->line6->ifcdev,
++			"cannot malloc capture buffer\n");
++		return -ENOMEM;
++	}
++
+ 	ret = snd_pcm_lib_malloc_pages(substream,
+ 				       params_buffer_bytes(hw_params));
+ 	if (ret < 0)
+@@ -331,6 +341,11 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream,
+ /* hw_free capture callback */
+ static int snd_line6_capture_hw_free(struct snd_pcm_substream *substream)
+ {
++	struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
++
++	line6_unlink_wait_clear_audio_in_urbs(line6pcm);
++	kfree(line6pcm->buffer_in);
++	line6pcm->buffer_in = NULL;
+ 	return snd_pcm_lib_free_pages(substream);
+ }
+ 
+diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
+index ae98434..2e4e164 100644
+--- a/drivers/staging/line6/pcm.c
++++ b/drivers/staging/line6/pcm.c
+@@ -119,16 +119,6 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels)
+ 		if (line6pcm->active_urb_in | line6pcm->unlink_urb_in)
+ 			return -EBUSY;
+ 
+-		line6pcm->buffer_in =
+-		    kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
+-			    line6pcm->max_packet_size, GFP_KERNEL);
+-
+-		if (!line6pcm->buffer_in) {
+-			dev_err(line6pcm->line6->ifcdev,
+-				"cannot malloc capture buffer\n");
+-			return -ENOMEM;
+-		}
+-
+ 		line6pcm->count_in = 0;
+ 		line6pcm->prev_fsize = 0;
+ 		err = line6_submit_audio_in_all_urbs(line6pcm);
+@@ -147,16 +137,6 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels)
+ 		if (line6pcm->active_urb_out | line6pcm->unlink_urb_out)
+ 			return -EBUSY;
+ 
+-		line6pcm->buffer_out =
+-		    kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
+-			    line6pcm->max_packet_size, GFP_KERNEL);
+-
+-		if (!line6pcm->buffer_out) {
+-			dev_err(line6pcm->line6->ifcdev,
+-				"cannot malloc playback buffer\n");
+-			return -ENOMEM;
+-		}
+-
+ 		line6pcm->count_out = 0;
+ 		err = line6_submit_audio_out_all_urbs(line6pcm);
+ 
+@@ -178,15 +158,11 @@ int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels)
+ 	if (((flags_old & MASK_CAPTURE) != 0) &&
+ 	    ((flags_new & MASK_CAPTURE) == 0)) {
+ 		line6_unlink_audio_in_urbs(line6pcm);
+-		kfree(line6pcm->buffer_in);
+-		line6pcm->buffer_in = NULL;
+ 	}
+ 
+ 	if (((flags_old & MASK_PLAYBACK) != 0) &&
+ 	    ((flags_new & MASK_PLAYBACK) == 0)) {
+ 		line6_unlink_audio_out_urbs(line6pcm);
+-		kfree(line6pcm->buffer_out);
+-		line6pcm->buffer_out = NULL;
+ 	}
+ #if LINE6_BACKUP_MONITOR_SIGNAL
+ 	kfree(line6pcm->prev_fbuf);
+diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c
+index 10c5438..b344527 100644
+--- a/drivers/staging/line6/playback.c
++++ b/drivers/staging/line6/playback.c
+@@ -9,6 +9,7 @@
+  *
+  */
+ 
++#include <linux/slab.h>
+ #include <sound/core.h>
+ #include <sound/pcm.h>
+ #include <sound/pcm_params.h>
+@@ -469,6 +470,15 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream,
+ 	}
+ 	/* -- [FD] end */
+ 
++	line6pcm->buffer_out = kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
++				       line6pcm->max_packet_size, GFP_KERNEL);
++
++	if (!line6pcm->buffer_out) {
++		dev_err(line6pcm->line6->ifcdev,
++			"cannot malloc playback buffer\n");
++		return -ENOMEM;
++	}
++
+ 	ret = snd_pcm_lib_malloc_pages(substream,
+ 				       params_buffer_bytes(hw_params));
+ 	if (ret < 0)
+@@ -481,6 +491,11 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream,
+ /* hw_free playback callback */
+ static int snd_line6_playback_hw_free(struct snd_pcm_substream *substream)
+ {
++	struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
++
++	line6_unlink_wait_clear_audio_out_urbs(line6pcm);
++	kfree(line6pcm->buffer_out);
++	line6pcm->buffer_out = NULL;
+ 	return snd_pcm_lib_free_pages(substream);
+ }
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0006-Staging-line6-Use-kmemdup-rather-than-duplicating-it.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0006-Staging-line6-Use-kmemdup-rather-than-duplicating-it.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,42 @@
+From: Thomas Meyer <thomas at m3y3r.de>
+Date: Tue, 8 Nov 2011 20:40:26 +0100
+Subject: [006/106] Staging: line6: Use kmemdup rather than duplicating its
+ implementation
+
+commit cff863871e748d072cae002fb13e692436b0200a upstream.
+
+ Use kmemdup rather than duplicating its implementation
+
+ The semantic patch that makes this change is available
+ in scripts/coccinelle/api/memdup.cocci.
+
+ More information about semantic patching is available at
+ http://coccinelle.lip6.fr/
+
+Signed-off-by: Thomas Meyer <thomas at m3y3r.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/midi.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
+index ed5577f..7f1e90e 100644
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -135,7 +135,7 @@ static int send_midi_async(struct usb_line6 *line6, unsigned char *data,
+ 	line6_write_hexdump(line6, 'S', data, length);
+ #endif
+ 
+-	transfer_buffer = kmalloc(length, GFP_ATOMIC);
++	transfer_buffer = kmemdup(data, length, GFP_ATOMIC);
+ 
+ 	if (transfer_buffer == NULL) {
+ 		usb_free_urb(urb);
+@@ -143,7 +143,6 @@ static int send_midi_async(struct usb_line6 *line6, unsigned char *data,
+ 		return -ENOMEM;
+ 	}
+ 
+-	memcpy(transfer_buffer, data, length);
+ 	usb_fill_int_urb(urb, line6->usbdev,
+ 			 usb_sndbulkpipe(line6->usbdev,
+ 					 line6->ep_control_write),

Added: dists/sid/linux/debian/patches/features/all/line6/0007-Staging-line6-NULL-dereference-in-dev_err.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0007-Staging-line6-NULL-dereference-in-dev_err.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,43 @@
+From: Dan Carpenter <dan.carpenter at oracle.com>
+Date: Wed, 30 Nov 2011 11:43:41 +0300
+Subject: [007/106] Staging: line6: NULL dereference in dev_err()
+
+commit 4bd8b4de6f806f1429d23a2f6e2549ed0e8bc49b upstream.
+
+"line6" hasn't been set at this point and we should be using
+&interface->dev instead.
+
+Gcc would have complained about this if it weren't for the fact that we
+initialized line6 to NULL.  I removed the initialization.
+
+Signed-off-by: Dan Carpenter <dan.carpenter at oracle.com>
+Reviewed-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/driver.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index a71a5af..a2f48ee 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -726,8 +726,8 @@ static int line6_probe(struct usb_interface *interface,
+ 		       const struct usb_device_id *id)
+ {
+ 	int devtype;
+-	struct usb_device *usbdev = NULL;
+-	struct usb_line6 *line6 = NULL;
++	struct usb_device *usbdev;
++	struct usb_line6 *line6;
+ 	const struct line6_properties *properties;
+ 	int devnum;
+ 	int interface_number, alternate = 0;
+@@ -936,7 +936,7 @@ static int line6_probe(struct usb_interface *interface,
+ 	}
+ 
+ 	if (size == 0) {
+-		dev_err(line6->ifcdev,
++		dev_err(&interface->dev,
+ 			"driver bug: interface data size not set\n");
+ 		ret = -ENODEV;
+ 		goto err_put;

Added: dists/sid/linux/debian/patches/features/all/line6/0008-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0008-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,50 @@
+From: Andor Daam <andor.daam at googlemail.com>
+Date: Mon, 5 Dec 2011 10:09:25 +0100
+Subject: [008/106] Staging: line6/midi.c: Fixed call of obsolete function
+ strict_strtoul
+
+commit 4d85fae04f23ebbdbbb11061b8eec48082ecdc43 upstream.
+
+The function strict_strtoul is obsolete and should be replaced by the
+new kstrto* functions.
+
+The variable midi_mask_transmit is only used as unsigned short and the
+datatypes of all affected variables were adjusted accordingly.
+
+Signed-off-by: Andor Daam <andor.daam at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/midi.c |    4 ++--
+ drivers/staging/line6/midi.h |    2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
+index 7f1e90e..3d1ada6 100644
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -307,10 +307,10 @@ static ssize_t midi_set_midi_mask_transmit(struct device *dev,
+ {
+ 	struct usb_interface *interface = to_usb_interface(dev);
+ 	struct usb_line6 *line6 = usb_get_intfdata(interface);
+-	unsigned long value;
++	unsigned short value;
+ 	int ret;
+ 
+-	ret = strict_strtoul(buf, 10, &value);
++	ret = kstrtou16(buf, 10, &value);
+ 	if (ret)
+ 		return ret;
+ 
+diff --git a/drivers/staging/line6/midi.h b/drivers/staging/line6/midi.h
+index b73a025..2c0a663 100644
+--- a/drivers/staging/line6/midi.h
++++ b/drivers/staging/line6/midi.h
+@@ -57,7 +57,7 @@ struct snd_line6_midi {
+ 	/**
+ 		 Bit mask for output MIDI channels.
+ 	*/
+-	int midi_mask_transmit;
++	unsigned short midi_mask_transmit;
+ 
+ 	/**
+ 		 Bit mask for input MIDI channels.

Added: dists/sid/linux/debian/patches/features/all/line6/0009-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0009-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,51 @@
+From: Andor Daam <andor.daam at googlemail.com>
+Date: Mon, 5 Dec 2011 10:10:37 +0100
+Subject: [009/106] Staging: line6/midi.c: Fixed call of obsolete function
+ strict_strtoul
+
+commit 251c3948808046c39359658fa2faffff45b825d3 upstream.
+
+The obsolete function strict_strtoul should be replaced by the kstrto*
+functions.
+
+In this context kstrtou16 should be use, as midi_mask_receive is only
+used as unsigned short. All corresponding datatypes were adapted
+accordingly.
+
+Signed-off-by: Andor Daam <andor.daam at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/midi.c |    4 ++--
+ drivers/staging/line6/midi.h |    2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
+index 3d1ada6..3013fb5 100644
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -339,10 +339,10 @@ static ssize_t midi_set_midi_mask_receive(struct device *dev,
+ {
+ 	struct usb_interface *interface = to_usb_interface(dev);
+ 	struct usb_line6 *line6 = usb_get_intfdata(interface);
+-	unsigned long value;
++	unsigned short value;
+ 	int ret;
+ 
+-	ret = strict_strtoul(buf, 10, &value);
++	ret = kstrtou16(buf, 10, &value);
+ 	if (ret)
+ 		return ret;
+ 
+diff --git a/drivers/staging/line6/midi.h b/drivers/staging/line6/midi.h
+index 2c0a663..4a9e9f9 100644
+--- a/drivers/staging/line6/midi.h
++++ b/drivers/staging/line6/midi.h
+@@ -62,7 +62,7 @@ struct snd_line6_midi {
+ 	/**
+ 		 Bit mask for input MIDI channels.
+ 	*/
+-	int midi_mask_receive;
++	unsigned short midi_mask_receive;
+ 
+ 	/**
+ 		 Buffer for incoming MIDI stream.

Added: dists/sid/linux/debian/patches/features/all/line6/0010-staging-line6-Remove-obsolete-code.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0010-staging-line6-Remove-obsolete-code.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,106 @@
+From: Markus Grabner <grabner at icg.tugraz.at>
+Date: Mon, 5 Dec 2011 23:51:52 +0100
+Subject: [010/106] staging/line6: Remove obsolete code
+
+commit 3b35de4126f03d8df089c5fc908c40bb91485f6c upstream.
+
+This patch removes experimental code which is no longer used.
+
+Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/capture.c  |    4 ----
+ drivers/staging/line6/pcm.c      |   17 -----------------
+ drivers/staging/line6/pcm.h      |    3 ---
+ drivers/staging/line6/playback.c |    8 --------
+ 4 files changed, 32 deletions(-)
+
+diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c
+index d9da7ed..ba441ed 100644
+--- a/drivers/staging/line6/capture.c
++++ b/drivers/staging/line6/capture.c
+@@ -244,11 +244,7 @@ static void audio_in_callback(struct urb *urb)
+ 		length += fsize;
+ 
+ 		/* the following assumes LINE6_ISO_PACKETS == 1: */
+-#if LINE6_BACKUP_MONITOR_SIGNAL
+-		memcpy(line6pcm->prev_fbuf, fbuf, fsize);
+-#else
+ 		line6pcm->prev_fbuf = fbuf;
+-#endif
+ 		line6pcm->prev_fsize = fsize;
+ 
+ #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
+index 2e4e164..a70c087 100644
+--- a/drivers/staging/line6/pcm.c
++++ b/drivers/staging/line6/pcm.c
+@@ -93,21 +93,7 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels)
+ 	unsigned long flags_new = flags_old | channels;
+ 	int err = 0;
+ 
+-#if LINE6_BACKUP_MONITOR_SIGNAL
+-	if (!(line6pcm->line6->properties->capabilities & LINE6_BIT_HWMON)) {
+-		line6pcm->prev_fbuf =
+-		    kmalloc(LINE6_ISO_PACKETS * line6pcm->max_packet_size,
+-			    GFP_KERNEL);
+-
+-		if (!line6pcm->prev_fbuf) {
+-			dev_err(line6pcm->line6->ifcdev,
+-				"cannot malloc monitor buffer\n");
+-			return -ENOMEM;
+-		}
+-	}
+-#else
+ 	line6pcm->prev_fbuf = NULL;
+-#endif
+ 
+ 	if (((flags_old & MASK_CAPTURE) == 0) &&
+ 	    ((flags_new & MASK_CAPTURE) != 0)) {
+@@ -164,9 +150,6 @@ int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels)
+ 	    ((flags_new & MASK_PLAYBACK) == 0)) {
+ 		line6_unlink_audio_out_urbs(line6pcm);
+ 	}
+-#if LINE6_BACKUP_MONITOR_SIGNAL
+-	kfree(line6pcm->prev_fbuf);
+-#endif
+ 
+ 	return 0;
+ }
+diff --git a/drivers/staging/line6/pcm.h b/drivers/staging/line6/pcm.h
+index 77055b3..05f4ef3 100644
+--- a/drivers/staging/line6/pcm.h
++++ b/drivers/staging/line6/pcm.h
+@@ -39,9 +39,6 @@
+ #define LINE6_IMPULSE_DEFAULT_PERIOD 100
+ #endif
+ 
+-#define LINE6_BACKUP_MONITOR_SIGNAL 0
+-#define LINE6_REUSE_DMA_AREA_FOR_PLAYBACK 0
+-
+ /*
+ 	Get substream from Line6 PCM data structure
+ */
+diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c
+index b344527..e495b32 100644
+--- a/drivers/staging/line6/playback.c
++++ b/drivers/staging/line6/playback.c
+@@ -223,18 +223,10 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+ 			} else
+ 				dev_err(line6pcm->line6->ifcdev, "driver bug: len = %d\n", len);	/* this is somewhat paranoid */
+ 		} else {
+-#if LINE6_REUSE_DMA_AREA_FOR_PLAYBACK
+-			/* set the buffer pointer */
+-			urb_out->transfer_buffer =
+-			    runtime->dma_area +
+-			    line6pcm->pos_out * bytes_per_frame;
+-#else
+-			/* copy data */
+ 			memcpy(urb_out->transfer_buffer,
+ 			       runtime->dma_area +
+ 			       line6pcm->pos_out * bytes_per_frame,
+ 			       urb_out->transfer_buffer_length);
+-#endif
+ 		}
+ 
+ 		line6pcm->pos_out += urb_frames;

Added: dists/sid/linux/debian/patches/features/all/line6/0011-staging-line6-refactor-device-information-and-add-PO.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0011-staging-line6-refactor-device-information-and-add-PO.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,324 @@
+From: Markus Grabner <grabner at icg.tugraz.at>
+Date: Mon, 5 Dec 2011 23:51:53 +0100
+Subject: [011/106] staging/line6: refactor device information and add POD HD
+ 500
+
+commit 4c6fb5fc050a4430363d92994132fffa6776c9d4 upstream.
+
+This patch refactors the device information code and adds preliminary support for the POD HD 500 device.
+
+Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/driver.c  |   50 +++++++++++++--------
+ drivers/staging/line6/driver.h  |   10 ++---
+ drivers/staging/line6/midi.c    |   16 ++++++-
+ drivers/staging/line6/pcm.c     |    1 +
+ drivers/staging/line6/usbdefs.h |   93 ++++++++++++++++++++++++---------------
+ 5 files changed, 109 insertions(+), 61 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index a2f48ee..6a1959e 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -38,6 +38,8 @@ static const struct usb_device_id line6_id_table[] = {
+ 	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_BASSPODXTPRO)},
+ 	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_GUITARPORT)},
+ 	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_POCKETPOD)},
++	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD300)},
++	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD500)},
+ 	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODSTUDIO_GX)},
+ 	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODSTUDIO_UX1)},
+ 	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODSTUDIO_UX2)},
+@@ -50,7 +52,6 @@ static const struct usb_device_id line6_id_table[] = {
+ 	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_TONEPORT_UX1)},
+ 	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_TONEPORT_UX2)},
+ 	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_VARIAX)},
+-	{USB_DEVICE(LINE6_VENDOR_ID, LINE6_DEVID_PODHD300)},
+ 	{},
+ };
+ 
+@@ -58,24 +59,25 @@ MODULE_DEVICE_TABLE(usb, line6_id_table);
+ 
+ /* *INDENT-OFF* */
+ static struct line6_properties line6_properties_table[] = {
+-	{ "BassPODxt",     "BassPODxt",        LINE6_BIT_BASSPODXT,     LINE6_BIT_CONTROL_PCM_HWMON },
+-	{ "BassPODxtLive", "BassPODxt Live",   LINE6_BIT_BASSPODXTLIVE, LINE6_BIT_CONTROL_PCM_HWMON },
+-	{ "BassPODxtPro",  "BassPODxt Pro",    LINE6_BIT_BASSPODXTPRO,  LINE6_BIT_CONTROL_PCM_HWMON },
+-	{ "GuitarPort",    "GuitarPort",       LINE6_BIT_GUITARPORT,    LINE6_BIT_PCM               },
+-	{ "PocketPOD",     "Pocket POD",       LINE6_BIT_POCKETPOD,     LINE6_BIT_CONTROL           },
+-	{ "PODStudioGX",   "POD Studio GX",    LINE6_BIT_PODSTUDIO_GX,  LINE6_BIT_PCM               },
+-	{ "PODStudioUX1",  "POD Studio UX1",   LINE6_BIT_PODSTUDIO_UX1, LINE6_BIT_PCM               },
+-	{ "PODStudioUX2",  "POD Studio UX2",   LINE6_BIT_PODSTUDIO_UX2, LINE6_BIT_PCM               },
+-	{ "PODX3",         "POD X3",           LINE6_BIT_PODX3,         LINE6_BIT_PCM               },
+-	{ "PODX3Live",     "POD X3 Live",      LINE6_BIT_PODX3LIVE,     LINE6_BIT_PCM               },
+-	{ "PODxt",         "PODxt",            LINE6_BIT_PODXT,         LINE6_BIT_CONTROL_PCM_HWMON },
+-	{ "PODxtLive",     "PODxt Live",       LINE6_BIT_PODXTLIVE,     LINE6_BIT_CONTROL_PCM_HWMON },
+-	{ "PODxtPro",      "PODxt Pro",        LINE6_BIT_PODXTPRO,      LINE6_BIT_CONTROL_PCM_HWMON },
+-	{ "TonePortGX",    "TonePort GX",      LINE6_BIT_TONEPORT_GX,   LINE6_BIT_PCM               },
+-	{ "TonePortUX1",   "TonePort UX1",     LINE6_BIT_TONEPORT_UX1,  LINE6_BIT_PCM               },
+-	{ "TonePortUX2",   "TonePort UX2",     LINE6_BIT_TONEPORT_UX2,  LINE6_BIT_PCM               },
+-	{ "Variax",        "Variax Workbench", LINE6_BIT_VARIAX,        LINE6_BIT_CONTROL           },
+-	{ "PODHD300",      "POD HD300",        LINE6_BIT_PODHD300,      LINE6_BIT_CONTROL_PCM_HWMON },
++	{ LINE6_BIT_BASSPODXT,     "BassPODxt",     "BassPODxt",        LINE6_BIT_CONTROL_PCM_HWMON },
++	{ LINE6_BIT_BASSPODXTLIVE, "BassPODxtLive", "BassPODxt Live",   LINE6_BIT_CONTROL_PCM_HWMON },
++	{ LINE6_BIT_BASSPODXTPRO,  "BassPODxtPro",  "BassPODxt Pro",    LINE6_BIT_CONTROL_PCM_HWMON },
++	{ LINE6_BIT_GUITARPORT,    "GuitarPort",    "GuitarPort",       LINE6_BIT_PCM               },
++	{ LINE6_BIT_POCKETPOD,     "PocketPOD",     "Pocket POD",       LINE6_BIT_CONTROL           },
++	{ LINE6_BIT_PODHD300,      "PODHD300",      "POD HD300",        LINE6_BIT_CONTROL_PCM_HWMON },
++	{ LINE6_BIT_PODHD500,      "PODHD500",      "POD HD500",        LINE6_BIT_CONTROL_PCM_HWMON },
++	{ LINE6_BIT_PODSTUDIO_GX,  "PODStudioGX",   "POD Studio GX",    LINE6_BIT_PCM               },
++	{ LINE6_BIT_PODSTUDIO_UX1, "PODStudioUX1",  "POD Studio UX1",   LINE6_BIT_PCM               },
++	{ LINE6_BIT_PODSTUDIO_UX2, "PODStudioUX2",  "POD Studio UX2",   LINE6_BIT_PCM               },
++	{ LINE6_BIT_PODX3,         "PODX3",         "POD X3",           LINE6_BIT_PCM               },
++	{ LINE6_BIT_PODX3LIVE,     "PODX3Live",     "POD X3 Live",      LINE6_BIT_PCM               },
++	{ LINE6_BIT_PODXT,         "PODxt",         "PODxt",            LINE6_BIT_CONTROL_PCM_HWMON },
++	{ LINE6_BIT_PODXTLIVE,     "PODxtLive",     "PODxt Live",       LINE6_BIT_CONTROL_PCM_HWMON },
++	{ LINE6_BIT_PODXTPRO,      "PODxtPro",      "PODxt Pro",        LINE6_BIT_CONTROL_PCM_HWMON },
++	{ LINE6_BIT_TONEPORT_GX,   "TonePortGX",    "TonePort GX",      LINE6_BIT_PCM               },
++	{ LINE6_BIT_TONEPORT_UX1,  "TonePortUX1",   "TonePort UX1",     LINE6_BIT_PCM               },
++	{ LINE6_BIT_TONEPORT_UX2,  "TonePortUX2",   "TonePort UX2",     LINE6_BIT_PCM               },
++	{ LINE6_BIT_VARIAX,        "Variax",        "Variax Workbench", LINE6_BIT_CONTROL           },
+ };
+ /* *INDENT-ON* */
+ 
+@@ -441,6 +443,7 @@ static void line6_data_received(struct urb *urb)
+ 			break;
+ 
+ 		case LINE6_DEVID_PODHD300:
++		case LINE6_DEVID_PODHD500:
+ 			break; /* let userspace handle MIDI */
+ 
+ 		case LINE6_DEVID_PODXTLIVE:
+@@ -800,6 +803,7 @@ static int line6_probe(struct usb_interface *interface,
+ 		}
+ 		break;
+ 
++	case LINE6_DEVID_PODHD500:
+ 	case LINE6_DEVID_PODX3:
+ 	case LINE6_DEVID_PODX3LIVE:
+ 		switch (interface_number) {
+@@ -878,6 +882,12 @@ static int line6_probe(struct usb_interface *interface,
+ 		ep_write = 0x03;
+ 		break;
+ 
++	case LINE6_DEVID_PODHD500:
++		size = sizeof(struct usb_line6_podhd);
++		ep_read = 0x81;
++		ep_write = 0x01;
++		break;
++
+ 	case LINE6_DEVID_POCKETPOD:
+ 		size = sizeof(struct usb_line6_pod);
+ 		ep_read = 0x82;
+@@ -1031,6 +1041,7 @@ static int line6_probe(struct usb_interface *interface,
+ 		break;
+ 
+ 	case LINE6_DEVID_PODHD300:
++	case LINE6_DEVID_PODHD500:
+ 		ret = line6_podhd_init(interface,
+ 				       (struct usb_line6_podhd *)line6);
+ 		break;
+@@ -1158,6 +1169,7 @@ static void line6_disconnect(struct usb_interface *interface)
+ 			break;
+ 
+ 		case LINE6_DEVID_PODHD300:
++		case LINE6_DEVID_PODHD500:
+ 			line6_podhd_disconnect(interface);
+ 			break;
+ 
+diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h
+index 553192f..117bf99 100644
+--- a/drivers/staging/line6/driver.h
++++ b/drivers/staging/line6/driver.h
+@@ -88,6 +88,11 @@ static const int SYSEX_EXTRA_SIZE = sizeof(line6_midi_id) + 4;
+ */
+ struct line6_properties {
+ 	/**
++		 Bit identifying this device in the line6usb driver.
++	*/
++	int device_bit;
++
++	/**
+ 		 Card id string (maximum 16 characters).
+ 		 This can be used to address the device in ALSA programs as
+ 		 "default:CARD=<id>"
+@@ -100,11 +105,6 @@ struct line6_properties {
+ 	const char *name;
+ 
+ 	/**
+-		 Bit identifying this device in the line6usb driver.
+-	*/
+-	int device_bit;
+-
+-	/**
+ 		 Bit vector defining this device's capabilities in the
+ 		 line6usb driver.
+ 	*/
+diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
+index 3013fb5..13d0293 100644
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -173,6 +173,7 @@ static int send_midi_async(struct usb_line6 *line6, unsigned char *data,
+ 
+ 	case LINE6_DEVID_VARIAX:
+ 	case LINE6_DEVID_PODHD300:
++	case LINE6_DEVID_PODHD500:
+ 		break;
+ 
+ 	default:
+@@ -404,8 +405,19 @@ int line6_init_midi(struct usb_line6 *line6)
+ 	}
+ 
+ 	line6midi->line6 = line6;
+-	line6midi->midi_mask_transmit = 1;
+-	line6midi->midi_mask_receive = 4;
++
++	switch(line6->product) {
++	case LINE6_DEVID_PODHD300:
++	case LINE6_DEVID_PODHD500:
++		line6midi->midi_mask_transmit = 1;
++		line6midi->midi_mask_receive = 1;
++		break;
++
++	default:
++		line6midi->midi_mask_transmit = 1;
++		line6midi->midi_mask_receive = 4;
++	}
++
+ 	line6->line6midi = line6midi;
+ 
+ 	err = snd_device_new(line6->card, SNDRV_DEV_RAWMIDI, line6midi,
+diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
+index a70c087..c3e5002 100644
+--- a/drivers/staging/line6/pcm.c
++++ b/drivers/staging/line6/pcm.c
+@@ -367,6 +367,7 @@ int line6_init_pcm(struct usb_line6 *line6,
+ 		ep_write = 0x01;
+ 		break;
+ 
++	case LINE6_DEVID_PODHD500:
+ 	case LINE6_DEVID_PODX3:
+ 	case LINE6_DEVID_PODX3LIVE:
+ 		ep_read = 0x86;
+diff --git a/drivers/staging/line6/usbdefs.h b/drivers/staging/line6/usbdefs.h
+index 4e13364..aff9e5c 100644
+--- a/drivers/staging/line6/usbdefs.h
++++ b/drivers/staging/line6/usbdefs.h
+@@ -24,6 +24,8 @@
+ #define LINE6_DEVID_BASSPODXTPRO  0x4252
+ #define LINE6_DEVID_GUITARPORT    0x4750
+ #define LINE6_DEVID_POCKETPOD     0x5051
++#define LINE6_DEVID_PODHD300      0x5057
++#define LINE6_DEVID_PODHD500      0x414D
+ #define LINE6_DEVID_PODSTUDIO_GX  0x4153
+ #define LINE6_DEVID_PODSTUDIO_UX1 0x4150
+ #define LINE6_DEVID_PODSTUDIO_UX2 0x4151
+@@ -36,51 +38,72 @@
+ #define LINE6_DEVID_TONEPORT_UX1  0x4141
+ #define LINE6_DEVID_TONEPORT_UX2  0x4142
+ #define LINE6_DEVID_VARIAX        0x534d
+-#define LINE6_DEVID_PODHD300      0x5057
+ 
+-#define LINE6_BIT_BASSPODXT       (1 <<  0)
+-#define LINE6_BIT_BASSPODXTLIVE   (1 <<  1)
+-#define LINE6_BIT_BASSPODXTPRO    (1 <<  2)
+-#define LINE6_BIT_GUITARPORT      (1 <<  3)
+-#define LINE6_BIT_POCKETPOD       (1 <<  4)
+-#define LINE6_BIT_PODSTUDIO_GX    (1 <<  5)
+-#define LINE6_BIT_PODSTUDIO_UX1   (1 <<  6)
+-#define LINE6_BIT_PODSTUDIO_UX2   (1 <<  7)
+-#define LINE6_BIT_PODX3           (1 <<  8)
+-#define LINE6_BIT_PODX3LIVE       (1 <<  9)
+-#define LINE6_BIT_PODXT           (1 << 10)
+-#define LINE6_BIT_PODXTLIVE       (1 << 11)
+-#define LINE6_BIT_PODXTPRO        (1 << 12)
+-#define LINE6_BIT_TONEPORT_GX     (1 << 13)
+-#define LINE6_BIT_TONEPORT_UX1    (1 << 14)
+-#define LINE6_BIT_TONEPORT_UX2    (1 << 15)
+-#define LINE6_BIT_VARIAX          (1 << 16)
+-#define LINE6_BIT_PODHD300        (1 << 17)
++enum {
++	LINE6_ID_BASSPODXT,
++	LINE6_ID_BASSPODXTLIVE,
++	LINE6_ID_BASSPODXTPRO,
++	LINE6_ID_GUITARPORT,
++	LINE6_ID_POCKETPOD,
++	LINE6_ID_PODHD300,
++	LINE6_ID_PODHD500,
++	LINE6_ID_PODSTUDIO_GX,
++	LINE6_ID_PODSTUDIO_UX1,
++	LINE6_ID_PODSTUDIO_UX2,
++	LINE6_ID_PODX3,
++	LINE6_ID_PODX3LIVE,
++	LINE6_ID_PODXT,
++	LINE6_ID_PODXTLIVE,
++	LINE6_ID_PODXTPRO,
++	LINE6_ID_TONEPORT_GX,
++	LINE6_ID_TONEPORT_UX1,
++	LINE6_ID_TONEPORT_UX2,
++	LINE6_ID_VARIAX
++};
++
++#define LINE6_BIT(x) LINE6_BIT_ ## x = 1 << LINE6_ID_ ## x
++
++enum {
++	LINE6_BIT(BASSPODXT),
++	LINE6_BIT(BASSPODXTLIVE),
++	LINE6_BIT(BASSPODXTPRO),
++	LINE6_BIT(GUITARPORT),
++	LINE6_BIT(POCKETPOD),
++	LINE6_BIT(PODHD300),
++	LINE6_BIT(PODHD500),
++	LINE6_BIT(PODSTUDIO_GX),
++	LINE6_BIT(PODSTUDIO_UX1),
++	LINE6_BIT(PODSTUDIO_UX2),
++	LINE6_BIT(PODX3),
++	LINE6_BIT(PODX3LIVE),
++	LINE6_BIT(PODXT),
++	LINE6_BIT(PODXTLIVE),
++	LINE6_BIT(PODXTPRO),
++	LINE6_BIT(TONEPORT_GX),
++	LINE6_BIT(TONEPORT_UX1),
++	LINE6_BIT(TONEPORT_UX2),
++	LINE6_BIT(VARIAX),
+ 
+-#define LINE6_BITS_PRO		(LINE6_BIT_BASSPODXTPRO | \
+-				 LINE6_BIT_PODXTPRO)
+-#define LINE6_BITS_LIVE		(LINE6_BIT_BASSPODXTLIVE | \
+-				 LINE6_BIT_PODXTLIVE | \
+-				 LINE6_BIT_PODX3LIVE)
+-#define LINE6_BITS_PODXTALL	(LINE6_BIT_PODXT | \
+-				 LINE6_BIT_PODXTLIVE | \
+-				 LINE6_BIT_PODXTPRO)
+-#define LINE6_BITS_BASSPODXTALL	(LINE6_BIT_BASSPODXT | \
+-				 LINE6_BIT_BASSPODXTLIVE | \
+-				 LINE6_BIT_BASSPODXTPRO)
++	LINE6_BITS_PRO = LINE6_BIT_BASSPODXTPRO | LINE6_BIT_PODXTPRO,
++	LINE6_BITS_LIVE = LINE6_BIT_BASSPODXTLIVE | LINE6_BIT_PODXTLIVE | LINE6_BIT_PODX3LIVE,
++	LINE6_BITS_PODXTALL = LINE6_BIT_PODXT | LINE6_BIT_PODXTLIVE | LINE6_BIT_PODXTPRO,
++	LINE6_BITS_PODX3ALL = LINE6_BIT_PODX3 | LINE6_BIT_PODX3LIVE,
++	LINE6_BITS_PODHDALL = LINE6_BIT_PODHD300 | LINE6_BIT_PODHD500,
++	LINE6_BITS_BASSPODXTALL	= LINE6_BIT_BASSPODXT |	LINE6_BIT_BASSPODXTLIVE | LINE6_BIT_BASSPODXTPRO
++};
+ 
+ /* device supports settings parameter via USB */
+-#define LINE6_BIT_CONTROL	(1 << 0)
++#define LINE6_BIT_CONTROL (1 << 0)
+ /* device supports PCM input/output via USB */
+-#define LINE6_BIT_PCM		(1 << 1)
++#define LINE6_BIT_PCM (1 << 1)
+ /* device support hardware monitoring */
+-#define LINE6_BIT_HWMON		(1 << 2)
++#define LINE6_BIT_HWMON (1 << 2)
+ 
+ #define LINE6_BIT_CONTROL_PCM_HWMON	(LINE6_BIT_CONTROL |	\
+ 					 LINE6_BIT_PCM |	\
+ 					 LINE6_BIT_HWMON)
+ 
+-#define LINE6_FALLBACK_INTERVAL		10
+-#define LINE6_FALLBACK_MAXPACKETSIZE	16
++#define LINE6_FALLBACK_INTERVAL 10
++#define LINE6_FALLBACK_MAXPACKETSIZE 16
+ 
+ #endif

Added: dists/sid/linux/debian/patches/features/all/line6/0012-staging-line6-fix-memory-leak-in-.hw_params.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0012-staging-line6-fix-memory-leak-in-.hw_params.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,53 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sat, 10 Dec 2011 02:12:27 +0100
+Subject: [012/106] staging: line6: fix memory leak in .hw_params()
+
+commit 60c01a977814788178362ff0e1a22dfbf106eede upstream.
+
+The .hw_params() pcm callback can be invoked multiple times in a row.
+Ensure that the URB data buffer is only allocated once.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/capture.c  |    7 +++++--
+ drivers/staging/line6/playback.c |    7 +++++--
+ 2 files changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c
+index ba441ed..8f59ff3 100644
+--- a/drivers/staging/line6/capture.c
++++ b/drivers/staging/line6/capture.c
+@@ -316,8 +316,11 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream,
+ 	}
+ 	/* -- [FD] end */
+ 
+-	line6pcm->buffer_in = kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
+-				      line6pcm->max_packet_size, GFP_KERNEL);
++	/* We may be invoked multiple times in a row so allocate once only */
++	if (!line6pcm->buffer_in)
++		line6pcm->buffer_in =
++			kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
++				line6pcm->max_packet_size, GFP_KERNEL);
+ 
+ 	if (!line6pcm->buffer_in) {
+ 		dev_err(line6pcm->line6->ifcdev,
+diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c
+index e495b32..ed1b9bd 100644
+--- a/drivers/staging/line6/playback.c
++++ b/drivers/staging/line6/playback.c
+@@ -462,8 +462,11 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream,
+ 	}
+ 	/* -- [FD] end */
+ 
+-	line6pcm->buffer_out = kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
+-				       line6pcm->max_packet_size, GFP_KERNEL);
++	/* We may be invoked multiple times in a row so allocate once only */
++	if (!line6pcm->buffer_out)
++		line6pcm->buffer_out =
++			kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
++				line6pcm->max_packet_size, GFP_KERNEL);
+ 
+ 	if (!line6pcm->buffer_out) {
+ 		dev_err(line6pcm->line6->ifcdev,

Added: dists/sid/linux/debian/patches/features/all/line6/0013-staging-line6-fix-playback-urb-transfer-buffer-calcu.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0013-staging-line6-fix-playback-urb-transfer-buffer-calcu.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,37 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sat, 10 Dec 2011 02:12:28 +0100
+Subject: [013/106] staging: line6: fix playback urb transfer buffer
+ calculation
+
+commit 2f637ee42d4a60e1c3823beff3699354bd4400be upstream.
+
+The playback urb transfer buffer calculation does not factor in
+LINE6_ISO_PACKETS.  Buffer memory is organized like this in the driver:
+
+  Buffer 0                 Buffer 1                 ...
+  [Packet 0, Packet 1, ...][Packet 0, Packet 1, ...][Packet 0, ...]
+
+However, we're lucky that LINE6_ISO_PACKETS is currently defined as 1 so
+this patch does not change any behavior.  It's still worth including
+this fix in case the LINE6_ISO_PACKETS value is changed in the future.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/playback.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c
+index ed1b9bd..b17c0a7 100644
+--- a/drivers/staging/line6/playback.c
++++ b/drivers/staging/line6/playback.c
+@@ -192,7 +192,7 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+ 	urb_frames = urb_size / bytes_per_frame;
+ 	urb_out->transfer_buffer =
+ 	    line6pcm->buffer_out +
+-	    line6pcm->max_packet_size * line6pcm->index_out;
++	    LINE6_ISO_PACKETS * line6pcm->max_packet_size * line6pcm->index_out;
+ 	urb_out->transfer_buffer_length = urb_size;
+ 	urb_out->context = line6pcm;
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0014-staging-line6-eliminate-useless-index_out-variable.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0014-staging-line6-eliminate-useless-index_out-variable.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,58 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sat, 10 Dec 2011 02:12:29 +0100
+Subject: [014/106] staging: line6: eliminate useless index_out variable
+
+commit 153e38761d27f29edf436f11da3dbfb4fb8edcc1 upstream.
+
+Playback urbs use the index_out counter to decide which part of the
+playback buffer to use.  Since the urb already has a unique index in
+range [0, LINE6_ISO_BUFFERS) there is no need to keep a separate
+counter.
+
+Use the urb index instead.  This also eliminates the possibility of two
+urbs using the same playback buffer space if they ever complete
+out-of-order for some reason.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/pcm.h      |    5 -----
+ drivers/staging/line6/playback.c |    5 +----
+ 2 files changed, 1 insertion(+), 9 deletions(-)
+
+diff --git a/drivers/staging/line6/pcm.h b/drivers/staging/line6/pcm.h
+index 05f4ef3..55d8297 100644
+--- a/drivers/staging/line6/pcm.h
++++ b/drivers/staging/line6/pcm.h
+@@ -146,11 +146,6 @@ struct snd_line6_pcm {
+ 	unsigned char *buffer_in;
+ 
+ 	/**
+-		 Temporary buffer index for playback.
+-	*/
+-	int index_out;
+-
+-	/**
+ 		 Previously captured frame (for software monitoring).
+ 	*/
+ 	unsigned char *prev_fbuf;
+diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c
+index b17c0a7..9a51b92 100644
+--- a/drivers/staging/line6/playback.c
++++ b/drivers/staging/line6/playback.c
+@@ -192,13 +192,10 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+ 	urb_frames = urb_size / bytes_per_frame;
+ 	urb_out->transfer_buffer =
+ 	    line6pcm->buffer_out +
+-	    LINE6_ISO_PACKETS * line6pcm->max_packet_size * line6pcm->index_out;
++	    index * LINE6_ISO_PACKETS * line6pcm->max_packet_size;
+ 	urb_out->transfer_buffer_length = urb_size;
+ 	urb_out->context = line6pcm;
+ 
+-	if (++line6pcm->index_out == LINE6_ISO_BUFFERS)
+-		line6pcm->index_out = 0;
+-
+ 	if (test_bit(BIT_PCM_ALSA_PLAYBACK, &line6pcm->flags) &&
+ 	    !test_bit(BIT_PAUSE_PLAYBACK, &line6pcm->flags)) {
+ 		struct snd_pcm_runtime *runtime =

Added: dists/sid/linux/debian/patches/features/all/line6/0015-staging-line6-eliminate-useless-NULL-checks.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0015-staging-line6-eliminate-useless-NULL-checks.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,101 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sat, 10 Dec 2011 02:12:30 +0100
+Subject: [015/106] staging: line6: eliminate useless NULL checks
+
+commit 188e664502dc47f83775a556e6db52cd8cc0b5fc upstream.
+
+The line6 driver checks struct field addresses for NULL where it does
+not make sense to do so.  The struct has already been checked for NULL
+and there is no value in checking the first field's address too.
+
+Suggested-by: Dan Carpenter <dan.carpenter at oracle.com>
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/pod.c      |    6 +-----
+ drivers/staging/line6/podhd.c    |    6 +-----
+ drivers/staging/line6/toneport.c |    6 +-----
+ drivers/staging/line6/variax.c   |    6 +-----
+ 4 files changed, 4 insertions(+), 20 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index d9b3021..4dadc57 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -1149,14 +1149,10 @@ static struct snd_kcontrol_new pod_control_monitor = {
+ static void pod_destruct(struct usb_interface *interface)
+ {
+ 	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	struct usb_line6 *line6;
+ 
+ 	if (pod == NULL)
+ 		return;
+-	line6 = &pod->line6;
+-	if (line6 == NULL)
+-		return;
+-	line6_cleanup_audio(line6);
++	line6_cleanup_audio(&pod->line6);
+ 
+ 	del_timer(&pod->startup_timer);
+ 	cancel_work_sync(&pod->startup_work);
+diff --git a/drivers/staging/line6/podhd.c b/drivers/staging/line6/podhd.c
+index 6c0f7f2..7ef4543 100644
+--- a/drivers/staging/line6/podhd.c
++++ b/drivers/staging/line6/podhd.c
+@@ -80,14 +80,10 @@ static struct line6_pcm_properties podhd_pcm_properties = {
+ static void podhd_destruct(struct usb_interface *interface)
+ {
+ 	struct usb_line6_podhd *podhd = usb_get_intfdata(interface);
+-	struct usb_line6 *line6;
+ 
+ 	if (podhd == NULL)
+ 		return;
+-	line6 = &podhd->line6;
+-	if (line6 == NULL)
+-		return;
+-	line6_cleanup_audio(line6);
++	line6_cleanup_audio(&podhd->line6);
+ }
+ 
+ /*
+diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c
+index 879e699..f310578 100644
+--- a/drivers/staging/line6/toneport.c
++++ b/drivers/staging/line6/toneport.c
+@@ -295,14 +295,10 @@ static struct snd_kcontrol_new toneport_control_source = {
+ static void toneport_destruct(struct usb_interface *interface)
+ {
+ 	struct usb_line6_toneport *toneport = usb_get_intfdata(interface);
+-	struct usb_line6 *line6;
+ 
+ 	if (toneport == NULL)
+ 		return;
+-	line6 = &toneport->line6;
+-	if (line6 == NULL)
+-		return;
+-	line6_cleanup_audio(line6);
++	line6_cleanup_audio(&toneport->line6);
+ }
+ 
+ /*
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index 81241cd..d366222 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -572,14 +572,10 @@ static DEVICE_ATTR(raw2, S_IWUSR, line6_nop_read, variax_set_raw2);
+ static void variax_destruct(struct usb_interface *interface)
+ {
+ 	struct usb_line6_variax *variax = usb_get_intfdata(interface);
+-	struct usb_line6 *line6;
+ 
+ 	if (variax == NULL)
+ 		return;
+-	line6 = &variax->line6;
+-	if (line6 == NULL)
+-		return;
+-	line6_cleanup_audio(line6);
++	line6_cleanup_audio(&variax->line6);
+ 
+ 	del_timer(&variax->startup_timer1);
+ 	del_timer(&variax->startup_timer2);

Added: dists/sid/linux/debian/patches/features/all/line6/0016-staging-line6-wait-for-urbs-in-snd_line6_prepare.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0016-staging-line6-wait-for-urbs-in-snd_line6_prepare.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,51 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sat, 10 Dec 2011 02:12:31 +0100
+Subject: [016/106] staging: line6: wait for urbs in snd_line6_prepare()
+
+commit 665f3f506b1c2684d6f78d6d03c038d1712e561d upstream.
+
+The .trigger() pcm callbacks are not allowed to block and cannot wait
+until urbs have completed.  We need to ensure that stopping, preparing,
+and then restarting a stream always works.
+
+Currently the driver will sometimes return -EBUSY when restarting the
+stream because urbs have not completed yet.  This can be triggered by
+jackd from userspace.
+
+The solution is to wait on urbs in the .prepare() pcm callback since
+blocking is allowed in that callback.  This guarantees that all urbs are
+quiesced and ready to be submitted when the start trigger callback is
+invoked.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/pcm.c |   14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
+index c3e5002..68727b2 100644
+--- a/drivers/staging/line6/pcm.c
++++ b/drivers/staging/line6/pcm.c
+@@ -474,6 +474,20 @@ int snd_line6_prepare(struct snd_pcm_substream *substream)
+ {
+ 	struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
+ 
++	switch (substream->stream) {
++	case SNDRV_PCM_STREAM_PLAYBACK:
++		line6_unlink_wait_clear_audio_out_urbs(line6pcm);
++		break;
++
++	case SNDRV_PCM_STREAM_CAPTURE:
++		line6_unlink_wait_clear_audio_in_urbs(line6pcm);
++		break;
++
++	default:
++		MISSING_CASE;
++	}
++
++
+ 	if (!test_and_set_bit(BIT_PREPARED, &line6pcm->flags)) {
+ 		line6pcm->count_out = 0;
+ 		line6pcm->pos_out = 0;

Added: dists/sid/linux/debian/patches/features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,346 @@
+From: Markus Grabner <grabner at icg.tugraz.at>
+Date: Sat, 10 Dec 2011 02:12:32 +0100
+Subject: [017/106] staging: line6: fixed ALSA/PCM interaction
+
+commit 6b02a17ee5cd5d200dbe4a285a4e750f70884967 upstream.
+
+The PCM subsystem in the Line6 driver is mainly used for PCM playback and
+capture by ALSA, but also has other tasks, most notably providing a
+low-latency software monitor for devices which don't support hardware
+monitoring (e.g., the TonePort series). This patch makes ALSA "play nicely"
+with the other components, i.e., prevents it from resetting the isochronous
+USB transfer while other PCM tasks (software monitoring) are running.
+
+Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+ drivers/staging/line6/capture.c  |   46 ++++++++++++++++++++-------
+ drivers/staging/line6/capture.h  |    2 ++
+ drivers/staging/line6/pcm.c      |   65 ++++++++++++++++++++++++++------------
+ drivers/staging/line6/playback.c |   46 ++++++++++++++++++++-------
+ drivers/staging/line6/playback.h |    2 ++
+ drivers/staging/line6/revision.h |    2 +-
+ 6 files changed, 118 insertions(+), 45 deletions(-)
+
+diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c
+index 8f59ff3..127f952 100644
+--- a/drivers/staging/line6/capture.c
++++ b/drivers/staging/line6/capture.c
+@@ -193,6 +193,31 @@ void line6_capture_check_period(struct snd_line6_pcm *line6pcm, int length)
+ 	}
+ }
+ 
++int line6_alloc_capture_buffer(struct snd_line6_pcm *line6pcm)
++{
++	/* We may be invoked multiple times in a row so allocate once only */
++	if (line6pcm->buffer_in)
++		return 0;
++
++	line6pcm->buffer_in =
++		kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
++			line6pcm->max_packet_size, GFP_KERNEL);
++
++	if (!line6pcm->buffer_in) {
++		dev_err(line6pcm->line6->ifcdev,
++			"cannot malloc capture buffer\n");
++		return -ENOMEM;
++	}
++
++	return 0;
++}
++
++void line6_free_capture_buffer(struct snd_line6_pcm *line6pcm)
++{
++	kfree(line6pcm->buffer_in);
++	line6pcm->buffer_in = NULL;
++}
++
+ /*
+  * Callback for completed capture URB.
+  */
+@@ -316,16 +341,11 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream,
+ 	}
+ 	/* -- [FD] end */
+ 
+-	/* We may be invoked multiple times in a row so allocate once only */
+-	if (!line6pcm->buffer_in)
+-		line6pcm->buffer_in =
+-			kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
+-				line6pcm->max_packet_size, GFP_KERNEL);
++	if ((line6pcm->flags & MASK_CAPTURE) == 0) {
++		ret = line6_alloc_capture_buffer(line6pcm);
+ 
+-	if (!line6pcm->buffer_in) {
+-		dev_err(line6pcm->line6->ifcdev,
+-			"cannot malloc capture buffer\n");
+-		return -ENOMEM;
++		if (ret < 0)
++			return ret;
+ 	}
+ 
+ 	ret = snd_pcm_lib_malloc_pages(substream,
+@@ -342,9 +362,11 @@ static int snd_line6_capture_hw_free(struct snd_pcm_substream *substream)
+ {
+ 	struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
+ 
+-	line6_unlink_wait_clear_audio_in_urbs(line6pcm);
+-	kfree(line6pcm->buffer_in);
+-	line6pcm->buffer_in = NULL;
++	if ((line6pcm->flags & MASK_CAPTURE) == 0) {
++		line6_unlink_wait_clear_audio_in_urbs(line6pcm);
++		line6_free_capture_buffer(line6pcm);
++	}
++
+ 	return snd_pcm_lib_free_pages(substream);
+ }
+ 
+diff --git a/drivers/staging/line6/capture.h b/drivers/staging/line6/capture.h
+index a7509fb..366cbaa 100644
+--- a/drivers/staging/line6/capture.h
++++ b/drivers/staging/line6/capture.h
+@@ -19,11 +19,13 @@
+ 
+ extern struct snd_pcm_ops snd_line6_capture_ops;
+ 
++extern int line6_alloc_capture_buffer(struct snd_line6_pcm *line6pcm);
+ extern void line6_capture_copy(struct snd_line6_pcm *line6pcm, char *fbuf,
+ 			       int fsize);
+ extern void line6_capture_check_period(struct snd_line6_pcm *line6pcm,
+ 				       int length);
+ extern int line6_create_audio_in_urbs(struct snd_line6_pcm *line6pcm);
++extern void line6_free_capture_buffer(struct snd_line6_pcm *line6pcm);
+ extern int line6_submit_audio_in_all_urbs(struct snd_line6_pcm *line6pcm);
+ extern void line6_unlink_audio_in_urbs(struct snd_line6_pcm *line6pcm);
+ extern void line6_unlink_wait_clear_audio_in_urbs(struct snd_line6_pcm
+diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
+index 68727b2..37675e6 100644
+--- a/drivers/staging/line6/pcm.c
++++ b/drivers/staging/line6/pcm.c
+@@ -86,17 +86,22 @@ static DEVICE_ATTR(impulse_period, S_IWUSR | S_IRUGO, pcm_get_impulse_period,
+ 
+ #endif
+ 
++static bool test_flags(unsigned long flags0, unsigned long flags1,
++		       unsigned long mask)
++{
++	return ((flags0 & mask) == 0) && ((flags1 & mask) != 0);
++}
++
+ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels)
+ {
+ 	unsigned long flags_old =
+ 	    __sync_fetch_and_or(&line6pcm->flags, channels);
+ 	unsigned long flags_new = flags_old | channels;
+ 	int err = 0;
+-
++	
+ 	line6pcm->prev_fbuf = NULL;
+ 
+-	if (((flags_old & MASK_CAPTURE) == 0) &&
+-	    ((flags_new & MASK_CAPTURE) != 0)) {
++	if (test_flags(flags_old, flags_new, MASK_CAPTURE)) {
+ 		/*
+ 		   Waiting for completion of active URBs in the stop handler is
+ 		   a bug, we therefore report an error if capturing is restarted
+@@ -105,34 +110,47 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels)
+ 		if (line6pcm->active_urb_in | line6pcm->unlink_urb_in)
+ 			return -EBUSY;
+ 
++		if (!(flags_new & MASK_PCM_ALSA_CAPTURE)) {
++			err = line6_alloc_capture_buffer(line6pcm);
++
++			if (err < 0)
++				goto pcm_start_error;
++		}
++
+ 		line6pcm->count_in = 0;
+ 		line6pcm->prev_fsize = 0;
+ 		err = line6_submit_audio_in_all_urbs(line6pcm);
+ 
+-		if (err < 0) {
+-			__sync_fetch_and_and(&line6pcm->flags, ~channels);
+-			return err;
+-		}
++		if (err < 0)
++			goto pcm_start_error;
+ 	}
+ 
+-	if (((flags_old & MASK_PLAYBACK) == 0) &&
+-	    ((flags_new & MASK_PLAYBACK) != 0)) {
++	if (test_flags(flags_old, flags_new, MASK_PLAYBACK)) {
+ 		/*
+ 		   See comment above regarding PCM restart.
+ 		 */
+ 		if (line6pcm->active_urb_out | line6pcm->unlink_urb_out)
+ 			return -EBUSY;
+ 
++		if (!(flags_new & MASK_PCM_ALSA_PLAYBACK)) {
++			err = line6_alloc_playback_buffer(line6pcm);
++
++			if (err < 0)
++				goto pcm_start_error;
++		}
++
+ 		line6pcm->count_out = 0;
+ 		err = line6_submit_audio_out_all_urbs(line6pcm);
+ 
+-		if (err < 0) {
+-			__sync_fetch_and_and(&line6pcm->flags, ~channels);
+-			return err;
+-		}
++		if (err < 0)
++			goto pcm_start_error;
+ 	}
+ 
+ 	return 0;
++
++pcm_start_error:
++	__sync_fetch_and_and(&line6pcm->flags, ~channels);
++	return err;
+ }
+ 
+ int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels)
+@@ -141,14 +159,18 @@ int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels)
+ 	    __sync_fetch_and_and(&line6pcm->flags, ~channels);
+ 	unsigned long flags_new = flags_old & ~channels;
+ 
+-	if (((flags_old & MASK_CAPTURE) != 0) &&
+-	    ((flags_new & MASK_CAPTURE) == 0)) {
++	if (test_flags(flags_new, flags_old, MASK_CAPTURE)) {
+ 		line6_unlink_audio_in_urbs(line6pcm);
++
++		if (!(flags_old & MASK_PCM_ALSA_CAPTURE))
++			line6_free_capture_buffer(line6pcm);
+ 	}
+ 
+-	if (((flags_old & MASK_PLAYBACK) != 0) &&
+-	    ((flags_new & MASK_PLAYBACK) == 0)) {
++	if (test_flags(flags_new, flags_old, MASK_PLAYBACK)) {
+ 		line6_unlink_audio_out_urbs(line6pcm);
++
++		if (!(flags_old & MASK_PCM_ALSA_PLAYBACK))
++			line6_free_playback_buffer(line6pcm);
+ 	}
+ 
+ 	return 0;
+@@ -476,18 +498,21 @@ int snd_line6_prepare(struct snd_pcm_substream *substream)
+ 
+ 	switch (substream->stream) {
+ 	case SNDRV_PCM_STREAM_PLAYBACK:
+-		line6_unlink_wait_clear_audio_out_urbs(line6pcm);
++		if ((line6pcm->flags & MASK_PLAYBACK) == 0)
++			line6_unlink_wait_clear_audio_out_urbs(line6pcm);
++
+ 		break;
+ 
+ 	case SNDRV_PCM_STREAM_CAPTURE:
+-		line6_unlink_wait_clear_audio_in_urbs(line6pcm);
++		if ((line6pcm->flags & MASK_CAPTURE) == 0)
++			line6_unlink_wait_clear_audio_in_urbs(line6pcm);
++
+ 		break;
+ 
+ 	default:
+ 		MISSING_CASE;
+ 	}
+ 
+-
+ 	if (!test_and_set_bit(BIT_PREPARED, &line6pcm->flags)) {
+ 		line6pcm->count_out = 0;
+ 		line6pcm->pos_out = 0;
+diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c
+index 9a51b92..4152db2 100644
+--- a/drivers/staging/line6/playback.c
++++ b/drivers/staging/line6/playback.c
+@@ -351,6 +351,31 @@ void line6_unlink_wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm)
+ 	wait_clear_audio_out_urbs(line6pcm);
+ }
+ 
++int line6_alloc_playback_buffer(struct snd_line6_pcm *line6pcm)
++{
++	/* We may be invoked multiple times in a row so allocate once only */
++	if (line6pcm->buffer_out)
++		return 0;
++
++	line6pcm->buffer_out =
++		kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
++			line6pcm->max_packet_size, GFP_KERNEL);
++
++	if (!line6pcm->buffer_out) {
++		dev_err(line6pcm->line6->ifcdev,
++			"cannot malloc playback buffer\n");
++		return -ENOMEM;
++	}
++
++	return 0;
++}
++
++void line6_free_playback_buffer(struct snd_line6_pcm *line6pcm)
++{
++	kfree(line6pcm->buffer_out);
++	line6pcm->buffer_out = NULL;
++}
++
+ /*
+ 	Callback for completed playback URB.
+ */
+@@ -459,16 +484,11 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream,
+ 	}
+ 	/* -- [FD] end */
+ 
+-	/* We may be invoked multiple times in a row so allocate once only */
+-	if (!line6pcm->buffer_out)
+-		line6pcm->buffer_out =
+-			kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
+-				line6pcm->max_packet_size, GFP_KERNEL);
++	if ((line6pcm->flags & MASK_PLAYBACK) == 0) {
++		ret = line6_alloc_playback_buffer(line6pcm);
+ 
+-	if (!line6pcm->buffer_out) {
+-		dev_err(line6pcm->line6->ifcdev,
+-			"cannot malloc playback buffer\n");
+-		return -ENOMEM;
++		if (ret < 0)
++			return ret;
+ 	}
+ 
+ 	ret = snd_pcm_lib_malloc_pages(substream,
+@@ -485,9 +505,11 @@ static int snd_line6_playback_hw_free(struct snd_pcm_substream *substream)
+ {
+ 	struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
+ 
+-	line6_unlink_wait_clear_audio_out_urbs(line6pcm);
+-	kfree(line6pcm->buffer_out);
+-	line6pcm->buffer_out = NULL;
++	if ((line6pcm->flags & MASK_PLAYBACK) == 0) {
++		line6_unlink_wait_clear_audio_out_urbs(line6pcm);
++		line6_free_playback_buffer(line6pcm);
++	}
++
+ 	return snd_pcm_lib_free_pages(substream);
+ }
+ 
+diff --git a/drivers/staging/line6/playback.h b/drivers/staging/line6/playback.h
+index f2fc8c0..02487ff 100644
+--- a/drivers/staging/line6/playback.h
++++ b/drivers/staging/line6/playback.h
+@@ -29,7 +29,9 @@
+ 
+ extern struct snd_pcm_ops snd_line6_playback_ops;
+ 
++extern int line6_alloc_playback_buffer(struct snd_line6_pcm *line6pcm);
+ extern int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm);
++extern void line6_free_playback_buffer(struct snd_line6_pcm *line6pcm);
+ extern int line6_submit_audio_out_all_urbs(struct snd_line6_pcm *line6pcm);
+ extern void line6_unlink_audio_out_urbs(struct snd_line6_pcm *line6pcm);
+ extern void line6_unlink_wait_clear_audio_out_urbs(struct snd_line6_pcm
+diff --git a/drivers/staging/line6/revision.h b/drivers/staging/line6/revision.h
+index 350d0df..b4eee2b 100644
+--- a/drivers/staging/line6/revision.h
++++ b/drivers/staging/line6/revision.h
+@@ -1,4 +1,4 @@
+ #ifndef DRIVER_REVISION
+ /* current subversion revision */
+-#define DRIVER_REVISION " (revision 690)"
++#define DRIVER_REVISION " (904)"
+ #endif

Added: dists/sid/linux/debian/patches/features/all/line6/0018-staging-line6-removed-obsolete-code.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0018-staging-line6-removed-obsolete-code.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,30 @@
+From: Markus Grabner <grabner at icg.tugraz.at>
+Date: Fri, 20 Jan 2012 00:09:07 +0100
+Subject: [018/106] staging: line6: removed obsolete code
+
+commit 3784129a9de3fc33ffe6c6ece906a9caa1c65fab upstream.
+
+Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pcm.h |    9 ---------
+ 1 file changed, 9 deletions(-)
+
+diff --git a/drivers/staging/line6/pcm.h b/drivers/staging/line6/pcm.h
+index 55d8297..47c6d69 100644
+--- a/drivers/staging/line6/pcm.h
++++ b/drivers/staging/line6/pcm.h
+@@ -305,13 +305,4 @@ extern void line6_pcm_disconnect(struct snd_line6_pcm *line6pcm);
+ extern int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels);
+ extern int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels);
+ 
+-#define PRINT_FRAME_DIFF(op) {						\
+-	static int diff_prev = 1000;					\
+-	int diff = line6pcm->last_frame_out - line6pcm->last_frame_in;	\
+-	if ((diff != diff_prev) && (abs(diff) < 100)) {			\
+-		printk(KERN_INFO "%s frame diff = %d\n", op, diff);	\
+-		diff_prev = diff;					\
+-	}								\
+-}
+-
+ #endif

Added: dists/sid/linux/debian/patches/features/all/line6/0019-staging-line6-use-source-select-control-for-UX2-devi.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0019-staging-line6-use-source-select-control-for-UX2-devi.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,36 @@
+From: Markus Grabner <grabner at icg.tugraz.at>
+Date: Fri, 20 Jan 2012 00:09:08 +0100
+Subject: [019/106] staging: line6: use source select control for UX2 devices
+
+commit 12177acdecfcb538b86590036a56fc47b443e135 upstream.
+
+Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/toneport.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c
+index f310578..b776130 100644
+--- a/drivers/staging/line6/toneport.c
++++ b/drivers/staging/line6/toneport.c
+@@ -320,7 +320,9 @@ static void toneport_setup(struct usb_line6_toneport *toneport)
+ 	/* initialize source select: */
+ 	switch (usbdev->descriptor.idProduct) {
+ 	case LINE6_DEVID_TONEPORT_UX1:
++	case LINE6_DEVID_TONEPORT_UX2:
+ 	case LINE6_DEVID_PODSTUDIO_UX1:
++	case LINE6_DEVID_PODSTUDIO_UX2:
+ 		toneport_send_cmd(usbdev,
+ 				  toneport_source_info[toneport->source].code,
+ 				  0x0000);
+@@ -363,7 +365,9 @@ static int toneport_try_init(struct usb_interface *interface,
+ 	/* register source select control: */
+ 	switch (usbdev->descriptor.idProduct) {
+ 	case LINE6_DEVID_TONEPORT_UX1:
++	case LINE6_DEVID_TONEPORT_UX2:
+ 	case LINE6_DEVID_PODSTUDIO_UX1:
++	case LINE6_DEVID_PODSTUDIO_UX2:
+ 		err =
+ 		    snd_ctl_add(line6->card,
+ 				snd_ctl_new1(&toneport_control_source,

Added: dists/sid/linux/debian/patches/features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,893 @@
+From: Markus Grabner <grabner at icg.tugraz.at>
+Date: Fri, 20 Jan 2012 00:09:09 +0100
+Subject: [020/106] staging: line6: separate handling of buffer allocation and
+ stream startup
+
+commit 0ca54888060135806d5567f47a6ad54be5297b34 upstream.
+
+There are several features of the Line6 USB driver which require PCM
+data to be exchanged with the device:
+*) PCM playback and capture via ALSA
+*) software monitoring (for devices without hardware monitoring)
+*) optional impulse response measurement
+However, from the device's point of view, there is just a single
+capture and playback stream, which must be shared between these
+subsystems. It is therefore necessary to maintain the state of the
+subsystems with respect to PCM usage. We define several constants of
+the form LINE6_BIT_PCM_<subsystem>_<direction>_<resource> with the
+following meanings:
+*) <subsystem> is one of
+-) ALSA: PCM playback and capture via ALSA
+-) MONITOR: software monitoring
+-) IMPULSE: optional impulse response measurement
+*) <direction> is one of
+-) PLAYBACK: audio output (from host to device)
+-) CAPTURE: audio input (from device to host)
+*) <resource> is one of
+-) BUFFER: buffer required by PCM data stream
+-) STREAM: actual PCM data stream
+
+The subsystems call line6_pcm_acquire() to acquire the (shared)
+resources needed for a particular operation (e.g., allocate the buffer
+for ALSA playback or start the capture stream for software monitoring).
+When a resource is no longer needed, it is released by calling
+line6_pcm_release(). Buffer allocation and stream startup are handled
+separately to allow the ALSA kernel driver to perform them at
+appropriate places (since the callback which starts a PCM stream is not
+allowed to sleep).
+
+Signed-off-by: Markus Grabner <grabner at icg.tugraz.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/capture.c  |   54 ++++---------
+ drivers/staging/line6/capture.h  |    2 +-
+ drivers/staging/line6/driver.c   |    2 +-
+ drivers/staging/line6/pcm.c      |  109 +++++++++++++++++---------
+ drivers/staging/line6/pcm.h      |  158 ++++++++++++++++++++++++++++----------
+ drivers/staging/line6/playback.c |   68 ++++++----------
+ drivers/staging/line6/playback.h |    2 +-
+ drivers/staging/line6/toneport.c |    8 +-
+ drivers/staging/line6/usbdefs.h  |   44 +++++------
+ 9 files changed, 254 insertions(+), 193 deletions(-)
+
+diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c
+index 127f952..c85c5b6 100644
+--- a/drivers/staging/line6/capture.c
++++ b/drivers/staging/line6/capture.c
+@@ -107,7 +107,7 @@ void line6_unlink_audio_in_urbs(struct snd_line6_pcm *line6pcm)
+ 	Wait until unlinking of all currently active capture URBs has been
+ 	finished.
+ */
+-static void wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm)
++void line6_wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm)
+ {
+ 	int timeout = HZ;
+ 	unsigned int i;
+@@ -134,7 +134,7 @@ static void wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm)
+ void line6_unlink_wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm)
+ {
+ 	line6_unlink_audio_in_urbs(line6pcm);
+-	wait_clear_audio_in_urbs(line6pcm);
++	line6_wait_clear_audio_in_urbs(line6pcm);
+ }
+ 
+ /*
+@@ -193,25 +193,6 @@ void line6_capture_check_period(struct snd_line6_pcm *line6pcm, int length)
+ 	}
+ }
+ 
+-int line6_alloc_capture_buffer(struct snd_line6_pcm *line6pcm)
+-{
+-	/* We may be invoked multiple times in a row so allocate once only */
+-	if (line6pcm->buffer_in)
+-		return 0;
+-
+-	line6pcm->buffer_in =
+-		kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
+-			line6pcm->max_packet_size, GFP_KERNEL);
+-
+-	if (!line6pcm->buffer_in) {
+-		dev_err(line6pcm->line6->ifcdev,
+-			"cannot malloc capture buffer\n");
+-		return -ENOMEM;
+-	}
+-
+-	return 0;
+-}
+-
+ void line6_free_capture_buffer(struct snd_line6_pcm *line6pcm)
+ {
+ 	kfree(line6pcm->buffer_in);
+@@ -273,9 +254,9 @@ static void audio_in_callback(struct urb *urb)
+ 		line6pcm->prev_fsize = fsize;
+ 
+ #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+-		if (!(line6pcm->flags & MASK_PCM_IMPULSE))
++		if (!(line6pcm->flags & LINE6_BITS_PCM_IMPULSE))
+ #endif
+-			if (test_bit(BIT_PCM_ALSA_CAPTURE, &line6pcm->flags)
++			if (test_bit(LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM, &line6pcm->flags)
+ 			    && (fsize > 0))
+ 				line6_capture_copy(line6pcm, fbuf, fsize);
+ 	}
+@@ -291,9 +272,9 @@ static void audio_in_callback(struct urb *urb)
+ 		submit_audio_in_urb(line6pcm);
+ 
+ #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+-		if (!(line6pcm->flags & MASK_PCM_IMPULSE))
++		if (!(line6pcm->flags & LINE6_BITS_PCM_IMPULSE))
+ #endif
+-			if (test_bit(BIT_PCM_ALSA_CAPTURE, &line6pcm->flags))
++			if (test_bit(LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM, &line6pcm->flags))
+ 				line6_capture_check_period(line6pcm, length);
+ 	}
+ }
+@@ -341,17 +322,17 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream,
+ 	}
+ 	/* -- [FD] end */
+ 
+-	if ((line6pcm->flags & MASK_CAPTURE) == 0) {
+-		ret = line6_alloc_capture_buffer(line6pcm);
++	ret = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_BUFFER);
+ 
+-		if (ret < 0)
+-			return ret;
+-	}
++	if (ret < 0)
++		return ret;
+ 
+ 	ret = snd_pcm_lib_malloc_pages(substream,
+ 				       params_buffer_bytes(hw_params));
+-	if (ret < 0)
++	if (ret < 0) {
++		line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_BUFFER);
+ 		return ret;
++	}
+ 
+ 	line6pcm->period_in = params_period_bytes(hw_params);
+ 	return 0;
+@@ -361,12 +342,7 @@ static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream,
+ static int snd_line6_capture_hw_free(struct snd_pcm_substream *substream)
+ {
+ 	struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
+-
+-	if ((line6pcm->flags & MASK_CAPTURE) == 0) {
+-		line6_unlink_wait_clear_audio_in_urbs(line6pcm);
+-		line6_free_capture_buffer(line6pcm);
+-	}
+-
++	line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_BUFFER);
+ 	return snd_pcm_lib_free_pages(substream);
+ }
+ 
+@@ -380,7 +356,7 @@ int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+ #ifdef CONFIG_PM
+ 	case SNDRV_PCM_TRIGGER_RESUME:
+ #endif
+-		err = line6_pcm_start(line6pcm, MASK_PCM_ALSA_CAPTURE);
++		err = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_STREAM);
+ 
+ 		if (err < 0)
+ 			return err;
+@@ -391,7 +367,7 @@ int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+ #ifdef CONFIG_PM
+ 	case SNDRV_PCM_TRIGGER_SUSPEND:
+ #endif
+-		err = line6_pcm_stop(line6pcm, MASK_PCM_ALSA_CAPTURE);
++		err = line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_STREAM);
+ 
+ 		if (err < 0)
+ 			return err;
+diff --git a/drivers/staging/line6/capture.h b/drivers/staging/line6/capture.h
+index 366cbaa..4157bcb 100644
+--- a/drivers/staging/line6/capture.h
++++ b/drivers/staging/line6/capture.h
+@@ -19,7 +19,6 @@
+ 
+ extern struct snd_pcm_ops snd_line6_capture_ops;
+ 
+-extern int line6_alloc_capture_buffer(struct snd_line6_pcm *line6pcm);
+ extern void line6_capture_copy(struct snd_line6_pcm *line6pcm, char *fbuf,
+ 			       int fsize);
+ extern void line6_capture_check_period(struct snd_line6_pcm *line6pcm,
+@@ -30,6 +29,7 @@ extern int line6_submit_audio_in_all_urbs(struct snd_line6_pcm *line6pcm);
+ extern void line6_unlink_audio_in_urbs(struct snd_line6_pcm *line6pcm);
+ extern void line6_unlink_wait_clear_audio_in_urbs(struct snd_line6_pcm
+ 						  *line6pcm);
++extern void line6_wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm);
+ extern int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd);
+ 
+ #endif
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index 6a1959e..e8023af 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -1346,7 +1346,7 @@ static void __exit line6_exit(void)
+ 		if (line6pcm == NULL)
+ 			continue;
+ 
+-		line6_pcm_stop(line6pcm, ~0);
++		line6_pcm_release(line6pcm, ~0);
+ 	}
+ 
+ 	usb_deregister(&line6_driver);
+diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
+index 37675e6..90d2d44 100644
+--- a/drivers/staging/line6/pcm.c
++++ b/drivers/staging/line6/pcm.c
+@@ -52,9 +52,9 @@ static ssize_t pcm_set_impulse_volume(struct device *dev,
+ 	line6pcm->impulse_volume = value;
+ 
+ 	if (value > 0)
+-		line6_pcm_start(line6pcm, MASK_PCM_IMPULSE);
++		line6_pcm_acquire(line6pcm, LINE6_BITS_PCM_IMPULSE);
+ 	else
+-		line6_pcm_stop(line6pcm, MASK_PCM_IMPULSE);
++		line6_pcm_release(line6pcm, LINE6_BITS_PCM_IMPULSE);
+ 
+ 	return count;
+ }
+@@ -92,29 +92,43 @@ static bool test_flags(unsigned long flags0, unsigned long flags1,
+ 	return ((flags0 & mask) == 0) && ((flags1 & mask) != 0);
+ }
+ 
+-int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels)
++int line6_pcm_acquire(struct snd_line6_pcm *line6pcm, int channels)
+ {
+ 	unsigned long flags_old =
+ 	    __sync_fetch_and_or(&line6pcm->flags, channels);
+ 	unsigned long flags_new = flags_old | channels;
++	unsigned long flags_final = flags_old;
+ 	int err = 0;
+ 	
+ 	line6pcm->prev_fbuf = NULL;
+ 
+-	if (test_flags(flags_old, flags_new, MASK_CAPTURE)) {
++	if (test_flags(flags_old, flags_new, LINE6_BITS_CAPTURE_BUFFER)) {
++		/* We may be invoked multiple times in a row so allocate once only */
++		if (!line6pcm->buffer_in) {
++			line6pcm->buffer_in =
++				kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
++					line6pcm->max_packet_size, GFP_KERNEL);
++
++			if (!line6pcm->buffer_in) {
++				dev_err(line6pcm->line6->ifcdev,
++					"cannot malloc capture buffer\n");
++				err = -ENOMEM;
++				goto pcm_acquire_error;
++			}
++
++			flags_final |= channels & LINE6_BITS_CAPTURE_BUFFER;
++		}
++	}
++
++	if (test_flags(flags_old, flags_new, LINE6_BITS_CAPTURE_STREAM)) {
+ 		/*
+ 		   Waiting for completion of active URBs in the stop handler is
+ 		   a bug, we therefore report an error if capturing is restarted
+ 		   too soon.
+ 		 */
+-		if (line6pcm->active_urb_in | line6pcm->unlink_urb_in)
++		if (line6pcm->active_urb_in | line6pcm->unlink_urb_in) {
++			dev_err(line6pcm->line6->ifcdev, "Device not yet ready\n");
+ 			return -EBUSY;
+-
+-		if (!(flags_new & MASK_PCM_ALSA_CAPTURE)) {
+-			err = line6_alloc_capture_buffer(line6pcm);
+-
+-			if (err < 0)
+-				goto pcm_start_error;
+ 		}
+ 
+ 		line6pcm->count_in = 0;
+@@ -122,55 +136,78 @@ int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels)
+ 		err = line6_submit_audio_in_all_urbs(line6pcm);
+ 
+ 		if (err < 0)
+-			goto pcm_start_error;
++			goto pcm_acquire_error;
++
++		flags_final |= channels & LINE6_BITS_CAPTURE_STREAM;
+ 	}
+ 
+-	if (test_flags(flags_old, flags_new, MASK_PLAYBACK)) {
+-		/*
+-		   See comment above regarding PCM restart.
+-		 */
+-		if (line6pcm->active_urb_out | line6pcm->unlink_urb_out)
+-			return -EBUSY;
++	if (test_flags(flags_old, flags_new, LINE6_BITS_PLAYBACK_BUFFER)) {
++		/* We may be invoked multiple times in a row so allocate once only */
++		if (!line6pcm->buffer_out) {
++			line6pcm->buffer_out =
++				kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
++					line6pcm->max_packet_size, GFP_KERNEL);
++
++			if (!line6pcm->buffer_out) {
++				dev_err(line6pcm->line6->ifcdev,
++					"cannot malloc playback buffer\n");
++				err = -ENOMEM;
++				goto pcm_acquire_error;
++			}
+ 
+-		if (!(flags_new & MASK_PCM_ALSA_PLAYBACK)) {
+-			err = line6_alloc_playback_buffer(line6pcm);
++			flags_final |= channels & LINE6_BITS_PLAYBACK_BUFFER;
++		}
++	}
+ 
+-			if (err < 0)
+-				goto pcm_start_error;
++	if (test_flags(flags_old, flags_new, LINE6_BITS_PLAYBACK_STREAM)) {
++		/*
++		  See comment above regarding PCM restart.
++		*/
++		if (line6pcm->active_urb_out | line6pcm->unlink_urb_out) {
++			dev_err(line6pcm->line6->ifcdev, "Device not yet ready\n");
++			return -EBUSY;
+ 		}
+ 
+ 		line6pcm->count_out = 0;
+ 		err = line6_submit_audio_out_all_urbs(line6pcm);
+ 
+ 		if (err < 0)
+-			goto pcm_start_error;
++			goto pcm_acquire_error;
++
++		flags_final |= channels & LINE6_BITS_PLAYBACK_STREAM;
+ 	}
+ 
+ 	return 0;
+ 
+-pcm_start_error:
+-	__sync_fetch_and_and(&line6pcm->flags, ~channels);
++pcm_acquire_error:
++	/*
++	   If not all requested resources/streams could be obtained, release
++	   those which were successfully obtained (if any).
++	*/
++	line6_pcm_release(line6pcm, flags_final & channels);
+ 	return err;
+ }
+ 
+-int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels)
++int line6_pcm_release(struct snd_line6_pcm *line6pcm, int channels)
+ {
+ 	unsigned long flags_old =
+ 	    __sync_fetch_and_and(&line6pcm->flags, ~channels);
+ 	unsigned long flags_new = flags_old & ~channels;
+ 
+-	if (test_flags(flags_new, flags_old, MASK_CAPTURE)) {
++	if (test_flags(flags_new, flags_old, LINE6_BITS_CAPTURE_STREAM))
+ 		line6_unlink_audio_in_urbs(line6pcm);
+ 
+-		if (!(flags_old & MASK_PCM_ALSA_CAPTURE))
+-			line6_free_capture_buffer(line6pcm);
++	if (test_flags(flags_new, flags_old, LINE6_BITS_CAPTURE_BUFFER)) {
++		line6_wait_clear_audio_in_urbs(line6pcm);
++		line6_free_capture_buffer(line6pcm);
+ 	}
+ 
+-	if (test_flags(flags_new, flags_old, MASK_PLAYBACK)) {
++	if (test_flags(flags_new, flags_old, LINE6_BITS_PLAYBACK_STREAM))
+ 		line6_unlink_audio_out_urbs(line6pcm);
+ 
+-		if (!(flags_old & MASK_PCM_ALSA_PLAYBACK))
+-			line6_free_playback_buffer(line6pcm);
++	if (test_flags(flags_new, flags_old, LINE6_BITS_PLAYBACK_BUFFER)) {
++		line6_wait_clear_audio_out_urbs(line6pcm);
++		line6_free_playback_buffer(line6pcm);
+ 	}
+ 
+ 	return 0;
+@@ -185,7 +222,7 @@ int snd_line6_trigger(struct snd_pcm_substream *substream, int cmd)
+ 	unsigned long flags;
+ 
+ 	spin_lock_irqsave(&line6pcm->lock_trigger, flags);
+-	clear_bit(BIT_PREPARED, &line6pcm->flags);
++	clear_bit(LINE6_INDEX_PREPARED, &line6pcm->flags);
+ 
+ 	snd_pcm_group_for_each_entry(s, substream) {
+ 		switch (s->stream) {
+@@ -498,13 +535,13 @@ int snd_line6_prepare(struct snd_pcm_substream *substream)
+ 
+ 	switch (substream->stream) {
+ 	case SNDRV_PCM_STREAM_PLAYBACK:
+-		if ((line6pcm->flags & MASK_PLAYBACK) == 0)
++		if ((line6pcm->flags & LINE6_BITS_PLAYBACK_STREAM) == 0)
+ 			line6_unlink_wait_clear_audio_out_urbs(line6pcm);
+ 
+ 		break;
+ 
+ 	case SNDRV_PCM_STREAM_CAPTURE:
+-		if ((line6pcm->flags & MASK_CAPTURE) == 0)
++		if ((line6pcm->flags & LINE6_BITS_CAPTURE_STREAM) == 0)
+ 			line6_unlink_wait_clear_audio_in_urbs(line6pcm);
+ 
+ 		break;
+@@ -513,7 +550,7 @@ int snd_line6_prepare(struct snd_pcm_substream *substream)
+ 		MISSING_CASE;
+ 	}
+ 
+-	if (!test_and_set_bit(BIT_PREPARED, &line6pcm->flags)) {
++	if (!test_and_set_bit(LINE6_INDEX_PREPARED, &line6pcm->flags)) {
+ 		line6pcm->count_out = 0;
+ 		line6pcm->pos_out = 0;
+ 		line6pcm->pos_out_done = 0;
+diff --git a/drivers/staging/line6/pcm.h b/drivers/staging/line6/pcm.h
+index 47c6d69..5210ec8 100644
+--- a/drivers/staging/line6/pcm.h
++++ b/drivers/staging/line6/pcm.h
+@@ -46,57 +46,131 @@
+ 		(line6pcm->pcm->streams[stream].substream)
+ 
+ /*
+-	PCM mode bits and masks.
+-	"ALSA": operations triggered by applications via ALSA
+-	"MONITOR": software monitoring
+-	"IMPULSE": optional impulse response operation
++	PCM mode bits.
++
++	There are several features of the Line6 USB driver which require PCM
++	data to be exchanged with the device:
++	*) PCM playback and capture via ALSA
++	*) software monitoring (for devices without hardware monitoring)
++	*) optional impulse response measurement
++	However, from the device's point of view, there is just a single
++	capture and playback stream, which must be shared between these
++	subsystems. It is therefore necessary to maintain the state of the
++	subsystems with respect to PCM usage. We define several constants of
++	the form LINE6_BIT_PCM_<subsystem>_<direction>_<resource> with the
++	following meanings:
++	*) <subsystem> is one of
++	-) ALSA: PCM playback and capture via ALSA
++	-) MONITOR: software monitoring
++	-) IMPULSE: optional impulse response measurement
++	*) <direction> is one of
++	-) PLAYBACK: audio output (from host to device)
++	-) CAPTURE: audio input (from device to host)
++	*) <resource> is one of
++	-) BUFFER: buffer required by PCM data stream
++	-) STREAM: actual PCM data stream
++
++	The subsystems call line6_pcm_acquire() to acquire the (shared)
++	resources needed for a particular operation (e.g., allocate the buffer
++	for ALSA playback or start the capture stream for software monitoring).
++	When a resource is no longer needed, it is released by calling
++	line6_pcm_release(). Buffer allocation and stream startup are handled
++	separately to allow the ALSA kernel driver to perform them at
++	appropriate places (since the callback which starts a PCM stream is not
++	allowed to sleep).
+ */
+ enum {
+-	/* individual bits: */
+-	BIT_PCM_ALSA_PLAYBACK,
+-	BIT_PCM_ALSA_CAPTURE,
+-	BIT_PCM_MONITOR_PLAYBACK,
+-	BIT_PCM_MONITOR_CAPTURE,
++	/* individual bit indices: */
++	LINE6_INDEX_PCM_ALSA_PLAYBACK_BUFFER,
++	LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM,
++	LINE6_INDEX_PCM_ALSA_CAPTURE_BUFFER,
++	LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM,
++	LINE6_INDEX_PCM_MONITOR_PLAYBACK_BUFFER,
++	LINE6_INDEX_PCM_MONITOR_PLAYBACK_STREAM,
++	LINE6_INDEX_PCM_MONITOR_CAPTURE_BUFFER,
++	LINE6_INDEX_PCM_MONITOR_CAPTURE_STREAM,
+ #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+-	BIT_PCM_IMPULSE_PLAYBACK,
+-	BIT_PCM_IMPULSE_CAPTURE,
++	LINE6_INDEX_PCM_IMPULSE_PLAYBACK_BUFFER,
++	LINE6_INDEX_PCM_IMPULSE_PLAYBACK_STREAM,
++	LINE6_INDEX_PCM_IMPULSE_CAPTURE_BUFFER,
++	LINE6_INDEX_PCM_IMPULSE_CAPTURE_STREAM,
+ #endif
+-	BIT_PAUSE_PLAYBACK,
+-	BIT_PREPARED,
+-
+-	/* individual masks: */
+-/* *INDENT-OFF* */
+-	MASK_PCM_ALSA_PLAYBACK    = 1 << BIT_PCM_ALSA_PLAYBACK,
+-	MASK_PCM_ALSA_CAPTURE     = 1 << BIT_PCM_ALSA_CAPTURE,
+-	MASK_PCM_MONITOR_PLAYBACK = 1 << BIT_PCM_MONITOR_PLAYBACK,
+-	MASK_PCM_MONITOR_CAPTURE  = 1 << BIT_PCM_MONITOR_CAPTURE,
++	LINE6_INDEX_PAUSE_PLAYBACK,
++	LINE6_INDEX_PREPARED,
++
++	/* individual bit masks: */
++	LINE6_BIT(PCM_ALSA_PLAYBACK_BUFFER),
++	LINE6_BIT(PCM_ALSA_PLAYBACK_STREAM),
++	LINE6_BIT(PCM_ALSA_CAPTURE_BUFFER),
++	LINE6_BIT(PCM_ALSA_CAPTURE_STREAM),
++	LINE6_BIT(PCM_MONITOR_PLAYBACK_BUFFER),
++	LINE6_BIT(PCM_MONITOR_PLAYBACK_STREAM),
++	LINE6_BIT(PCM_MONITOR_CAPTURE_BUFFER),
++	LINE6_BIT(PCM_MONITOR_CAPTURE_STREAM),
+ #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+-	MASK_PCM_IMPULSE_PLAYBACK = 1 << BIT_PCM_IMPULSE_PLAYBACK,
+-	MASK_PCM_IMPULSE_CAPTURE  = 1 << BIT_PCM_IMPULSE_CAPTURE,
++	LINE6_BIT(PCM_IMPULSE_PLAYBACK_BUFFER),
++	LINE6_BIT(PCM_IMPULSE_PLAYBACK_STREAM),
++	LINE6_BIT(PCM_IMPULSE_CAPTURE_BUFFER),
++	LINE6_BIT(PCM_IMPULSE_CAPTURE_STREAM),
+ #endif
+-	MASK_PAUSE_PLAYBACK       = 1 << BIT_PAUSE_PLAYBACK,
+-	MASK_PREPARED             = 1 << BIT_PREPARED,
+-/* *INDENT-ON* */
++	LINE6_BIT(PAUSE_PLAYBACK),
++	LINE6_BIT(PREPARED),
+ 
+-	/* combined masks (by operation): */
+-	MASK_PCM_ALSA = MASK_PCM_ALSA_PLAYBACK | MASK_PCM_ALSA_CAPTURE,
+-	MASK_PCM_MONITOR = MASK_PCM_MONITOR_PLAYBACK | MASK_PCM_MONITOR_CAPTURE,
++	/* combined bit masks (by operation): */
++	LINE6_BITS_PCM_ALSA_BUFFER =
++	    LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER |
++	    LINE6_BIT_PCM_ALSA_CAPTURE_BUFFER,
++
++	LINE6_BITS_PCM_ALSA_STREAM =
++	    LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM |
++	    LINE6_BIT_PCM_ALSA_CAPTURE_STREAM,
++
++	LINE6_BITS_PCM_MONITOR =
++	    LINE6_BIT_PCM_MONITOR_PLAYBACK_BUFFER |
++	    LINE6_BIT_PCM_MONITOR_PLAYBACK_STREAM |
++	    LINE6_BIT_PCM_MONITOR_CAPTURE_BUFFER |
++	    LINE6_BIT_PCM_MONITOR_CAPTURE_STREAM,
++
++#ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
++	LINE6_BITS_PCM_IMPULSE =
++	    LINE6_BIT_PCM_IMPULSE_PLAYBACK_BUFFER |
++	    LINE6_BIT_PCM_IMPULSE_PLAYBACK_STREAM |
++	    LINE6_BIT_PCM_IMPULSE_CAPTURE_BUFFER |
++	    LINE6_BIT_PCM_IMPULSE_CAPTURE_STREAM,
++#endif
++
++	/* combined bit masks (by direction): */
++	LINE6_BITS_PLAYBACK_BUFFER =
++#ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
++	    LINE6_BIT_PCM_IMPULSE_PLAYBACK_BUFFER |
++#endif
++	    LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER |
++	    LINE6_BIT_PCM_MONITOR_PLAYBACK_BUFFER ,
++
++	LINE6_BITS_PLAYBACK_STREAM =
++#ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
++	    LINE6_BIT_PCM_IMPULSE_PLAYBACK_STREAM |
++#endif
++	    LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM |
++	    LINE6_BIT_PCM_MONITOR_PLAYBACK_STREAM ,
++
++	LINE6_BITS_CAPTURE_BUFFER =
+ #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+-	MASK_PCM_IMPULSE = MASK_PCM_IMPULSE_PLAYBACK | MASK_PCM_IMPULSE_CAPTURE,
++	    LINE6_BIT_PCM_IMPULSE_CAPTURE_BUFFER |
+ #endif
++	    LINE6_BIT_PCM_ALSA_CAPTURE_BUFFER |
++	    LINE6_BIT_PCM_MONITOR_CAPTURE_BUFFER ,
+ 
+-	/* combined masks (by direction): */
++	LINE6_BITS_CAPTURE_STREAM =
+ #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+-	MASK_PLAYBACK =
+-	    MASK_PCM_ALSA_PLAYBACK | MASK_PCM_MONITOR_PLAYBACK |
+-	    MASK_PCM_IMPULSE_PLAYBACK,
+-	MASK_CAPTURE =
+-	    MASK_PCM_ALSA_CAPTURE | MASK_PCM_MONITOR_CAPTURE |
+-	    MASK_PCM_IMPULSE_CAPTURE
+-#else
+-	MASK_PLAYBACK = MASK_PCM_ALSA_PLAYBACK | MASK_PCM_MONITOR_PLAYBACK,
+-	MASK_CAPTURE = MASK_PCM_ALSA_CAPTURE | MASK_PCM_MONITOR_CAPTURE
++	    LINE6_BIT_PCM_IMPULSE_CAPTURE_STREAM |
+ #endif
++	    LINE6_BIT_PCM_ALSA_CAPTURE_STREAM |
++	    LINE6_BIT_PCM_MONITOR_CAPTURE_STREAM,
++	
++	LINE6_BITS_STREAM =
++	    LINE6_BITS_PLAYBACK_STREAM |
++	    LINE6_BITS_CAPTURE_STREAM
+ };
+ 
+ struct line6_pcm_properties {
+@@ -290,7 +364,7 @@ struct snd_line6_pcm {
+ #endif
+ 
+ 	/**
+-		 Several status bits (see BIT_*).
++		 Several status bits (see LINE6_BIT_*).
+ 	*/
+ 	unsigned long flags;
+ 
+@@ -302,7 +376,7 @@ extern int line6_init_pcm(struct usb_line6 *line6,
+ extern int snd_line6_trigger(struct snd_pcm_substream *substream, int cmd);
+ extern int snd_line6_prepare(struct snd_pcm_substream *substream);
+ extern void line6_pcm_disconnect(struct snd_line6_pcm *line6pcm);
+-extern int line6_pcm_start(struct snd_line6_pcm *line6pcm, int channels);
+-extern int line6_pcm_stop(struct snd_line6_pcm *line6pcm, int channels);
++extern int line6_pcm_acquire(struct snd_line6_pcm *line6pcm, int channels);
++extern int line6_pcm_release(struct snd_line6_pcm *line6pcm, int channels);
+ 
+ #endif
+diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c
+index 4152db2..a0ab9d0 100644
+--- a/drivers/staging/line6/playback.c
++++ b/drivers/staging/line6/playback.c
+@@ -166,7 +166,7 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+ 		struct usb_iso_packet_descriptor *fout =
+ 		    &urb_out->iso_frame_desc[i];
+ 
+-		if (line6pcm->flags & MASK_CAPTURE)
++		if (line6pcm->flags & LINE6_BITS_CAPTURE_STREAM)
+ 			fsize = line6pcm->prev_fsize;
+ 
+ 		if (fsize == 0) {
+@@ -196,8 +196,8 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+ 	urb_out->transfer_buffer_length = urb_size;
+ 	urb_out->context = line6pcm;
+ 
+-	if (test_bit(BIT_PCM_ALSA_PLAYBACK, &line6pcm->flags) &&
+-	    !test_bit(BIT_PAUSE_PLAYBACK, &line6pcm->flags)) {
++	if (test_bit(LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM, &line6pcm->flags) &&
++	    !test_bit(LINE6_INDEX_PAUSE_PLAYBACK, &line6pcm->flags)) {
+ 		struct snd_pcm_runtime *runtime =
+ 		    get_substream(line6pcm, SNDRV_PCM_STREAM_PLAYBACK)->runtime;
+ 
+@@ -238,10 +238,10 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+ 
+ 	if (line6pcm->prev_fbuf != NULL) {
+ #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+-		if (line6pcm->flags & MASK_PCM_IMPULSE) {
++		if (line6pcm->flags & LINE6_BITS_PCM_IMPULSE) {
+ 			create_impulse_test_signal(line6pcm, urb_out,
+ 						   bytes_per_frame);
+-			if (line6pcm->flags & MASK_PCM_ALSA_CAPTURE) {
++			if (line6pcm->flags & LINE6_BIT_PCM_ALSA_CAPTURE_STREAM) {
+ 				line6_capture_copy(line6pcm,
+ 						   urb_out->transfer_buffer,
+ 						   urb_out->
+@@ -254,8 +254,8 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+ 			if (!
+ 			    (line6pcm->line6->
+ 			     properties->capabilities & LINE6_BIT_HWMON)
+-&& (line6pcm->flags & MASK_PLAYBACK)
+-&& (line6pcm->flags & MASK_CAPTURE))
++			    && (line6pcm->flags & LINE6_BITS_PLAYBACK_STREAM)
++			    && (line6pcm->flags & LINE6_BITS_CAPTURE_STREAM))
+ 				add_monitor_signal(urb_out, line6pcm->prev_fbuf,
+ 						   line6pcm->volume_monitor,
+ 						   bytes_per_frame);
+@@ -321,7 +321,7 @@ void line6_unlink_audio_out_urbs(struct snd_line6_pcm *line6pcm)
+ /*
+ 	Wait until unlinking of all currently active playback URBs has been finished.
+ */
+-static void wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm)
++void line6_wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm)
+ {
+ 	int timeout = HZ;
+ 	unsigned int i;
+@@ -348,26 +348,7 @@ static void wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm)
+ void line6_unlink_wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm)
+ {
+ 	line6_unlink_audio_out_urbs(line6pcm);
+-	wait_clear_audio_out_urbs(line6pcm);
+-}
+-
+-int line6_alloc_playback_buffer(struct snd_line6_pcm *line6pcm)
+-{
+-	/* We may be invoked multiple times in a row so allocate once only */
+-	if (line6pcm->buffer_out)
+-		return 0;
+-
+-	line6pcm->buffer_out =
+-		kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
+-			line6pcm->max_packet_size, GFP_KERNEL);
+-
+-	if (!line6pcm->buffer_out) {
+-		dev_err(line6pcm->line6->ifcdev,
+-			"cannot malloc playback buffer\n");
+-		return -ENOMEM;
+-	}
+-
+-	return 0;
++	line6_wait_clear_audio_out_urbs(line6pcm);
+ }
+ 
+ void line6_free_playback_buffer(struct snd_line6_pcm *line6pcm)
+@@ -407,7 +388,7 @@ static void audio_out_callback(struct urb *urb)
+ 
+ 	spin_lock_irqsave(&line6pcm->lock_audio_out, flags);
+ 
+-	if (test_bit(BIT_PCM_ALSA_PLAYBACK, &line6pcm->flags)) {
++	if (test_bit(LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM, &line6pcm->flags)) {
+ 		struct snd_pcm_runtime *runtime = substream->runtime;
+ 		line6pcm->pos_out_done +=
+ 		    length / line6pcm->properties->bytes_per_frame;
+@@ -432,7 +413,7 @@ static void audio_out_callback(struct urb *urb)
+ 	if (!shutdown) {
+ 		submit_audio_out_urb(line6pcm);
+ 
+-		if (test_bit(BIT_PCM_ALSA_PLAYBACK, &line6pcm->flags)) {
++		if (test_bit(LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM, &line6pcm->flags)) {
+ 			line6pcm->bytes_out += length;
+ 			if (line6pcm->bytes_out >= line6pcm->period_out) {
+ 				line6pcm->bytes_out %= line6pcm->period_out;
+@@ -484,17 +465,17 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream,
+ 	}
+ 	/* -- [FD] end */
+ 
+-	if ((line6pcm->flags & MASK_PLAYBACK) == 0) {
+-		ret = line6_alloc_playback_buffer(line6pcm);
++	ret = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER);
+ 
+-		if (ret < 0)
+-			return ret;
+-	}
++	if (ret < 0)
++		return ret;
+ 
+ 	ret = snd_pcm_lib_malloc_pages(substream,
+ 				       params_buffer_bytes(hw_params));
+-	if (ret < 0)
++	if (ret < 0) {
++		line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER);
+ 		return ret;
++	}
+ 
+ 	line6pcm->period_out = params_period_bytes(hw_params);
+ 	return 0;
+@@ -504,12 +485,7 @@ static int snd_line6_playback_hw_params(struct snd_pcm_substream *substream,
+ static int snd_line6_playback_hw_free(struct snd_pcm_substream *substream)
+ {
+ 	struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream);
+-
+-	if ((line6pcm->flags & MASK_PLAYBACK) == 0) {
+-		line6_unlink_wait_clear_audio_out_urbs(line6pcm);
+-		line6_free_playback_buffer(line6pcm);
+-	}
+-
++	line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_BUFFER);
+ 	return snd_pcm_lib_free_pages(substream);
+ }
+ 
+@@ -523,7 +499,7 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+ #ifdef CONFIG_PM
+ 	case SNDRV_PCM_TRIGGER_RESUME:
+ #endif
+-		err = line6_pcm_start(line6pcm, MASK_PCM_ALSA_PLAYBACK);
++		err = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM);
+ 
+ 		if (err < 0)
+ 			return err;
+@@ -534,7 +510,7 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+ #ifdef CONFIG_PM
+ 	case SNDRV_PCM_TRIGGER_SUSPEND:
+ #endif
+-		err = line6_pcm_stop(line6pcm, MASK_PCM_ALSA_PLAYBACK);
++		err = line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM);
+ 
+ 		if (err < 0)
+ 			return err;
+@@ -542,11 +518,11 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+ 		break;
+ 
+ 	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
+-		set_bit(BIT_PAUSE_PLAYBACK, &line6pcm->flags);
++		set_bit(LINE6_INDEX_PAUSE_PLAYBACK, &line6pcm->flags);
+ 		break;
+ 
+ 	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
+-		clear_bit(BIT_PAUSE_PLAYBACK, &line6pcm->flags);
++		clear_bit(LINE6_INDEX_PAUSE_PLAYBACK, &line6pcm->flags);
+ 		break;
+ 
+ 	default:
+diff --git a/drivers/staging/line6/playback.h b/drivers/staging/line6/playback.h
+index 02487ff..743bd6f 100644
+--- a/drivers/staging/line6/playback.h
++++ b/drivers/staging/line6/playback.h
+@@ -29,13 +29,13 @@
+ 
+ extern struct snd_pcm_ops snd_line6_playback_ops;
+ 
+-extern int line6_alloc_playback_buffer(struct snd_line6_pcm *line6pcm);
+ extern int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm);
+ extern void line6_free_playback_buffer(struct snd_line6_pcm *line6pcm);
+ extern int line6_submit_audio_out_all_urbs(struct snd_line6_pcm *line6pcm);
+ extern void line6_unlink_audio_out_urbs(struct snd_line6_pcm *line6pcm);
+ extern void line6_unlink_wait_clear_audio_out_urbs(struct snd_line6_pcm
+ 						   *line6pcm);
++extern void line6_wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm);
+ extern int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd);
+ 
+ #endif
+diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c
+index b776130..b754f69 100644
+--- a/drivers/staging/line6/toneport.c
++++ b/drivers/staging/line6/toneport.c
+@@ -207,9 +207,9 @@ static int snd_toneport_monitor_put(struct snd_kcontrol *kcontrol,
+ 	line6pcm->volume_monitor = ucontrol->value.integer.value[0];
+ 
+ 	if (line6pcm->volume_monitor > 0)
+-		line6_pcm_start(line6pcm, MASK_PCM_MONITOR);
++		line6_pcm_acquire(line6pcm, LINE6_BITS_PCM_MONITOR);
+ 	else
+-		line6_pcm_stop(line6pcm, MASK_PCM_MONITOR);
++		line6_pcm_release(line6pcm, LINE6_BITS_PCM_MONITOR);
+ 
+ 	return 1;
+ }
+@@ -264,7 +264,7 @@ static void toneport_start_pcm(unsigned long arg)
+ {
+ 	struct usb_line6_toneport *toneport = (struct usb_line6_toneport *)arg;
+ 	struct usb_line6 *line6 = &toneport->line6;
+-	line6_pcm_start(line6->line6pcm, MASK_PCM_MONITOR);
++	line6_pcm_acquire(line6->line6pcm, LINE6_BITS_PCM_MONITOR);
+ }
+ 
+ /* control definition */
+@@ -446,7 +446,7 @@ void line6_toneport_disconnect(struct usb_interface *interface)
+ 		struct snd_line6_pcm *line6pcm = toneport->line6.line6pcm;
+ 
+ 		if (line6pcm != NULL) {
+-			line6_pcm_stop(line6pcm, MASK_PCM_MONITOR);
++			line6_pcm_release(line6pcm, LINE6_BITS_PCM_MONITOR);
+ 			line6_pcm_disconnect(line6pcm);
+ 		}
+ 	}
+diff --git a/drivers/staging/line6/usbdefs.h b/drivers/staging/line6/usbdefs.h
+index aff9e5c..353d59d 100644
+--- a/drivers/staging/line6/usbdefs.h
++++ b/drivers/staging/line6/usbdefs.h
+@@ -39,31 +39,29 @@
+ #define LINE6_DEVID_TONEPORT_UX2  0x4142
+ #define LINE6_DEVID_VARIAX        0x534d
+ 
+-enum {
+-	LINE6_ID_BASSPODXT,
+-	LINE6_ID_BASSPODXTLIVE,
+-	LINE6_ID_BASSPODXTPRO,
+-	LINE6_ID_GUITARPORT,
+-	LINE6_ID_POCKETPOD,
+-	LINE6_ID_PODHD300,
+-	LINE6_ID_PODHD500,
+-	LINE6_ID_PODSTUDIO_GX,
+-	LINE6_ID_PODSTUDIO_UX1,
+-	LINE6_ID_PODSTUDIO_UX2,
+-	LINE6_ID_PODX3,
+-	LINE6_ID_PODX3LIVE,
+-	LINE6_ID_PODXT,
+-	LINE6_ID_PODXTLIVE,
+-	LINE6_ID_PODXTPRO,
+-	LINE6_ID_TONEPORT_GX,
+-	LINE6_ID_TONEPORT_UX1,
+-	LINE6_ID_TONEPORT_UX2,
+-	LINE6_ID_VARIAX
+-};
+-
+-#define LINE6_BIT(x) LINE6_BIT_ ## x = 1 << LINE6_ID_ ## x
++#define LINE6_BIT(x) LINE6_BIT_ ## x = 1 << LINE6_INDEX_ ## x
+ 
+ enum {
++	LINE6_INDEX_BASSPODXT,
++	LINE6_INDEX_BASSPODXTLIVE,
++	LINE6_INDEX_BASSPODXTPRO,
++	LINE6_INDEX_GUITARPORT,
++	LINE6_INDEX_POCKETPOD,
++	LINE6_INDEX_PODHD300,
++	LINE6_INDEX_PODHD500,
++	LINE6_INDEX_PODSTUDIO_GX,
++	LINE6_INDEX_PODSTUDIO_UX1,
++	LINE6_INDEX_PODSTUDIO_UX2,
++	LINE6_INDEX_PODX3,
++	LINE6_INDEX_PODX3LIVE,
++	LINE6_INDEX_PODXT,
++	LINE6_INDEX_PODXTLIVE,
++	LINE6_INDEX_PODXTPRO,
++	LINE6_INDEX_TONEPORT_GX,
++	LINE6_INDEX_TONEPORT_UX1,
++	LINE6_INDEX_TONEPORT_UX2,
++	LINE6_INDEX_VARIAX,
++
+ 	LINE6_BIT(BASSPODXT),
+ 	LINE6_BIT(BASSPODXTLIVE),
+ 	LINE6_BIT(BASSPODXTPRO),

Added: dists/sid/linux/debian/patches/features/all/line6/0021-Staging-line6-remove-unneeded-initialization.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0021-Staging-line6-remove-unneeded-initialization.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,37 @@
+From: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+Date: Mon, 23 Apr 2012 15:59:17 -0700
+Subject: [021/106] Staging: line6: remove unneeded initialization
+
+commit 305b8766a9833491b388ac98d57ce38a8106a1e0 upstream.
+
+Static variables are initialized to NULL, no need to do it again in the
+module_init function.
+
+CC: Markus Grabner <grabner at icg.tugraz.at>
+CC: Stefan Hajnoczi <stefanha at gmail.com>
+CC: Julia Lawall <julia at diku.dk>
+CC: Dan Carpenter <dan.carpenter at oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.c |    5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index e8023af..312905a 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -1297,13 +1297,10 @@ static struct usb_driver line6_driver = {
+ */
+ static int __init line6_init(void)
+ {
+-	int i, retval;
++	int retval;
+ 
+ 	printk(KERN_INFO "%s driver version %s\n", DRIVER_NAME, DRIVER_VERSION);
+ 
+-	for (i = LINE6_MAX_DEVICES; i--;)
+-		line6_devices[i] = NULL;
+-
+ 	retval = usb_register(&line6_driver);
+ 
+ 	if (retval) {

Added: dists/sid/linux/debian/patches/features/all/line6/0022-Staging-line6-only-allocate-a-buffer-if-it-is-needed.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0022-Staging-line6-only-allocate-a-buffer-if-it-is-needed.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,103 @@
+From: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+Date: Mon, 23 Apr 2012 16:09:56 -0700
+Subject: [022/106] Staging: line6: only allocate a buffer if it is needed
+
+commit c46b8a6567fb6e0119cb22819aa65faf8d101a2f upstream.
+
+Only allocate the version request buffer if it is needed, not when the
+module starts up.  This will let us make the module_init path much
+smaller.
+
+CC: Markus Grabner <grabner at icg.tugraz.at>
+CC: Stefan Hajnoczi <stefanha at gmail.com>
+CC: Julia Lawall <julia at diku.dk>
+CC: Dan Carpenter <dan.carpenter at oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.c |   47 +++++++++++++++-------------------------
+ 1 file changed, 17 insertions(+), 30 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index 312905a..351e860 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -92,15 +92,10 @@ const unsigned char line6_midi_id[] = {
+ 	Code to request version of POD, Variax interface
+ 	(and maybe other devices).
+ */
+-static const char line6_request_version0[] = {
++static const char line6_request_version[] = {
+ 	0xf0, 0x7e, 0x7f, 0x06, 0x01, 0xf7
+ };
+ 
+-/*
+-	Copy of version request code with GFP_KERNEL flag for use in URB.
+-*/
+-static const char *line6_request_version;
+-
+ struct usb_line6 *line6_devices[LINE6_MAX_DEVICES];
+ 
+ /**
+@@ -336,8 +331,21 @@ int line6_send_raw_message_async(struct usb_line6 *line6, const char *buffer,
+ */
+ int line6_version_request_async(struct usb_line6 *line6)
+ {
+-	return line6_send_raw_message_async(line6, line6_request_version,
+-					    sizeof(line6_request_version0));
++	char *buffer;
++	int retval;
++
++	buffer = kmalloc(sizeof(line6_request_version), GFP_ATOMIC);
++	if (buffer == NULL) {
++		dev_err(line6->ifcdev, "Out of memory");
++		return -ENOMEM;
++	}
++
++	memcpy(buffer, line6_request_version, sizeof(line6_request_version));
++
++	retval = line6_send_raw_message_async(line6, buffer,
++					      sizeof(line6_request_version));
++	kfree(buffer);
++	return retval;
+ }
+ 
+ /*
+@@ -1297,29 +1305,9 @@ static struct usb_driver line6_driver = {
+ */
+ static int __init line6_init(void)
+ {
+-	int retval;
+-
+ 	printk(KERN_INFO "%s driver version %s\n", DRIVER_NAME, DRIVER_VERSION);
+ 
+-	retval = usb_register(&line6_driver);
+-
+-	if (retval) {
+-		err("usb_register failed. Error number %d", retval);
+-		return retval;
+-	}
+-
+-	line6_request_version = kmalloc(sizeof(line6_request_version0),
+-					GFP_KERNEL);
+-
+-	if (line6_request_version == NULL) {
+-		err("Out of memory");
+-		return -ENOMEM;
+-	}
+-
+-	memcpy((char *)line6_request_version, line6_request_version0,
+-	       sizeof(line6_request_version0));
+-
+-	return retval;
++	return usb_register(&line6_driver);
+ }
+ 
+ /*
+@@ -1347,7 +1335,6 @@ static void __exit line6_exit(void)
+ 	}
+ 
+ 	usb_deregister(&line6_driver);
+-	kfree(line6_request_version);
+ }
+ 
+ module_init(line6_init);

Added: dists/sid/linux/debian/patches/features/all/line6/0023-Staging-line6-remove-teardown-code-from-module_exit-.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0023-Staging-line6-remove-teardown-code-from-module_exit-.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,49 @@
+From: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+Date: Mon, 23 Apr 2012 16:11:26 -0700
+Subject: [023/106] Staging: line6: remove teardown code from module_exit path
+
+commit 15a89dc83bad5c22a02bd292cf87d72dacb7dcb3 upstream.
+
+These pcm values should all be stopped properly when the device is
+removed from the system (i.e. when disconnect is called), so there's no
+need to duplicate this when the module is unloaded as well.
+
+CC: Markus Grabner <grabner at icg.tugraz.at>
+CC: Stefan Hajnoczi <stefanha at gmail.com>
+CC: Julia Lawall <julia at diku.dk>
+CC: Dan Carpenter <dan.carpenter at oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.c |   19 -------------------
+ 1 file changed, 19 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index 351e860..c476fcc 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -1315,25 +1315,6 @@ static int __init line6_init(void)
+ */
+ static void __exit line6_exit(void)
+ {
+-	int i;
+-	struct usb_line6 *line6;
+-	struct snd_line6_pcm *line6pcm;
+-
+-	/* stop all PCM channels */
+-	for (i = LINE6_MAX_DEVICES; i--;) {
+-		line6 = line6_devices[i];
+-
+-		if (line6 == NULL)
+-			continue;
+-
+-		line6pcm = line6->line6pcm;
+-
+-		if (line6pcm == NULL)
+-			continue;
+-
+-		line6_pcm_release(line6pcm, ~0);
+-	}
+-
+ 	usb_deregister(&line6_driver);
+ }
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0024-Staging-line6-use-module_usb_driver.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0024-Staging-line6-use-module_usb_driver.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,52 @@
+From: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+Date: Mon, 23 Apr 2012 16:13:19 -0700
+Subject: [024/106] Staging: line6: use module_usb_driver()
+
+commit 4a6313644c3188f4aa1a6b4403896375baa2e09a upstream.
+
+Now that our module_init/exit path is just registering and unregistering
+the usb driver, we can use module_usb_driver() instead.  This also has
+the nice side affect of removing the unneeded printk for the module
+version number.
+
+CC: Markus Grabner <grabner at icg.tugraz.at>
+CC: Stefan Hajnoczi <stefanha at gmail.com>
+CC: Julia Lawall <julia at diku.dk>
+CC: Dan Carpenter <dan.carpenter at oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.c |   21 +--------------------
+ 1 file changed, 1 insertion(+), 20 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index c476fcc..4513f78 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -1300,26 +1300,7 @@ static struct usb_driver line6_driver = {
+ 	.id_table = line6_id_table,
+ };
+ 
+-/*
+-	Module initialization.
+-*/
+-static int __init line6_init(void)
+-{
+-	printk(KERN_INFO "%s driver version %s\n", DRIVER_NAME, DRIVER_VERSION);
+-
+-	return usb_register(&line6_driver);
+-}
+-
+-/*
+-	Module cleanup.
+-*/
+-static void __exit line6_exit(void)
+-{
+-	usb_deregister(&line6_driver);
+-}
+-
+-module_init(line6_init);
+-module_exit(line6_exit);
++module_usb_driver(line6_driver);
+ 
+ MODULE_AUTHOR(DRIVER_AUTHOR);
+ MODULE_DESCRIPTION(DRIVER_DESC);

Added: dists/sid/linux/debian/patches/features/all/line6/0025-staging-line6-toneport.c-remove-err-usage.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0025-staging-line6-toneport.c-remove-err-usage.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,30 @@
+From: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+Date: Fri, 20 Apr 2012 16:53:32 -0700
+Subject: [025/106] staging: line6: toneport.c: remove err() usage
+
+commit aa8f827a4d7dbea98a9076a4f85b1317391dc031 upstream.
+
+err() was a very old USB-specific macro that I thought had
+gone away.  This patch removes it from being used in the
+driver and uses dev_err() instead.
+
+CC: Markus Grabner <grabner at icg.tugraz.at>
+CC: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/toneport.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c
+index b754f69..31b624b 100644
+--- a/drivers/staging/line6/toneport.c
++++ b/drivers/staging/line6/toneport.c
+@@ -168,7 +168,7 @@ static int toneport_send_cmd(struct usb_device *usbdev, int cmd1, int cmd2)
+ 			      cmd1, cmd2, NULL, 0, LINE6_TIMEOUT * HZ);
+ 
+ 	if (ret < 0) {
+-		err("send failed (error %d)\n", ret);
++		dev_err(&usbdev->dev, "send failed (error %d)\n", ret);
+ 		return ret;
+ 	}
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0026-staging-line6-midibuf.c-changed-printk-KERN_DEBUG-.-.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0026-staging-line6-midibuf.c-changed-printk-KERN_DEBUG-.-.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,29 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Sat, 5 May 2012 16:31:50 +0200
+Subject: [026/106] staging: line6/midibuf.c changed printk(KERN_DEBUG, ... to
+ pr_debug(
+
+commit 8878451510b11ee9095198f42bf1d59e6bab66fb upstream.
+
+Changed printk(KERN_DEBUG, ...) call to pr_debug call in function
+void line6_midibuf_status(struct MidiBuffer *this)
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/midibuf.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/staging/line6/midibuf.c b/drivers/staging/line6/midibuf.c
+index 7b532e5..836e8c8 100644
+--- a/drivers/staging/line6/midibuf.c
++++ b/drivers/staging/line6/midibuf.c
+@@ -64,7 +64,7 @@ int line6_midibuf_init(struct MidiBuffer *this, int size, int split)
+ 
+ void line6_midibuf_status(struct MidiBuffer *this)
+ {
+-	printk(KERN_DEBUG "midibuf size=%d split=%d pos_read=%d pos_write=%d "
++	pr_debug("midibuf size=%d split=%d pos_read=%d pos_write=%d "
+ 	       "full=%d command_prev=%02x\n", this->size, this->split,
+ 	       this->pos_read, this->pos_write, this->full, this->command_prev);
+ }

Added: dists/sid/linux/debian/patches/features/all/line6/0027-staging-line6-midi.c-Added-space-between-switch-and-.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0027-staging-line6-midi.c-Added-space-between-switch-and-.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,28 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Sat, 5 May 2012 16:31:51 +0200
+Subject: [027/106] staging: line6/midi.c: Added space between switch and open
+ parenthesis
+
+commit bc8fa144afe33bfbcae20dca4faff836ec7efedc upstream.
+
+Added space between switch and open parenthesis to make checkpatch.pl happy
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/midi.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
+index 13d0293..5040729 100644
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -406,7 +406,7 @@ int line6_init_midi(struct usb_line6 *line6)
+ 
+ 	line6midi->line6 = line6;
+ 
+-	switch(line6->product) {
++	switch (line6->product) {
+ 	case LINE6_DEVID_PODHD300:
+ 	case LINE6_DEVID_PODHD500:
+ 		line6midi->midi_mask_transmit = 1;

Added: dists/sid/linux/debian/patches/features/all/line6/0028-staging-line6-pcm.c-Removed-trailing-whitespace.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0028-staging-line6-pcm.c-Removed-trailing-whitespace.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,27 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Sat, 5 May 2012 16:31:52 +0200
+Subject: [028/106] staging: line6/pcm.c: Removed trailing whitespace
+
+commit 82a74d4a8022fc01b99550e4cd6b90802acd4ef9 upstream.
+
+Removed a line of only whitespace
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pcm.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
+index 90d2d44..5e319e3 100644
+--- a/drivers/staging/line6/pcm.c
++++ b/drivers/staging/line6/pcm.c
+@@ -99,7 +99,7 @@ int line6_pcm_acquire(struct snd_line6_pcm *line6pcm, int channels)
+ 	unsigned long flags_new = flags_old | channels;
+ 	unsigned long flags_final = flags_old;
+ 	int err = 0;
+-	
++
+ 	line6pcm->prev_fbuf = NULL;
+ 
+ 	if (test_flags(flags_old, flags_new, LINE6_BITS_CAPTURE_BUFFER)) {

Added: dists/sid/linux/debian/patches/features/all/line6/0029-staging-line6-config.h-Remove-CHECKPOINT-macro.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0029-staging-line6-config.h-Remove-CHECKPOINT-macro.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,30 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Thu, 10 May 2012 19:12:02 +0200
+Subject: [029/106] staging: line6/config.h: Remove CHECKPOINT macro
+
+commit c15974ef1f2d858795f7f63280fb53bcab6064f9 upstream.
+
+Kill unused debugging macro CHECKPOINT
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/config.h |    5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/drivers/staging/line6/config.h b/drivers/staging/line6/config.h
+index f8a5149..2493491 100644
+--- a/drivers/staging/line6/config.h
++++ b/drivers/staging/line6/config.h
+@@ -34,11 +34,6 @@
+ #define CREATE_RAW_FILE      0
+ 
+ #if DO_DEBUG_MESSAGES
+-#define CHECKPOINT printk(KERN_INFO "line6usb: %s (%s:%d)\n", \
+-			  __func__, __FILE__, __LINE__)
+-#endif
+-
+-#if DO_DEBUG_MESSAGES
+ #define DEBUG_MESSAGES(x) (x)
+ #else
+ #define DEBUG_MESSAGES(x)

Added: dists/sid/linux/debian/patches/features/all/line6/0030-staging-line6-config.h-Delete-unused-header.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0030-staging-line6-config.h-Delete-unused-header.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,64 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Fri, 18 May 2012 16:49:32 +0200
+Subject: [030/106] staging: line6/config.h: Delete unused header
+
+commit 0f64507473b9d8fef6592748ed4180908f5d26cc upstream.
+
+Delete unused header file drivers/staging/line6/config.h
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/config.h |   43 ----------------------------------------
+ 1 file changed, 43 deletions(-)
+ delete mode 100644 drivers/staging/line6/config.h
+
+diff --git a/drivers/staging/line6/config.h b/drivers/staging/line6/config.h
+deleted file mode 100644
+index 2493491..0000000
+--- a/drivers/staging/line6/config.h
++++ /dev/null
+@@ -1,43 +0,0 @@
+-/*
+- * Line6 Linux USB driver - 0.8.0
+- *
+- * Copyright (C) 2004-2009 Markus Grabner (grabner at 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.
+- *
+- */
+-
+-#ifndef CONFIG_H
+-#define CONFIG_H
+-
+-
+-#ifdef CONFIG_USB_DEBUG
+-#define DEBUG 1
+-#endif
+-
+-
+-/*
+- * Development tools.
+- */
+-#define DO_DEBUG_MESSAGES    0
+-#define DO_DUMP_URB_SEND     DO_DEBUG_MESSAGES
+-#define DO_DUMP_URB_RECEIVE  DO_DEBUG_MESSAGES
+-#define DO_DUMP_PCM_SEND     0
+-#define DO_DUMP_PCM_RECEIVE  0
+-#define DO_DUMP_MIDI_SEND    DO_DEBUG_MESSAGES
+-#define DO_DUMP_MIDI_RECEIVE DO_DEBUG_MESSAGES
+-#define DO_DUMP_ANY          (DO_DUMP_URB_SEND || DO_DUMP_URB_RECEIVE || \
+-			      DO_DUMP_PCM_SEND || DO_DUMP_PCM_RECEIVE || \
+-			      DO_DUMP_MIDI_SEND || DO_DUMP_MIDI_RECEIVE)
+-#define CREATE_RAW_FILE      0
+-
+-#if DO_DEBUG_MESSAGES
+-#define DEBUG_MESSAGES(x) (x)
+-#else
+-#define DEBUG_MESSAGES(x)
+-#endif
+-
+-
+-#endif

Added: dists/sid/linux/debian/patches/features/all/line6/0031-staging-line6-changed-interface-of-line6_transmit_pa.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0031-staging-line6-changed-interface-of-line6_transmit_pa.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,42 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Wed, 27 Jun 2012 21:25:55 +0200
+Subject: [031/106] staging: line6: changed interface of
+ line6_transmit_parameter()
+
+commit 2471c0933988eede8040d58cefd6be4fbef9c057 upstream.
+
+Interface of line6_transmit_parameter() adjusted to clarify internal workings
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.c |    2 +-
+ drivers/staging/line6/driver.h |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index 4513f78..d861230 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -526,7 +526,7 @@ int line6_send_program(struct usb_line6 *line6, int value)
+ /*
+ 	Transmit Line6 control parameter.
+ */
+-int line6_transmit_parameter(struct usb_line6 *line6, int param, int value)
++int line6_transmit_parameter(struct usb_line6 *line6, int param, u8 value)
+ {
+ 	int retval;
+ 	unsigned char *buffer;
+diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h
+index 117bf99..140ccfe 100644
+--- a/drivers/staging/line6/driver.h
++++ b/drivers/staging/line6/driver.h
+@@ -224,7 +224,7 @@ extern void line6_start_timer(struct timer_list *timer, unsigned int msecs,
+ 			      void (*function) (unsigned long),
+ 			      unsigned long data);
+ extern int line6_transmit_parameter(struct usb_line6 *line6, int param,
+-				    int value);
++				    u8 value);
+ extern int line6_version_request_async(struct usb_line6 *line6);
+ extern int line6_write_data(struct usb_line6 *line6, int address, void *data,
+ 			    size_t datalen);

Added: dists/sid/linux/debian/patches/features/all/line6/0032-staging-line6-Changed-some-strict_strtouls-to-kstrto.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0032-staging-line6-Changed-some-strict_strtouls-to-kstrto.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,45 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Wed, 27 Jun 2012 21:25:56 +0200
+Subject: [032/106] staging: line6: Changed some strict_strtouls to kstrtou8
+
+commit 1383ec4dad392a1c316820e9afb27b5fb95a6f57 upstream.
+
+Adjusted strict_strtoul calls to kstrtou8 in order to take the changes of
+line6_transmit_parameter() into account.
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index d366222..bb99ee4 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -319,10 +319,10 @@ static ssize_t variax_set_volume(struct device *dev,
+ {
+ 	struct usb_line6_variax *variax =
+ 	    usb_get_intfdata(to_usb_interface(dev));
+-	unsigned long value;
++	u8 value;
+ 	int ret;
+ 
+-	ret = strict_strtoul(buf, 10, &value);
++	ret = kstrtou8(buf, 10, &value);
+ 	if (ret)
+ 		return ret;
+ 
+@@ -418,10 +418,10 @@ static ssize_t variax_set_tone(struct device *dev,
+ {
+ 	struct usb_line6_variax *variax =
+ 	    usb_get_intfdata(to_usb_interface(dev));
+-	unsigned long value;
++	u8 value;
+ 	int ret;
+ 
+-	ret = strict_strtoul(buf, 10, &value);
++	ret = kstrtou8(buf, 10, &value);
+ 	if (ret)
+ 		return ret;
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0033-staging-line6-changed-interface-of-line6_pod_transmi.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0033-staging-line6-changed-interface-of-line6_pod_transmi.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,42 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Wed, 27 Jun 2012 21:25:57 +0200
+Subject: [033/106] staging: line6: changed interface of
+ line6_pod_transmit_parameter()
+
+commit 5b9bd2ad5116c735cf8e4fa1689319849086a55e upstream.
+
+Adjusted interface of line6_pod_transmit_parameter() to take changes of
+line6_transmit_parameter() into account
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |    2 +-
+ drivers/staging/line6/pod.h |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 4dadc57..8667aaf 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -419,7 +419,7 @@ static void pod_send_channel(struct usb_line6_pod *pod, int value)
+ 	Transmit PODxt Pro control parameter.
+ */
+ void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
+-				  int value)
++				  u8 value)
+ {
+ 	if (line6_transmit_parameter(&pod->line6, param, value) == 0)
+ 		pod_store_parameter(pod, param, value);
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index 18b9d08..47e0d1a 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -200,6 +200,6 @@ extern void line6_pod_midi_postprocess(struct usb_line6_pod *pod,
+ 				       unsigned char *data, int length);
+ extern void line6_pod_process_message(struct usb_line6_pod *pod);
+ extern void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
+-					 int value);
++					 u8 value);
+ 
+ #endif

Added: dists/sid/linux/debian/patches/features/all/line6/0034-staging-line6-adjusted-interface-of-line6_send_progr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0034-staging-line6-adjusted-interface-of-line6_send_progr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,41 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Wed, 27 Jun 2012 21:25:58 +0200
+Subject: [034/106] staging: line6: adjusted interface of line6_send_program()
+
+commit 317e188b2d48b7bc8537619b6c01208e1b03001a upstream.
+
+Adjusted interface of line6_send_program() to clarify internal working
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.c |    2 +-
+ drivers/staging/line6/driver.h |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index d861230..b8358ca 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -490,7 +490,7 @@ static void line6_data_received(struct urb *urb)
+ /*
+ 	Send channel number (i.e., switch to a different sound).
+ */
+-int line6_send_program(struct usb_line6 *line6, int value)
++int line6_send_program(struct usb_line6 *line6, u8 value)
+ {
+ 	int retval;
+ 	unsigned char *buffer;
+diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h
+index 140ccfe..a3029eb 100644
+--- a/drivers/staging/line6/driver.h
++++ b/drivers/staging/line6/driver.h
+@@ -209,7 +209,7 @@ extern int line6_read_data(struct usb_line6 *line6, int address, void *data,
+ 			   size_t datalen);
+ extern int line6_read_serial_number(struct usb_line6 *line6,
+ 				    int *serial_number);
+-extern int line6_send_program(struct usb_line6 *line6, int value);
++extern int line6_send_program(struct usb_line6 *line6, u8 value);
+ extern int line6_send_raw_message(struct usb_line6 *line6, const char *buffer,
+ 				  int size);
+ extern int line6_send_raw_message_async(struct usb_line6 *line6,

Added: dists/sid/linux/debian/patches/features/all/line6/0035-staging-line6-changed-interface-of-pod_send_channel.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0035-staging-line6-changed-interface-of-pod_send_channel.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,28 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Wed, 27 Jun 2012 21:25:59 +0200
+Subject: [035/106] staging: line6: changed interface of pod_send_channel()
+
+commit 8d6b7f7c9b3c346f2fef496827c3fbbc2ebef1a9 upstream.
+
+Adjusted interface of pod_send_channel() in order to take changes of
+line6_send_program() into account.
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 8667aaf..459f325 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -405,7 +405,7 @@ void line6_pod_midi_postprocess(struct usb_line6_pod *pod, unsigned char *data,
+ /*
+ 	Send channel number (i.e., switch to a different sound).
+ */
+-static void pod_send_channel(struct usb_line6_pod *pod, int value)
++static void pod_send_channel(struct usb_line6_pod *pod, u8 value)
+ {
+ 	line6_invalidate_current(&pod->dumpreq);
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0036-staging-line6-control.c-eliminate-strict_strtoul-in-.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0036-staging-line6-control.c-eliminate-strict_strtoul-in-.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,34 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Wed, 27 Jun 2012 21:26:00 +0200
+Subject: [036/106] staging: line6: control.c eliminate strict_strtoul() in
+ pod_set_param_int()
+
+commit 336cab9afa2567fd41d2813d3f0f9249371219cb upstream.
+
+Exchange strict_strtoul() with kstrtou8() and make "value" a u8 instead of a
+unsigned long. This is also needed for the changed
+line6_pod_transmit_parameter().
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/control.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/staging/line6/control.c b/drivers/staging/line6/control.c
+index 67e23b6..f8326f5 100644
+--- a/drivers/staging/line6/control.c
++++ b/drivers/staging/line6/control.c
+@@ -55,10 +55,10 @@ static ssize_t pod_set_param_int(struct device *dev, const char *buf,
+ {
+ 	struct usb_interface *interface = to_usb_interface(dev);
+ 	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	unsigned long value;
++	u8 value;
+ 	int retval;
+ 
+-	retval = strict_strtoul(buf, 10, &value);
++	retval = kstrtou8(buf, 10, &value);
+ 	if (retval)
+ 		return retval;
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0037-staging-line6-Exchanged-strict_strtoul-with-kstrtou8.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0037-staging-line6-Exchanged-strict_strtoul-with-kstrtou8.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,33 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Wed, 27 Jun 2012 21:26:01 +0200
+Subject: [037/106] staging: line6: Exchanged strict_strtoul with kstrtou8()
+ in pod.c:pod_resolve()
+
+commit 1d0e834d62c6810385c2f0673cf6bd97a59aae68 upstream.
+
+Exchanged call to strict_strtoul() with kstrtou8() in pod_resolve().
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 459f325..4c81914 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -434,11 +434,11 @@ void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
+ static int pod_resolve(const char *buf, short block0, short block1,
+ 		       unsigned char *location)
+ {
+-	unsigned long value;
++	u8 value;
+ 	short block;
+ 	int ret;
+ 
+-	ret = strict_strtoul(buf, 10, &value);
++	ret = kstrtou8(buf, 10, &value);
+ 	if (ret)
+ 		return ret;
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0038-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0038-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,33 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Wed, 27 Jun 2012 21:26:02 +0200
+Subject: [038/106] staging: line6: Changed strict_strtoul() to kstrtou8() in
+ pod_set_channel()
+
+commit a4fb7d53869f848fcef91fc6b571e0e8f6e835ce upstream.
+
+Changed strict_strtoul() to kstrtou() in pod_set_channel() to take changes in
+pod_send_channel() into account.
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 4c81914..2a85ec3 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -560,10 +560,10 @@ static ssize_t pod_set_channel(struct device *dev,
+ {
+ 	struct usb_interface *interface = to_usb_interface(dev);
+ 	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	unsigned long value;
++	u8 value;
+ 	int ret;
+ 
+-	ret = strict_strtoul(buf, 10, &value);
++	ret = kstrtou8(buf, 10, &value);
+ 	if (ret)
+ 		return ret;
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0039-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0039-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,33 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Wed, 27 Jun 2012 21:26:03 +0200
+Subject: [039/106] staging: line6: Changed strict_strtoul() to kstrtou8() in
+ pod_set_midi_postprocess()
+
+commit 06501787d843608c83864cc241f4fd464ce385ca upstream.
+
+Changed a call to strict_strtoul() into kstrtou8() in
+pod_set_midi_postprocess().
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 2a85ec3..9edd053 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -892,10 +892,10 @@ static ssize_t pod_set_midi_postprocess(struct device *dev,
+ {
+ 	struct usb_interface *interface = to_usb_interface(dev);
+ 	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	unsigned long value;
++	u8 value;
+ 	int ret;
+ 
+-	ret = strict_strtoul(buf, 10, &value);
++	ret = kstrtou8(buf, 10, &value);
+ 	if (ret)
+ 		return ret;
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0040-staging-line6-pcm.c-Changed-simple_strtoul-to-kstrto.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0040-staging-line6-pcm.c-Changed-simple_strtoul-to-kstrto.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,34 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Mon, 6 Aug 2012 14:08:50 +0200
+Subject: [040/106] staging: line6: pcm.c: Changed simple_strtoul to kstrtoint
+
+commit cdf5e55124e4804fc0027df7e89567a3f5eed8bf upstream.
+
+Changed call to simple_strtoul to kstrtoint in pcm_set_impulse_volume(...)
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Reviewed-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pcm.c |    8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
+index 5e319e3..7fe44a6 100644
+--- a/drivers/staging/line6/pcm.c
++++ b/drivers/staging/line6/pcm.c
+@@ -48,7 +48,13 @@ static ssize_t pcm_set_impulse_volume(struct device *dev,
+ 				      const char *buf, size_t count)
+ {
+ 	struct snd_line6_pcm *line6pcm = dev2pcm(dev);
+-	int value = simple_strtoul(buf, NULL, 10);
++	int value;
++	int rv;
++
++	rv = kstrtoint(buf, 10, &value);
++	if (rv < 0)
++		return rv;
++
+ 	line6pcm->impulse_volume = value;
+ 
+ 	if (value > 0)

Added: dists/sid/linux/debian/patches/features/all/line6/0041-staging-line6-variax.c-Eliminated-remaining-strict_s.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0041-staging-line6-variax.c-Eliminated-remaining-strict_s.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,46 @@
+From: Johannes Thumshirn <morbidrsa at googlemail.com>
+Date: Tue, 14 Aug 2012 20:22:48 +0200
+Subject: [041/106] staging: line6: variax.c: Eliminated remaining
+ strict_stroul()s
+
+commit 9291975d6647794710553630c2613b5658c81d3f upstream.
+
+Eliminated remaining calls to strict_stroul() and replaced them with
+strict_kstrtou8().
+
+Signed-off-by: Johannes Thumshirn <morbidrsa at googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index bb99ee4..f97416b 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -353,10 +353,10 @@ static ssize_t variax_set_model(struct device *dev,
+ {
+ 	struct usb_line6_variax *variax =
+ 	    usb_get_intfdata(to_usb_interface(dev));
+-	unsigned long value;
++	u8 value;
+ 	int ret;
+ 
+-	ret = strict_strtoul(buf, 10, &value);
++	ret = kstrtou8(buf, 10, &value);
+ 	if (ret)
+ 		return ret;
+ 
+@@ -387,10 +387,10 @@ static ssize_t variax_set_active(struct device *dev,
+ {
+ 	struct usb_line6_variax *variax =
+ 	    usb_get_intfdata(to_usb_interface(dev));
+-	unsigned long value;
++	u8 value;
+ 	int ret;
+ 
+-	ret = strict_strtoul(buf, 10, &value);
++	ret = kstrtou8(buf, 10, &value);
+ 	if (ret)
+ 		return ret;
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0042-staging-line6-drop-unused-line6_devices-array.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0042-staging-line6-drop-unused-line6_devices-array.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,102 @@
+From: Stefan Hajnoczi <stefanha at redhat.com>
+Date: Mon, 15 Oct 2012 20:26:46 +0200
+Subject: [042/106] staging: line6: drop unused line6_devices[] array
+
+commit b430b3dbdb74e86ee7da7a335cbca2c630167528 upstream.
+
+There is no reason to limit the number of line6 devices.  Drop the
+static array.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.c |   20 +-------------------
+ drivers/staging/line6/driver.h |    2 --
+ 2 files changed, 1 insertion(+), 21 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index b8358ca..ac11a3b 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -96,8 +96,6 @@ static const char line6_request_version[] = {
+ 	0xf0, 0x7e, 0x7f, 0x06, 0x01, 0xf7
+ };
+ 
+-struct usb_line6 *line6_devices[LINE6_MAX_DEVICES];
+-
+ /**
+ 	 Class for asynchronous messages.
+ */
+@@ -740,7 +738,6 @@ static int line6_probe(struct usb_interface *interface,
+ 	struct usb_device *usbdev;
+ 	struct usb_line6 *line6;
+ 	const struct line6_properties *properties;
+-	int devnum;
+ 	int interface_number, alternate = 0;
+ 	int product;
+ 	int size = 0;
+@@ -774,16 +771,6 @@ static int line6_probe(struct usb_interface *interface,
+ 		goto err_put;
+ 	}
+ 
+-	/* find free slot in device table: */
+-	for (devnum = 0; devnum < LINE6_MAX_DEVICES; ++devnum)
+-		if (line6_devices[devnum] == NULL)
+-			break;
+-
+-	if (devnum == LINE6_MAX_DEVICES) {
+-		ret = -ENODEV;
+-		goto err_put;
+-	}
+-
+ 	/* initialize device info: */
+ 	properties = &line6_properties_table[devtype];
+ 	dev_info(&interface->dev, "Line6 %s found\n", properties->name);
+@@ -1112,7 +1099,6 @@ static int line6_probe(struct usb_interface *interface,
+ 
+ 	dev_info(&interface->dev, "Line6 %s now attached\n",
+ 		 line6->properties->name);
+-	line6_devices[devnum] = line6;
+ 
+ 	switch (product) {
+ 	case LINE6_DEVID_PODX3:
+@@ -1141,7 +1127,7 @@ static void line6_disconnect(struct usb_interface *interface)
+ {
+ 	struct usb_line6 *line6;
+ 	struct usb_device *usbdev;
+-	int interface_number, i;
++	int interface_number;
+ 
+ 	if (interface == NULL)
+ 		return;
+@@ -1214,10 +1200,6 @@ static void line6_disconnect(struct usb_interface *interface)
+ 
+ 		dev_info(&interface->dev, "Line6 %s now disconnected\n",
+ 			 line6->properties->name);
+-
+-		for (i = LINE6_MAX_DEVICES; i--;)
+-			if (line6_devices[i] == line6)
+-				line6_devices[i] = NULL;
+ 	}
+ 
+ 	line6_destruct(interface);
+diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h
+index a3029eb..35246cf 100644
+--- a/drivers/staging/line6/driver.h
++++ b/drivers/staging/line6/driver.h
+@@ -25,7 +25,6 @@
+ #endif
+ 
+ #define LINE6_TIMEOUT 1
+-#define LINE6_MAX_DEVICES 8
+ #define LINE6_BUFSIZE_LISTEN 32
+ #define LINE6_MESSAGE_MAXLEN 256
+ 
+@@ -78,7 +77,6 @@ do {					\
+ } while (0)
+ 
+ extern const unsigned char line6_midi_id[3];
+-extern struct usb_line6 *line6_devices[LINE6_MAX_DEVICES];
+ 
+ static const int SYSEX_DATA_OFS = sizeof(line6_midi_id) + 3;
+ static const int SYSEX_EXTRA_SIZE = sizeof(line6_midi_id) + 4;

Added: dists/sid/linux/debian/patches/features/all/line6/0043-staging-line6-drop-unused-line6_index-and-line6_id-a.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0043-staging-line6-drop-unused-line6_index-and-line6_id-a.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,44 @@
+From: Stefan Hajnoczi <stefanha at redhat.com>
+Date: Mon, 15 Oct 2012 20:52:27 +0200
+Subject: [043/106] staging: line6: drop unused line6_index and line6_id
+ arrays
+
+commit 54cd1e42f31040c74694a3b2de83cd2cbb2fff55 upstream.
+
+The line6 driver does not support 'index' and 'id' module parameters so
+there is no need to keep arrays for these values.  Do what other sound
+drivers do and use the scalar constants instead of dummy arrays.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/audio.c |    8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/staging/line6/audio.c b/drivers/staging/line6/audio.c
+index 8e73983..a92e21f 100644
+--- a/drivers/staging/line6/audio.c
++++ b/drivers/staging/line6/audio.c
+@@ -16,20 +16,16 @@
+ #include "driver.h"
+ #include "audio.h"
+ 
+-static int line6_index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
+-static char *line6_id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
+-
+ /*
+ 	Initialize the Line6 USB audio system.
+ */
+ int line6_init_audio(struct usb_line6 *line6)
+ {
+-	static int dev;
+ 	struct snd_card *card;
+ 	int err;
+ 
+-	err = snd_card_create(line6_index[dev], line6_id[dev], THIS_MODULE, 0,
+-			      &card);
++	err = snd_card_create(SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1,
++			      THIS_MODULE, 0, &card);
+ 	if (err < 0)
+ 		return err;
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0044-staging-line6-wrap-80-char-lines-in-capture.c.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0044-staging-line6-wrap-80-char-lines-in-capture.c.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,57 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sun, 11 Nov 2012 13:24:39 +0100
+Subject: [044/106] staging: line6: wrap >80 char lines in capture.c
+
+commit a71cac2a4c502b2ef6715b1576681834f9dbe693 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/capture.c |   13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c
+index c85c5b6..389c41f 100644
+--- a/drivers/staging/line6/capture.c
++++ b/drivers/staging/line6/capture.c
+@@ -256,8 +256,8 @@ static void audio_in_callback(struct urb *urb)
+ #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+ 		if (!(line6pcm->flags & LINE6_BITS_PCM_IMPULSE))
+ #endif
+-			if (test_bit(LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM, &line6pcm->flags)
+-			    && (fsize > 0))
++			if (test_bit(LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM,
++				     &line6pcm->flags) && (fsize > 0))
+ 				line6_capture_copy(line6pcm, fbuf, fsize);
+ 	}
+ 
+@@ -274,7 +274,8 @@ static void audio_in_callback(struct urb *urb)
+ #ifdef CONFIG_LINE6_USB_IMPULSE_RESPONSE
+ 		if (!(line6pcm->flags & LINE6_BITS_PCM_IMPULSE))
+ #endif
+-			if (test_bit(LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM, &line6pcm->flags))
++			if (test_bit(LINE6_INDEX_PCM_ALSA_CAPTURE_STREAM,
++				     &line6pcm->flags))
+ 				line6_capture_check_period(line6pcm, length);
+ 	}
+ }
+@@ -356,7 +357,8 @@ int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+ #ifdef CONFIG_PM
+ 	case SNDRV_PCM_TRIGGER_RESUME:
+ #endif
+-		err = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_STREAM);
++		err = line6_pcm_acquire(line6pcm,
++					LINE6_BIT_PCM_ALSA_CAPTURE_STREAM);
+ 
+ 		if (err < 0)
+ 			return err;
+@@ -367,7 +369,8 @@ int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+ #ifdef CONFIG_PM
+ 	case SNDRV_PCM_TRIGGER_SUSPEND:
+ #endif
+-		err = line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_STREAM);
++		err = line6_pcm_release(line6pcm,
++					LINE6_BIT_PCM_ALSA_CAPTURE_STREAM);
+ 
+ 		if (err < 0)
+ 			return err;

Added: dists/sid/linux/debian/patches/features/all/line6/0045-staging-line6-fix-quoted-string-across-lines-in-midi.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0045-staging-line6-fix-quoted-string-across-lines-in-midi.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,35 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sun, 11 Nov 2012 13:24:40 +0100
+Subject: [045/106] staging: line6: fix quoted string across lines in
+ midibuf.c
+
+commit b3a24fc4e2ded4f28d5f4c69ea01fea721608658 upstream.
+
+Checkpatch warns when quoted strings are split across lines.  The
+rationale is that quoted strings should be left on a single line so that
+grep works.  (The 80 character line limit does not apply to quoted
+strings.)
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/midibuf.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/staging/line6/midibuf.c b/drivers/staging/line6/midibuf.c
+index 836e8c8..968e0de 100644
+--- a/drivers/staging/line6/midibuf.c
++++ b/drivers/staging/line6/midibuf.c
+@@ -64,9 +64,9 @@ int line6_midibuf_init(struct MidiBuffer *this, int size, int split)
+ 
+ void line6_midibuf_status(struct MidiBuffer *this)
+ {
+-	pr_debug("midibuf size=%d split=%d pos_read=%d pos_write=%d "
+-	       "full=%d command_prev=%02x\n", this->size, this->split,
+-	       this->pos_read, this->pos_write, this->full, this->command_prev);
++	pr_debug("midibuf size=%d split=%d pos_read=%d pos_write=%d full=%d command_prev=%02x\n",
++		 this->size, this->split, this->pos_read, this->pos_write,
++		 this->full, this->command_prev);
+ }
+ 
+ int line6_midibuf_bytes_free(struct MidiBuffer *this)

Added: dists/sid/linux/debian/patches/features/all/line6/0046-staging-line6-shorten-comment-below-80-chars-in-pcm..patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0046-staging-line6-shorten-comment-below-80-chars-in-pcm..patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,34 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sun, 11 Nov 2012 13:24:41 +0100
+Subject: [046/106] staging: line6: shorten comment below 80 chars in pcm.c
+
+commit 928f25ee4393a94d80ab829427e1047a64702187 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pcm.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
+index 7fe44a6..6c1e313 100644
+--- a/drivers/staging/line6/pcm.c
++++ b/drivers/staging/line6/pcm.c
+@@ -109,7 +109,7 @@ int line6_pcm_acquire(struct snd_line6_pcm *line6pcm, int channels)
+ 	line6pcm->prev_fbuf = NULL;
+ 
+ 	if (test_flags(flags_old, flags_new, LINE6_BITS_CAPTURE_BUFFER)) {
+-		/* We may be invoked multiple times in a row so allocate once only */
++		/* Invoked multiple times in a row so allocate once only */
+ 		if (!line6pcm->buffer_in) {
+ 			line6pcm->buffer_in =
+ 				kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *
+@@ -148,7 +148,7 @@ int line6_pcm_acquire(struct snd_line6_pcm *line6pcm, int channels)
+ 	}
+ 
+ 	if (test_flags(flags_old, flags_new, LINE6_BITS_PLAYBACK_BUFFER)) {
+-		/* We may be invoked multiple times in a row so allocate once only */
++		/* Invoked multiple times in a row so allocate once only */
+ 		if (!line6pcm->buffer_out) {
+ 			line6pcm->buffer_out =
+ 				kmalloc(LINE6_ISO_BUFFERS * LINE6_ISO_PACKETS *

Added: dists/sid/linux/debian/patches/features/all/line6/0047-staging-line6-drop-trailing-whitespace-in-pcm.h.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0047-staging-line6-drop-trailing-whitespace-in-pcm.h.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,25 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sun, 11 Nov 2012 13:24:42 +0100
+Subject: [047/106] staging: line6: drop trailing whitespace in pcm.h
+
+commit b957e0ceb667fe4f2a18275b5187b2813b983baf upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pcm.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/staging/line6/pcm.h b/drivers/staging/line6/pcm.h
+index 5210ec8..6aa0d46 100644
+--- a/drivers/staging/line6/pcm.h
++++ b/drivers/staging/line6/pcm.h
+@@ -167,7 +167,7 @@ enum {
+ #endif
+ 	    LINE6_BIT_PCM_ALSA_CAPTURE_STREAM |
+ 	    LINE6_BIT_PCM_MONITOR_CAPTURE_STREAM,
+-	
++
+ 	LINE6_BITS_STREAM =
+ 	    LINE6_BITS_PLAYBACK_STREAM |
+ 	    LINE6_BITS_CAPTURE_STREAM

Added: dists/sid/linux/debian/patches/features/all/line6/0048-staging-line6-wrap-lines-to-80-chars-in-playback.c.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0048-staging-line6-wrap-lines-to-80-chars-in-playback.c.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,80 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sun, 11 Nov 2012 13:24:43 +0100
+Subject: [048/106] staging: line6: wrap lines to 80 chars in playback.c
+
+commit 6a8ec8769d4613a5fbd981bfb3e5925b29d4140d upstream.
+
+There are a few instances of 80+ character lines in playback.c.  Two
+instances are just because of a useless comment "this is somewhat
+paranoid", so drop the comment.  Other instances are straightforward
+line wrapping.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/playback.c |   17 +++++++++++------
+ 1 file changed, 11 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/staging/line6/playback.c b/drivers/staging/line6/playback.c
+index a0ab9d0..4cf23af 100644
+--- a/drivers/staging/line6/playback.c
++++ b/drivers/staging/line6/playback.c
+@@ -185,7 +185,7 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+ 	if (urb_size == 0) {
+ 		/* can't determine URB size */
+ 		spin_unlock_irqrestore(&line6pcm->lock_audio_out, flags);
+-		dev_err(line6pcm->line6->ifcdev, "driver bug: urb_size = 0\n");	/* this is somewhat paranoid */
++		dev_err(line6pcm->line6->ifcdev, "driver bug: urb_size = 0\n");
+ 		return -EINVAL;
+ 	}
+ 
+@@ -218,7 +218,8 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
+ 				       len * bytes_per_frame, runtime->dma_area,
+ 				       (urb_frames - len) * bytes_per_frame);
+ 			} else
+-				dev_err(line6pcm->line6->ifcdev, "driver bug: len = %d\n", len);	/* this is somewhat paranoid */
++				dev_err(line6pcm->line6->ifcdev, "driver bug: len = %d\n",
++					len);
+ 		} else {
+ 			memcpy(urb_out->transfer_buffer,
+ 			       runtime->dma_area +
+@@ -319,7 +320,8 @@ void line6_unlink_audio_out_urbs(struct snd_line6_pcm *line6pcm)
+ }
+ 
+ /*
+-	Wait until unlinking of all currently active playback URBs has been finished.
++	Wait until unlinking of all currently active playback URBs has been
++	finished.
+ */
+ void line6_wait_clear_audio_out_urbs(struct snd_line6_pcm *line6pcm)
+ {
+@@ -413,7 +415,8 @@ static void audio_out_callback(struct urb *urb)
+ 	if (!shutdown) {
+ 		submit_audio_out_urb(line6pcm);
+ 
+-		if (test_bit(LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM, &line6pcm->flags)) {
++		if (test_bit(LINE6_INDEX_PCM_ALSA_PLAYBACK_STREAM,
++			     &line6pcm->flags)) {
+ 			line6pcm->bytes_out += length;
+ 			if (line6pcm->bytes_out >= line6pcm->period_out) {
+ 				line6pcm->bytes_out %= line6pcm->period_out;
+@@ -499,7 +502,8 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+ #ifdef CONFIG_PM
+ 	case SNDRV_PCM_TRIGGER_RESUME:
+ #endif
+-		err = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM);
++		err = line6_pcm_acquire(line6pcm,
++					LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM);
+ 
+ 		if (err < 0)
+ 			return err;
+@@ -510,7 +514,8 @@ int snd_line6_playback_trigger(struct snd_line6_pcm *line6pcm, int cmd)
+ #ifdef CONFIG_PM
+ 	case SNDRV_PCM_TRIGGER_SUSPEND:
+ #endif
+-		err = line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM);
++		err = line6_pcm_release(line6pcm,
++					LINE6_BIT_PCM_ALSA_PLAYBACK_STREAM);
+ 
+ 		if (err < 0)
+ 			return err;

Added: dists/sid/linux/debian/patches/features/all/line6/0049-staging-line6-replace-deprecated-strict_strtol-in-to.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0049-staging-line6-replace-deprecated-strict_strtol-in-to.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,52 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sun, 11 Nov 2012 13:24:44 +0100
+Subject: [049/106] staging: line6: replace deprecated strict_strtol() in
+ toneport.c
+
+commit b07d945227e4e62d93e26c694bf0e7b70978a7d6 upstream.
+
+The LED value is an int, so replace strict_strtol() with kstrtoint().
+It's safe to pass in the actual variable instead of a local temporary
+because strto*() doesn't write to the result unless the function returns
+success.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/toneport.c |    8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c
+index 31b624b..a529dd3 100644
+--- a/drivers/staging/line6/toneport.c
++++ b/drivers/staging/line6/toneport.c
+@@ -127,13 +127,11 @@ static ssize_t toneport_set_led_red(struct device *dev,
+ 				    const char *buf, size_t count)
+ {
+ 	int retval;
+-	long value;
+ 
+-	retval = strict_strtol(buf, 10, &value);
++	retval = kstrtoint(buf, 10, &led_red);
+ 	if (retval)
+ 		return retval;
+ 
+-	led_red = value;
+ 	toneport_update_led(dev);
+ 	return count;
+ }
+@@ -143,13 +141,11 @@ static ssize_t toneport_set_led_green(struct device *dev,
+ 				      const char *buf, size_t count)
+ {
+ 	int retval;
+-	long value;
+ 
+-	retval = strict_strtol(buf, 10, &value);
++	retval = kstrtoint(buf, 10, &led_green);
+ 	if (retval)
+ 		return retval;
+ 
+-	led_green = value;
+ 	toneport_update_led(dev);
+ 	return count;
+ }

Added: dists/sid/linux/debian/patches/features/all/line6/0050-staging-line6-wrap-lines-to-80-chars-in-usbdefs.h.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0050-staging-line6-wrap-lines-to-80-chars-in-usbdefs.h.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,35 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sun, 11 Nov 2012 13:24:45 +0100
+Subject: [050/106] staging: line6: wrap lines to 80 chars in usbdefs.h
+
+commit 4391bb982b9d0ccbae724dd8f8d95c1ddb725ae3 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/usbdefs.h |   10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/staging/line6/usbdefs.h b/drivers/staging/line6/usbdefs.h
+index 353d59d..43eb540 100644
+--- a/drivers/staging/line6/usbdefs.h
++++ b/drivers/staging/line6/usbdefs.h
+@@ -83,11 +83,15 @@ enum {
+ 	LINE6_BIT(VARIAX),
+ 
+ 	LINE6_BITS_PRO = LINE6_BIT_BASSPODXTPRO | LINE6_BIT_PODXTPRO,
+-	LINE6_BITS_LIVE = LINE6_BIT_BASSPODXTLIVE | LINE6_BIT_PODXTLIVE | LINE6_BIT_PODX3LIVE,
+-	LINE6_BITS_PODXTALL = LINE6_BIT_PODXT | LINE6_BIT_PODXTLIVE | LINE6_BIT_PODXTPRO,
++	LINE6_BITS_LIVE = LINE6_BIT_BASSPODXTLIVE | LINE6_BIT_PODXTLIVE |
++			  LINE6_BIT_PODX3LIVE,
++	LINE6_BITS_PODXTALL = LINE6_BIT_PODXT | LINE6_BIT_PODXTLIVE |
++			      LINE6_BIT_PODXTPRO,
+ 	LINE6_BITS_PODX3ALL = LINE6_BIT_PODX3 | LINE6_BIT_PODX3LIVE,
+ 	LINE6_BITS_PODHDALL = LINE6_BIT_PODHD300 | LINE6_BIT_PODHD500,
+-	LINE6_BITS_BASSPODXTALL	= LINE6_BIT_BASSPODXT |	LINE6_BIT_BASSPODXTLIVE | LINE6_BIT_BASSPODXTPRO
++	LINE6_BITS_BASSPODXTALL	= LINE6_BIT_BASSPODXT |
++				  LINE6_BIT_BASSPODXTLIVE |
++				  LINE6_BIT_BASSPODXTPRO
+ };
+ 
+ /* device supports settings parameter via USB */

Added: dists/sid/linux/debian/patches/features/all/line6/0051-staging-line6-wrap-comment-to-80-chars-in-variax.c.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0051-staging-line6-wrap-comment-to-80-chars-in-variax.c.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,27 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sun, 11 Nov 2012 13:24:46 +0100
+Subject: [051/106] staging: line6: wrap comment to 80 chars in variax.c
+
+commit e5603cbd7f6b8d8ec6a59d3ce11c3fa28ef2a733 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index f97416b..1b85ecc 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -160,7 +160,9 @@ static void variax_startup5(unsigned long data)
+ 	/* current model dump: */
+ 	line6_dump_request_async(&variax->dumpreq, &variax->line6, 0,
+ 				 VARIAX_DUMP_PASS1);
+-	/* passes 2 and 3 are performed implicitly before entering variax_startup6 */
++	/* passes 2 and 3 are performed implicitly before entering
++	 * variax_startup6.
++	 */
+ }
+ 
+ static void variax_startup6(struct usb_line6_variax *variax)

Added: dists/sid/linux/debian/patches/features/all/line6/0052-staging-line6-replace-DEBUG_MESSAGES-with-dev_dbg.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0052-staging-line6-replace-DEBUG_MESSAGES-with-dev_dbg.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,174 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sun, 11 Nov 2012 13:52:24 +0100
+Subject: [052/106] staging: line6: replace DEBUG_MESSAGES() with dev_dbg()
+
+commit e00d33cb5de0c68ed95513d3b4f42f9e3697f8ee upstream.
+
+The dyndbg feature allows dev_dbg() calls to be enabled/disabled at
+runtime and is therefore more convenient than static debug log messages.
+Use dev_dbg() instead of the line6-specific DEBUG_MESSAGES() macro.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.c |    6 ++---
+ drivers/staging/line6/pod.c    |   57 +++++++++++++++-------------------------
+ drivers/staging/line6/variax.c |   12 ++++-----
+ 3 files changed, 28 insertions(+), 47 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index ac11a3b..571f2ce 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -412,10 +412,8 @@ static void line6_data_received(struct urb *urb)
+ 
+ 	if (done < urb->actual_length) {
+ 		line6_midibuf_ignore(mb, done);
+-		DEBUG_MESSAGES(dev_err
+-			       (line6->ifcdev,
+-				"%d %d buffer overflow - message skipped\n",
+-				done, urb->actual_length));
++		dev_dbg(line6->ifcdev, "%d %d buffer overflow - message skipped\n",
++			done, urb->actual_length);
+ 	}
+ 
+ 	for (;;) {
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 9edd053..4a86f7a 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -252,25 +252,19 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 						break;
+ 
+ 					default:
+-						DEBUG_MESSAGES(dev_err
+-							       (pod->
+-								line6.ifcdev,
+-								"unknown dump code %02X\n",
+-								pod->
+-								dumpreq.in_progress));
++						dev_dbg(pod->line6.ifcdev,
++							"unknown dump code %02X\n",
++							pod->dumpreq.in_progress);
+ 					}
+ 
+ 					line6_dump_finished(&pod->dumpreq);
+ 					pod_startup3(pod);
+ 				} else
+-					DEBUG_MESSAGES(dev_err
+-						       (pod->line6.ifcdev,
+-							"wrong size of channel dump message (%d instead of %d)\n",
+-							pod->
+-							line6.message_length,
+-							(int)
+-							sizeof(pod->prog_data) +
+-							7));
++					dev_dbg(pod->line6.ifcdev,
++						"wrong size of channel dump message (%d instead of %d)\n",
++						pod->line6.message_length,
++						(int)sizeof(pod->prog_data) +
++						7);
+ 
+ 				break;
+ 
+@@ -302,11 +296,9 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ #undef PROCESS_SYSTEM_PARAM
+ 
+ 					default:
+-						DEBUG_MESSAGES(dev_err
+-							       (pod->
+-								line6.ifcdev,
+-								"unknown tuner/system response %02X\n",
+-								buf[6]));
++						dev_dbg(pod->line6.ifcdev,
++							"unknown tuner/system response %02X\n",
++							buf[6]);
+ 					}
+ 
+ 					break;
+@@ -321,25 +313,21 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 				break;
+ 
+ 			case POD_SYSEX_CLIP:
+-				DEBUG_MESSAGES(dev_err
+-					       (pod->line6.ifcdev,
+-						"audio clipped\n"));
++				dev_dbg(pod->line6.ifcdev, "audio clipped\n");
+ 				pod->clipping.value = 1;
+ 				wake_up(&pod->clipping.wait);
+ 				break;
+ 
+ 			case POD_SYSEX_STORE:
+-				DEBUG_MESSAGES(dev_err
+-					       (pod->line6.ifcdev,
+-						"message %02X not yet implemented\n",
+-						buf[5]));
++				dev_dbg(pod->line6.ifcdev,
++					"message %02X not yet implemented\n",
++					buf[5]);
+ 				break;
+ 
+ 			default:
+-				DEBUG_MESSAGES(dev_err
+-					       (pod->line6.ifcdev,
+-						"unknown sysex message %02X\n",
+-						buf[5]));
++				dev_dbg(pod->line6.ifcdev,
++					"unknown sysex message %02X\n",
++					buf[5]);
+ 			}
+ 		} else
+ 		    if (memcmp
+@@ -352,9 +340,7 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 			    buf[10];
+ 			pod_startup4(pod);
+ 		} else
+-			DEBUG_MESSAGES(dev_err
+-				       (pod->line6.ifcdev,
+-					"unknown sysex header\n"));
++			dev_dbg(pod->line6.ifcdev, "unknown sysex header\n");
+ 
+ 		break;
+ 
+@@ -362,9 +348,8 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 		break;
+ 
+ 	default:
+-		DEBUG_MESSAGES(dev_err
+-			       (pod->line6.ifcdev,
+-				"POD: unknown message %02X\n", buf[0]));
++		dev_dbg(pod->line6.ifcdev, "POD: unknown message %02X\n",
++			buf[0]);
+ 	}
+ }
+ 
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index 1b85ecc..8df529f 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -262,10 +262,9 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 					     2, VARIAX_DUMP_PASS3);
+ 				}
+ 			} else {
+-				DEBUG_MESSAGES(dev_err
+-					       (variax->line6.ifcdev,
+-						"illegal length %d of model data\n",
+-						variax->line6.message_length));
++				dev_dbg(variax->line6.ifcdev,
++					"illegal length %d of model data\n",
++					variax->line6.message_length);
+ 				line6_dump_finished(&variax->dumpreq);
+ 			}
+ 		} else if (memcmp(buf + 1, variax_request_bank + 1,
+@@ -295,9 +294,8 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 		break;
+ 
+ 	default:
+-		DEBUG_MESSAGES(dev_err
+-			       (variax->line6.ifcdev,
+-				"Variax: unknown message %02X\n", buf[0]));
++		dev_dbg(variax->line6.ifcdev,
++			"Variax: unknown message %02X\n", buf[0]);
+ 	}
+ }
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0053-staging-line6-drop-unused-DEBUG_MESSAGES-macro.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0053-staging-line6-drop-unused-DEBUG_MESSAGES-macro.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,32 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sun, 11 Nov 2012 13:52:25 +0100
+Subject: [053/106] staging: line6: drop unused DEBUG_MESSAGES() macro
+
+commit 60fb08b38eb1c9ffdde52817417f4b87f52be7b3 upstream.
+
+The DEBUG_MESSAGES() macro is no longer needed since dev_dbg() is now
+used for debug messages.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.h |    6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h
+index 35246cf..9dd8ff4 100644
+--- a/drivers/staging/line6/driver.h
++++ b/drivers/staging/line6/driver.h
+@@ -52,12 +52,6 @@
+ 
+ #define LINE6_CHANNEL_MASK 0x0f
+ 
+-#ifdef CONFIG_LINE6_USB_DEBUG
+-#define DEBUG_MESSAGES(x) (x)
+-#else
+-#define DEBUG_MESSAGES(x)
+-#endif
+-
+ #define MISSING_CASE	\
+ 	printk(KERN_ERR "line6usb driver bug: missing case in %s:%d\n", \
+ 		__FILE__, __LINE__)

Added: dists/sid/linux/debian/patches/features/all/line6/0054-staging-line6-drop-unused-CONFIG_LINE6_USB_DEBUG.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0054-staging-line6-drop-unused-CONFIG_LINE6_USB_DEBUG.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,35 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Sun, 11 Nov 2012 13:52:26 +0100
+Subject: [054/106] staging: line6: drop unused CONFIG_LINE6_USB_DEBUG
+
+commit bf83e30ec654e3a6d79e89ae70d1c9811a2387df upstream.
+
+The CONFIG_LINE6_USB_DEBUG option is no longer relevant since dyndbg
+dev_dbg() is now used instead of a compile-time decision whether to
+enable debug messages or not.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/Kconfig |    8 --------
+ 1 file changed, 8 deletions(-)
+
+diff --git a/drivers/staging/line6/Kconfig b/drivers/staging/line6/Kconfig
+index 43120ff..a5ded12 100644
+--- a/drivers/staging/line6/Kconfig
++++ b/drivers/staging/line6/Kconfig
+@@ -23,14 +23,6 @@ menuconfig LINE6_USB
+ 
+ if LINE6_USB
+ 
+-config LINE6_USB_DEBUG
+-	bool "print debug messages"
+-	default n
+-	help
+-	  Say Y here to write debug messages to the syslog.
+-
+-	  If unsure, say N.
+-
+ config LINE6_USB_DUMP_CTRL
+ 	bool "dump control messages"
+ 	default n

Added: dists/sid/linux/debian/patches/features/all/line6/0055-staging-line6-drop-control-URB-dumping-code.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0055-staging-line6-drop-control-URB-dumping-code.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,117 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Wed, 14 Nov 2012 08:50:41 +0100
+Subject: [055/106] staging: line6: drop control URB dumping code
+
+commit 70ce93954f571eb913ee52529fa87fd1a315b2d1 upstream.
+
+The usbmon feature should be used instead of manually dumping control
+URBs.  There are a few advantages to using usbmon:
+
+ * Can be turned on/off at runtime
+ * Provides full USB-level traffic
+ * tcpdump and wireshark support for powerful analysis
+ * No driver-specific code is required
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.c |   36 ------------------------------------
+ drivers/staging/line6/midi.c   |    3 ---
+ 2 files changed, 39 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index 571f2ce..fda92d1e 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -177,22 +177,6 @@ void line6_write_hexdump(struct usb_line6 *line6, char dir,
+ }
+ #endif
+ 
+-#ifdef CONFIG_LINE6_USB_DUMP_CTRL
+-/*
+-	Dump URB data to syslog.
+-*/
+-static void line6_dump_urb(struct urb *urb)
+-{
+-	struct usb_line6 *line6 = (struct usb_line6 *)urb->context;
+-
+-	if (urb->status < 0)
+-		return;
+-
+-	line6_write_hexdump(line6, 'R', (unsigned char *)urb->transfer_buffer,
+-			    urb->actual_length);
+-}
+-#endif
+-
+ /*
+ 	Send raw message in pieces of wMaxPacketSize bytes.
+ */
+@@ -201,10 +185,6 @@ int line6_send_raw_message(struct usb_line6 *line6, const char *buffer,
+ {
+ 	int i, done = 0;
+ 
+-#ifdef CONFIG_LINE6_USB_DUMP_CTRL
+-	line6_write_hexdump(line6, 'S', buffer, size);
+-#endif
+-
+ 	for (i = 0; i < size; i += line6->max_packet_size) {
+ 		int partial;
+ 		const char *frag_buf = buffer + i;
+@@ -259,10 +239,6 @@ static int line6_send_raw_message_async_part(struct message *msg,
+ 			 (char *)msg->buffer + done, bytes,
+ 			 line6_async_request_sent, msg, line6->interval);
+ 
+-#ifdef CONFIG_LINE6_USB_DUMP_CTRL
+-	line6_write_hexdump(line6, 'S', (char *)msg->buffer + done, bytes);
+-#endif
+-
+ 	msg->done += bytes;
+ 	retval = usb_submit_urb(urb, GFP_ATOMIC);
+ 
+@@ -403,10 +379,6 @@ static void line6_data_received(struct urb *urb)
+ 	if (urb->status == -ESHUTDOWN)
+ 		return;
+ 
+-#ifdef CONFIG_LINE6_USB_DUMP_CTRL
+-	line6_dump_urb(urb);
+-#endif
+-
+ 	done =
+ 	    line6_midibuf_write(mb, urb->transfer_buffer, urb->actual_length);
+ 
+@@ -502,10 +474,6 @@ int line6_send_program(struct usb_line6 *line6, u8 value)
+ 	buffer[0] = LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST;
+ 	buffer[1] = value;
+ 
+-#ifdef CONFIG_LINE6_USB_DUMP_CTRL
+-	line6_write_hexdump(line6, 'S', buffer, 2);
+-#endif
+-
+ 	retval = usb_interrupt_msg(line6->usbdev,
+ 				   usb_sndintpipe(line6->usbdev,
+ 						  line6->ep_control_write),
+@@ -539,10 +507,6 @@ int line6_transmit_parameter(struct usb_line6 *line6, int param, u8 value)
+ 	buffer[1] = param;
+ 	buffer[2] = value;
+ 
+-#ifdef CONFIG_LINE6_USB_DUMP_CTRL
+-	line6_write_hexdump(line6, 'S', buffer, 3);
+-#endif
+-
+ 	retval = usb_interrupt_msg(line6->usbdev,
+ 				   usb_sndintpipe(line6->usbdev,
+ 						  line6->ep_control_write),
+diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
+index 5040729..348d425 100644
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -131,9 +131,6 @@ static int send_midi_async(struct usb_line6 *line6, unsigned char *data,
+ 		dev_err(line6->ifcdev, "Out of memory\n");
+ 		return -ENOMEM;
+ 	}
+-#ifdef CONFIG_LINE6_USB_DUMP_CTRL
+-	line6_write_hexdump(line6, 'S', data, length);
+-#endif
+ 
+ 	transfer_buffer = kmemdup(data, length, GFP_ATOMIC);
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0056-staging-line6-drop-CONTROL-from-CONFIG_LINE6_USB_DUM.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0056-staging-line6-drop-CONTROL-from-CONFIG_LINE6_USB_DUM.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,29 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Wed, 14 Nov 2012 08:50:42 +0100
+Subject: [056/106] staging: line6: drop CONTROL from
+ CONFIG_LINE6_USB_DUMP_ANY
+
+commit 19ae77935e45d60bf64144e2d67074a2886db245 upstream.
+
+CONFIG_LINE6_USB_DUMP_CTRL is no longer used by the code and therefore
+no longer plays a role in CONFIG_LINE6_USB_DUMP_ANY.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h
+index 9dd8ff4..7770635 100644
+--- a/drivers/staging/line6/driver.h
++++ b/drivers/staging/line6/driver.h
+@@ -20,7 +20,7 @@
+ 
+ #define DRIVER_NAME "line6usb"
+ 
+-#if defined(CONFIG_LINE6_USB_DUMP_CTRL) || defined(CONFIG_LINE6_USB_DUMP_MIDI) || defined(CONFIG_LINE6_USB_DUMP_PCM)
++#if defined(CONFIG_LINE6_USB_DUMP_MIDI) || defined(CONFIG_LINE6_USB_DUMP_PCM)
+ #define CONFIG_LINE6_USB_DUMP_ANY
+ #endif
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0057-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_CTRL.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0057-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_CTRL.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,32 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Wed, 14 Nov 2012 08:50:43 +0100
+Subject: [057/106] staging: line6: drop unused CONFIG_LINE6_USB_DUMP_CTRL
+
+commit 4aea449ac8c4955f18c49ecb6fd3e0417a2073c0 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/Kconfig |    9 ---------
+ 1 file changed, 9 deletions(-)
+
+diff --git a/drivers/staging/line6/Kconfig b/drivers/staging/line6/Kconfig
+index a5ded12..2101799 100644
+--- a/drivers/staging/line6/Kconfig
++++ b/drivers/staging/line6/Kconfig
+@@ -23,15 +23,6 @@ menuconfig LINE6_USB
+ 
+ if LINE6_USB
+ 
+-config LINE6_USB_DUMP_CTRL
+-	bool "dump control messages"
+-	default n
+-	help
+-	  Say Y here to write control messages sent to and received from
+-	  Line6 devices to the syslog.
+-
+-	  If unsure, say N.
+-
+ config LINE6_USB_DUMP_MIDI
+ 	bool "dump MIDI messages"
+ 	default n

Added: dists/sid/linux/debian/patches/features/all/line6/0058-staging-line6-drop-MIDI-dumping-code.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0058-staging-line6-drop-MIDI-dumping-code.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,46 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Wed, 14 Nov 2012 08:50:44 +0100
+Subject: [058/106] staging: line6: drop MIDI dumping code
+
+commit 36a01f4d971c4d2d9923a94ca21ccd3f2d579563 upstream.
+
+ALSA amidi(1) and aseqdump(1) can be used to dump MIDI instead of
+manually dumping MIDI messages in the driver.  The advantage of using
+these existing tools is that can be used at run-time rather than
+compile-time.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.c |    3 ---
+ drivers/staging/line6/midi.c   |    3 ---
+ 2 files changed, 6 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index fda92d1e..0bc838d 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -402,9 +402,6 @@ static void line6_data_received(struct urb *urb)
+ 			continue;
+ 
+ 		line6->message_length = done;
+-#ifdef CONFIG_LINE6_USB_DUMP_MIDI
+-		line6_write_hexdump(line6, 'r', line6->buffer_message, done);
+-#endif
+ 		line6_midi_receive(line6, line6->buffer_message, done);
+ 
+ 		switch (line6->usbdev->descriptor.idProduct) {
+diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
+index 348d425..c8e099b 100644
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -59,9 +59,6 @@ static void line6_midi_transmit(struct snd_rawmidi_substream *substream)
+ 		if (done == 0)
+ 			break;
+ 
+-#ifdef CONFIG_LINE6_USB_DUMP_MIDI
+-		line6_write_hexdump(line6, 's', chunk, done);
+-#endif
+ 		line6_midibuf_write(mb, chunk, done);
+ 		snd_rawmidi_transmit_ack(substream, done);
+ 	}

Added: dists/sid/linux/debian/patches/features/all/line6/0059-staging-line6-drop-MIDI-from-CONFIG_LINE6_USB_DUMP_A.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0059-staging-line6-drop-MIDI-from-CONFIG_LINE6_USB_DUMP_A.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,28 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Wed, 14 Nov 2012 08:50:45 +0100
+Subject: [059/106] staging: line6: drop MIDI from CONFIG_LINE6_USB_DUMP_ANY
+
+commit 10c39f1d717d3e5e8bcb2998f7dee4362edda26a upstream.
+
+CONFIG_LINE6_USB_DUMP_MIDI is no longer used by the code and therefore
+no longer plays a role in CONFIG_LINE6_USB_DUMP_ANY.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h
+index 7770635..f0be5a2 100644
+--- a/drivers/staging/line6/driver.h
++++ b/drivers/staging/line6/driver.h
+@@ -20,7 +20,7 @@
+ 
+ #define DRIVER_NAME "line6usb"
+ 
+-#if defined(CONFIG_LINE6_USB_DUMP_MIDI) || defined(CONFIG_LINE6_USB_DUMP_PCM)
++#if defined(CONFIG_LINE6_USB_DUMP_PCM)
+ #define CONFIG_LINE6_USB_DUMP_ANY
+ #endif
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0060-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_MIDI.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0060-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_MIDI.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,32 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Wed, 14 Nov 2012 08:50:46 +0100
+Subject: [060/106] staging: line6: drop unused CONFIG_LINE6_USB_DUMP_MIDI
+
+commit c6c2f47f30c44f3fdae9362f811f95109f81303e upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/Kconfig |    9 ---------
+ 1 file changed, 9 deletions(-)
+
+diff --git a/drivers/staging/line6/Kconfig b/drivers/staging/line6/Kconfig
+index 2101799..80a7202 100644
+--- a/drivers/staging/line6/Kconfig
++++ b/drivers/staging/line6/Kconfig
+@@ -23,15 +23,6 @@ menuconfig LINE6_USB
+ 
+ if LINE6_USB
+ 
+-config LINE6_USB_DUMP_MIDI
+-	bool "dump MIDI messages"
+-	default n
+-	help
+-	  Say Y here to write MIDI messages sent to and received from
+-	  Line6 devices to the syslog.
+-
+-	  If unsure, say N.
+-
+ config LINE6_USB_DUMP_PCM
+ 	bool "dump PCM data"
+ 	default n

Added: dists/sid/linux/debian/patches/features/all/line6/0061-staging-line6-drop-channel-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0061-staging-line6-drop-channel-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,133 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:40 +0100
+Subject: [061/106] staging: line6: drop channel sysfs attr
+
+commit 236666e958dd3e0d2b9caf226b49633475d6cbd2 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   51 -------------------------------------------
+ drivers/staging/line6/pod.h |    5 -----
+ 2 files changed, 56 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 4a86f7a..e3e2247 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -223,7 +223,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE:
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST:
+-		pod->channel_num = buf[1];
+ 		pod->dirty = 0;
+ 		set_bit(POD_CHANNEL_DIRTY, &pod->atomic_flags);
+ 		line6_dump_request_async(&pod->dumpreq, &pod->line6, 0,
+@@ -388,19 +387,6 @@ void line6_pod_midi_postprocess(struct usb_line6_pod *pod, unsigned char *data,
+ }
+ 
+ /*
+-	Send channel number (i.e., switch to a different sound).
+-*/
+-static void pod_send_channel(struct usb_line6_pod *pod, u8 value)
+-{
+-	line6_invalidate_current(&pod->dumpreq);
+-
+-	if (line6_send_program(&pod->line6, value) == 0)
+-		pod->channel_num = value;
+-	else
+-		line6_dump_finished(&pod->dumpreq);
+-}
+-
+-/*
+ 	Transmit PODxt Pro control parameter.
+ */
+ void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
+@@ -526,37 +512,6 @@ static ssize_t get_name_generic(struct usb_line6_pod *pod, const char *str,
+ }
+ 
+ /*
+-	"read" request on "channel" special file.
+-*/
+-static ssize_t pod_get_channel(struct device *dev,
+-			       struct device_attribute *attr, char *buf)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	return sprintf(buf, "%d\n", pod->channel_num);
+-}
+-
+-/*
+-	"write" request on "channel" special file.
+-*/
+-static ssize_t pod_set_channel(struct device *dev,
+-			       struct device_attribute *attr,
+-			       const char *buf, size_t count)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	u8 value;
+-	int ret;
+-
+-	ret = kstrtou8(buf, 10, &value);
+-	if (ret)
+-		return ret;
+-
+-	pod_send_channel(pod, value);
+-	return count;
+-}
+-
+-/*
+ 	"read" request on "name" special file.
+ */
+ static ssize_t pod_get_name(struct device *dev, struct device_attribute *attr,
+@@ -1036,8 +991,6 @@ POD_GET_SYSTEM_PARAM(tuner_pitch, 1);
+ #undef GET_SYSTEM_PARAM
+ 
+ /* POD special files: */
+-static DEVICE_ATTR(channel, S_IWUSR | S_IRUGO, pod_get_channel,
+-		   pod_set_channel);
+ static DEVICE_ATTR(clip, S_IRUGO, pod_wait_for_clip, line6_nop_write);
+ static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write);
+ static DEVICE_ATTR(dirty, S_IRUGO, pod_get_dirty, line6_nop_write);
+@@ -1153,7 +1106,6 @@ static int pod_create_files2(struct device *dev)
+ {
+ 	int err;
+ 
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_channel));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_clip));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_device_id));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_dirty));
+@@ -1200,8 +1152,6 @@ static int pod_try_init(struct usb_interface *interface,
+ 	if ((interface == NULL) || (pod == NULL))
+ 		return -ENODEV;
+ 
+-	pod->channel_num = 255;
+-
+ 	/* initialize wait queues: */
+ 	init_waitqueue_head(&pod->monitor_level.wait);
+ 	init_waitqueue_head(&pod->routing.wait);
+@@ -1300,7 +1250,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 					       pod->line6.
+ 					       properties->device_bit, dev);
+ 
+-			device_remove_file(dev, &dev_attr_channel);
+ 			device_remove_file(dev, &dev_attr_clip);
+ 			device_remove_file(dev, &dev_attr_device_id);
+ 			device_remove_file(dev, &dev_attr_dirty);
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index 47e0d1a..0f9e83d 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -89,11 +89,6 @@ struct usb_line6_pod {
+ 	struct line6_dump_request dumpreq;
+ 
+ 	/**
+-		Current program number.
+-	*/
+-	unsigned char channel_num;
+-
+-	/**
+ 		Current program settings.
+ 	*/
+ 	struct pod_program prog_data;

Added: dists/sid/linux/debian/patches/features/all/line6/0062-staging-line6-drop-clip-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0062-staging-line6-drop-clip-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,105 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:41 +0100
+Subject: [062/106] staging: line6: drop clip sysfs attr
+
+commit cab3c900c191a21dad70fcc35d0156dc42d509c8 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   23 -----------------------
+ drivers/staging/line6/pod.h |    5 -----
+ 2 files changed, 28 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index e3e2247..4abe2de 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -26,7 +26,6 @@
+ /* *INDENT-OFF* */
+ 
+ enum {
+-	POD_SYSEX_CLIP      = 0x0f,
+ 	POD_SYSEX_SAVE      = 0x24,
+ 	POD_SYSEX_SYSTEM    = 0x56,
+ 	POD_SYSEX_SYSTEMREQ = 0x57,
+@@ -311,12 +310,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 				pod_save_button_pressed(pod, buf[6], buf[7]);
+ 				break;
+ 
+-			case POD_SYSEX_CLIP:
+-				dev_dbg(pod->line6.ifcdev, "audio clipped\n");
+-				pod->clipping.value = 1;
+-				wake_up(&pod->clipping.wait);
+-				break;
+-
+ 			case POD_SYSEX_STORE:
+ 				dev_dbg(pod->line6.ifcdev,
+ 					"message %02X not yet implemented\n",
+@@ -879,18 +872,6 @@ static ssize_t pod_get_device_id(struct device *dev,
+ }
+ 
+ /*
+-	"read" request on "clip" special file.
+-*/
+-static ssize_t pod_wait_for_clip(struct device *dev,
+-				 struct device_attribute *attr, char *buf)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	return wait_event_interruptible(pod->clipping.wait,
+-					pod->clipping.value != 0);
+-}
+-
+-/*
+ 	POD startup procedure.
+ 	This is a sequence of functions with special requirements (e.g., must
+ 	not run immediately after initialization, must not run in interrupt
+@@ -991,7 +972,6 @@ POD_GET_SYSTEM_PARAM(tuner_pitch, 1);
+ #undef GET_SYSTEM_PARAM
+ 
+ /* POD special files: */
+-static DEVICE_ATTR(clip, S_IRUGO, pod_wait_for_clip, line6_nop_write);
+ static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write);
+ static DEVICE_ATTR(dirty, S_IRUGO, pod_get_dirty, line6_nop_write);
+ static DEVICE_ATTR(dump, S_IWUSR | S_IRUGO, pod_get_dump, pod_set_dump);
+@@ -1106,7 +1086,6 @@ static int pod_create_files2(struct device *dev)
+ {
+ 	int err;
+ 
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_clip));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_device_id));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_dirty));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_dump));
+@@ -1159,7 +1138,6 @@ static int pod_try_init(struct usb_interface *interface,
+ 	init_waitqueue_head(&pod->tuner_freq.wait);
+ 	init_waitqueue_head(&pod->tuner_note.wait);
+ 	init_waitqueue_head(&pod->tuner_pitch.wait);
+-	init_waitqueue_head(&pod->clipping.wait);
+ 
+ 	memset(pod->param_dirty, 0xff, sizeof(pod->param_dirty));
+ 
+@@ -1250,7 +1228,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 					       pod->line6.
+ 					       properties->device_bit, dev);
+ 
+-			device_remove_file(dev, &dev_attr_clip);
+ 			device_remove_file(dev, &dev_attr_device_id);
+ 			device_remove_file(dev, &dev_attr_dirty);
+ 			device_remove_file(dev, &dev_attr_dump);
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index 0f9e83d..fa247b8 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -133,11 +133,6 @@ struct usb_line6_pod {
+ 	struct ValueWait routing;
+ 
+ 	/**
+-		Wait for audio clipping event.
+-	*/
+-	struct ValueWait clipping;
+-
+-	/**
+ 		Timer for device initializaton.
+ 	*/
+ 	struct timer_list startup_timer;

Added: dists/sid/linux/debian/patches/features/all/line6/0063-staging-line6-drop-unused-param_dirty-bitmap.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0063-staging-line6-drop-unused-param_dirty-bitmap.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,88 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:42 +0100
+Subject: [063/106] staging: line6: drop unused param_dirty bitmap
+
+commit 9c29cf51d16f36c6b20b49091a1263a28aba7794 upstream.
+
+The param_dirty bitmap tracks which parameters have been modified since
+saving a preset.  The bitmap is never used though so we can drop this
+deadcode.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   16 ----------------
+ drivers/staging/line6/pod.h |    5 -----
+ 2 files changed, 21 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 4abe2de..8fdbe9f 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -130,17 +130,6 @@ static void pod_startup2(unsigned long data);
+ static void pod_startup3(struct usb_line6_pod *pod);
+ static void pod_startup4(struct usb_line6_pod *pod);
+ 
+-/*
+-	Mark all parameters as dirty and notify waiting processes.
+-*/
+-static void pod_mark_batch_all_dirty(struct usb_line6_pod *pod)
+-{
+-	int i;
+-
+-	for (i = 0; i < POD_CONTROL_SIZE; i++)
+-		set_bit(i, pod->param_dirty);
+-}
+-
+ static char *pod_alloc_sysex_buffer(struct usb_line6_pod *pod, int code,
+ 				    int size)
+ {
+@@ -163,7 +152,6 @@ static void pod_dump(struct usb_line6_pod *pod, const unsigned char *data)
+ 	memcpy(sysex + SYSEX_DATA_OFS + 1, data, sizeof(pod->prog_data));
+ 	line6_send_sysex_message(&pod->line6, sysex, size);
+ 	memcpy(&pod->prog_data, data, sizeof(pod->prog_data));
+-	pod_mark_batch_all_dirty(pod);
+ 	kfree(sysex);
+ }
+ 
+@@ -173,7 +161,6 @@ static void pod_dump(struct usb_line6_pod *pod, const unsigned char *data)
+ static void pod_store_parameter(struct usb_line6_pod *pod, int param, int value)
+ {
+ 	pod->prog_data.control[param] = value;
+-	set_bit(param, pod->param_dirty);
+ 	pod->dirty = 1;
+ }
+ 
+@@ -239,7 +226,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 					case LINE6_DUMP_CURRENT:
+ 						memcpy(&pod->prog_data, buf + 7,
+ 						       sizeof(pod->prog_data));
+-						pod_mark_batch_all_dirty(pod);
+ 						break;
+ 
+ 					case POD_DUMP_MEMORY:
+@@ -1139,8 +1125,6 @@ static int pod_try_init(struct usb_interface *interface,
+ 	init_waitqueue_head(&pod->tuner_note.wait);
+ 	init_waitqueue_head(&pod->tuner_pitch.wait);
+ 
+-	memset(pod->param_dirty, 0xff, sizeof(pod->param_dirty));
+-
+ 	/* initialize USB buffers: */
+ 	err = line6_dumpreq_init(&pod->dumpreq, pod_request_channel,
+ 				 sizeof(pod_request_channel));
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index fa247b8..dd6c318 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -148,11 +148,6 @@ struct usb_line6_pod {
+ 	int startup_progress;
+ 
+ 	/**
+-		Dirty flags for access to parameter data.
+-	*/
+-	unsigned long param_dirty[POD_CONTROL_SIZE / sizeof(unsigned long)];
+-
+-	/**
+ 		Some atomic flags.
+ 	*/
+ 	unsigned long atomic_flags;

Added: dists/sid/linux/debian/patches/features/all/line6/0064-staging-line6-drop-dirty-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0064-staging-line6-drop-dirty-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,107 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:43 +0100
+Subject: [064/106] staging: line6: drop dirty sysfs attr
+
+commit b772fe9e33b685bc552bc40eab6ff3160aee86c7 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   21 +--------------------
+ drivers/staging/line6/pod.h |    5 -----
+ 2 files changed, 1 insertion(+), 25 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 8fdbe9f..7c76b65 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -156,12 +156,11 @@ static void pod_dump(struct usb_line6_pod *pod, const unsigned char *data)
+ }
+ 
+ /*
+-	Store parameter value in driver memory and mark it as dirty.
++	Store parameter value in driver memory.
+ */
+ static void pod_store_parameter(struct usb_line6_pod *pod, int param, int value)
+ {
+ 	pod->prog_data.control[param] = value;
+-	pod->dirty = 1;
+ }
+ 
+ /*
+@@ -170,7 +169,6 @@ static void pod_store_parameter(struct usb_line6_pod *pod, int param, int value)
+ static void pod_save_button_pressed(struct usb_line6_pod *pod, int type,
+ 				    int index)
+ {
+-	pod->dirty = 0;
+ 	set_bit(POD_SAVE_PRESSED, &pod->atomic_flags);
+ }
+ 
+@@ -209,7 +207,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE:
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST:
+-		pod->dirty = 0;
+ 		set_bit(POD_CHANNEL_DIRTY, &pod->atomic_flags);
+ 		line6_dump_request_async(&pod->dumpreq, &pod->line6, 0,
+ 					 LINE6_DUMP_CURRENT);
+@@ -778,19 +775,6 @@ static ssize_t pod_set_retrieve_amp_setup(struct device *dev,
+ }
+ 
+ /*
+-	"read" request on "dirty" special file.
+-*/
+-static ssize_t pod_get_dirty(struct device *dev, struct device_attribute *attr,
+-			     char *buf)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	buf[0] = pod->dirty ? '1' : '0';
+-	buf[1] = '\n';
+-	return 2;
+-}
+-
+-/*
+ 	"read" request on "midi_postprocess" special file.
+ */
+ static ssize_t pod_get_midi_postprocess(struct device *dev,
+@@ -959,7 +943,6 @@ POD_GET_SYSTEM_PARAM(tuner_pitch, 1);
+ 
+ /* POD special files: */
+ static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write);
+-static DEVICE_ATTR(dirty, S_IRUGO, pod_get_dirty, line6_nop_write);
+ static DEVICE_ATTR(dump, S_IWUSR | S_IRUGO, pod_get_dump, pod_set_dump);
+ static DEVICE_ATTR(dump_buf, S_IWUSR | S_IRUGO, pod_get_dump_buf,
+ 		   pod_set_dump_buf);
+@@ -1073,7 +1056,6 @@ static int pod_create_files2(struct device *dev)
+ 	int err;
+ 
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_device_id));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_dirty));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_dump));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_dump_buf));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_finish));
+@@ -1213,7 +1195,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 					       properties->device_bit, dev);
+ 
+ 			device_remove_file(dev, &dev_attr_device_id);
+-			device_remove_file(dev, &dev_attr_dirty);
+ 			device_remove_file(dev, &dev_attr_dump);
+ 			device_remove_file(dev, &dev_attr_dump_buf);
+ 			device_remove_file(dev, &dev_attr_finish);
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index dd6c318..b3bf243 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -168,11 +168,6 @@ struct usb_line6_pod {
+ 	int device_id;
+ 
+ 	/**
+-		Flag to indicate modification of current program settings.
+-	*/
+-	char dirty;
+-
+-	/**
+ 		Flag to enable MIDI postprocessing.
+ 	*/
+ 	char midi_postprocess;

Added: dists/sid/linux/debian/patches/features/all/line6/0065-staging-line6-drop-dump-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0065-staging-line6-drop-dump-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,121 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:44 +0100
+Subject: [065/106] staging: line6: drop dump sysfs attr
+
+commit 980688f9d79ef2e169037a94ae2c7a3e08f7adc3 upstream.
+
+Once further sysfs attrs have been removed it will also be possible to
+drop prog_data and other pieces which we keep for now.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   60 +++----------------------------------------
+ 1 file changed, 3 insertions(+), 57 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 7c76b65..56eab0a 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -138,24 +138,6 @@ static char *pod_alloc_sysex_buffer(struct usb_line6_pod *pod, int code,
+ }
+ 
+ /*
+-	Send channel dump data to the PODxt Pro.
+-*/
+-static void pod_dump(struct usb_line6_pod *pod, const unsigned char *data)
+-{
+-	int size = 1 + sizeof(pod->prog_data);
+-	char *sysex = pod_alloc_sysex_buffer(pod, POD_SYSEX_DUMP, size);
+-	if (!sysex)
+-		return;
+-	/* Don't know what this is good for, but PODxt Pro transmits it, so we
+-	 * also do... */
+-	sysex[SYSEX_DATA_OFS] = 5;
+-	memcpy(sysex + SYSEX_DATA_OFS + 1, data, sizeof(pod->prog_data));
+-	line6_send_sysex_message(&pod->line6, sysex, size);
+-	memcpy(&pod->prog_data, data, sizeof(pod->prog_data));
+-	kfree(sysex);
+-}
+-
+-/*
+ 	Store parameter value in driver memory.
+ */
+ static void pod_store_parameter(struct usb_line6_pod *pod, int param, int value)
+@@ -411,7 +393,9 @@ static ssize_t pod_send_store_command(struct device *dev, const char *buf,
+ 	if (!sysex)
+ 		return 0;
+ 
+-	sysex[SYSEX_DATA_OFS] = 5;	/* see pod_dump() */
++	/* Don't know what this is good for, but PODxt Pro transmits it, so we
++	 * also do... */
++	sysex[SYSEX_DATA_OFS] = 5;
+ 	ret = pod_resolve(buf, block0, block1, sysex + SYSEX_DATA_OFS + 1);
+ 	if (ret) {
+ 		kfree(sysex);
+@@ -513,41 +497,6 @@ static ssize_t pod_get_name_buf(struct device *dev,
+ }
+ 
+ /*
+-	"read" request on "dump" special file.
+-*/
+-static ssize_t pod_get_dump(struct device *dev, struct device_attribute *attr,
+-			    char *buf)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	int retval = line6_dump_wait_interruptible(&pod->dumpreq);
+-	if (retval < 0)
+-		return retval;
+-	memcpy(buf, &pod->prog_data, sizeof(pod->prog_data));
+-	return sizeof(pod->prog_data);
+-}
+-
+-/*
+-	"write" request on "dump" special file.
+-*/
+-static ssize_t pod_set_dump(struct device *dev, struct device_attribute *attr,
+-			    const char *buf, size_t count)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-
+-	if (count != sizeof(pod->prog_data)) {
+-		dev_err(pod->line6.ifcdev,
+-			"data block must be exactly %d bytes\n",
+-			(int)sizeof(pod->prog_data));
+-		return -EINVAL;
+-	}
+-
+-	pod_dump(pod, buf);
+-	return sizeof(pod->prog_data);
+-}
+-
+-/*
+ 	Identify system parameters related to the tuner.
+ */
+ static bool pod_is_tuner(int code)
+@@ -943,7 +892,6 @@ POD_GET_SYSTEM_PARAM(tuner_pitch, 1);
+ 
+ /* POD special files: */
+ static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write);
+-static DEVICE_ATTR(dump, S_IWUSR | S_IRUGO, pod_get_dump, pod_set_dump);
+ static DEVICE_ATTR(dump_buf, S_IWUSR | S_IRUGO, pod_get_dump_buf,
+ 		   pod_set_dump_buf);
+ static DEVICE_ATTR(finish, S_IWUSR, line6_nop_read, pod_set_finish);
+@@ -1056,7 +1004,6 @@ static int pod_create_files2(struct device *dev)
+ 	int err;
+ 
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_device_id));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_dump));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_dump_buf));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_finish));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+@@ -1195,7 +1142,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 					       properties->device_bit, dev);
+ 
+ 			device_remove_file(dev, &dev_attr_device_id);
+-			device_remove_file(dev, &dev_attr_dump);
+ 			device_remove_file(dev, &dev_attr_dump_buf);
+ 			device_remove_file(dev, &dev_attr_finish);
+ 			device_remove_file(dev, &dev_attr_firmware_version);

Added: dists/sid/linux/debian/patches/features/all/line6/0066-staging-line6-drop-dump_buf-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0066-staging-line6-drop-dump_buf-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,84 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:45 +0100
+Subject: [066/106] staging: line6: drop dump_buf sysfs attr
+
+commit 4fe520dc27d4912913e9ce1cd76d4e9a1c73b93c upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   40 ----------------------------------------
+ 1 file changed, 40 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 56eab0a..c1eb145 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -610,42 +610,6 @@ static ssize_t pod_set_system_param_string(struct usb_line6_pod *pod,
+ }
+ 
+ /*
+-	"read" request on "dump_buf" special file.
+-*/
+-static ssize_t pod_get_dump_buf(struct device *dev,
+-				struct device_attribute *attr, char *buf)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	int retval = line6_dump_wait_interruptible(&pod->dumpreq);
+-	if (retval < 0)
+-		return retval;
+-	memcpy(buf, &pod->prog_data_buf, sizeof(pod->prog_data_buf));
+-	return sizeof(pod->prog_data_buf);
+-}
+-
+-/*
+-	"write" request on "dump_buf" special file.
+-*/
+-static ssize_t pod_set_dump_buf(struct device *dev,
+-				struct device_attribute *attr,
+-				const char *buf, size_t count)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-
+-	if (count != sizeof(pod->prog_data)) {
+-		dev_err(pod->line6.ifcdev,
+-			"data block must be exactly %d bytes\n",
+-			(int)sizeof(pod->prog_data));
+-		return -EINVAL;
+-	}
+-
+-	memcpy(&pod->prog_data_buf, buf, sizeof(pod->prog_data));
+-	return sizeof(pod->prog_data);
+-}
+-
+-/*
+ 	"write" request on "finish" special file.
+ */
+ static ssize_t pod_set_finish(struct device *dev,
+@@ -892,8 +856,6 @@ POD_GET_SYSTEM_PARAM(tuner_pitch, 1);
+ 
+ /* POD special files: */
+ static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write);
+-static DEVICE_ATTR(dump_buf, S_IWUSR | S_IRUGO, pod_get_dump_buf,
+-		   pod_set_dump_buf);
+ static DEVICE_ATTR(finish, S_IWUSR, line6_nop_read, pod_set_finish);
+ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version,
+ 		   line6_nop_write);
+@@ -1004,7 +966,6 @@ static int pod_create_files2(struct device *dev)
+ 	int err;
+ 
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_device_id));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_dump_buf));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_finish));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+@@ -1142,7 +1103,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 					       properties->device_bit, dev);
+ 
+ 			device_remove_file(dev, &dev_attr_device_id);
+-			device_remove_file(dev, &dev_attr_dump_buf);
+ 			device_remove_file(dev, &dev_attr_finish);
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);

Added: dists/sid/linux/debian/patches/features/all/line6/0067-staging-line6-drop-monitor_level-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0067-staging-line6-drop-monitor_level-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,75 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:46 +0100
+Subject: [067/106] staging: line6: drop monitor_level sysfs attr
+
+commit 410cefa7e9990373d2f46d6ea2c95f1bad284b04 upstream.
+
+The monitor level can be adjusted using an ALSA volume control.
+Therefore the sysfs attribute is unnecessary.  Note that we leave the
+monitor_level driver variable so that the ALSA volume control still
+works.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   12 ++++--------
+ 1 file changed, 4 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index c1eb145..5a941fa 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -244,8 +244,10 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 						break;
+ 
+ 					switch (buf[6]) {
+-						PROCESS_SYSTEM_PARAM
+-						    (monitor_level);
++					case POD_monitor_level:
++						pod->monitor_level.value = value;
++						break;
++
+ 						PROCESS_SYSTEM_PARAM(routing);
+ 						PROCESS_SYSTEM_PARAM
+ 						    (tuner_mute);
+@@ -844,7 +846,6 @@ static ssize_t pod_set_ ## code(struct device *dev, \
+ 	return pod_set_system_param_string(pod, buf, count, POD_ ## code, mask); \
+ }
+ 
+-POD_GET_SET_SYSTEM_PARAM(monitor_level, 0xffff, 0);
+ POD_GET_SET_SYSTEM_PARAM(routing, 0x0003, 0);
+ POD_GET_SET_SYSTEM_PARAM(tuner_mute, 0x0001, 0);
+ POD_GET_SET_SYSTEM_PARAM(tuner_freq, 0xffff, 0);
+@@ -861,8 +862,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version,
+ 		   line6_nop_write);
+ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO,
+ 		   pod_get_midi_postprocess, pod_set_midi_postprocess);
+-static DEVICE_ATTR(monitor_level, S_IWUSR | S_IRUGO, pod_get_monitor_level,
+-		   pod_set_monitor_level);
+ static DEVICE_ATTR(name, S_IRUGO, pod_get_name, line6_nop_write);
+ static DEVICE_ATTR(name_buf, S_IRUGO, pod_get_name_buf, line6_nop_write);
+ static DEVICE_ATTR(retrieve_amp_setup, S_IWUSR, line6_nop_read,
+@@ -969,7 +968,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_finish));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_monitor_level));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_name));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_name_buf));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_amp_setup));
+@@ -1008,7 +1006,6 @@ static int pod_try_init(struct usb_interface *interface,
+ 		return -ENODEV;
+ 
+ 	/* initialize wait queues: */
+-	init_waitqueue_head(&pod->monitor_level.wait);
+ 	init_waitqueue_head(&pod->routing.wait);
+ 	init_waitqueue_head(&pod->tuner_mute.wait);
+ 	init_waitqueue_head(&pod->tuner_freq.wait);
+@@ -1106,7 +1103,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_finish);
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+-			device_remove_file(dev, &dev_attr_monitor_level);
+ 			device_remove_file(dev, &dev_attr_name);
+ 			device_remove_file(dev, &dev_attr_name_buf);
+ 			device_remove_file(dev, &dev_attr_retrieve_amp_setup);

Added: dists/sid/linux/debian/patches/features/all/line6/0068-staging-line6-change-monitor_level-type-ValueWait-in.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0068-staging-line6-change-monitor_level-type-ValueWait-in.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,74 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:47 +0100
+Subject: [068/106] staging: line6: change monitor_level type ValueWait -> int
+
+commit 2c35dc2186ba0acbff57846c19cfedee87efd272 upstream.
+
+The monitor_level sysfs attr has been dropped and we never need to wait
+on the monitor_level value to change.  Switch to a plain int and drop
+the wait queue.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   10 +++++-----
+ drivers/staging/line6/pod.h |    2 +-
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 5a941fa..165c7ad 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -245,7 +245,7 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 
+ 					switch (buf[6]) {
+ 					case POD_monitor_level:
+-						pod->monitor_level.value = value;
++						pod->monitor_level = value;
+ 						break;
+ 
+ 						PROCESS_SYSTEM_PARAM(routing);
+@@ -908,7 +908,7 @@ static int snd_pod_control_monitor_get(struct snd_kcontrol *kcontrol,
+ {
+ 	struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
+ 	struct usb_line6_pod *pod = (struct usb_line6_pod *)line6pcm->line6;
+-	ucontrol->value.integer.value[0] = pod->monitor_level.value;
++	ucontrol->value.integer.value[0] = pod->monitor_level;
+ 	return 0;
+ }
+ 
+@@ -919,10 +919,10 @@ static int snd_pod_control_monitor_put(struct snd_kcontrol *kcontrol,
+ 	struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
+ 	struct usb_line6_pod *pod = (struct usb_line6_pod *)line6pcm->line6;
+ 
+-	if (ucontrol->value.integer.value[0] == pod->monitor_level.value)
++	if (ucontrol->value.integer.value[0] == pod->monitor_level)
+ 		return 0;
+ 
+-	pod->monitor_level.value = ucontrol->value.integer.value[0];
++	pod->monitor_level = ucontrol->value.integer.value[0];
+ 	pod_set_system_param_int(pod, ucontrol->value.integer.value[0],
+ 				 POD_monitor_level);
+ 	return 1;
+@@ -1053,7 +1053,7 @@ static int pod_try_init(struct usb_interface *interface,
+ 	 */
+ 
+ 	if (pod->line6.properties->capabilities & LINE6_BIT_CONTROL) {
+-		pod->monitor_level.value = POD_system_invalid;
++		pod->monitor_level = POD_system_invalid;
+ 
+ 		/* initiate startup procedure: */
+ 		pod_startup1(pod);
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index b3bf243..d5bbd2f 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -121,7 +121,7 @@ struct usb_line6_pod {
+ 	/**
+ 		Instrument monitor level.
+ 	*/
+-	struct ValueWait monitor_level;
++	int monitor_level;
+ 
+ 	/**
+ 		Audio routing mode.

Added: dists/sid/linux/debian/patches/features/all/line6/0069-staging-line6-drop-name-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0069-staging-line6-drop-name-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,59 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:48 +0100
+Subject: [069/106] staging: line6: drop name sysfs attr
+
+commit 3eac723b4b30a7a85777ea84453ff7f8866331cf upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   15 ---------------
+ 1 file changed, 15 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 165c7ad..76525c5 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -476,18 +476,6 @@ static ssize_t get_name_generic(struct usb_line6_pod *pod, const char *str,
+ /*
+ 	"read" request on "name" special file.
+ */
+-static ssize_t pod_get_name(struct device *dev, struct device_attribute *attr,
+-			    char *buf)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	return get_name_generic(pod, pod->prog_data.header + POD_NAME_OFFSET,
+-				buf);
+-}
+-
+-/*
+-	"read" request on "name" special file.
+-*/
+ static ssize_t pod_get_name_buf(struct device *dev,
+ 				struct device_attribute *attr, char *buf)
+ {
+@@ -862,7 +850,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version,
+ 		   line6_nop_write);
+ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO,
+ 		   pod_get_midi_postprocess, pod_set_midi_postprocess);
+-static DEVICE_ATTR(name, S_IRUGO, pod_get_name, line6_nop_write);
+ static DEVICE_ATTR(name_buf, S_IRUGO, pod_get_name_buf, line6_nop_write);
+ static DEVICE_ATTR(retrieve_amp_setup, S_IWUSR, line6_nop_read,
+ 		   pod_set_retrieve_amp_setup);
+@@ -968,7 +955,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_finish));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_name));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_name_buf));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_amp_setup));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_channel));
+@@ -1103,7 +1089,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_finish);
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+-			device_remove_file(dev, &dev_attr_name);
+ 			device_remove_file(dev, &dev_attr_name_buf);
+ 			device_remove_file(dev, &dev_attr_retrieve_amp_setup);
+ 			device_remove_file(dev, &dev_attr_retrieve_channel);

Added: dists/sid/linux/debian/patches/features/all/line6/0070-staging-line6-drop-name_buf-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0070-staging-line6-drop-name_buf-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,87 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:49 +0100
+Subject: [070/106] staging: line6: drop name_buf sysfs attr
+
+commit c62c4df3f934582d26434a371e7676776fcd0fda upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   43 -------------------------------------------
+ 1 file changed, 43 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 76525c5..dbf821e 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -447,46 +447,6 @@ static ssize_t pod_send_retrieve_command(struct device *dev, const char *buf,
+ }
+ 
+ /*
+-	Generic get name function.
+-*/
+-static ssize_t get_name_generic(struct usb_line6_pod *pod, const char *str,
+-				char *buf)
+-{
+-	int length = 0;
+-	const char *p1;
+-	char *p2;
+-	char *last_non_space = buf;
+-
+-	int retval = line6_dump_wait_interruptible(&pod->dumpreq);
+-	if (retval < 0)
+-		return retval;
+-
+-	for (p1 = str, p2 = buf; *p1; ++p1, ++p2) {
+-		*p2 = *p1;
+-		if (*p2 != ' ')
+-			last_non_space = p2;
+-		if (++length == POD_NAME_LENGTH)
+-			break;
+-	}
+-
+-	*(last_non_space + 1) = '\n';
+-	return last_non_space - buf + 2;
+-}
+-
+-/*
+-	"read" request on "name" special file.
+-*/
+-static ssize_t pod_get_name_buf(struct device *dev,
+-				struct device_attribute *attr, char *buf)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	return get_name_generic(pod,
+-				pod->prog_data_buf.header + POD_NAME_OFFSET,
+-				buf);
+-}
+-
+-/*
+ 	Identify system parameters related to the tuner.
+ */
+ static bool pod_is_tuner(int code)
+@@ -850,7 +810,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version,
+ 		   line6_nop_write);
+ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO,
+ 		   pod_get_midi_postprocess, pod_set_midi_postprocess);
+-static DEVICE_ATTR(name_buf, S_IRUGO, pod_get_name_buf, line6_nop_write);
+ static DEVICE_ATTR(retrieve_amp_setup, S_IWUSR, line6_nop_read,
+ 		   pod_set_retrieve_amp_setup);
+ static DEVICE_ATTR(retrieve_channel, S_IWUSR, line6_nop_read,
+@@ -955,7 +914,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_finish));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_name_buf));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_amp_setup));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_channel));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_effects_setup));
+@@ -1089,7 +1047,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_finish);
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+-			device_remove_file(dev, &dev_attr_name_buf);
+ 			device_remove_file(dev, &dev_attr_retrieve_amp_setup);
+ 			device_remove_file(dev, &dev_attr_retrieve_channel);
+ 			device_remove_file(dev,

Added: dists/sid/linux/debian/patches/features/all/line6/0071-staging-line6-drop-retrieve_amp_setup-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0071-staging-line6-drop-retrieve_amp_setup-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,58 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:50 +0100
+Subject: [071/106] staging: line6: drop retrieve_amp_setup sysfs attr
+
+commit 390174a9353b41f6aaab2ef90a4e94b56ec6974a upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   14 --------------
+ 1 file changed, 14 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index dbf821e..6d6cd5a 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -628,16 +628,6 @@ static ssize_t pod_set_retrieve_effects_setup(struct device *dev,
+ }
+ 
+ /*
+-	"write" request on "retrieve_amp_setup" special file.
+-*/
+-static ssize_t pod_set_retrieve_amp_setup(struct device *dev,
+-					  struct device_attribute *attr,
+-					  const char *buf, size_t count)
+-{
+-	return pod_send_retrieve_command(dev, buf, count, 0x0040, 0x0100);
+-}
+-
+-/*
+ 	"read" request on "midi_postprocess" special file.
+ */
+ static ssize_t pod_get_midi_postprocess(struct device *dev,
+@@ -810,8 +800,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version,
+ 		   line6_nop_write);
+ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO,
+ 		   pod_get_midi_postprocess, pod_set_midi_postprocess);
+-static DEVICE_ATTR(retrieve_amp_setup, S_IWUSR, line6_nop_read,
+-		   pod_set_retrieve_amp_setup);
+ static DEVICE_ATTR(retrieve_channel, S_IWUSR, line6_nop_read,
+ 		   pod_set_retrieve_channel);
+ static DEVICE_ATTR(retrieve_effects_setup, S_IWUSR, line6_nop_read,
+@@ -914,7 +902,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_finish));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_amp_setup));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_channel));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_effects_setup));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_routing));
+@@ -1047,7 +1034,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_finish);
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+-			device_remove_file(dev, &dev_attr_retrieve_amp_setup);
+ 			device_remove_file(dev, &dev_attr_retrieve_channel);
+ 			device_remove_file(dev,
+ 					   &dev_attr_retrieve_effects_setup);

Added: dists/sid/linux/debian/patches/features/all/line6/0072-staging-line6-drop-retrieve_channel-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0072-staging-line6-drop-retrieve_channel-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,58 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:51 +0100
+Subject: [072/106] staging: line6: drop retrieve_channel sysfs attr
+
+commit 439f21fa2212fb839c5324c7fdfe6b04e9760e00 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   14 --------------
+ 1 file changed, 14 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 6d6cd5a..bc65fc7 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -608,16 +608,6 @@ static ssize_t pod_set_store_amp_setup(struct device *dev,
+ }
+ 
+ /*
+-	"write" request on "retrieve_channel" special file.
+-*/
+-static ssize_t pod_set_retrieve_channel(struct device *dev,
+-					struct device_attribute *attr,
+-					const char *buf, size_t count)
+-{
+-	return pod_send_retrieve_command(dev, buf, count, 0x0000, 0x00c0);
+-}
+-
+-/*
+ 	"write" request on "retrieve_effects_setup" special file.
+ */
+ static ssize_t pod_set_retrieve_effects_setup(struct device *dev,
+@@ -800,8 +790,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version,
+ 		   line6_nop_write);
+ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO,
+ 		   pod_get_midi_postprocess, pod_set_midi_postprocess);
+-static DEVICE_ATTR(retrieve_channel, S_IWUSR, line6_nop_read,
+-		   pod_set_retrieve_channel);
+ static DEVICE_ATTR(retrieve_effects_setup, S_IWUSR, line6_nop_read,
+ 		   pod_set_retrieve_effects_setup);
+ static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing,
+@@ -902,7 +890,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_finish));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_channel));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_effects_setup));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_routing));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+@@ -1034,7 +1021,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_finish);
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+-			device_remove_file(dev, &dev_attr_retrieve_channel);
+ 			device_remove_file(dev,
+ 					   &dev_attr_retrieve_effects_setup);
+ 			device_remove_file(dev, &dev_attr_routing);

Added: dists/sid/linux/debian/patches/features/all/line6/0073-staging-line6-drop-retrieve_effects_setup-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0073-staging-line6-drop-retrieve_effects_setup-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,99 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:52 +0100
+Subject: [073/106] staging: line6: drop retrieve_effects_setup sysfs attr
+
+commit 7404419c903087b9c9c73c69888c9af2b9d0f733 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   48 -------------------------------------------
+ 1 file changed, 48 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index bc65fc7..95769c5 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -381,39 +381,6 @@ static int pod_resolve(const char *buf, short block0, short block1,
+ }
+ 
+ /*
+-	Send command to store channel/effects setup/amp setup to PODxt Pro.
+-*/
+-static ssize_t pod_send_store_command(struct device *dev, const char *buf,
+-				      size_t count, short block0, short block1)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	int ret;
+-	int size = 3 + sizeof(pod->prog_data_buf);
+-	char *sysex = pod_alloc_sysex_buffer(pod, POD_SYSEX_STORE, size);
+-
+-	if (!sysex)
+-		return 0;
+-
+-	/* Don't know what this is good for, but PODxt Pro transmits it, so we
+-	 * also do... */
+-	sysex[SYSEX_DATA_OFS] = 5;
+-	ret = pod_resolve(buf, block0, block1, sysex + SYSEX_DATA_OFS + 1);
+-	if (ret) {
+-		kfree(sysex);
+-		return ret;
+-	}
+-
+-	memcpy(sysex + SYSEX_DATA_OFS + 3, &pod->prog_data_buf,
+-	       sizeof(pod->prog_data_buf));
+-
+-	line6_send_sysex_message(&pod->line6, sysex, size);
+-	kfree(sysex);
+-	/* needs some delay here on AMD64 platform */
+-	return count;
+-}
+-
+-/*
+ 	Send command to retrieve channel/effects setup/amp setup to PODxt Pro.
+ */
+ static ssize_t pod_send_retrieve_command(struct device *dev, const char *buf,
+@@ -608,16 +575,6 @@ static ssize_t pod_set_store_amp_setup(struct device *dev,
+ }
+ 
+ /*
+-	"write" request on "retrieve_effects_setup" special file.
+-*/
+-static ssize_t pod_set_retrieve_effects_setup(struct device *dev,
+-					      struct device_attribute *attr,
+-					      const char *buf, size_t count)
+-{
+-	return pod_send_retrieve_command(dev, buf, count, 0x0080, 0x0080);
+-}
+-
+-/*
+ 	"read" request on "midi_postprocess" special file.
+ */
+ static ssize_t pod_get_midi_postprocess(struct device *dev,
+@@ -790,8 +747,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version,
+ 		   line6_nop_write);
+ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO,
+ 		   pod_get_midi_postprocess, pod_set_midi_postprocess);
+-static DEVICE_ATTR(retrieve_effects_setup, S_IWUSR, line6_nop_read,
+-		   pod_set_retrieve_effects_setup);
+ static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing,
+ 		   pod_set_routing);
+ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number,
+@@ -890,7 +845,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_finish));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_retrieve_effects_setup));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_routing));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_store_amp_setup));
+@@ -1021,8 +975,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_finish);
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+-			device_remove_file(dev,
+-					   &dev_attr_retrieve_effects_setup);
+ 			device_remove_file(dev, &dev_attr_routing);
+ 			device_remove_file(dev, &dev_attr_serial_number);
+ 			device_remove_file(dev, &dev_attr_store_amp_setup);

Added: dists/sid/linux/debian/patches/features/all/line6/0074-staging-line6-drop-store_amp_setup-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0074-staging-line6-drop-store_amp_setup-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,58 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:53 +0100
+Subject: [074/106] staging: line6: drop store_amp_setup sysfs attr
+
+commit 4c41d9210eb851b7c28c3af21c5069e68ec14497 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   14 --------------
+ 1 file changed, 14 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 95769c5..deafee9 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -565,16 +565,6 @@ static ssize_t pod_set_store_effects_setup(struct device *dev,
+ }
+ 
+ /*
+-	"write" request on "store_amp_setup" special file.
+-*/
+-static ssize_t pod_set_store_amp_setup(struct device *dev,
+-				       struct device_attribute *attr,
+-				       const char *buf, size_t count)
+-{
+-	return pod_send_store_command(dev, buf, count, 0x0040, 0x0100);
+-}
+-
+-/*
+ 	"read" request on "midi_postprocess" special file.
+ */
+ static ssize_t pod_get_midi_postprocess(struct device *dev,
+@@ -751,8 +741,6 @@ static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing,
+ 		   pod_set_routing);
+ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number,
+ 		   line6_nop_write);
+-static DEVICE_ATTR(store_amp_setup, S_IWUSR, line6_nop_read,
+-		   pod_set_store_amp_setup);
+ static DEVICE_ATTR(store_channel, S_IWUSR, line6_nop_read,
+ 		   pod_set_store_channel);
+ static DEVICE_ATTR(store_effects_setup, S_IWUSR, line6_nop_read,
+@@ -847,7 +835,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_routing));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_store_amp_setup));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_store_channel));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_store_effects_setup));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_freq));
+@@ -977,7 +964,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+ 			device_remove_file(dev, &dev_attr_routing);
+ 			device_remove_file(dev, &dev_attr_serial_number);
+-			device_remove_file(dev, &dev_attr_store_amp_setup);
+ 			device_remove_file(dev, &dev_attr_store_channel);
+ 			device_remove_file(dev, &dev_attr_store_effects_setup);
+ 			device_remove_file(dev, &dev_attr_tuner_freq);

Added: dists/sid/linux/debian/patches/features/all/line6/0075-staging-line6-drop-store_channel-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0075-staging-line6-drop-store_channel-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,58 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:54 +0100
+Subject: [075/106] staging: line6: drop store_channel sysfs attr
+
+commit e6bf11a7a70cbe63ad68ce783815b7fc76e791fe upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   14 --------------
+ 1 file changed, 14 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index deafee9..abf7ebe 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -545,16 +545,6 @@ static ssize_t pod_set_finish(struct device *dev,
+ }
+ 
+ /*
+-	"write" request on "store_channel" special file.
+-*/
+-static ssize_t pod_set_store_channel(struct device *dev,
+-				     struct device_attribute *attr,
+-				     const char *buf, size_t count)
+-{
+-	return pod_send_store_command(dev, buf, count, 0x0000, 0x00c0);
+-}
+-
+-/*
+ 	"write" request on "store_effects_setup" special file.
+ */
+ static ssize_t pod_set_store_effects_setup(struct device *dev,
+@@ -741,8 +731,6 @@ static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing,
+ 		   pod_set_routing);
+ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number,
+ 		   line6_nop_write);
+-static DEVICE_ATTR(store_channel, S_IWUSR, line6_nop_read,
+-		   pod_set_store_channel);
+ static DEVICE_ATTR(store_effects_setup, S_IWUSR, line6_nop_read,
+ 		   pod_set_store_effects_setup);
+ static DEVICE_ATTR(tuner_freq, S_IWUSR | S_IRUGO, pod_get_tuner_freq,
+@@ -835,7 +823,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_routing));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_store_channel));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_store_effects_setup));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_freq));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_mute));
+@@ -964,7 +951,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+ 			device_remove_file(dev, &dev_attr_routing);
+ 			device_remove_file(dev, &dev_attr_serial_number);
+-			device_remove_file(dev, &dev_attr_store_channel);
+ 			device_remove_file(dev, &dev_attr_store_effects_setup);
+ 			device_remove_file(dev, &dev_attr_tuner_freq);
+ 			device_remove_file(dev, &dev_attr_tuner_mute);

Added: dists/sid/linux/debian/patches/features/all/line6/0076-staging-line6-drop-store_effects_setup-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0076-staging-line6-drop-store_effects_setup-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,119 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:55 +0100
+Subject: [076/106] staging: line6: drop store_effects_setup sysfs attr
+
+commit d249652ac4649553ca5b58dc4bf8c6b7c18a0c80 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   68 -------------------------------------------
+ 1 file changed, 68 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index abf7ebe..949b8f7 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -360,60 +360,6 @@ void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
+ }
+ 
+ /*
+-	Resolve value to memory location.
+-*/
+-static int pod_resolve(const char *buf, short block0, short block1,
+-		       unsigned char *location)
+-{
+-	u8 value;
+-	short block;
+-	int ret;
+-
+-	ret = kstrtou8(buf, 10, &value);
+-	if (ret)
+-		return ret;
+-
+-	block = (value < 0x40) ? block0 : block1;
+-	value &= 0x3f;
+-	location[0] = block >> 7;
+-	location[1] = value | (block & 0x7f);
+-	return 0;
+-}
+-
+-/*
+-	Send command to retrieve channel/effects setup/amp setup to PODxt Pro.
+-*/
+-static ssize_t pod_send_retrieve_command(struct device *dev, const char *buf,
+-					 size_t count, short block0,
+-					 short block1)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	int ret;
+-	int size = 4;
+-	char *sysex = pod_alloc_sysex_buffer(pod, POD_SYSEX_DUMPMEM, size);
+-
+-	if (!sysex)
+-		return 0;
+-
+-	ret = pod_resolve(buf, block0, block1, sysex + SYSEX_DATA_OFS);
+-	if (ret) {
+-		kfree(sysex);
+-		return ret;
+-	}
+-	sysex[SYSEX_DATA_OFS + 2] = 0;
+-	sysex[SYSEX_DATA_OFS + 3] = 0;
+-	line6_dump_started(&pod->dumpreq, POD_DUMP_MEMORY);
+-
+-	if (line6_send_sysex_message(&pod->line6, sysex, size) < size)
+-		line6_dump_finished(&pod->dumpreq);
+-
+-	kfree(sysex);
+-	/* needs some delay here on AMD64 platform */
+-	return count;
+-}
+-
+-/*
+ 	Identify system parameters related to the tuner.
+ */
+ static bool pod_is_tuner(int code)
+@@ -545,16 +491,6 @@ static ssize_t pod_set_finish(struct device *dev,
+ }
+ 
+ /*
+-	"write" request on "store_effects_setup" special file.
+-*/
+-static ssize_t pod_set_store_effects_setup(struct device *dev,
+-					   struct device_attribute *attr,
+-					   const char *buf, size_t count)
+-{
+-	return pod_send_store_command(dev, buf, count, 0x0080, 0x0080);
+-}
+-
+-/*
+ 	"read" request on "midi_postprocess" special file.
+ */
+ static ssize_t pod_get_midi_postprocess(struct device *dev,
+@@ -731,8 +667,6 @@ static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing,
+ 		   pod_set_routing);
+ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number,
+ 		   line6_nop_write);
+-static DEVICE_ATTR(store_effects_setup, S_IWUSR, line6_nop_read,
+-		   pod_set_store_effects_setup);
+ static DEVICE_ATTR(tuner_freq, S_IWUSR | S_IRUGO, pod_get_tuner_freq,
+ 		   pod_set_tuner_freq);
+ static DEVICE_ATTR(tuner_mute, S_IWUSR | S_IRUGO, pod_get_tuner_mute,
+@@ -823,7 +757,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_routing));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_store_effects_setup));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_freq));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_mute));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_note));
+@@ -951,7 +884,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+ 			device_remove_file(dev, &dev_attr_routing);
+ 			device_remove_file(dev, &dev_attr_serial_number);
+-			device_remove_file(dev, &dev_attr_store_effects_setup);
+ 			device_remove_file(dev, &dev_attr_tuner_freq);
+ 			device_remove_file(dev, &dev_attr_tuner_mute);
+ 			device_remove_file(dev, &dev_attr_tuner_note);

Added: dists/sid/linux/debian/patches/features/all/line6/0077-staging-line6-drop-routing-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0077-staging-line6-drop-routing-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,94 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:56 +0100
+Subject: [077/106] staging: line6: drop routing sysfs attr
+
+commit 4cade5c09ff0e483afbeb7546f6c87e708cdda00 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |    8 --------
+ drivers/staging/line6/pod.h |    9 ---------
+ 2 files changed, 17 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 949b8f7..f84a4ea 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -40,7 +40,6 @@ enum {
+ 
+ enum {
+ 	POD_monitor_level  = 0x04,
+-	POD_routing        = 0x05,
+ 	POD_tuner_mute     = 0x13,
+ 	POD_tuner_freq     = 0x15,
+ 	POD_tuner_note     = 0x16,
+@@ -248,7 +247,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 						pod->monitor_level = value;
+ 						break;
+ 
+-						PROCESS_SYSTEM_PARAM(routing);
+ 						PROCESS_SYSTEM_PARAM
+ 						    (tuner_mute);
+ 						PROCESS_SYSTEM_PARAM
+@@ -647,7 +645,6 @@ static ssize_t pod_set_ ## code(struct device *dev, \
+ 	return pod_set_system_param_string(pod, buf, count, POD_ ## code, mask); \
+ }
+ 
+-POD_GET_SET_SYSTEM_PARAM(routing, 0x0003, 0);
+ POD_GET_SET_SYSTEM_PARAM(tuner_mute, 0x0001, 0);
+ POD_GET_SET_SYSTEM_PARAM(tuner_freq, 0xffff, 0);
+ POD_GET_SYSTEM_PARAM(tuner_note, 1);
+@@ -663,8 +660,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version,
+ 		   line6_nop_write);
+ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO,
+ 		   pod_get_midi_postprocess, pod_set_midi_postprocess);
+-static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing,
+-		   pod_set_routing);
+ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number,
+ 		   line6_nop_write);
+ static DEVICE_ATTR(tuner_freq, S_IWUSR | S_IRUGO, pod_get_tuner_freq,
+@@ -755,7 +750,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_finish));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_routing));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_freq));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_mute));
+@@ -785,7 +779,6 @@ static int pod_try_init(struct usb_interface *interface,
+ 		return -ENODEV;
+ 
+ 	/* initialize wait queues: */
+-	init_waitqueue_head(&pod->routing.wait);
+ 	init_waitqueue_head(&pod->tuner_mute.wait);
+ 	init_waitqueue_head(&pod->tuner_freq.wait);
+ 	init_waitqueue_head(&pod->tuner_note.wait);
+@@ -882,7 +875,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_finish);
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+-			device_remove_file(dev, &dev_attr_routing);
+ 			device_remove_file(dev, &dev_attr_serial_number);
+ 			device_remove_file(dev, &dev_attr_tuner_freq);
+ 			device_remove_file(dev, &dev_attr_tuner_mute);
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index d5bbd2f..732311a 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -124,15 +124,6 @@ struct usb_line6_pod {
+ 	int monitor_level;
+ 
+ 	/**
+-		Audio routing mode.
+-		0: send processed guitar
+-		1: send clean guitar
+-		2: send clean guitar re-amp playback
+-		3: send re-amp playback
+-	*/
+-	struct ValueWait routing;
+-
+-	/**
+ 		Timer for device initializaton.
+ 	*/
+ 	struct timer_list startup_timer;

Added: dists/sid/linux/debian/patches/features/all/line6/0078-staging-line6-drop-tuner_freq-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0078-staging-line6-drop-tuner_freq-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,83 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:57 +0100
+Subject: [078/106] staging: line6: drop tuner_freq sysfs attr
+
+commit b972739fd8aeed17b07c060ab32141a151a4f901 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |    8 --------
+ drivers/staging/line6/pod.h |    5 -----
+ 2 files changed, 13 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index f84a4ea..3184570 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -250,8 +250,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 						PROCESS_SYSTEM_PARAM
+ 						    (tuner_mute);
+ 						PROCESS_SYSTEM_PARAM
+-						    (tuner_freq);
+-						PROCESS_SYSTEM_PARAM
+ 						    (tuner_note);
+ 						PROCESS_SYSTEM_PARAM
+ 						    (tuner_pitch);
+@@ -646,7 +644,6 @@ static ssize_t pod_set_ ## code(struct device *dev, \
+ }
+ 
+ POD_GET_SET_SYSTEM_PARAM(tuner_mute, 0x0001, 0);
+-POD_GET_SET_SYSTEM_PARAM(tuner_freq, 0xffff, 0);
+ POD_GET_SYSTEM_PARAM(tuner_note, 1);
+ POD_GET_SYSTEM_PARAM(tuner_pitch, 1);
+ 
+@@ -662,8 +659,6 @@ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO,
+ 		   pod_get_midi_postprocess, pod_set_midi_postprocess);
+ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number,
+ 		   line6_nop_write);
+-static DEVICE_ATTR(tuner_freq, S_IWUSR | S_IRUGO, pod_get_tuner_freq,
+-		   pod_set_tuner_freq);
+ static DEVICE_ATTR(tuner_mute, S_IWUSR | S_IRUGO, pod_get_tuner_mute,
+ 		   pod_set_tuner_mute);
+ static DEVICE_ATTR(tuner_note, S_IRUGO, pod_get_tuner_note, line6_nop_write);
+@@ -751,7 +746,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_freq));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_mute));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_note));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_pitch));
+@@ -780,7 +774,6 @@ static int pod_try_init(struct usb_interface *interface,
+ 
+ 	/* initialize wait queues: */
+ 	init_waitqueue_head(&pod->tuner_mute.wait);
+-	init_waitqueue_head(&pod->tuner_freq.wait);
+ 	init_waitqueue_head(&pod->tuner_note.wait);
+ 	init_waitqueue_head(&pod->tuner_pitch.wait);
+ 
+@@ -876,7 +869,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+ 			device_remove_file(dev, &dev_attr_serial_number);
+-			device_remove_file(dev, &dev_attr_tuner_freq);
+ 			device_remove_file(dev, &dev_attr_tuner_mute);
+ 			device_remove_file(dev, &dev_attr_tuner_note);
+ 			device_remove_file(dev, &dev_attr_tuner_pitch);
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index 732311a..91f2661 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -104,11 +104,6 @@ struct usb_line6_pod {
+ 	struct ValueWait tuner_mute;
+ 
+ 	/**
+-		Tuner base frequency (typically 440Hz).
+-	*/
+-	struct ValueWait tuner_freq;
+-
+-	/**
+ 		Note received from tuner.
+ 	*/
+ 	struct ValueWait tuner_note;

Added: dists/sid/linux/debian/patches/features/all/line6/0079-staging-line6-drop-tuner_note-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0079-staging-line6-drop-tuner_note-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,82 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:58 +0100
+Subject: [079/106] staging: line6: drop tuner_note sysfs attr
+
+commit c9040c84855afb290413909d24b32a1163a47303 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |    7 -------
+ drivers/staging/line6/pod.h |    5 -----
+ 2 files changed, 12 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 3184570..57fbe27 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -250,8 +250,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 						PROCESS_SYSTEM_PARAM
+ 						    (tuner_mute);
+ 						PROCESS_SYSTEM_PARAM
+-						    (tuner_note);
+-						PROCESS_SYSTEM_PARAM
+ 						    (tuner_pitch);
+ 
+ #undef PROCESS_SYSTEM_PARAM
+@@ -644,7 +642,6 @@ static ssize_t pod_set_ ## code(struct device *dev, \
+ }
+ 
+ POD_GET_SET_SYSTEM_PARAM(tuner_mute, 0x0001, 0);
+-POD_GET_SYSTEM_PARAM(tuner_note, 1);
+ POD_GET_SYSTEM_PARAM(tuner_pitch, 1);
+ 
+ #undef GET_SET_SYSTEM_PARAM
+@@ -661,7 +658,6 @@ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number,
+ 		   line6_nop_write);
+ static DEVICE_ATTR(tuner_mute, S_IWUSR | S_IRUGO, pod_get_tuner_mute,
+ 		   pod_set_tuner_mute);
+-static DEVICE_ATTR(tuner_note, S_IRUGO, pod_get_tuner_note, line6_nop_write);
+ static DEVICE_ATTR(tuner_pitch, S_IRUGO, pod_get_tuner_pitch, line6_nop_write);
+ 
+ #ifdef CONFIG_LINE6_USB_RAW
+@@ -747,7 +743,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_mute));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_note));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_pitch));
+ 
+ #ifdef CONFIG_LINE6_USB_RAW
+@@ -774,7 +769,6 @@ static int pod_try_init(struct usb_interface *interface,
+ 
+ 	/* initialize wait queues: */
+ 	init_waitqueue_head(&pod->tuner_mute.wait);
+-	init_waitqueue_head(&pod->tuner_note.wait);
+ 	init_waitqueue_head(&pod->tuner_pitch.wait);
+ 
+ 	/* initialize USB buffers: */
+@@ -870,7 +864,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+ 			device_remove_file(dev, &dev_attr_serial_number);
+ 			device_remove_file(dev, &dev_attr_tuner_mute);
+-			device_remove_file(dev, &dev_attr_tuner_note);
+ 			device_remove_file(dev, &dev_attr_tuner_pitch);
+ 
+ #ifdef CONFIG_LINE6_USB_RAW
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index 91f2661..1659120 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -104,11 +104,6 @@ struct usb_line6_pod {
+ 	struct ValueWait tuner_mute;
+ 
+ 	/**
+-		Note received from tuner.
+-	*/
+-	struct ValueWait tuner_note;
+-
+-	/**
+ 		Pitch value received from tuner.
+ 	*/
+ 	struct ValueWait tuner_pitch;

Added: dists/sid/linux/debian/patches/features/all/line6/0080-staging-line6-drop-tuner_mute-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0080-staging-line6-drop-tuner_mute-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,118 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:48:59 +0100
+Subject: [080/106] staging: line6: drop tuner_mute sysfs attr
+
+commit 5e275f4586484d7a8f17046930f473883a660a73 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   34 ----------------------------------
+ drivers/staging/line6/pod.h |    5 -----
+ 2 files changed, 39 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 57fbe27..df2f37a 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -248,8 +248,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 						break;
+ 
+ 						PROCESS_SYSTEM_PARAM
+-						    (tuner_mute);
+-						PROCESS_SYSTEM_PARAM
+ 						    (tuner_pitch);
+ 
+ #undef PROCESS_SYSTEM_PARAM
+@@ -453,20 +451,6 @@ static int pod_set_system_param_int(struct usb_line6_pod *pod, int value,
+ }
+ 
+ /*
+-	Send system parameter (from string).
+-	@param tuner non-zero, if code refers to a tuner parameter
+-*/
+-static ssize_t pod_set_system_param_string(struct usb_line6_pod *pod,
+-					   const char *buf, int count, int code,
+-					   unsigned short mask)
+-{
+-	int retval;
+-	unsigned short value = simple_strtoul(buf, NULL, 10) & mask;
+-	retval = pod_set_system_param_int(pod, value, code);
+-	return (retval < 0) ? retval : count;
+-}
+-
+-/*
+ 	"write" request on "finish" special file.
+ */
+ static ssize_t pod_set_finish(struct device *dev,
+@@ -630,21 +614,8 @@ static ssize_t pod_get_ ## code(struct device *dev, \
+ 					   &pod->code, sign);		\
+ }
+ 
+-#define POD_GET_SET_SYSTEM_PARAM(code, mask, sign) \
+-POD_GET_SYSTEM_PARAM(code, sign) \
+-static ssize_t pod_set_ ## code(struct device *dev, \
+-				struct device_attribute *attr, \
+-				const char *buf, size_t count) \
+-{ \
+-	struct usb_interface *interface = to_usb_interface(dev); \
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface); \
+-	return pod_set_system_param_string(pod, buf, count, POD_ ## code, mask); \
+-}
+-
+-POD_GET_SET_SYSTEM_PARAM(tuner_mute, 0x0001, 0);
+ POD_GET_SYSTEM_PARAM(tuner_pitch, 1);
+ 
+-#undef GET_SET_SYSTEM_PARAM
+ #undef GET_SYSTEM_PARAM
+ 
+ /* POD special files: */
+@@ -656,8 +627,6 @@ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO,
+ 		   pod_get_midi_postprocess, pod_set_midi_postprocess);
+ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number,
+ 		   line6_nop_write);
+-static DEVICE_ATTR(tuner_mute, S_IWUSR | S_IRUGO, pod_get_tuner_mute,
+-		   pod_set_tuner_mute);
+ static DEVICE_ATTR(tuner_pitch, S_IRUGO, pod_get_tuner_pitch, line6_nop_write);
+ 
+ #ifdef CONFIG_LINE6_USB_RAW
+@@ -742,7 +711,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_mute));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_pitch));
+ 
+ #ifdef CONFIG_LINE6_USB_RAW
+@@ -768,7 +736,6 @@ static int pod_try_init(struct usb_interface *interface,
+ 		return -ENODEV;
+ 
+ 	/* initialize wait queues: */
+-	init_waitqueue_head(&pod->tuner_mute.wait);
+ 	init_waitqueue_head(&pod->tuner_pitch.wait);
+ 
+ 	/* initialize USB buffers: */
+@@ -863,7 +830,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+ 			device_remove_file(dev, &dev_attr_serial_number);
+-			device_remove_file(dev, &dev_attr_tuner_mute);
+ 			device_remove_file(dev, &dev_attr_tuner_pitch);
+ 
+ #ifdef CONFIG_LINE6_USB_RAW
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index 1659120..4930742 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -99,11 +99,6 @@ struct usb_line6_pod {
+ 	struct pod_program prog_data_buf;
+ 
+ 	/**
+-		Tuner mute mode.
+-	*/
+-	struct ValueWait tuner_mute;
+-
+-	/**
+ 		Pitch value received from tuner.
+ 	*/
+ 	struct ValueWait tuner_pitch;

Added: dists/sid/linux/debian/patches/features/all/line6/0081-staging-line6-drop-tuner_pitch-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0081-staging-line6-drop-tuner_pitch-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,220 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:00 +0100
+Subject: [081/106] staging: line6: drop tuner_pitch sysfs attr
+
+commit 99c54e9830feb746c9175fae887546e741bb56eb upstream.
+
+Dropping this final tuner sysfs attr also leaves the
+POD_GET_SYSTEM_PARAM() macro, pod_get_system_param_string(), and
+pod_get_system_param_int() unused.  Remove them immediately to avoid
+compiler warnings.
+
+POD_monitor_level is now the only SYSEX value that needs to be watched
+by the driver since the ALSA volume control should reflect the current
+monitor volume level used by the device.  Therefore, drop the switch
+statement entirely and just check for POD_monitor_level, ignoring
+unknown system parameter changes.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |  102 +------------------------------------------
+ drivers/staging/line6/pod.h |   15 -------
+ 2 files changed, 1 insertion(+), 116 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index df2f37a..052db4a 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -236,28 +236,8 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 								   << 8) |
+ 					    ((int)buf[9] << 4) | (int)buf[10];
+ 
+-#define PROCESS_SYSTEM_PARAM(x) \
+-					case POD_ ## x: \
+-						pod->x.value = value; \
+-						wake_up(&pod->x.wait); \
+-						break;
+-
+-					switch (buf[6]) {
+-					case POD_monitor_level:
++					if (buf[6] == POD_monitor_level)
+ 						pod->monitor_level = value;
+-						break;
+-
+-						PROCESS_SYSTEM_PARAM
+-						    (tuner_pitch);
+-
+-#undef PROCESS_SYSTEM_PARAM
+-
+-					default:
+-						dev_dbg(pod->line6.ifcdev,
+-							"unknown tuner/system response %02X\n",
+-							buf[6]);
+-					}
+-
+ 					break;
+ 				}
+ 
+@@ -363,66 +343,6 @@ static bool pod_is_tuner(int code)
+ }
+ 
+ /*
+-	Get system parameter (as integer).
+-	@param tuner non-zero, if code refers to a tuner parameter
+-*/
+-static int pod_get_system_param_int(struct usb_line6_pod *pod, int *value,
+-				    int code, struct ValueWait *param, int sign)
+-{
+-	char *sysex;
+-	static const int size = 1;
+-	int retval = 0;
+-
+-	if (((pod->prog_data.control[POD_tuner] & 0x40) == 0)
+-	    && pod_is_tuner(code))
+-		return -ENODEV;
+-
+-	/* send value request to device: */
+-	param->value = POD_system_invalid;
+-	sysex = pod_alloc_sysex_buffer(pod, POD_SYSEX_SYSTEMREQ, size);
+-
+-	if (!sysex)
+-		return -ENOMEM;
+-
+-	sysex[SYSEX_DATA_OFS] = code;
+-	line6_send_sysex_message(&pod->line6, sysex, size);
+-	kfree(sysex);
+-
+-	/* wait for device to respond: */
+-	retval =
+-	    wait_event_interruptible(param->wait,
+-				     param->value != POD_system_invalid);
+-
+-	if (retval < 0)
+-		return retval;
+-
+-	*value = sign ? (int)(signed short)param->value : (int)(unsigned short)
+-	    param->value;
+-
+-	if (*value == POD_system_invalid)
+-		*value = 0;	/* don't report uninitialized values */
+-
+-	return 0;
+-}
+-
+-/*
+-	Get system parameter (as string).
+-	@param tuner non-zero, if code refers to a tuner parameter
+-*/
+-static ssize_t pod_get_system_param_string(struct usb_line6_pod *pod, char *buf,
+-					   int code, struct ValueWait *param,
+-					   int sign)
+-{
+-	int retval, value = 0;
+-	retval = pod_get_system_param_int(pod, &value, code, param, sign);
+-
+-	if (retval < 0)
+-		return retval;
+-
+-	return sprintf(buf, "%d\n", value);
+-}
+-
+-/*
+ 	Send system parameter (from integer).
+ 	@param tuner non-zero, if code refers to a tuner parameter
+ */
+@@ -604,20 +524,6 @@ static void pod_startup5(struct work_struct *work)
+ 			       line6->properties->device_bit, line6->ifcdev);
+ }
+ 
+-#define POD_GET_SYSTEM_PARAM(code, sign) \
+-static ssize_t pod_get_ ## code(struct device *dev, \
+-				struct device_attribute *attr, char *buf) \
+-{ \
+-	struct usb_interface *interface = to_usb_interface(dev); \
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface); \
+-	return pod_get_system_param_string(pod, buf, POD_ ## code,	\
+-					   &pod->code, sign);		\
+-}
+-
+-POD_GET_SYSTEM_PARAM(tuner_pitch, 1);
+-
+-#undef GET_SYSTEM_PARAM
+-
+ /* POD special files: */
+ static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write);
+ static DEVICE_ATTR(finish, S_IWUSR, line6_nop_read, pod_set_finish);
+@@ -627,7 +533,6 @@ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO,
+ 		   pod_get_midi_postprocess, pod_set_midi_postprocess);
+ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number,
+ 		   line6_nop_write);
+-static DEVICE_ATTR(tuner_pitch, S_IRUGO, pod_get_tuner_pitch, line6_nop_write);
+ 
+ #ifdef CONFIG_LINE6_USB_RAW
+ static DEVICE_ATTR(raw, S_IWUSR, line6_nop_read, line6_set_raw);
+@@ -711,7 +616,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_tuner_pitch));
+ 
+ #ifdef CONFIG_LINE6_USB_RAW
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_raw));
+@@ -735,9 +639,6 @@ static int pod_try_init(struct usb_interface *interface,
+ 	if ((interface == NULL) || (pod == NULL))
+ 		return -ENODEV;
+ 
+-	/* initialize wait queues: */
+-	init_waitqueue_head(&pod->tuner_pitch.wait);
+-
+ 	/* initialize USB buffers: */
+ 	err = line6_dumpreq_init(&pod->dumpreq, pod_request_channel,
+ 				 sizeof(pod_request_channel));
+@@ -830,7 +731,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+ 			device_remove_file(dev, &dev_attr_serial_number);
+-			device_remove_file(dev, &dev_attr_tuner_pitch);
+ 
+ #ifdef CONFIG_LINE6_USB_RAW
+ 			device_remove_file(dev, &dev_attr_raw);
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index 4930742..481cce6 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -15,7 +15,6 @@
+ #include <linux/interrupt.h>
+ #include <linux/spinlock.h>
+ #include <linux/usb.h>
+-#include <linux/wait.h>
+ 
+ #include <sound/core.h>
+ 
+@@ -54,15 +53,6 @@ enum {
+ };
+ 
+ /**
+-	Data structure for values that need to be requested explicitly.
+-	This is the case for system and tuner settings.
+-*/
+-struct ValueWait {
+-	int value;
+-	wait_queue_head_t wait;
+-};
+-
+-/**
+ 	Binary PODxt Pro program dump
+ */
+ struct pod_program {
+@@ -99,11 +89,6 @@ struct usb_line6_pod {
+ 	struct pod_program prog_data_buf;
+ 
+ 	/**
+-		Pitch value received from tuner.
+-	*/
+-	struct ValueWait tuner_pitch;
+-
+-	/**
+ 		Instrument monitor level.
+ 	*/
+ 	int monitor_level;

Added: dists/sid/linux/debian/patches/features/all/line6/0082-staging-line6-drop-finish-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0082-staging-line6-drop-finish-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,65 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:01 +0100
+Subject: [082/106] staging: line6: drop finish sysfs attr
+
+commit c7b8ca5a596197f6b1069bf4164387f474873f00 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   21 ---------------------
+ 1 file changed, 21 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 052db4a..797f6e0 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -371,24 +371,6 @@ static int pod_set_system_param_int(struct usb_line6_pod *pod, int value,
+ }
+ 
+ /*
+-	"write" request on "finish" special file.
+-*/
+-static ssize_t pod_set_finish(struct device *dev,
+-			      struct device_attribute *attr,
+-			      const char *buf, size_t count)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	int size = 0;
+-	char *sysex = pod_alloc_sysex_buffer(pod, POD_SYSEX_FINISH, size);
+-	if (!sysex)
+-		return 0;
+-	line6_send_sysex_message(&pod->line6, sysex, size);
+-	kfree(sysex);
+-	return count;
+-}
+-
+-/*
+ 	"read" request on "midi_postprocess" special file.
+ */
+ static ssize_t pod_get_midi_postprocess(struct device *dev,
+@@ -526,7 +508,6 @@ static void pod_startup5(struct work_struct *work)
+ 
+ /* POD special files: */
+ static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write);
+-static DEVICE_ATTR(finish, S_IWUSR, line6_nop_read, pod_set_finish);
+ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version,
+ 		   line6_nop_write);
+ static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO,
+@@ -612,7 +593,6 @@ static int pod_create_files2(struct device *dev)
+ 	int err;
+ 
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_device_id));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_finish));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+@@ -727,7 +707,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 					       properties->device_bit, dev);
+ 
+ 			device_remove_file(dev, &dev_attr_device_id);
+-			device_remove_file(dev, &dev_attr_finish);
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_midi_postprocess);
+ 			device_remove_file(dev, &dev_attr_serial_number);

Added: dists/sid/linux/debian/patches/features/all/line6/0083-staging-line6-drop-midi_postprocess-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0083-staging-line6-drop-midi_postprocess-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,80 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:02 +0100
+Subject: [083/106] staging: line6: drop midi_postprocess sysfs attr
+
+commit bd99f84f484877ad87ee82adf2b3bbde4fdd9c2b upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   36 ------------------------------------
+ 1 file changed, 36 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 797f6e0..37b20d7 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -371,38 +371,6 @@ static int pod_set_system_param_int(struct usb_line6_pod *pod, int value,
+ }
+ 
+ /*
+-	"read" request on "midi_postprocess" special file.
+-*/
+-static ssize_t pod_get_midi_postprocess(struct device *dev,
+-					struct device_attribute *attr,
+-					char *buf)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	return sprintf(buf, "%d\n", pod->midi_postprocess);
+-}
+-
+-/*
+-	"write" request on "midi_postprocess" special file.
+-*/
+-static ssize_t pod_set_midi_postprocess(struct device *dev,
+-					struct device_attribute *attr,
+-					const char *buf, size_t count)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6_pod *pod = usb_get_intfdata(interface);
+-	u8 value;
+-	int ret;
+-
+-	ret = kstrtou8(buf, 10, &value);
+-	if (ret)
+-		return ret;
+-
+-	pod->midi_postprocess = value ? 1 : 0;
+-	return count;
+-}
+-
+-/*
+ 	"read" request on "serial_number" special file.
+ */
+ static ssize_t pod_get_serial_number(struct device *dev,
+@@ -510,8 +478,6 @@ static void pod_startup5(struct work_struct *work)
+ static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write);
+ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version,
+ 		   line6_nop_write);
+-static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO,
+-		   pod_get_midi_postprocess, pod_set_midi_postprocess);
+ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number,
+ 		   line6_nop_write);
+ 
+@@ -594,7 +560,6 @@ static int pod_create_files2(struct device *dev)
+ 
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_device_id));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_midi_postprocess));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+ 
+ #ifdef CONFIG_LINE6_USB_RAW
+@@ -708,7 +673,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 
+ 			device_remove_file(dev, &dev_attr_device_id);
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+-			device_remove_file(dev, &dev_attr_midi_postprocess);
+ 			device_remove_file(dev, &dev_attr_serial_number);
+ 
+ #ifdef CONFIG_LINE6_USB_RAW

Added: dists/sid/linux/debian/patches/features/all/line6/0084-staging-line6-drop-midi_mask_receive.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0084-staging-line6-drop-midi_mask_receive.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,133 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:03 +0100
+Subject: [084/106] staging: line6: drop midi_mask_receive
+
+commit 3e58c868db1dc1402943f6a585529873f445c14f upstream.
+
+The midi_mask_receive sysfs attribute selects the MIDI channels on which
+to receive messages.  There is no need to do this at the driver level,
+instead the MIDI application endpoints decide which channels to use.
+Other drivers don't implement midi_mask_receive so applications cannot
+make use of this feature.  Therefore we drop it as part of the effort to
+clean up the staging driver.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/driver.c |    5 -----
+ drivers/staging/line6/midi.c   |   42 ----------------------------------------
+ drivers/staging/line6/midi.h   |    5 -----
+ 3 files changed, 52 deletions(-)
+
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index 0bc838d..e0e0779 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -396,11 +396,6 @@ static void line6_data_received(struct urb *urb)
+ 		if (done == 0)
+ 			break;
+ 
+-		/* MIDI input filter */
+-		if (line6_midibuf_skip_message
+-		    (mb, line6->line6midi->midi_mask_receive))
+-			continue;
+-
+ 		line6->message_length = done;
+ 		line6_midi_receive(line6, line6->buffer_message, done);
+ 
+diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
+index c8e099b..c543c48 100644
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -313,42 +313,8 @@ static ssize_t midi_set_midi_mask_transmit(struct device *dev,
+ 	return count;
+ }
+ 
+-/*
+-	"read" request on "midi_mask_receive" special file.
+-*/
+-static ssize_t midi_get_midi_mask_receive(struct device *dev,
+-					  struct device_attribute *attr,
+-					  char *buf)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6 *line6 = usb_get_intfdata(interface);
+-	return sprintf(buf, "%d\n", line6->line6midi->midi_mask_receive);
+-}
+-
+-/*
+-	"write" request on "midi_mask" special file.
+-*/
+-static ssize_t midi_set_midi_mask_receive(struct device *dev,
+-					  struct device_attribute *attr,
+-					  const char *buf, size_t count)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6 *line6 = usb_get_intfdata(interface);
+-	unsigned short value;
+-	int ret;
+-
+-	ret = kstrtou16(buf, 10, &value);
+-	if (ret)
+-		return ret;
+-
+-	line6->line6midi->midi_mask_receive = value;
+-	return count;
+-}
+-
+ static DEVICE_ATTR(midi_mask_transmit, S_IWUSR | S_IRUGO,
+ 		   midi_get_midi_mask_transmit, midi_set_midi_mask_transmit);
+-static DEVICE_ATTR(midi_mask_receive, S_IWUSR | S_IRUGO,
+-		   midi_get_midi_mask_receive, midi_set_midi_mask_receive);
+ 
+ /* MIDI device destructor */
+ static int snd_line6_midi_free(struct snd_device *device)
+@@ -356,8 +322,6 @@ static int snd_line6_midi_free(struct snd_device *device)
+ 	struct snd_line6_midi *line6midi = device->device_data;
+ 	device_remove_file(line6midi->line6->ifcdev,
+ 			   &dev_attr_midi_mask_transmit);
+-	device_remove_file(line6midi->line6->ifcdev,
+-			   &dev_attr_midi_mask_receive);
+ 	line6_midibuf_destroy(&line6midi->midibuf_in);
+ 	line6_midibuf_destroy(&line6midi->midibuf_out);
+ 	return 0;
+@@ -404,12 +368,10 @@ int line6_init_midi(struct usb_line6 *line6)
+ 	case LINE6_DEVID_PODHD300:
+ 	case LINE6_DEVID_PODHD500:
+ 		line6midi->midi_mask_transmit = 1;
+-		line6midi->midi_mask_receive = 1;
+ 		break;
+ 
+ 	default:
+ 		line6midi->midi_mask_transmit = 1;
+-		line6midi->midi_mask_receive = 4;
+ 	}
+ 
+ 	line6->line6midi = line6midi;
+@@ -429,10 +391,6 @@ int line6_init_midi(struct usb_line6 *line6)
+ 	if (err < 0)
+ 		return err;
+ 
+-	err = device_create_file(line6->ifcdev, &dev_attr_midi_mask_receive);
+-	if (err < 0)
+-		return err;
+-
+ 	init_waitqueue_head(&line6midi->send_wait);
+ 	spin_lock_init(&line6midi->send_urb_lock);
+ 	spin_lock_init(&line6midi->midi_transmit_lock);
+diff --git a/drivers/staging/line6/midi.h b/drivers/staging/line6/midi.h
+index 4a9e9f9..cf32d77 100644
+--- a/drivers/staging/line6/midi.h
++++ b/drivers/staging/line6/midi.h
+@@ -60,11 +60,6 @@ struct snd_line6_midi {
+ 	unsigned short midi_mask_transmit;
+ 
+ 	/**
+-		 Bit mask for input MIDI channels.
+-	*/
+-	unsigned short midi_mask_receive;
+-
+-	/**
+ 		 Buffer for incoming MIDI stream.
+ 	*/
+ 	struct MidiBuffer midibuf_in;

Added: dists/sid/linux/debian/patches/features/all/line6/0085-staging-line6-drop-midi_mask_transmit.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0085-staging-line6-drop-midi_mask_transmit.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,128 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:04 +0100
+Subject: [085/106] staging: line6: drop midi_mask_transmit
+
+commit af89d2897a716e8e46cc5aad052a015d234e490f upstream.
+
+The midi_mask_transmit sysfs attribute selects the MIDI channels on
+which to transmit messages.  If ALSA wants to transmit a message that
+does not match an allowed channel, the message will be dropped.  This
+driver feature is not really used and applications don't know how to
+take advantage of it.  Therefore we drop it and rely on applications or
+MIDI sequencers to select the channels used for communication.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/midi.c |   56 ------------------------------------------
+ drivers/staging/line6/midi.h |    5 ----
+ 2 files changed, 61 deletions(-)
+
+diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
+index c543c48..6d9ecb9 100644
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -69,10 +69,6 @@ static void line6_midi_transmit(struct snd_rawmidi_substream *substream)
+ 		if (done == 0)
+ 			break;
+ 
+-		if (line6_midibuf_skip_message
+-		    (mb, line6midi->midi_mask_transmit))
+-			continue;
+-
+ 		send_midi_async(line6, chunk, done);
+ 	}
+ 
+@@ -281,47 +277,10 @@ static int snd_line6_new_midi(struct snd_line6_midi *line6midi)
+ 	return 0;
+ }
+ 
+-/*
+-	"read" request on "midi_mask_transmit" special file.
+-*/
+-static ssize_t midi_get_midi_mask_transmit(struct device *dev,
+-					   struct device_attribute *attr,
+-					   char *buf)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6 *line6 = usb_get_intfdata(interface);
+-	return sprintf(buf, "%d\n", line6->line6midi->midi_mask_transmit);
+-}
+-
+-/*
+-	"write" request on "midi_mask" special file.
+-*/
+-static ssize_t midi_set_midi_mask_transmit(struct device *dev,
+-					   struct device_attribute *attr,
+-					   const char *buf, size_t count)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6 *line6 = usb_get_intfdata(interface);
+-	unsigned short value;
+-	int ret;
+-
+-	ret = kstrtou16(buf, 10, &value);
+-	if (ret)
+-		return ret;
+-
+-	line6->line6midi->midi_mask_transmit = value;
+-	return count;
+-}
+-
+-static DEVICE_ATTR(midi_mask_transmit, S_IWUSR | S_IRUGO,
+-		   midi_get_midi_mask_transmit, midi_set_midi_mask_transmit);
+-
+ /* MIDI device destructor */
+ static int snd_line6_midi_free(struct snd_device *device)
+ {
+ 	struct snd_line6_midi *line6midi = device->device_data;
+-	device_remove_file(line6midi->line6->ifcdev,
+-			   &dev_attr_midi_mask_transmit);
+ 	line6_midibuf_destroy(&line6midi->midibuf_in);
+ 	line6_midibuf_destroy(&line6midi->midibuf_out);
+ 	return 0;
+@@ -363,17 +322,6 @@ int line6_init_midi(struct usb_line6 *line6)
+ 	}
+ 
+ 	line6midi->line6 = line6;
+-
+-	switch (line6->product) {
+-	case LINE6_DEVID_PODHD300:
+-	case LINE6_DEVID_PODHD500:
+-		line6midi->midi_mask_transmit = 1;
+-		break;
+-
+-	default:
+-		line6midi->midi_mask_transmit = 1;
+-	}
+-
+ 	line6->line6midi = line6midi;
+ 
+ 	err = snd_device_new(line6->card, SNDRV_DEV_RAWMIDI, line6midi,
+@@ -387,10 +335,6 @@ int line6_init_midi(struct usb_line6 *line6)
+ 	if (err < 0)
+ 		return err;
+ 
+-	err = device_create_file(line6->ifcdev, &dev_attr_midi_mask_transmit);
+-	if (err < 0)
+-		return err;
+-
+ 	init_waitqueue_head(&line6midi->send_wait);
+ 	spin_lock_init(&line6midi->send_urb_lock);
+ 	spin_lock_init(&line6midi->midi_transmit_lock);
+diff --git a/drivers/staging/line6/midi.h b/drivers/staging/line6/midi.h
+index cf32d77..19dabd5 100644
+--- a/drivers/staging/line6/midi.h
++++ b/drivers/staging/line6/midi.h
+@@ -55,11 +55,6 @@ struct snd_line6_midi {
+ 	wait_queue_head_t send_wait;
+ 
+ 	/**
+-		 Bit mask for output MIDI channels.
+-	*/
+-	unsigned short midi_mask_transmit;
+-
+-	/**
+ 		 Buffer for incoming MIDI stream.
+ 	*/
+ 	struct MidiBuffer midibuf_in;

Added: dists/sid/linux/debian/patches/features/all/line6/0086-staging-line6-drop-midi_postprocess-flag.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0086-staging-line6-drop-midi_postprocess-flag.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,126 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:05 +0100
+Subject: [086/106] staging: line6: drop midi_postprocess flag
+
+commit 370a382fa72879a23eb92786009cd41e38b93385 upstream.
+
+It is no longer necessary to trigger on MIDI transmit messages that will
+change the state of the device since:
+
+1. We've dropped the midi_postprocess sysfs attr in a previous commit so
+   it is not possible to activate this feature anymore.
+
+2. The other sysfs attrs that could inspect the state after a dump
+   request have been dropped.
+
+Therefore we can safely remove this dead code.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/midi.c |   22 ----------------------
+ drivers/staging/line6/pod.c  |   34 ----------------------------------
+ drivers/staging/line6/pod.h  |    7 -------
+ 3 files changed, 63 deletions(-)
+
+diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c
+index 6d9ecb9..6982eca 100644
+--- a/drivers/staging/line6/midi.c
++++ b/drivers/staging/line6/midi.c
+@@ -148,28 +148,6 @@ static int send_midi_async(struct usb_line6 *line6, unsigned char *data,
+ 	}
+ 
+ 	++line6->line6midi->num_active_send_urbs;
+-
+-	switch (line6->usbdev->descriptor.idProduct) {
+-	case LINE6_DEVID_BASSPODXT:
+-	case LINE6_DEVID_BASSPODXTLIVE:
+-	case LINE6_DEVID_BASSPODXTPRO:
+-	case LINE6_DEVID_PODXT:
+-	case LINE6_DEVID_PODXTLIVE:
+-	case LINE6_DEVID_PODXTPRO:
+-	case LINE6_DEVID_POCKETPOD:
+-		line6_pod_midi_postprocess((struct usb_line6_pod *)line6, data,
+-					   length);
+-		break;
+-
+-	case LINE6_DEVID_VARIAX:
+-	case LINE6_DEVID_PODHD300:
+-	case LINE6_DEVID_PODHD500:
+-		break;
+-
+-	default:
+-		MISSING_CASE;
+-	}
+-
+ 	return 0;
+ }
+ 
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 37b20d7..ddd0e54 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -285,40 +285,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ }
+ 
+ /*
+-	Detect some cases that require a channel dump after sending a command to the
+-	device. Important notes:
+-	*) The actual dump request can not be sent here since we are not allowed to
+-	wait for the completion of the first message in this context, and sending
+-	the dump request before completion of the previous message leaves the POD
+-	in an undefined state. The dump request will be sent when the echoed
+-	commands are received.
+-	*) This method fails if a param change message is "chopped" after the first
+-	byte.
+-*/
+-void line6_pod_midi_postprocess(struct usb_line6_pod *pod, unsigned char *data,
+-				int length)
+-{
+-	int i;
+-
+-	if (!pod->midi_postprocess)
+-		return;
+-
+-	for (i = 0; i < length; ++i) {
+-		if (data[i] == (LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST)) {
+-			line6_invalidate_current(&pod->dumpreq);
+-			break;
+-		} else
+-		    if ((data[i] == (LINE6_PARAM_CHANGE | LINE6_CHANNEL_HOST))
+-			&& (i < length - 1))
+-			if ((data[i + 1] == POD_amp_model_setup)
+-			    || (data[i + 1] == POD_effect_setup)) {
+-				line6_invalidate_current(&pod->dumpreq);
+-				break;
+-			}
+-	}
+-}
+-
+-/*
+ 	Transmit PODxt Pro control parameter.
+ */
+ void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index 481cce6..8543bae 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -127,18 +127,11 @@ struct usb_line6_pod {
+ 		Device ID.
+ 	*/
+ 	int device_id;
+-
+-	/**
+-		Flag to enable MIDI postprocessing.
+-	*/
+-	char midi_postprocess;
+ };
+ 
+ extern void line6_pod_disconnect(struct usb_interface *interface);
+ extern int line6_pod_init(struct usb_interface *interface,
+ 			  struct usb_line6_pod *pod);
+-extern void line6_pod_midi_postprocess(struct usb_line6_pod *pod,
+-				       unsigned char *data, int length);
+ extern void line6_pod_process_message(struct usb_line6_pod *pod);
+ extern void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
+ 					 u8 value);

Added: dists/sid/linux/debian/patches/features/all/line6/0087-staging-line6-drop-pod.c-raw-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0087-staging-line6-drop-pod.c-raw-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,55 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:06 +0100
+Subject: [087/106] staging: line6: drop pod.c raw sysfs attr
+
+commit e62025281bb565f2cdb3e42e900caf972809eb35 upstream.
+
+The raw sysfs attr transmits MIDI messages with less filtering.  This
+was a useful debugging tool while the staging driver still had a lot of
+state and filtering.  It is not useful anymore since the filtering is
+being dropped.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   13 -------------
+ 1 file changed, 13 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index ddd0e54..db9c905 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -447,10 +447,6 @@ static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version,
+ static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number,
+ 		   line6_nop_write);
+ 
+-#ifdef CONFIG_LINE6_USB_RAW
+-static DEVICE_ATTR(raw, S_IWUSR, line6_nop_read, line6_set_raw);
+-#endif
+-
+ /* control info callback */
+ static int snd_pod_control_monitor_info(struct snd_kcontrol *kcontrol,
+ 					struct snd_ctl_elem_info *uinfo)
+@@ -527,11 +523,6 @@ static int pod_create_files2(struct device *dev)
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_device_id));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_firmware_version));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_serial_number));
+-
+-#ifdef CONFIG_LINE6_USB_RAW
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_raw));
+-#endif
+-
+ 	return 0;
+ }
+ 
+@@ -640,10 +631,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 			device_remove_file(dev, &dev_attr_device_id);
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_serial_number);
+-
+-#ifdef CONFIG_LINE6_USB_RAW
+-			device_remove_file(dev, &dev_attr_raw);
+-#endif
+ 		}
+ 	}
+ 

Added: dists/sid/linux/debian/patches/features/all/line6/0088-staging-line6-drop-tuner-param-filtering.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0088-staging-line6-drop-tuner-param-filtering.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,64 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:07 +0100
+Subject: [088/106] staging: line6: drop tuner param filtering
+
+commit baa081f127dcb213e06dec828c091e4f1048e4b3 upstream.
+
+The pod_set_system_param_int() helper function is only used to set the
+monitor level.  Previously it was also used to control the tuner and has
+special checks.  These checks can now be dropped, along with the tuner
+constants.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   21 ---------------------
+ 1 file changed, 21 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index db9c905..157ef68 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -40,10 +40,6 @@ enum {
+ 
+ enum {
+ 	POD_monitor_level  = 0x04,
+-	POD_tuner_mute     = 0x13,
+-	POD_tuner_freq     = 0x15,
+-	POD_tuner_note     = 0x16,
+-	POD_tuner_pitch    = 0x17,
+ 	POD_system_invalid = 0x10000
+ };
+ 
+@@ -298,19 +294,7 @@ void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
+ }
+ 
+ /*
+-	Identify system parameters related to the tuner.
+-*/
+-static bool pod_is_tuner(int code)
+-{
+-	return
+-	    (code == POD_tuner_mute) ||
+-	    (code == POD_tuner_freq) ||
+-	    (code == POD_tuner_note) || (code == POD_tuner_pitch);
+-}
+-
+-/*
+ 	Send system parameter (from integer).
+-	@param tuner non-zero, if code refers to a tuner parameter
+ */
+ static int pod_set_system_param_int(struct usb_line6_pod *pod, int value,
+ 				    int code)
+@@ -318,11 +302,6 @@ static int pod_set_system_param_int(struct usb_line6_pod *pod, int value,
+ 	char *sysex;
+ 	static const int size = 5;
+ 
+-	if (((pod->prog_data.control[POD_tuner] & 0x40) == 0)
+-	    && pod_is_tuner(code))
+-		return -EINVAL;
+-
+-	/* send value to tuner: */
+ 	sysex = pod_alloc_sysex_buffer(pod, POD_SYSEX_SYSTEM, size);
+ 	if (!sysex)
+ 		return -ENOMEM;

Added: dists/sid/linux/debian/patches/features/all/line6/0089-staging-line6-drop-variax-model-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0089-staging-line6-drop-variax-model-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,106 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:08 +0100
+Subject: [089/106] staging: line6: drop variax model sysfs attr
+
+commit a865e012a29a92f07ed25b81bc86d7e772edeb38 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |   38 --------------------------------------
+ drivers/staging/line6/variax.h |    5 -----
+ 2 files changed, 43 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index 8df529f..e76255b 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -212,7 +212,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE:
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST:
+-		variax->model = buf[1];
+ 		line6_dump_request_async(&variax->dumpreq, &variax->line6, 0,
+ 					 VARIAX_DUMP_PASS1);
+ 		break;
+@@ -334,39 +333,6 @@ static ssize_t variax_set_volume(struct device *dev,
+ }
+ 
+ /*
+-	"read" request on "model" special file.
+-*/
+-static ssize_t variax_get_model(struct device *dev,
+-				struct device_attribute *attr, char *buf)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	return sprintf(buf, "%d\n", variax->model);
+-}
+-
+-/*
+-	"write" request on "model" special file.
+-*/
+-static ssize_t variax_set_model(struct device *dev,
+-				struct device_attribute *attr,
+-				const char *buf, size_t count)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	u8 value;
+-	int ret;
+-
+-	ret = kstrtou8(buf, 10, &value);
+-	if (ret)
+-		return ret;
+-
+-	if (line6_send_program(&variax->line6, value) == 0)
+-		variax->model = value;
+-
+-	return count;
+-}
+-
+-/*
+ 	"read" request on "active" special file.
+ */
+ static ssize_t variax_get_active(struct device *dev,
+@@ -549,8 +515,6 @@ static ssize_t variax_set_raw2(struct device *dev,
+ #endif
+ 
+ /* Variax workbench special files: */
+-static DEVICE_ATTR(model, S_IWUSR | S_IRUGO, variax_get_model,
+-		   variax_set_model);
+ static DEVICE_ATTR(volume, S_IWUSR | S_IRUGO, variax_get_volume,
+ 		   variax_set_volume);
+ static DEVICE_ATTR(tone, S_IWUSR | S_IRUGO, variax_get_tone, variax_set_tone);
+@@ -595,7 +559,6 @@ static void variax_destruct(struct usb_interface *interface)
+ static int variax_create_files2(struct device *dev)
+ {
+ 	int err;
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_model));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_volume));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tone));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_name));
+@@ -701,7 +664,6 @@ void line6_variax_disconnect(struct usb_interface *interface)
+ 	if (dev != NULL) {
+ 		/* remove sysfs entries: */
+ 		line6_variax_remove_files(0, 0, dev);
+-		device_remove_file(dev, &dev_attr_model);
+ 		device_remove_file(dev, &dev_attr_volume);
+ 		device_remove_file(dev, &dev_attr_tone);
+ 		device_remove_file(dev, &dev_attr_name);
+diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h
+index e2999ab..4151c14 100644
+--- a/drivers/staging/line6/variax.h
++++ b/drivers/staging/line6/variax.h
+@@ -78,11 +78,6 @@ struct usb_line6_variax {
+ 	unsigned char *buffer_activate;
+ 
+ 	/**
+-		Model number.
+-	*/
+-	int model;
+-
+-	/**
+ 		Current model settings.
+ 	*/
+ 	struct variax_model model_data;

Added: dists/sid/linux/debian/patches/features/all/line6/0090-staging-line6-drop-variax-volume-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0090-staging-line6-drop-variax-volume-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,110 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:09 +0100
+Subject: [090/106] staging: line6: drop variax volume sysfs attr
+
+commit 9f242ef59b72be7f1c71233a5c91b6e2b3dbc6dc upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |   42 ----------------------------------------
+ drivers/staging/line6/variax.h |    5 -----
+ 2 files changed, 47 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index e76255b..ef78f5a 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -200,10 +200,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 	switch (buf[0]) {
+ 	case LINE6_PARAM_CHANGE | LINE6_CHANNEL_HOST:
+ 		switch (buf[1]) {
+-		case VARIAXMIDI_volume:
+-			variax->volume = buf[2];
+-			break;
+-
+ 		case VARIAXMIDI_tone:
+ 			variax->tone = buf[2];
+ 		}
+@@ -299,40 +295,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ }
+ 
+ /*
+-	"read" request on "volume" special file.
+-*/
+-static ssize_t variax_get_volume(struct device *dev,
+-				 struct device_attribute *attr, char *buf)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	return sprintf(buf, "%d\n", variax->volume);
+-}
+-
+-/*
+-	"write" request on "volume" special file.
+-*/
+-static ssize_t variax_set_volume(struct device *dev,
+-				 struct device_attribute *attr,
+-				 const char *buf, size_t count)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	u8 value;
+-	int ret;
+-
+-	ret = kstrtou8(buf, 10, &value);
+-	if (ret)
+-		return ret;
+-
+-	if (line6_transmit_parameter(&variax->line6, VARIAXMIDI_volume,
+-				     value) == 0)
+-		variax->volume = value;
+-
+-	return count;
+-}
+-
+-/*
+ 	"read" request on "active" special file.
+ */
+ static ssize_t variax_get_active(struct device *dev,
+@@ -515,8 +477,6 @@ static ssize_t variax_set_raw2(struct device *dev,
+ #endif
+ 
+ /* Variax workbench special files: */
+-static DEVICE_ATTR(volume, S_IWUSR | S_IRUGO, variax_get_volume,
+-		   variax_set_volume);
+ static DEVICE_ATTR(tone, S_IWUSR | S_IRUGO, variax_get_tone, variax_set_tone);
+ static DEVICE_ATTR(name, S_IRUGO, variax_get_name, line6_nop_write);
+ static DEVICE_ATTR(bank, S_IRUGO, variax_get_bank, line6_nop_write);
+@@ -559,7 +519,6 @@ static void variax_destruct(struct usb_interface *interface)
+ static int variax_create_files2(struct device *dev)
+ {
+ 	int err;
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_volume));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_tone));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_name));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_bank));
+@@ -664,7 +623,6 @@ void line6_variax_disconnect(struct usb_interface *interface)
+ 	if (dev != NULL) {
+ 		/* remove sysfs entries: */
+ 		line6_variax_remove_files(0, 0, dev);
+-		device_remove_file(dev, &dev_attr_volume);
+ 		device_remove_file(dev, &dev_attr_tone);
+ 		device_remove_file(dev, &dev_attr_name);
+ 		device_remove_file(dev, &dev_attr_bank);
+diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h
+index 4151c14..426c90c 100644
+--- a/drivers/staging/line6/variax.h
++++ b/drivers/staging/line6/variax.h
+@@ -93,11 +93,6 @@ struct usb_line6_variax {
+ 	unsigned char bank[18];
+ 
+ 	/**
+-		Position of volume dial.
+-	*/
+-	int volume;
+-
+-	/**
+ 		Position of tone control dial.
+ 	*/
+ 	int tone;

Added: dists/sid/linux/debian/patches/features/all/line6/0091-staging-line6-drop-variax-tone-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0091-staging-line6-drop-variax-tone-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,110 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:10 +0100
+Subject: [091/106] staging: line6: drop variax tone sysfs attr
+
+commit abac15bd1812c8c8c7186b019dc2b946ac885e5b upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |   42 ----------------------------------------
+ drivers/staging/line6/variax.h |    5 -----
+ 2 files changed, 47 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index ef78f5a..31ece34 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -199,11 +199,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 
+ 	switch (buf[0]) {
+ 	case LINE6_PARAM_CHANGE | LINE6_CHANNEL_HOST:
+-		switch (buf[1]) {
+-		case VARIAXMIDI_tone:
+-			variax->tone = buf[2];
+-		}
+-
+ 		break;
+ 
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE:
+@@ -326,40 +321,6 @@ static ssize_t variax_set_active(struct device *dev,
+ 	return count;
+ }
+ 
+-/*
+-	"read" request on "tone" special file.
+-*/
+-static ssize_t variax_get_tone(struct device *dev,
+-			       struct device_attribute *attr, char *buf)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	return sprintf(buf, "%d\n", variax->tone);
+-}
+-
+-/*
+-	"write" request on "tone" special file.
+-*/
+-static ssize_t variax_set_tone(struct device *dev,
+-			       struct device_attribute *attr,
+-			       const char *buf, size_t count)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	u8 value;
+-	int ret;
+-
+-	ret = kstrtou8(buf, 10, &value);
+-	if (ret)
+-		return ret;
+-
+-	if (line6_transmit_parameter(&variax->line6, VARIAXMIDI_tone,
+-				     value) == 0)
+-		variax->tone = value;
+-
+-	return count;
+-}
+-
+ static ssize_t get_string(char *buf, const char *data, int length)
+ {
+ 	int i;
+@@ -477,7 +438,6 @@ static ssize_t variax_set_raw2(struct device *dev,
+ #endif
+ 
+ /* Variax workbench special files: */
+-static DEVICE_ATTR(tone, S_IWUSR | S_IRUGO, variax_get_tone, variax_set_tone);
+ static DEVICE_ATTR(name, S_IRUGO, variax_get_name, line6_nop_write);
+ static DEVICE_ATTR(bank, S_IRUGO, variax_get_bank, line6_nop_write);
+ static DEVICE_ATTR(dump, S_IRUGO, variax_get_dump, line6_nop_write);
+@@ -519,7 +479,6 @@ static void variax_destruct(struct usb_interface *interface)
+ static int variax_create_files2(struct device *dev)
+ {
+ 	int err;
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_tone));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_name));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_bank));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_dump));
+@@ -623,7 +582,6 @@ void line6_variax_disconnect(struct usb_interface *interface)
+ 	if (dev != NULL) {
+ 		/* remove sysfs entries: */
+ 		line6_variax_remove_files(0, 0, dev);
+-		device_remove_file(dev, &dev_attr_tone);
+ 		device_remove_file(dev, &dev_attr_name);
+ 		device_remove_file(dev, &dev_attr_bank);
+ 		device_remove_file(dev, &dev_attr_dump);
+diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h
+index 426c90c..745b5a1 100644
+--- a/drivers/staging/line6/variax.h
++++ b/drivers/staging/line6/variax.h
+@@ -93,11 +93,6 @@ struct usb_line6_variax {
+ 	unsigned char bank[18];
+ 
+ 	/**
+-		Position of tone control dial.
+-	*/
+-	int tone;
+-
+-	/**
+ 		Handler for device initializaton.
+ 	*/
+ 	struct work_struct startup_work;

Added: dists/sid/linux/debian/patches/features/all/line6/0092-staging-line6-drop-variax-name-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0092-staging-line6-drop-variax-name-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,78 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:11 +0100
+Subject: [092/106] staging: line6: drop variax name sysfs attr
+
+commit ed5da06a77cef2aa64eb8298578fe1dc8e96ce35 upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |   27 ---------------------------
+ 1 file changed, 27 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index 31ece34..94a9f71 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -218,17 +218,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 			    VARIAX_MODEL_MESSAGE_LENGTH) {
+ 				switch (variax->dumpreq.in_progress) {
+ 				case VARIAX_DUMP_PASS1:
+-					variax_decode(buf +
+-						      VARIAX_MODEL_HEADER_LENGTH,
+-						      (unsigned char *)
+-						      &variax->model_data,
+-						      (sizeof
+-						       (variax->model_data.
+-							name) +
+-						       sizeof(variax->
+-							      model_data.
+-							      control)
+-						       / 2) * 2);
+ 					line6_dump_request_async
+ 					    (&variax->dumpreq, &variax->line6,
+ 					     1, VARIAX_DUMP_PASS2);
+@@ -338,19 +327,6 @@ static ssize_t get_string(char *buf, const char *data, int length)
+ }
+ 
+ /*
+-	"read" request on "name" special file.
+-*/
+-static ssize_t variax_get_name(struct device *dev,
+-			       struct device_attribute *attr, char *buf)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	line6_dump_wait_interruptible(&variax->dumpreq);
+-	return get_string(buf, variax->model_data.name,
+-			  sizeof(variax->model_data.name));
+-}
+-
+-/*
+ 	"read" request on "bank" special file.
+ */
+ static ssize_t variax_get_bank(struct device *dev,
+@@ -438,7 +414,6 @@ static ssize_t variax_set_raw2(struct device *dev,
+ #endif
+ 
+ /* Variax workbench special files: */
+-static DEVICE_ATTR(name, S_IRUGO, variax_get_name, line6_nop_write);
+ static DEVICE_ATTR(bank, S_IRUGO, variax_get_bank, line6_nop_write);
+ static DEVICE_ATTR(dump, S_IRUGO, variax_get_dump, line6_nop_write);
+ static DEVICE_ATTR(active, S_IWUSR | S_IRUGO, variax_get_active,
+@@ -479,7 +454,6 @@ static void variax_destruct(struct usb_interface *interface)
+ static int variax_create_files2(struct device *dev)
+ {
+ 	int err;
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_name));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_bank));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_dump));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_active));
+@@ -582,7 +556,6 @@ void line6_variax_disconnect(struct usb_interface *interface)
+ 	if (dev != NULL) {
+ 		/* remove sysfs entries: */
+ 		line6_variax_remove_files(0, 0, dev);
+-		device_remove_file(dev, &dev_attr_name);
+ 		device_remove_file(dev, &dev_attr_bank);
+ 		device_remove_file(dev, &dev_attr_dump);
+ 		device_remove_file(dev, &dev_attr_active);

Added: dists/sid/linux/debian/patches/features/all/line6/0093-staging-line6-drop-variax-bank-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0093-staging-line6-drop-variax-bank-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,104 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:12 +0100
+Subject: [093/106] staging: line6: drop variax bank sysfs attr
+
+commit a9de8ddabb542c33945f5c733d80978fee556029 upstream.
+
+The get_string() function is no longer used so drop it too.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |   34 ----------------------------------
+ drivers/staging/line6/variax.h |    5 -----
+ 2 files changed, 39 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index 94a9f71..8eec139 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -248,9 +248,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 			}
+ 		} else if (memcmp(buf + 1, variax_request_bank + 1,
+ 				  sizeof(variax_request_bank) - 2) == 0) {
+-			memcpy(variax->bank,
+-			       buf + sizeof(variax_request_bank) - 1,
+-			       sizeof(variax->bank));
+ 			line6_dump_finished(&variax->dumpreq);
+ 			variax_startup6(variax);
+ 		} else if (memcmp(buf + 1, variax_init_model + 1,
+@@ -310,34 +307,6 @@ static ssize_t variax_set_active(struct device *dev,
+ 	return count;
+ }
+ 
+-static ssize_t get_string(char *buf, const char *data, int length)
+-{
+-	int i;
+-	memcpy(buf, data, length);
+-
+-	for (i = length; i--;) {
+-		char c = buf[i];
+-
+-		if ((c != 0) && (c != ' '))
+-			break;
+-	}
+-
+-	buf[i + 1] = '\n';
+-	return i + 2;
+-}
+-
+-/*
+-	"read" request on "bank" special file.
+-*/
+-static ssize_t variax_get_bank(struct device *dev,
+-			       struct device_attribute *attr, char *buf)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	line6_dump_wait_interruptible(&variax->dumpreq);
+-	return get_string(buf, variax->bank, sizeof(variax->bank));
+-}
+-
+ /*
+ 	"read" request on "dump" special file.
+ */
+@@ -414,7 +383,6 @@ static ssize_t variax_set_raw2(struct device *dev,
+ #endif
+ 
+ /* Variax workbench special files: */
+-static DEVICE_ATTR(bank, S_IRUGO, variax_get_bank, line6_nop_write);
+ static DEVICE_ATTR(dump, S_IRUGO, variax_get_dump, line6_nop_write);
+ static DEVICE_ATTR(active, S_IWUSR | S_IRUGO, variax_get_active,
+ 		   variax_set_active);
+@@ -454,7 +422,6 @@ static void variax_destruct(struct usb_interface *interface)
+ static int variax_create_files2(struct device *dev)
+ {
+ 	int err;
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_bank));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_dump));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_active));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_guitar));
+@@ -556,7 +523,6 @@ void line6_variax_disconnect(struct usb_interface *interface)
+ 	if (dev != NULL) {
+ 		/* remove sysfs entries: */
+ 		line6_variax_remove_files(0, 0, dev);
+-		device_remove_file(dev, &dev_attr_bank);
+ 		device_remove_file(dev, &dev_attr_dump);
+ 		device_remove_file(dev, &dev_attr_active);
+ 		device_remove_file(dev, &dev_attr_guitar);
+diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h
+index 745b5a1..b5d6a66 100644
+--- a/drivers/staging/line6/variax.h
++++ b/drivers/staging/line6/variax.h
+@@ -88,11 +88,6 @@ struct usb_line6_variax {
+ 	unsigned char guitar[18];
+ 
+ 	/**
+-		Name of current model bank.
+-	*/
+-	unsigned char bank[18];
+-
+-	/**
+ 		Handler for device initializaton.
+ 	*/
+ 	struct work_struct startup_work;

Added: dists/sid/linux/debian/patches/features/all/line6/0094-staging-line6-drop-variax-dump-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0094-staging-line6-drop-variax-dump-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,64 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:13 +0100
+Subject: [094/106] staging: line6: drop variax dump sysfs attr
+
+commit 502eb4ee43064ad40d10a9ea20477f841a35167d upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |   20 --------------------
+ 1 file changed, 20 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index 8eec139..0f1846e 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -308,23 +308,6 @@ static ssize_t variax_set_active(struct device *dev,
+ }
+ 
+ /*
+-	"read" request on "dump" special file.
+-*/
+-static ssize_t variax_get_dump(struct device *dev,
+-			       struct device_attribute *attr, char *buf)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	int retval;
+-	retval = line6_dump_wait_interruptible(&variax->dumpreq);
+-	if (retval < 0)
+-		return retval;
+-	memcpy(buf, &variax->model_data.control,
+-	       sizeof(variax->model_data.control));
+-	return sizeof(variax->model_data.control);
+-}
+-
+-/*
+ 	"read" request on "guitar" special file.
+ */
+ static ssize_t variax_get_guitar(struct device *dev,
+@@ -383,7 +366,6 @@ static ssize_t variax_set_raw2(struct device *dev,
+ #endif
+ 
+ /* Variax workbench special files: */
+-static DEVICE_ATTR(dump, S_IRUGO, variax_get_dump, line6_nop_write);
+ static DEVICE_ATTR(active, S_IWUSR | S_IRUGO, variax_get_active,
+ 		   variax_set_active);
+ static DEVICE_ATTR(guitar, S_IRUGO, variax_get_guitar, line6_nop_write);
+@@ -422,7 +404,6 @@ static void variax_destruct(struct usb_interface *interface)
+ static int variax_create_files2(struct device *dev)
+ {
+ 	int err;
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_dump));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_active));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_guitar));
+ #ifdef CONFIG_LINE6_USB_RAW
+@@ -523,7 +504,6 @@ void line6_variax_disconnect(struct usb_interface *interface)
+ 	if (dev != NULL) {
+ 		/* remove sysfs entries: */
+ 		line6_variax_remove_files(0, 0, dev);
+-		device_remove_file(dev, &dev_attr_dump);
+ 		device_remove_file(dev, &dev_attr_active);
+ 		device_remove_file(dev, &dev_attr_guitar);
+ #ifdef CONFIG_LINE6_USB_RAW

Added: dists/sid/linux/debian/patches/features/all/line6/0095-staging-line6-drop-variax-active-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0095-staging-line6-drop-variax-active-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,82 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:14 +0100
+Subject: [095/106] staging: line6: drop variax active sysfs attr
+
+commit d46e7c215229c29008c30fb8bca16a381d3ef5f4 upstream.
+
+The get_string() function has no other callers so remove it too.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |   36 ------------------------------------
+ 1 file changed, 36 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index 0f1846e..4600d24 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -276,38 +276,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ }
+ 
+ /*
+-	"read" request on "active" special file.
+-*/
+-static ssize_t variax_get_active(struct device *dev,
+-				 struct device_attribute *attr, char *buf)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	return sprintf(buf, "%d\n",
+-		       variax->buffer_activate[VARIAX_OFFSET_ACTIVATE]);
+-}
+-
+-/*
+-	"write" request on "active" special file.
+-*/
+-static ssize_t variax_set_active(struct device *dev,
+-				 struct device_attribute *attr,
+-				 const char *buf, size_t count)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	u8 value;
+-	int ret;
+-
+-	ret = kstrtou8(buf, 10, &value);
+-	if (ret)
+-		return ret;
+-
+-	variax_activate_async(variax, value ? 1 : 0);
+-	return count;
+-}
+-
+-/*
+ 	"read" request on "guitar" special file.
+ */
+ static ssize_t variax_get_guitar(struct device *dev,
+@@ -366,8 +334,6 @@ static ssize_t variax_set_raw2(struct device *dev,
+ #endif
+ 
+ /* Variax workbench special files: */
+-static DEVICE_ATTR(active, S_IWUSR | S_IRUGO, variax_get_active,
+-		   variax_set_active);
+ static DEVICE_ATTR(guitar, S_IRUGO, variax_get_guitar, line6_nop_write);
+ 
+ #ifdef CONFIG_LINE6_USB_RAW
+@@ -404,7 +370,6 @@ static void variax_destruct(struct usb_interface *interface)
+ static int variax_create_files2(struct device *dev)
+ {
+ 	int err;
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_active));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_guitar));
+ #ifdef CONFIG_LINE6_USB_RAW
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_raw));
+@@ -504,7 +469,6 @@ void line6_variax_disconnect(struct usb_interface *interface)
+ 	if (dev != NULL) {
+ 		/* remove sysfs entries: */
+ 		line6_variax_remove_files(0, 0, dev);
+-		device_remove_file(dev, &dev_attr_active);
+ 		device_remove_file(dev, &dev_attr_guitar);
+ #ifdef CONFIG_LINE6_USB_RAW
+ 		device_remove_file(dev, &dev_attr_raw);

Added: dists/sid/linux/debian/patches/features/all/line6/0096-staging-line6-drop-variax-guitar-sysfs-attr.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0096-staging-line6-drop-variax-guitar-sysfs-attr.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,90 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:15 +0100
+Subject: [096/106] staging: line6: drop variax guitar sysfs attr
+
+commit 52c5505ac5ff0588c51c82893a782bd8571e180c upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |   22 ----------------------
+ drivers/staging/line6/variax.h |    5 -----
+ 2 files changed, 27 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index 4600d24..4db21a3 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -250,11 +250,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 				  sizeof(variax_request_bank) - 2) == 0) {
+ 			line6_dump_finished(&variax->dumpreq);
+ 			variax_startup6(variax);
+-		} else if (memcmp(buf + 1, variax_init_model + 1,
+-				  sizeof(variax_init_model) - 1) == 0) {
+-			memcpy(variax->guitar,
+-			       buf + sizeof(variax_init_model),
+-			       sizeof(variax->guitar));
+ 		} else if (memcmp(buf + 1, variax_init_version + 1,
+ 				  sizeof(variax_init_version) - 1) == 0) {
+ 			variax_startup3(variax);
+@@ -275,17 +270,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 	}
+ }
+ 
+-/*
+-	"read" request on "guitar" special file.
+-*/
+-static ssize_t variax_get_guitar(struct device *dev,
+-				 struct device_attribute *attr, char *buf)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	return sprintf(buf, "%s\n", variax->guitar);
+-}
+-
+ #ifdef CONFIG_LINE6_USB_RAW
+ 
+ static char *variax_alloc_sysex_buffer(struct usb_line6_variax *variax,
+@@ -333,9 +317,6 @@ static ssize_t variax_set_raw2(struct device *dev,
+ 
+ #endif
+ 
+-/* Variax workbench special files: */
+-static DEVICE_ATTR(guitar, S_IRUGO, variax_get_guitar, line6_nop_write);
+-
+ #ifdef CONFIG_LINE6_USB_RAW
+ static DEVICE_ATTR(raw, S_IWUSR, line6_nop_read, line6_set_raw);
+ static DEVICE_ATTR(raw2, S_IWUSR, line6_nop_read, variax_set_raw2);
+@@ -369,8 +350,6 @@ static void variax_destruct(struct usb_interface *interface)
+ */
+ static int variax_create_files2(struct device *dev)
+ {
+-	int err;
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_guitar));
+ #ifdef CONFIG_LINE6_USB_RAW
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_raw));
+ 	CHECK_RETURN(device_create_file(dev, &dev_attr_raw2));
+@@ -469,7 +448,6 @@ void line6_variax_disconnect(struct usb_interface *interface)
+ 	if (dev != NULL) {
+ 		/* remove sysfs entries: */
+ 		line6_variax_remove_files(0, 0, dev);
+-		device_remove_file(dev, &dev_attr_guitar);
+ #ifdef CONFIG_LINE6_USB_RAW
+ 		device_remove_file(dev, &dev_attr_raw);
+ 		device_remove_file(dev, &dev_attr_raw2);
+diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h
+index b5d6a66..f3d95fa 100644
+--- a/drivers/staging/line6/variax.h
++++ b/drivers/staging/line6/variax.h
+@@ -83,11 +83,6 @@ struct usb_line6_variax {
+ 	struct variax_model model_data;
+ 
+ 	/**
+-		Name of connected guitar.
+-	*/
+-	unsigned char guitar[18];
+-
+-	/**
+ 		Handler for device initializaton.
+ 	*/
+ 	struct work_struct startup_work;

Added: dists/sid/linux/debian/patches/features/all/line6/0097-staging-line6-drop-variax-raw-sysfs-attrs.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0097-staging-line6-drop-variax-raw-sysfs-attrs.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,134 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:16 +0100
+Subject: [097/106] staging: line6: drop variax raw sysfs attrs
+
+commit 59ac6936bcb7fc95039eb7813bfb827271185c56 upstream.
+
+Note that VARIAX_SYSEX_ACTIVATE was never used so drop it along with the
+other VARIAX_SYSEX_* constants which are now unused.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |   73 ----------------------------------------
+ 1 file changed, 73 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index 4db21a3..ff55ad37 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -16,9 +16,6 @@
+ #include "driver.h"
+ #include "variax.h"
+ 
+-#define VARIAX_SYSEX_CODE 7
+-#define VARIAX_SYSEX_PARAM 0x3b
+-#define VARIAX_SYSEX_ACTIVATE 0x2a
+ #define VARIAX_MODEL_HEADER_LENGTH 7
+ #define VARIAX_MODEL_MESSAGE_LENGTH 199
+ #define VARIAX_OFFSET_ACTIVATE 7
+@@ -70,7 +67,6 @@ static const char variax_request_model2[] = {
+ };
+ 
+ /* forward declarations: */
+-static int variax_create_files2(struct device *dev);
+ static void variax_startup2(unsigned long data);
+ static void variax_startup4(unsigned long data);
+ static void variax_startup5(unsigned long data);
+@@ -187,7 +183,6 @@ static void variax_startup7(struct work_struct *work)
+ 
+ 	/* device files: */
+ 	line6_variax_create_files(0, 0, line6->ifcdev);
+-	variax_create_files2(line6->ifcdev);
+ }
+ 
+ /*
+@@ -270,58 +265,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 	}
+ }
+ 
+-#ifdef CONFIG_LINE6_USB_RAW
+-
+-static char *variax_alloc_sysex_buffer(struct usb_line6_variax *variax,
+-				       int code, int size)
+-{
+-	return line6_alloc_sysex_buffer(&variax->line6, VARIAX_SYSEX_CODE, code,
+-					size);
+-}
+-
+-/*
+-	"write" request on "raw" special file.
+-*/
+-static ssize_t variax_set_raw2(struct device *dev,
+-			       struct device_attribute *attr,
+-			       const char *buf, size_t count)
+-{
+-	struct usb_line6_variax *variax =
+-	    usb_get_intfdata(to_usb_interface(dev));
+-	int size;
+-	int i;
+-	char *sysex;
+-
+-	count -= count % 3;
+-	size = count * 2;
+-	sysex = variax_alloc_sysex_buffer(variax, VARIAX_SYSEX_PARAM, size);
+-
+-	if (!sysex)
+-		return 0;
+-
+-	for (i = 0; i < count; i += 3) {
+-		const unsigned char *p1 = buf + i;
+-		char *p2 = sysex + SYSEX_DATA_OFS + i * 2;
+-		p2[0] = p1[2] & 0x0f;
+-		p2[1] = p1[2] >> 4;
+-		p2[2] = p1[1] & 0x0f;
+-		p2[3] = p1[1] >> 4;
+-		p2[4] = p1[0] & 0x0f;
+-		p2[5] = p1[0] >> 4;
+-	}
+-
+-	line6_send_sysex_message(&variax->line6, sysex, size);
+-	kfree(sysex);
+-	return count;
+-}
+-
+-#endif
+-
+-#ifdef CONFIG_LINE6_USB_RAW
+-static DEVICE_ATTR(raw, S_IWUSR, line6_nop_read, line6_set_raw);
+-static DEVICE_ATTR(raw2, S_IWUSR, line6_nop_read, variax_set_raw2);
+-#endif
+-
+ /*
+ 	Variax destructor.
+ */
+@@ -346,18 +289,6 @@ static void variax_destruct(struct usb_interface *interface)
+ }
+ 
+ /*
+-	Create sysfs entries.
+-*/
+-static int variax_create_files2(struct device *dev)
+-{
+-#ifdef CONFIG_LINE6_USB_RAW
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_raw));
+-	CHECK_RETURN(device_create_file(dev, &dev_attr_raw2));
+-#endif
+-	return 0;
+-}
+-
+-/*
+ 	 Try to init workbench device.
+ */
+ static int variax_try_init(struct usb_interface *interface,
+@@ -448,10 +379,6 @@ void line6_variax_disconnect(struct usb_interface *interface)
+ 	if (dev != NULL) {
+ 		/* remove sysfs entries: */
+ 		line6_variax_remove_files(0, 0, dev);
+-#ifdef CONFIG_LINE6_USB_RAW
+-		device_remove_file(dev, &dev_attr_raw);
+-		device_remove_file(dev, &dev_attr_raw2);
+-#endif
+ 	}
+ 
+ 	variax_destruct(interface);

Added: dists/sid/linux/debian/patches/features/all/line6/0098-staging-line6-drop-CONFIG_LINE6_USB_RAW.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0098-staging-line6-drop-CONFIG_LINE6_USB_RAW.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,66 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:17 +0100
+Subject: [098/106] staging: line6: drop CONFIG_LINE6_USB_RAW
+
+commit 9f673d7a6022b9425fc412d619fd72bcadcf80c3 upstream.
+
+Now that both pod.c and variax.c have removed their raw sysfs attrs, the
+CONFIG_LINE6_USB_RAW config option can be dropped.  The drivers are
+being stripped down to just PCM and MIDI I/O so there is less state and
+filtering.  Therefore it's no longer necessary to have a special sysfs
+attr to bypass the filtering ("raw").
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/Kconfig  |   11 -----------
+ drivers/staging/line6/driver.c |   14 --------------
+ 2 files changed, 25 deletions(-)
+
+diff --git a/drivers/staging/line6/Kconfig b/drivers/staging/line6/Kconfig
+index 80a7202..b635436 100644
+--- a/drivers/staging/line6/Kconfig
++++ b/drivers/staging/line6/Kconfig
+@@ -33,17 +33,6 @@ config LINE6_USB_DUMP_PCM
+ 
+ 	  If unsure, say N.
+ 
+-config LINE6_USB_RAW
+-	bool "raw data communication"
+-	default n
+-	help
+-	  Say Y here to create special files which allow to send raw data
+-	  to the device. This bypasses any sanity checks, so if you discover
+-	  the code to erase the firmware, feel free to render your device
+-	  useless, but only after reading the GPL section "NO WARRANTY".
+-
+-	  If unsure, say N.
+-
+ config LINE6_USB_IMPULSE_RESPONSE
+ 	bool "measure impulse response"
+ 	default n
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index e0e0779..6f07a06c 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -642,20 +642,6 @@ ssize_t line6_nop_write(struct device *dev, struct device_attribute *attr,
+ }
+ 
+ /*
+-	"write" request on "raw" special file.
+-*/
+-#ifdef CONFIG_LINE6_USB_RAW
+-ssize_t line6_set_raw(struct device *dev, struct device_attribute *attr,
+-		      const char *buf, size_t count)
+-{
+-	struct usb_interface *interface = to_usb_interface(dev);
+-	struct usb_line6 *line6 = usb_get_intfdata(interface);
+-	line6_send_raw_message(line6, buf, count);
+-	return count;
+-}
+-#endif
+-
+-/*
+ 	Generic destructor.
+ */
+ static void line6_destruct(struct usb_interface *interface)

Added: dists/sid/linux/debian/patches/features/all/line6/0099-staging-line6-drop-amp-effects-dump-request-triggers.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0099-staging-line6-drop-amp-effects-dump-request-triggers.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,44 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:18 +0100
+Subject: [099/106] staging: line6: drop amp/effects dump request triggers
+
+commit 4528555c8cf8069795b4c842137979ff2510e84d upstream.
+
+Since the driver no longer needs to keep state of device parameters it
+is no longer necessary to refresh state when messages that affect other
+parameters are sent.  Drop the code to trigger a dump when amp/effects
+are changed.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |    9 ---------
+ 1 file changed, 9 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 157ef68..aa3a547 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -174,12 +174,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 		/* intentionally no break here! */
+ 
+ 	case LINE6_PARAM_CHANGE | LINE6_CHANNEL_HOST:
+-		if ((buf[1] == POD_amp_model_setup) ||
+-		    (buf[1] == POD_effect_setup))
+-			/* these also affect other settings */
+-			line6_dump_request_async(&pod->dumpreq, &pod->line6, 0,
+-						 LINE6_DUMP_CURRENT);
+-
+ 		break;
+ 
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE:
+@@ -288,9 +282,6 @@ void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
+ {
+ 	if (line6_transmit_parameter(&pod->line6, param, value) == 0)
+ 		pod_store_parameter(pod, param, value);
+-
+-	if ((param == POD_amp_model_setup) || (param == POD_effect_setup))	/* these also affect other settings */
+-		line6_invalidate_current(&pod->dumpreq);
+ }
+ 
+ /*

Added: dists/sid/linux/debian/patches/features/all/line6/0100-staging-line6-drop-MIDI-parameter-sysfs-attrs.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0100-staging-line6-drop-MIDI-parameter-sysfs-attrs.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,1329 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:19 +0100
+Subject: [100/106] staging: line6: drop MIDI parameter sysfs attrs
+
+commit 2807904441d4f1787425527a8193580d389cf497 upstream.
+
+Both pod.c and variax.c expose the device's MIDI parameters as sysfs
+attrs.  Knowledge of MIDI constants should be in userspace, not in the
+driver.  Drop the sysfs attrs and let userspace interpret parameters it
+cares about instead.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/Makefile  |    1 -
+ drivers/staging/line6/control.c |  995 ---------------------------------------
+ drivers/staging/line6/control.h |  195 --------
+ drivers/staging/line6/driver.c  |    1 -
+ drivers/staging/line6/pod.c     |    9 -
+ drivers/staging/line6/variax.c  |   13 -
+ 6 files changed, 1214 deletions(-)
+ delete mode 100644 drivers/staging/line6/control.c
+ delete mode 100644 drivers/staging/line6/control.h
+
+diff --git a/drivers/staging/line6/Makefile b/drivers/staging/line6/Makefile
+index 34a2dda..44ee5ae 100644
+--- a/drivers/staging/line6/Makefile
++++ b/drivers/staging/line6/Makefile
+@@ -3,7 +3,6 @@ obj-$(CONFIG_LINE6_USB)		+= line6usb.o
+ line6usb-y := 		\
+ 		audio.o		\
+ 		capture.o	\
+-		control.o	\
+ 		driver.o	\
+ 		dumprequest.o	\
+ 		midi.o		\
+diff --git a/drivers/staging/line6/control.c b/drivers/staging/line6/control.c
+deleted file mode 100644
+index f8326f5..0000000
+--- a/drivers/staging/line6/control.c
++++ /dev/null
+@@ -1,995 +0,0 @@
+-/*
+- * Line6 Linux USB driver - 0.9.1beta
+- *
+- * Copyright (C) 2004-2010 Markus Grabner (grabner at 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 <linux/usb.h>
+-
+-#include "control.h"
+-#include "driver.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_dump_wait_interruptible(&pod->dumpreq);
+-	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);
+-	u8 value;
+-	int retval;
+-
+-	retval = kstrtou8(buf, 10, &value);
+-	if (retval)
+-		return retval;
+-
+-	line6_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_dump_wait_interruptible(&variax->dumpreq);
+-	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 at the time
+-	   this code was written (Jan 2006) it was highly discouraged to
+-	   use floating point arithmetic in the kernel. If you think that
+-	   this no longer applies, feel free to replace this by generic
+-	   floating point code.
+-	 */
+-
+-	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_dump_wait_interruptible(&variax->dumpreq);
+-	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 line6_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;
+-}
+-
+-void line6_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);
+-}
+-
+-int line6_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;
+-}
+-
+-void line6_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);
+-}
+diff --git a/drivers/staging/line6/control.h b/drivers/staging/line6/control.h
+deleted file mode 100644
+index e4c5d2c..0000000
+--- a/drivers/staging/line6/control.h
++++ /dev/null
+@@ -1,195 +0,0 @@
+-/*
+- * Line6 Linux USB driver - 0.9.1beta
+- *
+- * Copyright (C) 2004-2010 Markus Grabner (grabner at 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.
+- *
+- */
+-
+-#ifndef LINE6_CONTROL_H
+-#define LINE6_CONTROL_H
+-
+-/**
+-   List of PODxt Pro controls.
+-   See Appendix C of the "PODxt (Pro) Pilot's Handbook" by Line6.
+-   Comments after the number refer to the PODxt Pro firmware version required
+-   for this feature.
+-
+-   Please *don't* reformat this file since "control.c" is created automatically
+-   from "control.h", and this process depends on the exact formatting of the
+-   code and the comments below!
+-*/
+-
+-/* *INDENT-OFF* */
+-
+-enum {
+-	POD_tweak                          =   1,
+-	POD_wah_position                   =   4,
+-	POD_compression_gain               =   5,  /* device: LINE6_BITS_PODXTALL */
+-	POD_vol_pedal_position             =   7,
+-	POD_compression_threshold          =   9,
+-	POD_pan                            =  10,
+-	POD_amp_model_setup                =  11,
+-	POD_amp_model                      =  12,  /* firmware: 2.0 */
+-	POD_drive                          =  13,
+-	POD_bass                           =  14,
+-	POD_mid                            =  15,  /* device: LINE6_BITS_PODXTALL */
+-	POD_lowmid                         =  15,  /* device: LINE6_BITS_BASSPODXTALL */
+-	POD_treble                         =  16,  /* device: LINE6_BITS_PODXTALL */
+-	POD_highmid                        =  16,  /* device: LINE6_BITS_BASSPODXTALL */
+-	POD_chan_vol                       =  17,
+-	POD_reverb_mix                     =  18,  /* device: LINE6_BITS_PODXTALL */
+-	POD_effect_setup                   =  19,
+-	POD_band_1_frequency               =  20,  /* firmware: 2.0 */
+-	POD_presence                       =  21,  /* device: LINE6_BITS_PODXTALL */
+-	POD_treble__bass                   =  21,  /* device: LINE6_BITS_BASSPODXTALL */
+-	POD_noise_gate_enable              =  22,
+-	POD_gate_threshold                 =  23,
+-	POD_gate_decay_time                =  24,
+-	POD_stomp_enable                   =  25,
+-	POD_comp_enable                    =  26,
+-	POD_stomp_time                     =  27,
+-	POD_delay_enable                   =  28,
+-	POD_mod_param_1                    =  29,
+-	POD_delay_param_1                  =  30,
+-	POD_delay_param_1_note_value       =  31,
+-	POD_band_2_frequency__bass         =  32,  /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */
+-	POD_delay_param_2                  =  33,
+-	POD_delay_volume_mix               =  34,
+-	POD_delay_param_3                  =  35,
+-	POD_reverb_enable                  =  36,  /* device: LINE6_BITS_PODXTALL */
+-	POD_reverb_type                    =  37,  /* device: LINE6_BITS_PODXTALL */
+-	POD_reverb_decay                   =  38,  /* device: LINE6_BITS_PODXTALL */
+-	POD_reverb_tone                    =  39,  /* device: LINE6_BITS_PODXTALL */
+-	POD_reverb_pre_delay               =  40,  /* device: LINE6_BITS_PODXTALL */
+-	POD_reverb_pre_post                =  41,  /* device: LINE6_BITS_PODXTALL */
+-	POD_band_2_frequency               =  42,  /* device: LINE6_BITS_PODXTALL */     /* firmware: 2.0 */
+-	POD_band_3_frequency__bass         =  42,  /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */
+-	POD_wah_enable                     =  43,
+-	POD_modulation_lo_cut              =  44,  /* device: LINE6_BITS_BASSPODXTALL */
+-	POD_delay_reverb_lo_cut            =  45,  /* device: LINE6_BITS_BASSPODXTALL */
+-	POD_volume_pedal_minimum           =  46,  /* device: LINE6_BITS_PODXTALL */     /* firmware: 2.0 */
+-	POD_eq_pre_post                    =  46,  /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */
+-	POD_volume_pre_post                =  47,
+-	POD_di_model                       =  48,  /* device: LINE6_BITS_BASSPODXTALL */
+-	POD_di_delay                       =  49,  /* device: LINE6_BITS_BASSPODXTALL */
+-	POD_mod_enable                     =  50,
+-	POD_mod_param_1_note_value         =  51,
+-	POD_mod_param_2                    =  52,
+-	POD_mod_param_3                    =  53,
+-	POD_mod_param_4                    =  54,
+-	POD_mod_param_5                    =  55,  /* device: LINE6_BITS_BASSPODXTALL */
+-	POD_mod_volume_mix                 =  56,
+-	POD_mod_pre_post                   =  57,
+-	POD_modulation_model               =  58,
+-	POD_band_3_frequency               =  60,  /* device: LINE6_BITS_PODXTALL */     /* firmware: 2.0 */
+-	POD_band_4_frequency__bass         =  60,  /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */
+-	POD_mod_param_1_double_precision   =  61,
+-	POD_delay_param_1_double_precision =  62,
+-	POD_eq_enable                      =  63,  /* firmware: 2.0 */
+-	POD_tap                            =  64,
+-	POD_volume_tweak_pedal_assign      =  65,
+-	POD_band_5_frequency               =  68,  /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */
+-	POD_tuner                          =  69,
+-	POD_mic_selection                  =  70,
+-	POD_cabinet_model                  =  71,
+-	POD_stomp_model                    =  75,
+-	POD_roomlevel                      =  76,
+-	POD_band_4_frequency               =  77,  /* device: LINE6_BITS_PODXTALL */     /* firmware: 2.0 */
+-	POD_band_6_frequency               =  77,  /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */
+-	POD_stomp_param_1_note_value       =  78,
+-	POD_stomp_param_2                  =  79,
+-	POD_stomp_param_3                  =  80,
+-	POD_stomp_param_4                  =  81,
+-	POD_stomp_param_5                  =  82,
+-	POD_stomp_param_6                  =  83,
+-	POD_amp_switch_select              =  84,  /* device: LINE6_BITS_LIVE */
+-	POD_delay_param_4                  =  85,
+-	POD_delay_param_5                  =  86,
+-	POD_delay_pre_post                 =  87,
+-	POD_delay_model                    =  88,  /* device: LINE6_BITS_PODXTALL */
+-	POD_delay_verb_model               =  88,  /* device: LINE6_BITS_BASSPODXTALL */
+-	POD_tempo_msb                      =  89,
+-	POD_tempo_lsb                      =  90,
+-	POD_wah_model                      =  91,  /* firmware: 3.0 */
+-	POD_bypass_volume                  = 105,  /* firmware: 2.14 */
+-	POD_fx_loop_on_off                 = 107,  /* device: LINE6_BITS_PRO */
+-	POD_tweak_param_select             = 108,
+-	POD_amp1_engage                    = 111,
+-	POD_band_1_gain                    = 114,  /* firmware: 2.0 */
+-	POD_band_2_gain__bass              = 115,  /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */
+-	POD_band_2_gain                    = 116,  /* device: LINE6_BITS_PODXTALL */     /* firmware: 2.0 */
+-	POD_band_3_gain__bass              = 116,  /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */
+-	POD_band_3_gain                    = 117,  /* device: LINE6_BITS_PODXTALL */     /* firmware: 2.0 */
+-	POD_band_4_gain__bass              = 117,  /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */
+-	POD_band_5_gain__bass              = 118,  /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */
+-	POD_band_4_gain                    = 119,  /* device: LINE6_BITS_PODXTALL */     /* firmware: 2.0 */
+-	POD_band_6_gain__bass              = 119   /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */
+-};
+-
+-/**
+-   List of Variax workbench controls (dump).
+-*/
+-enum {
+-	VARIAX_body                        =   3,
+-	VARIAX_pickup1_enable              =   4,  /* 0: enabled, 1: disabled */
+-	VARIAX_pickup1_type                =   8,
+-	VARIAX_pickup1_position            =   9,  /* type: 24 bit float */
+-	VARIAX_pickup1_angle               =  12,  /* type: 24 bit float */
+-	VARIAX_pickup1_level               =  15,  /* type: 24 bit float */
+-	VARIAX_pickup2_enable              =  18,  /* 0: enabled, 1: disabled */
+-	VARIAX_pickup2_type                =  22,
+-	VARIAX_pickup2_position            =  23,  /* type: 24 bit float */
+-	VARIAX_pickup2_angle               =  26,  /* type: 24 bit float */
+-	VARIAX_pickup2_level               =  29,  /* type: 24 bit float */
+-	VARIAX_pickup_phase                =  32,  /* 0: in phase, 1: out of phase */
+-	VARIAX_capacitance                 =  33,  /* type: 24 bit float */
+-	VARIAX_tone_resistance             =  36,  /* type: 24 bit float */
+-	VARIAX_volume_resistance           =  39,  /* type: 24 bit float */
+-	VARIAX_taper                       =  42,  /* 0: Linear, 1: Audio */
+-	VARIAX_tone_dump                   =  43,  /* type: 24 bit float */
+-	VARIAX_save_tone                   =  46,
+-	VARIAX_volume_dump                 =  47,  /* type: 24 bit float */
+-	VARIAX_tuning_enable               =  50,
+-	VARIAX_tuning6                     =  51,
+-	VARIAX_tuning5                     =  52,
+-	VARIAX_tuning4                     =  53,
+-	VARIAX_tuning3                     =  54,
+-	VARIAX_tuning2                     =  55,
+-	VARIAX_tuning1                     =  56,
+-	VARIAX_detune6                     =  57,  /* type: 24 bit float */
+-	VARIAX_detune5                     =  60,  /* type: 24 bit float */
+-	VARIAX_detune4                     =  63,  /* type: 24 bit float */
+-	VARIAX_detune3                     =  66,  /* type: 24 bit float */
+-	VARIAX_detune2                     =  69,  /* type: 24 bit float */
+-	VARIAX_detune1                     =  72,  /* type: 24 bit float */
+-	VARIAX_mix6                        =  75,  /* type: 24 bit float */
+-	VARIAX_mix5                        =  78,  /* type: 24 bit float */
+-	VARIAX_mix4                        =  81,  /* type: 24 bit float */
+-	VARIAX_mix3                        =  84,  /* type: 24 bit float */
+-	VARIAX_mix2                        =  87,  /* type: 24 bit float */
+-	VARIAX_mix1                        =  90,  /* type: 24 bit float */
+-	VARIAX_pickup_wiring               =  96   /* 0: parallel, 1: series */
+-};
+-
+-/**
+-   List of Variax workbench controls (MIDI).
+-*/
+-enum {
+-	VARIAXMIDI_volume                  =   7,
+-	VARIAXMIDI_tone                    =  79,
+-};
+-
+-/* *INDENT-ON* */
+-
+-extern int line6_pod_create_files(int firmware, int type, struct device *dev);
+-extern void line6_pod_remove_files(int firmware, int type, struct device *dev);
+-extern int line6_variax_create_files(int firmware, int type,
+-				     struct device *dev);
+-extern void line6_variax_remove_files(int firmware, int type,
+-				      struct device *dev);
+-
+-#endif
+diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c
+index 6f07a06c..1e4ce500 100644
+--- a/drivers/staging/line6/driver.c
++++ b/drivers/staging/line6/driver.c
+@@ -16,7 +16,6 @@
+ 
+ #include "audio.h"
+ #include "capture.h"
+-#include "control.h"
+ #include "driver.h"
+ #include "midi.h"
+ #include "playback.h"
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index aa3a547..278976d 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -15,7 +15,6 @@
+ 
+ #include "audio.h"
+ #include "capture.h"
+-#include "control.h"
+ #include "driver.h"
+ #include "playback.h"
+ #include "pod.h"
+@@ -404,10 +403,6 @@ static void pod_startup5(struct work_struct *work)
+ 
+ 	/* ALSA audio interface: */
+ 	line6_register_audio(line6);
+-
+-	/* device files: */
+-	line6_pod_create_files(pod->firmware_version,
+-			       line6->properties->device_bit, line6->ifcdev);
+ }
+ 
+ /* POD special files: */
+@@ -594,10 +589,6 @@ void line6_pod_disconnect(struct usb_interface *interface)
+ 
+ 		if (dev != NULL) {
+ 			/* remove sysfs entries: */
+-			line6_pod_remove_files(pod->firmware_version,
+-					       pod->line6.
+-					       properties->device_bit, dev);
+-
+ 			device_remove_file(dev, &dev_attr_device_id);
+ 			device_remove_file(dev, &dev_attr_firmware_version);
+ 			device_remove_file(dev, &dev_attr_serial_number);
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index ff55ad37..0adba32 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -12,7 +12,6 @@
+ #include <linux/slab.h>
+ 
+ #include "audio.h"
+-#include "control.h"
+ #include "driver.h"
+ #include "variax.h"
+ 
+@@ -174,15 +173,11 @@ static void variax_startup7(struct work_struct *work)
+ {
+ 	struct usb_line6_variax *variax =
+ 	    container_of(work, struct usb_line6_variax, startup_work);
+-	struct usb_line6 *line6 = &variax->line6;
+ 
+ 	CHECK_STARTUP_PROGRESS(variax->startup_progress, VARIAX_STARTUP_SETUP);
+ 
+ 	/* ALSA audio interface: */
+ 	line6_register_audio(&variax->line6);
+-
+-	/* device files: */
+-	line6_variax_create_files(0, 0, line6->ifcdev);
+ }
+ 
+ /*
+@@ -370,16 +365,8 @@ int line6_variax_init(struct usb_interface *interface,
+ */
+ void line6_variax_disconnect(struct usb_interface *interface)
+ {
+-	struct device *dev;
+-
+ 	if (interface == NULL)
+ 		return;
+-	dev = &interface->dev;
+-
+-	if (dev != NULL) {
+-		/* remove sysfs entries: */
+-		line6_variax_remove_files(0, 0, dev);
+-	}
+ 
+ 	variax_destruct(interface);
+ }

Added: dists/sid/linux/debian/patches/features/all/line6/0101-staging-line6-drop-pod-prog_data-buffers.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0101-staging-line6-drop-pod-prog_data-buffers.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,139 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:20 +0100
+Subject: [101/106] staging: line6: drop pod prog_data buffers
+
+commit 79038f61731bf0871d673c03fdc8a641b999f57a upstream.
+
+The driver no longer keeps state of MIDI-accessible device parameters.
+Drop the buffers but be careful to keep the device startup procedure
+working even though we no longer store the contents of the dump request.
+The startup procedure will be simplified in a later patch.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   46 +++----------------------------------------
+ drivers/staging/line6/pod.h |   25 -----------------------
+ 2 files changed, 3 insertions(+), 68 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index 278976d..e892b4a 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -132,14 +132,6 @@ static char *pod_alloc_sysex_buffer(struct usb_line6_pod *pod, int code,
+ }
+ 
+ /*
+-	Store parameter value in driver memory.
+-*/
+-static void pod_store_parameter(struct usb_line6_pod *pod, int param, int value)
+-{
+-	pod->prog_data.control[param] = value;
+-}
+-
+-/*
+ 	Handle SAVE button.
+ */
+ static void pod_save_button_pressed(struct usb_line6_pod *pod, int type,
+@@ -169,9 +161,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 	/* process all remaining messages */
+ 	switch (buf[0]) {
+ 	case LINE6_PARAM_CHANGE | LINE6_CHANNEL_DEVICE:
+-		pod_store_parameter(pod, buf[1], buf[2]);
+-		/* intentionally no break here! */
+-
+ 	case LINE6_PARAM_CHANGE | LINE6_CHANNEL_HOST:
+ 		break;
+ 
+@@ -187,36 +176,8 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 		if (memcmp(buf + 1, line6_midi_id, sizeof(line6_midi_id)) == 0) {
+ 			switch (buf[5]) {
+ 			case POD_SYSEX_DUMP:
+-				if (pod->line6.message_length ==
+-				    sizeof(pod->prog_data) + 7) {
+-					switch (pod->dumpreq.in_progress) {
+-					case LINE6_DUMP_CURRENT:
+-						memcpy(&pod->prog_data, buf + 7,
+-						       sizeof(pod->prog_data));
+-						break;
+-
+-					case POD_DUMP_MEMORY:
+-						memcpy(&pod->prog_data_buf,
+-						       buf + 7,
+-						       sizeof
+-						       (pod->prog_data_buf));
+-						break;
+-
+-					default:
+-						dev_dbg(pod->line6.ifcdev,
+-							"unknown dump code %02X\n",
+-							pod->dumpreq.in_progress);
+-					}
+-
+-					line6_dump_finished(&pod->dumpreq);
+-					pod_startup3(pod);
+-				} else
+-					dev_dbg(pod->line6.ifcdev,
+-						"wrong size of channel dump message (%d instead of %d)\n",
+-						pod->line6.message_length,
+-						(int)sizeof(pod->prog_data) +
+-						7);
+-
++				line6_dump_finished(&pod->dumpreq);
++				pod_startup3(pod);
+ 				break;
+ 
+ 			case POD_SYSEX_SYSTEM:{
+@@ -279,8 +240,7 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
+ 				  u8 value)
+ {
+-	if (line6_transmit_parameter(&pod->line6, param, value) == 0)
+-		pod_store_parameter(pod, param, value);
++	line6_transmit_parameter(&pod->line6, param, value);
+ }
+ 
+ /*
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index 8543bae..52534ca 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -52,21 +52,6 @@ enum {
+ 	POD_STARTUP_LAST = POD_STARTUP_SETUP - 1
+ };
+ 
+-/**
+-	Binary PODxt Pro program dump
+-*/
+-struct pod_program {
+-	/**
+-		Header information (including program name).
+-	*/
+-	unsigned char header[0x20];
+-
+-	/**
+-		Program parameters.
+-	*/
+-	unsigned char control[POD_CONTROL_SIZE];
+-};
+-
+ struct usb_line6_pod {
+ 	/**
+ 		Generic Line6 USB data.
+@@ -79,16 +64,6 @@ struct usb_line6_pod {
+ 	struct line6_dump_request dumpreq;
+ 
+ 	/**
+-		Current program settings.
+-	*/
+-	struct pod_program prog_data;
+-
+-	/**
+-		Buffer for data retrieved from or to be stored on PODxt Pro.
+-	*/
+-	struct pod_program prog_data_buf;
+-
+-	/**
+ 		Instrument monitor level.
+ 	*/
+ 	int monitor_level;

Added: dists/sid/linux/debian/patches/features/all/line6/0102-staging-line6-drop-unused-pod-atomic_flags-field.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0102-staging-line6-drop-unused-pod-atomic_flags-field.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,65 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:21 +0100
+Subject: [102/106] staging: line6: drop unused pod atomic_flags field
+
+commit 3fb7991319d975a706e452bfa5c96c0af37abeaf upstream.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   11 -----------
+ drivers/staging/line6/pod.h |    5 -----
+ 2 files changed, 16 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index e892b4a..f8257be 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -132,15 +132,6 @@ static char *pod_alloc_sysex_buffer(struct usb_line6_pod *pod, int code,
+ }
+ 
+ /*
+-	Handle SAVE button.
+-*/
+-static void pod_save_button_pressed(struct usb_line6_pod *pod, int type,
+-				    int index)
+-{
+-	set_bit(POD_SAVE_PRESSED, &pod->atomic_flags);
+-}
+-
+-/*
+ 	Process a completely received message.
+ */
+ void line6_pod_process_message(struct usb_line6_pod *pod)
+@@ -166,7 +157,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE:
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST:
+-		set_bit(POD_CHANNEL_DIRTY, &pod->atomic_flags);
+ 		line6_dump_request_async(&pod->dumpreq, &pod->line6, 0,
+ 					 LINE6_DUMP_CURRENT);
+ 		break;
+@@ -196,7 +186,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 				break;
+ 
+ 			case POD_SYSEX_SAVE:
+-				pod_save_button_pressed(pod, buf[6], buf[7]);
+ 				break;
+ 
+ 			case POD_SYSEX_STORE:
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index 52534ca..843eb4e 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -84,11 +84,6 @@ struct usb_line6_pod {
+ 	int startup_progress;
+ 
+ 	/**
+-		Some atomic flags.
+-	*/
+-	unsigned long atomic_flags;
+-
+-	/**
+ 		Serial number of device.
+ 	*/
+ 	int serial_number;

Added: dists/sid/linux/debian/patches/features/all/line6/0103-staging-line6-drop-variax-model_data-field.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0103-staging-line6-drop-variax-model_data-field.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,101 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:22 +0100
+Subject: [103/106] staging: line6: drop variax model_data field
+
+commit 81804c54db877b78b12bd1cf4f4e0f7bf6c86d72 upstream.
+
+The sysfs attrs to access the model dump have been removed so it's safe
+to drop the model_data field.  The next step will be to simplify the
+startup process since we no longer need to fetch this data via dump
+requests, but that will be done in a later patch.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |   27 ---------------------------
+ drivers/staging/line6/variax.h |   20 --------------------
+ 2 files changed, 47 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index 0adba32..0262d7d 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -70,21 +70,6 @@ static void variax_startup2(unsigned long data);
+ static void variax_startup4(unsigned long data);
+ static void variax_startup5(unsigned long data);
+ 
+-/*
+-	Decode data transmitted by workbench.
+-*/
+-static void variax_decode(const unsigned char *raw_data, unsigned char *data,
+-			  int raw_size)
+-{
+-	for (; raw_size > 0; raw_size -= 6) {
+-		data[2] = raw_data[0] | (raw_data[1] << 4);
+-		data[1] = raw_data[2] | (raw_data[3] << 4);
+-		data[0] = raw_data[4] | (raw_data[5] << 4);
+-		raw_data += 6;
+-		data += 3;
+-	}
+-}
+-
+ static void variax_activate_async(struct usb_line6_variax *variax, int a)
+ {
+ 	variax->buffer_activate[VARIAX_OFFSET_ACTIVATE] = a;
+@@ -214,18 +199,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 					break;
+ 
+ 				case VARIAX_DUMP_PASS2:
+-					/* model name is transmitted twice, so skip it here: */
+-					variax_decode(buf +
+-						      VARIAX_MODEL_HEADER_LENGTH,
+-						      (unsigned char *)
+-						      &variax->
+-						      model_data.control +
+-						      sizeof(variax->model_data.
+-							     control)
+-						      / 2,
+-						      sizeof(variax->model_data.
+-							     control)
+-						      / 2 * 2);
+ 					line6_dump_request_async
+ 					    (&variax->dumpreq, &variax->line6,
+ 					     2, VARIAX_DUMP_PASS3);
+diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h
+index f3d95fa..13d5680 100644
+--- a/drivers/staging/line6/variax.h
++++ b/drivers/staging/line6/variax.h
+@@ -44,21 +44,6 @@ enum {
+ 	VARIAX_DUMP_PASS3
+ };
+ 
+-/**
+-	Binary Variax model dump
+-*/
+-struct variax_model {
+-	/**
+-		Header information (including program name).
+-	*/
+-	unsigned char name[18];
+-
+-	/**
+-		Model parameters.
+-	*/
+-	unsigned char control[78 * 2];
+-};
+-
+ struct usb_line6_variax {
+ 	/**
+ 		Generic Line6 USB data.
+@@ -78,11 +63,6 @@ struct usb_line6_variax {
+ 	unsigned char *buffer_activate;
+ 
+ 	/**
+-		Current model settings.
+-	*/
+-	struct variax_model model_data;
+-
+-	/**
+ 		Handler for device initializaton.
+ 	*/
+ 	struct work_struct startup_work;

Added: dists/sid/linux/debian/patches/features/all/line6/0104-staging-line6-drop-dump-requests-from-variax-startup.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0104-staging-line6-drop-dump-requests-from-variax-startup.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,242 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:23 +0100
+Subject: [104/106] staging: line6: drop dump requests from variax startup
+
+commit 323246b2514f80e305399084f12792cc074c2d2d upstream.
+
+The variax startup procedure dumps model data.  This is no longer useful
+since the sysfs attrs which expose this information to userspace have
+been removed.  The dump request wasn't been processed anymore.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/variax.c |  106 ++--------------------------------------
+ drivers/staging/line6/variax.h |   15 ------
+ 2 files changed, 4 insertions(+), 117 deletions(-)
+
+diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c
+index 0262d7d..4fca58f 100644
+--- a/drivers/staging/line6/variax.c
++++ b/drivers/staging/line6/variax.c
+@@ -15,21 +15,10 @@
+ #include "driver.h"
+ #include "variax.h"
+ 
+-#define VARIAX_MODEL_HEADER_LENGTH 7
+-#define VARIAX_MODEL_MESSAGE_LENGTH 199
+ #define VARIAX_OFFSET_ACTIVATE 7
+ 
+ /*
+ 	This message is sent by the device during initialization and identifies
+-	the connected guitar model.
+-*/
+-static const char variax_init_model[] = {
+-	0xf0, 0x00, 0x01, 0x0c, 0x07, 0x00, 0x69, 0x02,
+-	0x00
+-};
+-
+-/*
+-	This message is sent by the device during initialization and identifies
+ 	the connected guitar version.
+ */
+ static const char variax_init_version[] = {
+@@ -49,22 +38,6 @@ static const char variax_activate[] = {
+ 	0xf7
+ };
+ 
+-static const char variax_request_bank[] = {
+-	0xf0, 0x00, 0x01, 0x0c, 0x07, 0x00, 0x6d, 0xf7
+-};
+-
+-static const char variax_request_model1[] = {
+-	0xf0, 0x00, 0x01, 0x0c, 0x07, 0x00, 0x3c, 0x00,
+-	0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x03,
+-	0x00, 0x00, 0x00, 0xf7
+-};
+-
+-static const char variax_request_model2[] = {
+-	0xf0, 0x00, 0x01, 0x0c, 0x07, 0x00, 0x3c, 0x00,
+-	0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x03,
+-	0x00, 0x00, 0x00, 0xf7
+-};
+-
+ /* forward declarations: */
+ static void variax_startup2(unsigned long data);
+ static void variax_startup4(unsigned long data);
+@@ -135,26 +108,13 @@ static void variax_startup5(unsigned long data)
+ {
+ 	struct usb_line6_variax *variax = (struct usb_line6_variax *)data;
+ 	CHECK_STARTUP_PROGRESS(variax->startup_progress,
+-			       VARIAX_STARTUP_DUMPREQ);
+-
+-	/* current model dump: */
+-	line6_dump_request_async(&variax->dumpreq, &variax->line6, 0,
+-				 VARIAX_DUMP_PASS1);
+-	/* passes 2 and 3 are performed implicitly before entering
+-	 * variax_startup6.
+-	 */
+-}
+-
+-static void variax_startup6(struct usb_line6_variax *variax)
+-{
+-	CHECK_STARTUP_PROGRESS(variax->startup_progress,
+ 			       VARIAX_STARTUP_WORKQUEUE);
+ 
+ 	/* schedule work for global work queue: */
+ 	schedule_work(&variax->startup_work);
+ }
+ 
+-static void variax_startup7(struct work_struct *work)
++static void variax_startup6(struct work_struct *work)
+ {
+ 	struct usb_line6_variax *variax =
+ 	    container_of(work, struct usb_line6_variax, startup_work);
+@@ -178,8 +138,6 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE:
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST:
+-		line6_dump_request_async(&variax->dumpreq, &variax->line6, 0,
+-					 VARIAX_DUMP_PASS1);
+ 		break;
+ 
+ 	case LINE6_RESET:
+@@ -187,41 +145,14 @@ void line6_variax_process_message(struct usb_line6_variax *variax)
+ 		break;
+ 
+ 	case LINE6_SYSEX_BEGIN:
+-		if (memcmp(buf + 1, variax_request_model1 + 1,
+-			   VARIAX_MODEL_HEADER_LENGTH - 1) == 0) {
+-			if (variax->line6.message_length ==
+-			    VARIAX_MODEL_MESSAGE_LENGTH) {
+-				switch (variax->dumpreq.in_progress) {
+-				case VARIAX_DUMP_PASS1:
+-					line6_dump_request_async
+-					    (&variax->dumpreq, &variax->line6,
+-					     1, VARIAX_DUMP_PASS2);
+-					break;
+-
+-				case VARIAX_DUMP_PASS2:
+-					line6_dump_request_async
+-					    (&variax->dumpreq, &variax->line6,
+-					     2, VARIAX_DUMP_PASS3);
+-				}
+-			} else {
+-				dev_dbg(variax->line6.ifcdev,
+-					"illegal length %d of model data\n",
+-					variax->line6.message_length);
+-				line6_dump_finished(&variax->dumpreq);
+-			}
+-		} else if (memcmp(buf + 1, variax_request_bank + 1,
+-				  sizeof(variax_request_bank) - 2) == 0) {
+-			line6_dump_finished(&variax->dumpreq);
+-			variax_startup6(variax);
+-		} else if (memcmp(buf + 1, variax_init_version + 1,
+-				  sizeof(variax_init_version) - 1) == 0) {
++		if (memcmp(buf + 1, variax_init_version + 1,
++			   sizeof(variax_init_version) - 1) == 0) {
+ 			variax_startup3(variax);
+ 		} else if (memcmp(buf + 1, variax_init_done + 1,
+ 				  sizeof(variax_init_done) - 1) == 0) {
+ 			/* notify of complete initialization: */
+ 			variax_startup4((unsigned long)variax);
+ 		}
+-
+ 		break;
+ 
+ 	case LINE6_SYSEX_END:
+@@ -248,11 +179,6 @@ static void variax_destruct(struct usb_interface *interface)
+ 	del_timer(&variax->startup_timer2);
+ 	cancel_work_sync(&variax->startup_work);
+ 
+-	/* free dump request data: */
+-	line6_dumpreq_destructbuf(&variax->dumpreq, 2);
+-	line6_dumpreq_destructbuf(&variax->dumpreq, 1);
+-	line6_dumpreq_destruct(&variax->dumpreq);
+-
+ 	kfree(variax->buffer_activate);
+ }
+ 
+@@ -266,36 +192,12 @@ static int variax_try_init(struct usb_interface *interface,
+ 
+ 	init_timer(&variax->startup_timer1);
+ 	init_timer(&variax->startup_timer2);
+-	INIT_WORK(&variax->startup_work, variax_startup7);
++	INIT_WORK(&variax->startup_work, variax_startup6);
+ 
+ 	if ((interface == NULL) || (variax == NULL))
+ 		return -ENODEV;
+ 
+ 	/* initialize USB buffers: */
+-	err = line6_dumpreq_init(&variax->dumpreq, variax_request_model1,
+-				 sizeof(variax_request_model1));
+-
+-	if (err < 0) {
+-		dev_err(&interface->dev, "Out of memory\n");
+-		return err;
+-	}
+-
+-	err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_model2,
+-				    sizeof(variax_request_model2), 1);
+-
+-	if (err < 0) {
+-		dev_err(&interface->dev, "Out of memory\n");
+-		return err;
+-	}
+-
+-	err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_bank,
+-				    sizeof(variax_request_bank), 2);
+-
+-	if (err < 0) {
+-		dev_err(&interface->dev, "Out of memory\n");
+-		return err;
+-	}
+-
+ 	variax->buffer_activate = kmemdup(variax_activate,
+ 					  sizeof(variax_activate), GFP_KERNEL);
+ 
+diff --git a/drivers/staging/line6/variax.h b/drivers/staging/line6/variax.h
+index 13d5680..24de796 100644
+--- a/drivers/staging/line6/variax.h
++++ b/drivers/staging/line6/variax.h
+@@ -18,7 +18,6 @@
+ #include <sound/core.h>
+ 
+ #include "driver.h"
+-#include "dumprequest.h"
+ 
+ #define VARIAX_STARTUP_DELAY1 1000
+ #define VARIAX_STARTUP_DELAY3 100
+@@ -32,18 +31,11 @@ enum {
+ 	VARIAX_STARTUP_VERSIONREQ,
+ 	VARIAX_STARTUP_WAIT,
+ 	VARIAX_STARTUP_ACTIVATE,
+-	VARIAX_STARTUP_DUMPREQ,
+ 	VARIAX_STARTUP_WORKQUEUE,
+ 	VARIAX_STARTUP_SETUP,
+ 	VARIAX_STARTUP_LAST = VARIAX_STARTUP_SETUP - 1
+ };
+ 
+-enum {
+-	VARIAX_DUMP_PASS1 = LINE6_DUMP_CURRENT,
+-	VARIAX_DUMP_PASS2,
+-	VARIAX_DUMP_PASS3
+-};
+-
+ struct usb_line6_variax {
+ 	/**
+ 		Generic Line6 USB data.
+@@ -51,13 +43,6 @@ struct usb_line6_variax {
+ 	struct usb_line6 line6;
+ 
+ 	/**
+-		Dump request structure.
+-		Append two extra buffers for 3-pass data query.
+-	*/
+-	struct line6_dump_request dumpreq;
+-	struct line6_dump_reqbuf extrabuf[2];
+-
+-	/**
+ 		Buffer for activation code.
+ 	*/
+ 	unsigned char *buffer_activate;

Added: dists/sid/linux/debian/patches/features/all/line6/0105-staging-line6-drop-dump-requests-from-pod-startup.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0105-staging-line6-drop-dump-requests-from-pod-startup.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,171 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:24 +0100
+Subject: [105/106] staging: line6: drop dump requests from pod startup
+
+commit 09fda10a0e6a4eec18edf8ed53f8be8ae10968b5 upstream.
+
+The pod startup procedure dumps model data.  This is no longer useful
+since the sysfs attrs which expose this information to userspace have
+been removed.  The dump request wasn't been processed anymore.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/pod.c |   44 ++++---------------------------------------
+ drivers/staging/line6/pod.h |    7 -------
+ 2 files changed, 4 insertions(+), 47 deletions(-)
+
+diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c
+index f8257be..e542540 100644
+--- a/drivers/staging/line6/pod.c
++++ b/drivers/staging/line6/pod.c
+@@ -111,10 +111,6 @@ static struct line6_pcm_properties pod_pcm_properties = {
+ 	.bytes_per_frame = POD_BYTES_PER_FRAME
+ };
+ 
+-static const char pod_request_channel[] = {
+-	0xf0, 0x00, 0x01, 0x0c, 0x03, 0x75, 0xf7
+-};
+-
+ static const char pod_version_header[] = {
+ 	0xf2, 0x7e, 0x7f, 0x06, 0x02
+ };
+@@ -122,7 +118,6 @@ static const char pod_version_header[] = {
+ /* forward declarations: */
+ static void pod_startup2(unsigned long data);
+ static void pod_startup3(struct usb_line6_pod *pod);
+-static void pod_startup4(struct usb_line6_pod *pod);
+ 
+ static char *pod_alloc_sysex_buffer(struct usb_line6_pod *pod, int code,
+ 				    int size)
+@@ -157,8 +152,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE:
+ 	case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST:
+-		line6_dump_request_async(&pod->dumpreq, &pod->line6, 0,
+-					 LINE6_DUMP_CURRENT);
+ 		break;
+ 
+ 	case LINE6_SYSEX_BEGIN | LINE6_CHANNEL_DEVICE:
+@@ -166,8 +159,6 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 		if (memcmp(buf + 1, line6_midi_id, sizeof(line6_midi_id)) == 0) {
+ 			switch (buf[5]) {
+ 			case POD_SYSEX_DUMP:
+-				line6_dump_finished(&pod->dumpreq);
+-				pod_startup3(pod);
+ 				break;
+ 
+ 			case POD_SYSEX_SYSTEM:{
+@@ -208,7 +199,7 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
+ 			pod->device_id =
+ 			    ((int)buf[8] << 16) | ((int)buf[9] << 8) | (int)
+ 			    buf[10];
+-			pod_startup4(pod);
++			pod_startup3(pod);
+ 		} else
+ 			dev_dbg(pod->line6.ifcdev, "unknown sysex header\n");
+ 
+@@ -308,22 +299,6 @@ static void pod_startup1(struct usb_line6_pod *pod)
+ static void pod_startup2(unsigned long data)
+ {
+ 	struct usb_line6_pod *pod = (struct usb_line6_pod *)data;
+-
+-	/* schedule another startup procedure until startup is complete: */
+-	if (pod->startup_progress >= POD_STARTUP_LAST)
+-		return;
+-
+-	pod->startup_progress = POD_STARTUP_DUMPREQ;
+-	line6_start_timer(&pod->startup_timer, POD_STARTUP_DELAY, pod_startup2,
+-			  (unsigned long)pod);
+-
+-	/* current channel dump: */
+-	line6_dump_request_async(&pod->dumpreq, &pod->line6, 0,
+-				 LINE6_DUMP_CURRENT);
+-}
+-
+-static void pod_startup3(struct usb_line6_pod *pod)
+-{
+ 	struct usb_line6 *line6 = &pod->line6;
+ 	CHECK_STARTUP_PROGRESS(pod->startup_progress, POD_STARTUP_VERSIONREQ);
+ 
+@@ -331,7 +306,7 @@ static void pod_startup3(struct usb_line6_pod *pod)
+ 	line6_version_request_async(line6);
+ }
+ 
+-static void pod_startup4(struct usb_line6_pod *pod)
++static void pod_startup3(struct usb_line6_pod *pod)
+ {
+ 	CHECK_STARTUP_PROGRESS(pod->startup_progress, POD_STARTUP_WORKQUEUE);
+ 
+@@ -339,7 +314,7 @@ static void pod_startup4(struct usb_line6_pod *pod)
+ 	schedule_work(&pod->startup_work);
+ }
+ 
+-static void pod_startup5(struct work_struct *work)
++static void pod_startup4(struct work_struct *work)
+ {
+ 	struct usb_line6_pod *pod =
+ 	    container_of(work, struct usb_line6_pod, startup_work);
+@@ -422,9 +397,6 @@ static void pod_destruct(struct usb_interface *interface)
+ 
+ 	del_timer(&pod->startup_timer);
+ 	cancel_work_sync(&pod->startup_work);
+-
+-	/* free dump request data: */
+-	line6_dumpreq_destruct(&pod->dumpreq);
+ }
+ 
+ /*
+@@ -450,19 +422,11 @@ static int pod_try_init(struct usb_interface *interface,
+ 	struct usb_line6 *line6 = &pod->line6;
+ 
+ 	init_timer(&pod->startup_timer);
+-	INIT_WORK(&pod->startup_work, pod_startup5);
++	INIT_WORK(&pod->startup_work, pod_startup4);
+ 
+ 	if ((interface == NULL) || (pod == NULL))
+ 		return -ENODEV;
+ 
+-	/* initialize USB buffers: */
+-	err = line6_dumpreq_init(&pod->dumpreq, pod_request_channel,
+-				 sizeof(pod_request_channel));
+-	if (err < 0) {
+-		dev_err(&interface->dev, "Out of memory\n");
+-		return -ENOMEM;
+-	}
+-
+ 	/* create sysfs entries: */
+ 	err = pod_create_files2(&interface->dev);
+ 	if (err < 0)
+diff --git a/drivers/staging/line6/pod.h b/drivers/staging/line6/pod.h
+index 843eb4e..3e3f167 100644
+--- a/drivers/staging/line6/pod.h
++++ b/drivers/staging/line6/pod.h
+@@ -19,7 +19,6 @@
+ #include <sound/core.h>
+ 
+ #include "driver.h"
+-#include "dumprequest.h"
+ 
+ /*
+ 	PODxt Live interfaces
+@@ -45,7 +44,6 @@
+ */
+ enum {
+ 	POD_STARTUP_INIT = 1,
+-	POD_STARTUP_DUMPREQ,
+ 	POD_STARTUP_VERSIONREQ,
+ 	POD_STARTUP_WORKQUEUE,
+ 	POD_STARTUP_SETUP,
+@@ -59,11 +57,6 @@ struct usb_line6_pod {
+ 	struct usb_line6 line6;
+ 
+ 	/**
+-		Dump request structure.
+-	*/
+-	struct line6_dump_request dumpreq;
+-
+-	/**
+ 		Instrument monitor level.
+ 	*/
+ 	int monitor_level;

Added: dists/sid/linux/debian/patches/features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch	Sun Feb 10 00:54:43 2013	(r19798)
@@ -0,0 +1,254 @@
+From: Stefan Hajnoczi <stefanha at gmail.com>
+Date: Thu, 22 Nov 2012 20:49:25 +0100
+Subject: [106/106] staging: line6: drop unused dumprequest code
+
+commit 64bce09563a2a4b7614583f14a7ee55b0e083949 upstream.
+
+The line6 drive no longer requests MIDI dumps from the device so
+dumprequest.c is not needed.
+
+Signed-off-by: Stefan Hajnoczi <stefanha at gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ drivers/staging/line6/Makefile      |    1 -
+ drivers/staging/line6/dumprequest.c |  135 -----------------------------------
+ drivers/staging/line6/dumprequest.h |   76 --------------------
+ 3 files changed, 212 deletions(-)
+ delete mode 100644 drivers/staging/line6/dumprequest.c
+ delete mode 100644 drivers/staging/line6/dumprequest.h
+
+diff --git a/drivers/staging/line6/Makefile b/drivers/staging/line6/Makefile
+index 44ee5ae..ae5c374 100644
+--- a/drivers/staging/line6/Makefile
++++ b/drivers/staging/line6/Makefile
+@@ -4,7 +4,6 @@ line6usb-y := 		\
+ 		audio.o		\
+ 		capture.o	\
+ 		driver.o	\
+-		dumprequest.o	\
+ 		midi.o		\
+ 		midibuf.o	\
+ 		pcm.o		\
+diff --git a/drivers/staging/line6/dumprequest.c b/drivers/staging/line6/dumprequest.c
+deleted file mode 100644
+index 60c7bae..0000000
+--- a/drivers/staging/line6/dumprequest.c
++++ /dev/null
+@@ -1,135 +0,0 @@
+-/*
+- * Line6 Linux USB driver - 0.9.1beta
+- *
+- * Copyright (C) 2004-2010 Markus Grabner (grabner at 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 <linux/slab.h>
+-
+-#include "driver.h"
+-#include "dumprequest.h"
+-
+-/*
+-	Set "dump in progress" flag.
+-*/
+-void line6_dump_started(struct line6_dump_request *l6dr, int dest)
+-{
+-	l6dr->in_progress = dest;
+-}
+-
+-/*
+-	Invalidate current channel, i.e., set "dump in progress" flag.
+-	Reading from the "dump" special file blocks until dump is completed.
+-*/
+-void line6_invalidate_current(struct line6_dump_request *l6dr)
+-{
+-	line6_dump_started(l6dr, LINE6_DUMP_CURRENT);
+-}
+-
+-/*
+-	Clear "dump in progress" flag and notify waiting processes.
+-*/
+-void line6_dump_finished(struct line6_dump_request *l6dr)
+-{
+-	l6dr->in_progress = LINE6_DUMP_NONE;
+-	wake_up(&l6dr->wait);
+-}
+-
+-/*
+-	Send an asynchronous channel dump request.
+-*/
+-int line6_dump_request_async(struct line6_dump_request *l6dr,
+-			     struct usb_line6 *line6, int num, int dest)
+-{
+-	int ret;
+-	line6_dump_started(l6dr, dest);
+-	ret = line6_send_raw_message_async(line6, l6dr->reqbufs[num].buffer,
+-					   l6dr->reqbufs[num].length);
+-
+-	if (ret < 0)
+-		line6_dump_finished(l6dr);
+-
+-	return ret;
+-}
+-
+-/*
+-	Wait for completion (interruptible).
+-*/
+-int line6_dump_wait_interruptible(struct line6_dump_request *l6dr)
+-{
+-	return wait_event_interruptible(l6dr->wait,
+-					l6dr->in_progress == LINE6_DUMP_NONE);
+-}
+-
+-/*
+-	Wait for completion.
+-*/
+-void line6_dump_wait(struct line6_dump_request *l6dr)
+-{
+-	wait_event(l6dr->wait, l6dr->in_progress == LINE6_DUMP_NONE);
+-}
+-
+-/*
+-	Wait for completion (with timeout).
+-*/
+-int line6_dump_wait_timeout(struct line6_dump_request *l6dr, long timeout)
+-{
+-	return wait_event_timeout(l6dr->wait,
+-				  l6dr->in_progress == LINE6_DUMP_NONE,
+-				  timeout);
+-}
+-
+-/*
+-	Initialize dump request buffer.
+-*/
+-int line6_dumpreq_initbuf(struct line6_dump_request *l6dr, const void *buf,
+-			  size_t len, int num)
+-{
+-	l6dr->reqbufs[num].buffer = kmemdup(buf, len, GFP_KERNEL);
+-	if (l6dr->reqbufs[num].buffer == NULL)
+-		return -ENOMEM;
+-	l6dr->reqbufs[num].length = len;
+-	return 0;
+-}
+-
+-/*
+-	Initialize dump request data structure (including one buffer).
+-*/
+-int line6_dumpreq_init(struct line6_dump_request *l6dr, const void *buf,
+-		       size_t len)
+-{
+-	int ret;
+-	ret = line6_dumpreq_initbuf(l6dr, buf, len, 0);
+-	if (ret < 0)
+-		return ret;
+-	init_waitqueue_head(&l6dr->wait);
+-	return 0;
+-}
+-
+-/*
+-	Destruct dump request data structure.
+-*/
+-void line6_dumpreq_destructbuf(struct line6_dump_request *l6dr, int num)
+-{
+-	if (l6dr == NULL)
+-		return;
+-	if (l6dr->reqbufs[num].buffer == NULL)
+-		return;
+-	kfree(l6dr->reqbufs[num].buffer);
+-	l6dr->reqbufs[num].buffer = NULL;
+-}
+-
+-/*
+-	Destruct dump request data structure.
+-*/
+-void line6_dumpreq_destruct(struct line6_dump_request *l6dr)
+-{
+-	if (l6dr->reqbufs[0].buffer == NULL)
+-		return;
+-	line6_dumpreq_destructbuf(l6dr, 0);
+-}
+diff --git a/drivers/staging/line6/dumprequest.h b/drivers/staging/line6/dumprequest.h
+deleted file mode 100644
+index c17a262..0000000
+--- a/drivers/staging/line6/dumprequest.h
++++ /dev/null
+@@ -1,76 +0,0 @@
+-/*
+- * Line6 Linux USB driver - 0.9.1beta
+- *
+- * Copyright (C) 2004-2010 Markus Grabner (grabner at 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.
+- *
+- */
+-
+-#ifndef DUMPREQUEST_H
+-#define DUMPREQUEST_H
+-
+-#include <linux/usb.h>
+-#include <linux/wait.h>
+-#include <sound/core.h>
+-
+-enum {
+-	LINE6_DUMP_NONE,
+-	LINE6_DUMP_CURRENT
+-};
+-
+-struct line6_dump_reqbuf {
+-	/**
+-		 Buffer for dump requests.
+-	*/
+-	unsigned char *buffer;
+-
+-	/**
+-		 Size of dump request.
+-	*/
+-	size_t length;
+-};
+-
+-/**
+-	 Provides the functionality to request channel/model/... dump data from a
+-	 Line6 device.
+-*/
+-struct line6_dump_request {
+-	/**
+-		 Wait queue for access to program dump data.
+-	*/
+-	wait_queue_head_t wait;
+-
+-	/**
+-		 Indicates an unfinished program dump request.
+-		 0: no dump
+-		 1: dump current settings
+-		 Other device-specific values are also allowed.
+-	*/
+-	int in_progress;
+-
+-	/**
+-		 Dump request buffers
+-	*/
+-	struct line6_dump_reqbuf reqbufs[1];
+-};
+-
+-extern void line6_dump_finished(struct line6_dump_request *l6dr);
+-extern int line6_dump_request_async(struct line6_dump_request *l6dr,
+-				    struct usb_line6 *line6, int num, int dest);
+-extern void line6_dump_started(struct line6_dump_request *l6dr, int dest);
+-extern void line6_dumpreq_destruct(struct line6_dump_request *l6dr);
+-extern void line6_dumpreq_destructbuf(struct line6_dump_request *l6dr, int num);
+-extern int line6_dumpreq_init(struct line6_dump_request *l6dr, const void *buf,
+-			      size_t len);
+-extern int line6_dumpreq_initbuf(struct line6_dump_request *l6dr,
+-				 const void *buf, size_t len, int num);
+-extern void line6_invalidate_current(struct line6_dump_request *l6dr);
+-extern void line6_dump_wait(struct line6_dump_request *l6dr);
+-extern int line6_dump_wait_interruptible(struct line6_dump_request *l6dr);
+-extern int line6_dump_wait_timeout(struct line6_dump_request *l6dr,
+-				   long timeout);
+-
+-#endif

Modified: dists/sid/linux/debian/patches/series
==============================================================================
--- dists/sid/linux/debian/patches/series	Sat Feb  9 17:04:43 2013	(r19797)
+++ dists/sid/linux/debian/patches/series	Sun Feb 10 00:54:43 2013	(r19798)
@@ -517,3 +517,111 @@
 features/all/virtio_scsi/0010-SCSI-virtio-scsi-initialize-scatterlist-structure.patch
 features/all/virtio_scsi/0011-SCSI-virtio-scsi-fix-LUNs-greater-than-255.patch
 features/all/virtio_scsi/0012-SCSI-virtio-scsi-support-online-resizing-of-disks.patch
+
+# line6 from 3.8
+features/all/line6/0001-line6-fix-memory-leaks-in-line6_init_midi.patch
+features/all/line6/0002-staging-line6-add-Pod-HD300-support.patch
+features/all/line6/0003-staging-line6-add-missing-MIDI-postprocessing-case-f.patch
+features/all/line6/0004-staging-line6-use-smallest-iso-ep-packet-size.patch
+features/all/line6/0005-staging-line6-alloc-free-buffers-in-hw_params-hw_fre.patch
+features/all/line6/0006-Staging-line6-Use-kmemdup-rather-than-duplicating-it.patch
+features/all/line6/0007-Staging-line6-NULL-dereference-in-dev_err.patch
+features/all/line6/0008-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch
+features/all/line6/0009-Staging-line6-midi.c-Fixed-call-of-obsolete-function.patch
+features/all/line6/0010-staging-line6-Remove-obsolete-code.patch
+features/all/line6/0011-staging-line6-refactor-device-information-and-add-PO.patch
+features/all/line6/0012-staging-line6-fix-memory-leak-in-.hw_params.patch
+features/all/line6/0013-staging-line6-fix-playback-urb-transfer-buffer-calcu.patch
+features/all/line6/0014-staging-line6-eliminate-useless-index_out-variable.patch
+features/all/line6/0015-staging-line6-eliminate-useless-NULL-checks.patch
+features/all/line6/0016-staging-line6-wait-for-urbs-in-snd_line6_prepare.patch
+features/all/line6/0017-staging-line6-fixed-ALSA-PCM-interaction.patch
+features/all/line6/0018-staging-line6-removed-obsolete-code.patch
+features/all/line6/0019-staging-line6-use-source-select-control-for-UX2-devi.patch
+features/all/line6/0020-staging-line6-separate-handling-of-buffer-allocation.patch
+features/all/line6/0021-Staging-line6-remove-unneeded-initialization.patch
+features/all/line6/0022-Staging-line6-only-allocate-a-buffer-if-it-is-needed.patch
+features/all/line6/0023-Staging-line6-remove-teardown-code-from-module_exit-.patch
+features/all/line6/0024-Staging-line6-use-module_usb_driver.patch
+features/all/line6/0025-staging-line6-toneport.c-remove-err-usage.patch
+features/all/line6/0026-staging-line6-midibuf.c-changed-printk-KERN_DEBUG-.-.patch
+features/all/line6/0027-staging-line6-midi.c-Added-space-between-switch-and-.patch
+features/all/line6/0028-staging-line6-pcm.c-Removed-trailing-whitespace.patch
+features/all/line6/0029-staging-line6-config.h-Remove-CHECKPOINT-macro.patch
+features/all/line6/0030-staging-line6-config.h-Delete-unused-header.patch
+features/all/line6/0031-staging-line6-changed-interface-of-line6_transmit_pa.patch
+features/all/line6/0032-staging-line6-Changed-some-strict_strtouls-to-kstrto.patch
+features/all/line6/0033-staging-line6-changed-interface-of-line6_pod_transmi.patch
+features/all/line6/0034-staging-line6-adjusted-interface-of-line6_send_progr.patch
+features/all/line6/0035-staging-line6-changed-interface-of-pod_send_channel.patch
+features/all/line6/0036-staging-line6-control.c-eliminate-strict_strtoul-in-.patch
+features/all/line6/0037-staging-line6-Exchanged-strict_strtoul-with-kstrtou8.patch
+features/all/line6/0038-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch
+features/all/line6/0039-staging-line6-Changed-strict_strtoul-to-kstrtou8-in-.patch
+features/all/line6/0040-staging-line6-pcm.c-Changed-simple_strtoul-to-kstrto.patch
+features/all/line6/0041-staging-line6-variax.c-Eliminated-remaining-strict_s.patch
+features/all/line6/0042-staging-line6-drop-unused-line6_devices-array.patch
+features/all/line6/0043-staging-line6-drop-unused-line6_index-and-line6_id-a.patch
+features/all/line6/0044-staging-line6-wrap-80-char-lines-in-capture.c.patch
+features/all/line6/0045-staging-line6-fix-quoted-string-across-lines-in-midi.patch
+features/all/line6/0046-staging-line6-shorten-comment-below-80-chars-in-pcm..patch
+features/all/line6/0047-staging-line6-drop-trailing-whitespace-in-pcm.h.patch
+features/all/line6/0048-staging-line6-wrap-lines-to-80-chars-in-playback.c.patch
+features/all/line6/0049-staging-line6-replace-deprecated-strict_strtol-in-to.patch
+features/all/line6/0050-staging-line6-wrap-lines-to-80-chars-in-usbdefs.h.patch
+features/all/line6/0051-staging-line6-wrap-comment-to-80-chars-in-variax.c.patch
+features/all/line6/0052-staging-line6-replace-DEBUG_MESSAGES-with-dev_dbg.patch
+features/all/line6/0053-staging-line6-drop-unused-DEBUG_MESSAGES-macro.patch
+features/all/line6/0054-staging-line6-drop-unused-CONFIG_LINE6_USB_DEBUG.patch
+features/all/line6/0055-staging-line6-drop-control-URB-dumping-code.patch
+features/all/line6/0056-staging-line6-drop-CONTROL-from-CONFIG_LINE6_USB_DUM.patch
+features/all/line6/0057-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_CTRL.patch
+features/all/line6/0058-staging-line6-drop-MIDI-dumping-code.patch
+features/all/line6/0059-staging-line6-drop-MIDI-from-CONFIG_LINE6_USB_DUMP_A.patch
+features/all/line6/0060-staging-line6-drop-unused-CONFIG_LINE6_USB_DUMP_MIDI.patch
+features/all/line6/0061-staging-line6-drop-channel-sysfs-attr.patch
+features/all/line6/0062-staging-line6-drop-clip-sysfs-attr.patch
+features/all/line6/0063-staging-line6-drop-unused-param_dirty-bitmap.patch
+features/all/line6/0064-staging-line6-drop-dirty-sysfs-attr.patch
+features/all/line6/0065-staging-line6-drop-dump-sysfs-attr.patch
+features/all/line6/0066-staging-line6-drop-dump_buf-sysfs-attr.patch
+features/all/line6/0067-staging-line6-drop-monitor_level-sysfs-attr.patch
+features/all/line6/0068-staging-line6-change-monitor_level-type-ValueWait-in.patch
+features/all/line6/0069-staging-line6-drop-name-sysfs-attr.patch
+features/all/line6/0070-staging-line6-drop-name_buf-sysfs-attr.patch
+features/all/line6/0071-staging-line6-drop-retrieve_amp_setup-sysfs-attr.patch
+features/all/line6/0072-staging-line6-drop-retrieve_channel-sysfs-attr.patch
+features/all/line6/0073-staging-line6-drop-retrieve_effects_setup-sysfs-attr.patch
+features/all/line6/0074-staging-line6-drop-store_amp_setup-sysfs-attr.patch
+features/all/line6/0075-staging-line6-drop-store_channel-sysfs-attr.patch
+features/all/line6/0076-staging-line6-drop-store_effects_setup-sysfs-attr.patch
+features/all/line6/0077-staging-line6-drop-routing-sysfs-attr.patch
+features/all/line6/0078-staging-line6-drop-tuner_freq-sysfs-attr.patch
+features/all/line6/0079-staging-line6-drop-tuner_note-sysfs-attr.patch
+features/all/line6/0080-staging-line6-drop-tuner_mute-sysfs-attr.patch
+features/all/line6/0081-staging-line6-drop-tuner_pitch-sysfs-attr.patch
+features/all/line6/0082-staging-line6-drop-finish-sysfs-attr.patch
+features/all/line6/0083-staging-line6-drop-midi_postprocess-sysfs-attr.patch
+features/all/line6/0084-staging-line6-drop-midi_mask_receive.patch
+features/all/line6/0085-staging-line6-drop-midi_mask_transmit.patch
+features/all/line6/0086-staging-line6-drop-midi_postprocess-flag.patch
+features/all/line6/0087-staging-line6-drop-pod.c-raw-sysfs-attr.patch
+features/all/line6/0088-staging-line6-drop-tuner-param-filtering.patch
+features/all/line6/0089-staging-line6-drop-variax-model-sysfs-attr.patch
+features/all/line6/0090-staging-line6-drop-variax-volume-sysfs-attr.patch
+features/all/line6/0091-staging-line6-drop-variax-tone-sysfs-attr.patch
+features/all/line6/0092-staging-line6-drop-variax-name-sysfs-attr.patch
+features/all/line6/0093-staging-line6-drop-variax-bank-sysfs-attr.patch
+features/all/line6/0094-staging-line6-drop-variax-dump-sysfs-attr.patch
+features/all/line6/0095-staging-line6-drop-variax-active-sysfs-attr.patch
+features/all/line6/0096-staging-line6-drop-variax-guitar-sysfs-attr.patch
+features/all/line6/0097-staging-line6-drop-variax-raw-sysfs-attrs.patch
+features/all/line6/0098-staging-line6-drop-CONFIG_LINE6_USB_RAW.patch
+features/all/line6/0099-staging-line6-drop-amp-effects-dump-request-triggers.patch
+features/all/line6/0100-staging-line6-drop-MIDI-parameter-sysfs-attrs.patch
+features/all/line6/0101-staging-line6-drop-pod-prog_data-buffers.patch
+features/all/line6/0102-staging-line6-drop-unused-pod-atomic_flags-field.patch
+features/all/line6/0103-staging-line6-drop-variax-model_data-field.patch
+features/all/line6/0104-staging-line6-drop-dump-requests-from-variax-startup.patch
+features/all/line6/0105-staging-line6-drop-dump-requests-from-pod-startup.patch
+features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch



More information about the Kernel-svn-changes mailing list