[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.

svn path=/dists/sid/linux/; revision=19798
This commit is contained in:
Ben Hutchings 2013-02-10 00:54:43 +00:00
parent 5ba78f8730
commit e7ef137d7c
109 changed files with 10765 additions and 0 deletions

2
debian/changelog vendored
View File

@ -128,6 +128,8 @@ linux (3.2.38-1) UNRELEASED; urgency=low
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.

View File

@ -1288,6 +1288,13 @@ CONFIG_STAGING_MEDIA=y
##
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
##

View File

@ -0,0 +1,41 @@
From: Jesper Juhl <jj@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@chaosbits.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,354 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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@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@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)

View File

@ -0,0 +1,31 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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:

View File

@ -0,0 +1,44 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,161 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);
}

View File

@ -0,0 +1,42 @@
From: Thomas Meyer <thomas@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@m3y3r.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@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),

View File

@ -0,0 +1,43 @@
From: Dan Carpenter <dan.carpenter@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@oracle.com>
Reviewed-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,50 @@
From: Andor Daam <andor.daam@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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.

View File

@ -0,0 +1,51 @@
From: Andor Daam <andor.daam@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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.

View File

@ -0,0 +1,106 @@
From: Markus Grabner <grabner@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@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,324 @@
From: Markus Grabner <grabner@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@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@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

View File

@ -0,0 +1,53 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Markus Grabner <grabner@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@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,

View File

@ -0,0 +1,37 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Markus Grabner <grabner@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,58 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Markus Grabner <grabner@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@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 =

View File

@ -0,0 +1,101 @@
From: Stefan Hajnoczi <stefanha@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@oracle.com>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Markus Grabner <grabner@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,51 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Markus Grabner <grabner@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,346 @@
From: Markus Grabner <grabner@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@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@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

View File

@ -0,0 +1,30 @@
From: Markus Grabner <grabner@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@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@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

View File

@ -0,0 +1,36 @@
From: Markus Grabner <grabner@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@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@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,

View File

@ -0,0 +1,893 @@
From: Markus Grabner <grabner@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@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@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),

View File

@ -0,0 +1,37 @@
From: Greg Kroah-Hartman <gregkh@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@icg.tugraz.at>
CC: Stefan Hajnoczi <stefanha@gmail.com>
CC: Julia Lawall <julia@diku.dk>
CC: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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) {

View File

@ -0,0 +1,103 @@
From: Greg Kroah-Hartman <gregkh@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@icg.tugraz.at>
CC: Stefan Hajnoczi <stefanha@gmail.com>
CC: Julia Lawall <julia@diku.dk>
CC: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,49 @@
From: Greg Kroah-Hartman <gregkh@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@icg.tugraz.at>
CC: Stefan Hajnoczi <stefanha@gmail.com>
CC: Julia Lawall <julia@diku.dk>
CC: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);
}

View File

@ -0,0 +1,52 @@
From: Greg Kroah-Hartman <gregkh@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@icg.tugraz.at>
CC: Stefan Hajnoczi <stefanha@gmail.com>
CC: Julia Lawall <julia@diku.dk>
CC: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,30 @@
From: Greg Kroah-Hartman <gregkh@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@icg.tugraz.at>
CC: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;
}

View File

@ -0,0 +1,29 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);
}

View File

@ -0,0 +1,28 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,27 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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)) {

View File

@ -0,0 +1,30 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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)

View File

@ -0,0 +1,64 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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@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

View File

@ -0,0 +1,42 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,45 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,42 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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

View File

@ -0,0 +1,41 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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,

View File

@ -0,0 +1,28 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,34 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,33 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,33 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,33 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,34 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Reviewed-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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)

View File

@ -0,0 +1,46 @@
From: Johannes Thumshirn <morbidrsa@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@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,102 @@
From: Stefan Hajnoczi <stefanha@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@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,44 @@
From: Stefan Hajnoczi <stefanha@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@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,57 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,35 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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)

View File

@ -0,0 +1,34 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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 *

View File

@ -0,0 +1,25 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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

View File

@ -0,0 +1,80 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,52 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;
}

View File

@ -0,0 +1,35 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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 */

View File

@ -0,0 +1,27 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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)

View File

@ -0,0 +1,174 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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]);
}
}

View File

@ -0,0 +1,32 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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__)

View File

@ -0,0 +1,35 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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

View File

@ -0,0 +1,117 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,29 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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

View File

@ -0,0 +1,32 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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

View File

@ -0,0 +1,46 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);
}

View File

@ -0,0 +1,28 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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

View File

@ -0,0 +1,32 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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

View File

@ -0,0 +1,133 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,105 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,88 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,107 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,121 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,84 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,75 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,74 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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.

View File

@ -0,0 +1,59 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,87 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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,

View File

@ -0,0 +1,58 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,58 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,99 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,58 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,58 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,119 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,94 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,83 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,82 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,118 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,220 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,65 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,80 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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

View File

@ -0,0 +1,133 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,128 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,126 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,55 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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
}
}

View File

@ -0,0 +1,64 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,106 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,110 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,110 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,78 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,104 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,64 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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

View File

@ -0,0 +1,82 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,90 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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;

View File

@ -0,0 +1,134 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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);

View File

@ -0,0 +1,66 @@
From: Stefan Hajnoczi <stefanha@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@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@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)

Some files were not shown because too many files have changed in this diff Show More