[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