line6linux-devel Mailing List for Line6 Linux software (Page 9)
Status: Pre-Alpha
Brought to you by:
mgrabner
You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(5) |
Nov
(1) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(3) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(1) |
Dec
(31) |
2012 |
Jan
(6) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(133) |
Dec
(11) |
2013 |
Jan
(22) |
Feb
|
Mar
|
Apr
(2) |
May
(10) |
Jun
(1) |
Jul
|
Aug
(3) |
Sep
|
Oct
|
Nov
(1) |
Dec
(2) |
2014 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
(18) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
From: Stefan H. <ste...@gm...> - 2012-11-10 06:47:16
|
The line6 driver supports devices from the Line6 PODxt, POD HD, TonePort, and Variax product families. This USB sound driver has been in staging since 2009 and is ready for wider review and users. These devices provide both PCM and MIDI. Depending on the model the PCM supports capture and playback - there may be multiple capture sources. MIDI is used to control the device including changing effect or amplifier model settings, dumping presets, and changing between patches. There are userspace tools and a manual available at: http://www.tanzband-scream.at/line6/ http://line6linux.sourceforge.net/ Cc: Markus Grabner <gr...@ic...> Signed-off-by: Stefan Hajnoczi <ste...@gm...> --- This patch is based on linux-next.git/master. Markus is busy but has given me the green light to do the work needed to get the line6 driver out of staging: http://permalink.gmane.org/gmane.comp.audio.line6linux.devel/49 drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/line6/Kconfig | 85 --- drivers/staging/line6/Makefile | 16 - drivers/staging/line6/audio.c | 70 -- drivers/staging/line6/audio.h | 21 - drivers/staging/line6/capture.c | 435 ----------- drivers/staging/line6/capture.h | 35 - drivers/staging/line6/control.c | 995 -------------------------- drivers/staging/line6/control.h | 195 ----- drivers/staging/line6/driver.c | 1290 --------------------------------- drivers/staging/line6/driver.h | 235 ------ drivers/staging/line6/dumprequest.c | 135 ---- drivers/staging/line6/dumprequest.h | 76 -- drivers/staging/line6/midi.c | 446 ------------ drivers/staging/line6/midi.h | 82 --- drivers/staging/line6/midibuf.c | 264 ------- drivers/staging/line6/midibuf.h | 38 - drivers/staging/line6/pcm.c | 570 --------------- drivers/staging/line6/pcm.h | 382 ---------- drivers/staging/line6/playback.c | 586 --------------- drivers/staging/line6/playback.h | 41 -- drivers/staging/line6/pod.c | 1351 ----------------------------------- drivers/staging/line6/pod.h | 205 ------ drivers/staging/line6/podhd.c | 154 ---- drivers/staging/line6/podhd.h | 30 - drivers/staging/line6/revision.h | 4 - drivers/staging/line6/toneport.c | 455 ------------ drivers/staging/line6/toneport.h | 52 -- drivers/staging/line6/usbdefs.h | 107 --- drivers/staging/line6/variax.c | 719 ------------------- drivers/staging/line6/variax.h | 132 ---- sound/usb/Kconfig | 2 + sound/usb/Makefile | 2 +- sound/usb/line6/Kconfig | 85 +++ sound/usb/line6/Makefile | 16 + sound/usb/line6/audio.c | 70 ++ sound/usb/line6/audio.h | 21 + sound/usb/line6/capture.c | 435 +++++++++++ sound/usb/line6/capture.h | 35 + sound/usb/line6/control.c | 995 ++++++++++++++++++++++++++ sound/usb/line6/control.h | 195 +++++ sound/usb/line6/driver.c | 1290 +++++++++++++++++++++++++++++++++ sound/usb/line6/driver.h | 235 ++++++ sound/usb/line6/dumprequest.c | 135 ++++ sound/usb/line6/dumprequest.h | 76 ++ sound/usb/line6/midi.c | 446 ++++++++++++ sound/usb/line6/midi.h | 82 +++ sound/usb/line6/midibuf.c | 264 +++++++ sound/usb/line6/midibuf.h | 38 + sound/usb/line6/pcm.c | 570 +++++++++++++++ sound/usb/line6/pcm.h | 382 ++++++++++ sound/usb/line6/playback.c | 586 +++++++++++++++ sound/usb/line6/playback.h | 41 ++ sound/usb/line6/pod.c | 1351 +++++++++++++++++++++++++++++++++++ sound/usb/line6/pod.h | 205 ++++++ sound/usb/line6/podhd.c | 154 ++++ sound/usb/line6/podhd.h | 30 + sound/usb/line6/revision.h | 4 + sound/usb/line6/toneport.c | 455 ++++++++++++ sound/usb/line6/toneport.h | 52 ++ sound/usb/line6/usbdefs.h | 107 +++ sound/usb/line6/variax.c | 719 +++++++++++++++++++ sound/usb/line6/variax.h | 132 ++++ 64 files changed, 9209 insertions(+), 9210 deletions(-) delete mode 100644 drivers/staging/line6/Kconfig delete mode 100644 drivers/staging/line6/Makefile delete mode 100644 drivers/staging/line6/audio.c delete mode 100644 drivers/staging/line6/audio.h delete mode 100644 drivers/staging/line6/capture.c delete mode 100644 drivers/staging/line6/capture.h delete mode 100644 drivers/staging/line6/control.c delete mode 100644 drivers/staging/line6/control.h delete mode 100644 drivers/staging/line6/driver.c delete mode 100644 drivers/staging/line6/driver.h delete mode 100644 drivers/staging/line6/dumprequest.c delete mode 100644 drivers/staging/line6/dumprequest.h delete mode 100644 drivers/staging/line6/midi.c delete mode 100644 drivers/staging/line6/midi.h delete mode 100644 drivers/staging/line6/midibuf.c delete mode 100644 drivers/staging/line6/midibuf.h delete mode 100644 drivers/staging/line6/pcm.c delete mode 100644 drivers/staging/line6/pcm.h delete mode 100644 drivers/staging/line6/playback.c delete mode 100644 drivers/staging/line6/playback.h delete mode 100644 drivers/staging/line6/pod.c delete mode 100644 drivers/staging/line6/pod.h delete mode 100644 drivers/staging/line6/podhd.c delete mode 100644 drivers/staging/line6/podhd.h delete mode 100644 drivers/staging/line6/revision.h delete mode 100644 drivers/staging/line6/toneport.c delete mode 100644 drivers/staging/line6/toneport.h delete mode 100644 drivers/staging/line6/usbdefs.h delete mode 100644 drivers/staging/line6/variax.c delete mode 100644 drivers/staging/line6/variax.h create mode 100644 sound/usb/line6/Kconfig create mode 100644 sound/usb/line6/Makefile create mode 100644 sound/usb/line6/audio.c create mode 100644 sound/usb/line6/audio.h create mode 100644 sound/usb/line6/capture.c create mode 100644 sound/usb/line6/capture.h create mode 100644 sound/usb/line6/control.c create mode 100644 sound/usb/line6/control.h create mode 100644 sound/usb/line6/driver.c create mode 100644 sound/usb/line6/driver.h create mode 100644 sound/usb/line6/dumprequest.c create mode 100644 sound/usb/line6/dumprequest.h create mode 100644 sound/usb/line6/midi.c create mode 100644 sound/usb/line6/midi.h create mode 100644 sound/usb/line6/midibuf.c create mode 100644 sound/usb/line6/midibuf.h create mode 100644 sound/usb/line6/pcm.c create mode 100644 sound/usb/line6/pcm.h create mode 100644 sound/usb/line6/playback.c create mode 100644 sound/usb/line6/playback.h create mode 100644 sound/usb/line6/pod.c create mode 100644 sound/usb/line6/pod.h create mode 100644 sound/usb/line6/podhd.c create mode 100644 sound/usb/line6/podhd.h create mode 100644 sound/usb/line6/revision.h create mode 100644 sound/usb/line6/toneport.c create mode 100644 sound/usb/line6/toneport.h create mode 100644 sound/usb/line6/usbdefs.h create mode 100644 sound/usb/line6/variax.c create mode 100644 sound/usb/line6/variax.h diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 231a272..b1a1d79 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -58,8 +58,6 @@ source "drivers/staging/frontier/Kconfig" source "drivers/staging/phison/Kconfig" -source "drivers/staging/line6/Kconfig" - source "drivers/staging/octeon/Kconfig" source "drivers/staging/serqt_usb2/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 2b291c0..5e61dd3 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -22,7 +22,6 @@ obj-$(CONFIG_R8712U) += rtl8712/ obj-$(CONFIG_RTS5139) += rts5139/ obj-$(CONFIG_TRANZPORT) += frontier/ obj-$(CONFIG_IDE_PHISON) += phison/ -obj-$(CONFIG_LINE6_USB) += line6/ obj-$(CONFIG_USB_SERIAL_QUATECH2) += serqt_usb2/ obj-$(CONFIG_OCTEON_ETHERNET) += octeon/ obj-$(CONFIG_VT6655) += vt6655/ diff --git a/drivers/staging/line6/Kconfig b/drivers/staging/line6/Kconfig deleted file mode 100644 index 43120ff..0000000 --- a/drivers/staging/line6/Kconfig +++ /dev/null @@ -1,85 +0,0 @@ -menuconfig LINE6_USB - tristate "Line6 USB support" - depends on USB && SND - select SND_RAWMIDI - select SND_PCM - help - This is a driver for the guitar amp, cab, and effects modeller - PODxt Pro by Line6 (and similar devices), supporting the - following features: - * Reading/writing individual parameters - * Reading/writing complete channel, effects setup, and amp - setup data - * Channel switching - * Virtual MIDI interface - * Tuner access - * Playback/capture/mixer device for any ALSA-compatible PCM - audio application - * Signal routing (record clean/processed guitar signal, - re-amping) - - Preliminary support for the Variax Workbench and TonePort - devices is included. - -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 - 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 - 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 - help - Say Y here to write PCM data sent to and received from Line6 - devices to the syslog. This will produce a huge amount of - syslog data during playback and capture. - - 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 - help - Say Y here to add code to measure the impulse response of a Line6 - device. This is more accurate than user-space methods since it - bypasses any PCM data buffering (e.g., by ALSA or jack). This is - useful for assessing the performance of new devices, but is not - required for normal operation. - - If unsure, say N. - -endif # LINE6_USB diff --git a/drivers/staging/line6/Makefile b/drivers/staging/line6/Makefile deleted file mode 100644 index 34a2dda..0000000 --- a/drivers/staging/line6/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -obj-$(CONFIG_LINE6_USB) += line6usb.o - -line6usb-y := \ - audio.o \ - capture.o \ - control.o \ - driver.o \ - dumprequest.o \ - midi.o \ - midibuf.o \ - pcm.o \ - playback.o \ - pod.o \ - toneport.o \ - variax.o \ - podhd.o diff --git a/drivers/staging/line6/audio.c b/drivers/staging/line6/audio.c deleted file mode 100644 index a92e21f..0000000 --- a/drivers/staging/line6/audio.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Line6 Linux USB driver - 0.9.1beta - * - * Copyright (C) 2004-2010 Markus Grabner (gr...@ic...) - * - * 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/initval.h> -#include <linux/export.h> - -#include "driver.h" -#include "audio.h" - -/* - Initialize the Line6 USB audio system. -*/ -int line6_init_audio(struct usb_line6 *line6) -{ - struct snd_card *card; - int err; - - err = snd_card_create(SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1, - THIS_MODULE, 0, &card); - if (err < 0) - return err; - - line6->card = card; - - strcpy(card->id, line6->properties->id); - strcpy(card->driver, DRIVER_NAME); - strcpy(card->shortname, line6->properties->name); - /* longname is 80 chars - see asound.h */ - sprintf(card->longname, "Line6 %s at USB %s", line6->properties->name, - dev_name(line6->ifcdev)); - return 0; -} - -/* - Register the Line6 USB audio system. -*/ -int line6_register_audio(struct usb_line6 *line6) -{ - int err; - - err = snd_card_register(line6->card); - if (err < 0) - return err; - - return 0; -} - -/* - Cleanup the Line6 USB audio system. -*/ -void line6_cleanup_audio(struct usb_line6 *line6) -{ - struct snd_card *card = line6->card; - - if (card == NULL) - return; - - snd_card_disconnect(card); - snd_card_free(card); - line6->card = NULL; -} diff --git a/drivers/staging/line6/audio.h b/drivers/staging/line6/audio.h deleted file mode 100644 index 5f8a09a..0000000 --- a/drivers/staging/line6/audio.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Line6 Linux USB driver - 0.9.1beta - * - * Copyright (C) 2004-2010 Markus Grabner (gr...@ic...) - * - * 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 AUDIO_H -#define AUDIO_H - -#include "driver.h" - -extern void line6_cleanup_audio(struct usb_line6 *); -extern int line6_init_audio(struct usb_line6 *); -extern int line6_register_audio(struct usb_line6 *); - -#endif diff --git a/drivers/staging/line6/capture.c b/drivers/staging/line6/capture.c deleted file mode 100644 index c85c5b6..0000000 --- a/drivers/staging/line6/capture.c +++ /dev/null @@ -1,435 +0,0 @@ -/* - * Line6 Linux USB driver - 0.9.1beta - * - * Copyright (C) 2004-2010 Markus Grabner (gr...@ic...) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation, version 2. - * - */ - -#include <linux/slab.h> -#include <sound/core.h> -#include <sound/pcm.h> -#include <sound/pcm_params.h> - -#include "audio.h" -#include "capture.h" -#include "driver.h" -#include "pcm.h" -#include "pod.h" - -/* - Find a free URB and submit it. -*/ -static int submit_audio_in_urb(struct snd_line6_pcm *line6pcm) -{ - int index; - unsigned long flags; - int i, urb_size; - int ret; - struct urb *urb_in; - - spin_lock_irqsave(&line6pcm->lock_audio_in, flags); - index = - find_first_zero_bit(&line6pcm->active_urb_in, LINE6_ISO_BUFFERS); - - if (index < 0 || index >= LINE6_ISO_BUFFERS) { - spin_unlock_irqrestore(&line6pcm->lock_audio_in, flags); - dev_err(line6pcm->line6->ifcdev, "no free URB found\n"); - return -EINVAL; - } - - urb_in = line6pcm->urb_audio_in[index]; - urb_size = 0; - - for (i = 0; i < LINE6_ISO_PACKETS; ++i) { - struct usb_iso_packet_descriptor *fin = - &urb_in->iso_frame_desc[i]; - fin->offset = urb_size; - fin->length = line6pcm->max_packet_size; - urb_size += line6pcm->max_packet_size; - } - - urb_in->transfer_buffer = - line6pcm->buffer_in + - index * LINE6_ISO_PACKETS * line6pcm->max_packet_size; - urb_in->transfer_buffer_length = urb_size; - urb_in->context = line6pcm; - - ret = usb_submit_urb(urb_in, GFP_ATOMIC); - - if (ret == 0) - set_bit(index, &line6pcm->active_urb_in); - else - dev_err(line6pcm->line6->ifcdev, - "URB in #%d submission failed (%d)\n", index, ret); - - spin_unlock_irqrestore(&line6pcm->lock_audio_in, flags); - return 0; -} - -/* - Submit all currently available capture URBs. -*/ -int line6_submit_audio_in_all_urbs(struct snd_line6_pcm *line6pcm) -{ - int ret, i; - - for (i = 0; i < LINE6_ISO_BUFFERS; ++i) { - ret = submit_audio_in_urb(line6pcm); - if (ret < 0) - return ret; - } - - return 0; -} - -/* - Unlink all currently active capture URBs. -*/ -void line6_unlink_audio_in_urbs(struct snd_line6_pcm *line6pcm) -{ - unsigned int i; - - for (i = LINE6_ISO_BUFFERS; i--;) { - if (test_bit(i, &line6pcm->active_urb_in)) { - if (!test_and_set_bit(i, &line6pcm->unlink_urb_in)) { - struct urb *u = line6pcm->urb_audio_in[i]; - usb_unlink_urb(u); - } - } - } -} - -/* - Wait until unlinking of all currently active capture URBs has been - finished. -*/ -void line6_wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm) -{ - int timeout = HZ; - unsigned int i; - int alive; - - do { - alive = 0; - for (i = LINE6_ISO_BUFFERS; i--;) { - if (test_bit(i, &line6pcm->active_urb_in)) - alive++; - } - if (!alive) - break; - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - } while (--timeout > 0); - if (alive) - snd_printk(KERN_ERR "timeout: still %d active urbs..\n", alive); -} - -/* - Unlink all currently active capture URBs, and wait for finishing. -*/ -void line6_unlink_wait_clear_audio_in_urbs(struct snd_line6_pcm *line6pcm) -{ - line6_unlink_audio_in_urbs(line6pcm); - line6_wait_clear_audio_in_urbs(line6pcm); -} - -/* - Copy data into ALSA capture buffer. -*/ -void line6_capture_copy(struct snd_line6_pcm *line6pcm, char *fbuf, int fsize) -{ - struct snd_pcm_substream *substream = - get_substream(line6pcm, SNDRV_PCM_STREAM_CAPTURE); - struct snd_pcm_runtime *runtime = substream->runtime; - const int bytes_per_frame = line6pcm->properties->bytes_per_frame; - int frames = fsize / bytes_per_frame; - - if (runtime == NULL) - return; - - if (line6pcm->pos_in_done + frames > runtime->buffer_size) { - /* - The transferred area goes over buffer boundary, - copy two separate chunks. - */ - int len; - len = runtime->buffer_size - line6pcm->pos_in_done; - - if (len > 0) { - memcpy(runtime->dma_area + - line6pcm->pos_in_done * bytes_per_frame, fbuf, - len * bytes_per_frame); - memcpy(runtime->dma_area, fbuf + len * bytes_per_frame, - (frames - len) * bytes_per_frame); - } else { - /* this is somewhat paranoid */ - dev_err(line6pcm->line6->ifcdev, - "driver bug: len = %d\n", len); - } - } else { - /* copy single chunk */ - memcpy(runtime->dma_area + - line6pcm->pos_in_done * bytes_per_frame, fbuf, fsize); - } - - line6pcm->pos_in_done += frames; - if (line6pcm->pos_in_done >= runtime->buffer_size) - line6pcm->pos_in_done -= runtime->buffer_size; -} - -void line6_capture_check_period(struct snd_line6_pcm *line6pcm, int length) -{ - struct snd_pcm_substream *substream = - get_substream(line6pcm, SNDRV_PCM_STREAM_CAPTURE); - - line6pcm->bytes_in += length; - if (line6pcm->bytes_in >= line6pcm->period_in) { - line6pcm->bytes_in %= line6pcm->period_in; - snd_pcm_period_elapsed(substream); - } -} - -void line6_free_capture_buffer(struct snd_line6_pcm *line6pcm) -{ - kfree(line6pcm->buffer_in); - line6pcm->buffer_in = NULL; -} - -/* - * Callback for completed capture URB. - */ -static void audio_in_callback(struct urb *urb) -{ - int i, index, length = 0, shutdown = 0; - unsigned long flags; - - struct snd_line6_pcm *line6pcm = (struct snd_line6_pcm *)urb->context; - - line6pcm->last_frame_in = urb->start_frame; - - /* find index of URB */ - for (index = 0; index < LINE6_ISO_BUFFERS; ++index) - if (urb == line6pcm->urb_audio_in[index]) - break; - -#ifdef CONFIG_LINE6_USB_DUMP_PCM - for (i = 0; i < LINE6_ISO_PACKETS; ++i) { - struct usb_iso_packet_descriptor *fout = - &urb->iso_frame_desc[i]; - line6_write_hexdump(line6pcm->line6, 'C', - urb->transfer_buffer + fout->offset, - fout->length); - } -#endif - - spin_lock_irqsave(&line6pcm->lock_audio_in, flags); - - for (i = 0; i < LINE6_ISO_PACKETS; ++i) { - char *fbuf; - int fsize; - struct usb_iso_packet_descriptor *fin = &urb->iso_frame_desc[i]; - - if (fin->status == -EXDEV) { - shutdown = 1; - break; - } - - fbuf = urb->transfer_buffer + fin->offset; - fsize = fin->actual_length; - - if (fsize > line6pcm->max_packet_size) { - dev_err(line6pcm->line6->ifcdev, - "driver and/or device bug: packet too large (%d > %d)\n", - fsize, line6pcm->max_packet_size); - } - - length += fsize; - - /* the following assumes LINE6_ISO_PACKETS == 1: */ - line6pcm->prev_fbuf = fbuf; - line6pcm->prev_fsize = fsize; - -#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)) - line6_capture_copy(line6pcm, fbuf, fsize); - } - - clear_bit(index, &line6pcm->active_urb_in); - - if (test_and_clear_bit(index, &line6pcm->unlink_urb_in)) - shutdown = 1; - - spin_unlock_irqrestore(&line6pcm->lock_audio_in, flags); - - if (!shutdown) { - submit_audio_in_urb(line6pcm); - -#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)) - line6_capture_check_period(line6pcm, length); - } -} - -/* open capture callback */ -static int snd_line6_capture_open(struct snd_pcm_substream *substream) -{ - int err; - struct snd_pcm_runtime *runtime = substream->runtime; - struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream); - - err = snd_pcm_hw_constraint_ratdens(runtime, 0, - SNDRV_PCM_HW_PARAM_RATE, - (&line6pcm-> - properties->snd_line6_rates)); - if (err < 0) - return err; - - runtime->hw = line6pcm->properties->snd_line6_capture_hw; - return 0; -} - -/* close capture callback */ -static int snd_line6_capture_close(struct snd_pcm_substream *substream) -{ - return 0; -} - -/* hw_params capture callback */ -static int snd_line6_capture_hw_params(struct snd_pcm_substream *substream, - struct snd_pcm_hw_params *hw_params) -{ - int ret; - struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream); - - /* -- Florian Demski [FD] */ - /* don't ask me why, but this fixes the bug on my machine */ - if (line6pcm == NULL) { - if (substream->pcm == NULL) - return -ENOMEM; - if (substream->pcm->private_data == NULL) - return -ENOMEM; - substream->private_data = substream->pcm->private_data; - line6pcm = snd_pcm_substream_chip(substream); - } - /* -- [FD] end */ - - ret = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_BUFFER); - - if (ret < 0) - return ret; - - ret = snd_pcm_lib_malloc_pages(substream, - params_buffer_bytes(hw_params)); - 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; -} - -/* 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_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_BUFFER); - return snd_pcm_lib_free_pages(substream); -} - -/* trigger callback */ -int snd_line6_capture_trigger(struct snd_line6_pcm *line6pcm, int cmd) -{ - int err; - - switch (cmd) { - case SNDRV_PCM_TRIGGER_START: -#ifdef CONFIG_PM - case SNDRV_PCM_TRIGGER_RESUME: -#endif - err = line6_pcm_acquire(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_STREAM); - - if (err < 0) - return err; - - break; - - case SNDRV_PCM_TRIGGER_STOP: -#ifdef CONFIG_PM - case SNDRV_PCM_TRIGGER_SUSPEND: -#endif - err = line6_pcm_release(line6pcm, LINE6_BIT_PCM_ALSA_CAPTURE_STREAM); - - if (err < 0) - return err; - - break; - - default: - return -EINVAL; - } - - return 0; -} - -/* capture pointer callback */ -static snd_pcm_uframes_t -snd_line6_capture_pointer(struct snd_pcm_substream *substream) -{ - struct snd_line6_pcm *line6pcm = snd_pcm_substream_chip(substream); - return line6pcm->pos_in_done; -} - -/* capture operators */ -struct snd_pcm_ops snd_line6_capture_ops = { - .open = snd_line6_capture_open, - .close = snd_line6_capture_close, - .ioctl = snd_pcm_lib_ioctl, - .hw_params = snd_line6_capture_hw_params, - .hw_free = snd_line6_capture_hw_free, - .prepare = snd_line6_prepare, - .trigger = snd_line6_trigger, - .pointer = snd_line6_capture_pointer, -}; - -int line6_create_audio_in_urbs(struct snd_line6_pcm *line6pcm) -{ - int i; - - /* create audio URBs and fill in constant values: */ - for (i = 0; i < LINE6_ISO_BUFFERS; ++i) { - struct urb *urb; - - /* URB for audio in: */ - urb = line6pcm->urb_audio_in[i] = - usb_alloc_urb(LINE6_ISO_PACKETS, GFP_KERNEL); - - if (urb == NULL) { - dev_err(line6pcm->line6->ifcdev, "Out of memory\n"); - return -ENOMEM; - } - - urb->dev = line6pcm->line6->usbdev; - urb->pipe = - usb_rcvisocpipe(line6pcm->line6->usbdev, - line6pcm->ep_audio_read & - USB_ENDPOINT_NUMBER_MASK); - urb->transfer_flags = URB_ISO_ASAP; - urb->start_frame = -1; - urb->number_of_packets = LINE6_ISO_PACKETS; - urb->interval = LINE6_ISO_INTERVAL; - urb->error_count = 0; - urb->complete = audio_in_callback; - } - - return 0; -} diff --git a/drivers/staging/line6/capture.h b/drivers/staging/line6/capture.h deleted file mode 100644 index 4157bcb..0000000 --- a/drivers/staging/line6/capture.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Line6 Linux USB driver - 0.9.1beta - * - * Copyright (C) 2004-2010 Markus Grabner (gr...@ic...) - * - * 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 CAPTURE_H -#define CAPTURE_H - -#include <sound/pcm.h> - -#include "driver.h" -#include "pcm.h" - -extern struct snd_pcm_ops snd_line6_capture_ops; - -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 - *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/control.c b/drivers/staging/line6/control.c deleted file mode 100644 index f8326f5..0000000 --- a/drivers/staging/line6/control.c +++ /dev/null @@ -1,995 +0,0 @@ -/* - * Line6 Linux USB driver - 0.9.1beta - * - * Copyright (C) 2004-2010 Markus Grabner (gr...@ic...) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation, version 2. - * - */ - -#include <linux/usb.h> - -#include "control.h" -#include "driver.h" -#include "pod.h" -#include "usbdefs.h" -#include "variax.h" - -#define DEVICE_ATTR2(_name1, _name2, _mode, _show, _store) \ -struct device_attribute dev_attr_##_name1 = __ATTR(_name2, _mode, _show, _store) - -#define LINE6_PARAM_R(PREFIX, prefix, type, param) \ -static ssize_t prefix##_get_##param(struct device *dev, \ - struct device_attribute *attr, char *buf) \ -{ \ - return prefix##_get_param_##type(dev, buf, PREFIX##_##param); \ -} - -#define LINE6_PARAM_RW(PREFIX, prefix, type, param) \ -LINE6_PARAM_R(PREFIX, prefix, type, param); \ -static ssize_t prefix##_set_##param(struct device *dev, \ - struct device_attribute *attr, const char *buf, size_t count) \ -{ \ - return prefix##_set_param_##type(dev, buf, count, PREFIX##_##param); \ -} - -#define POD_PARAM_R(type, param) LINE6_PARAM_R(POD, pod, type, param) -#define POD_PARAM_RW(type, param) LINE6_PARAM_RW(POD, pod, type, param) -#define VARIAX_PARAM_R(type, param) LINE6_PARAM_R(VARIAX, variax, type, param) -#define VARIAX_PARAM_RW(type, param) LINE6_PARAM_RW(VARIAX, variax, type, param) - -static ssize_t pod_get_param_int(struct device *dev, char *buf, int param) -{ - struct usb_interface *interface = to_usb_interface(dev); - struct usb_line6_pod *pod = usb_get_intfdata(interface); - int retval = line6_dump_wait_interruptible(&pod->dumpreq); - if (retval < 0) - return retval; - return sprintf(buf, "%d\n", pod->prog_data.control[param]); -} - -static ssize_t pod_set_param_int(struct device *dev, const char *buf, - size_t count, int param) -{ - struct usb_interface *interface = to_usb_interface(dev); - struct usb_line6_pod *pod = usb_get_intfdata(interface); - u8 value; - int retval; - - retval = kstrtou8(buf, 10, &value); - if (retval) - return retval; - - line6_pod_transmit_parameter(pod, param, value); - return count; -} - -static ssize_t variax_get_param_int(struct device *dev, char *buf, int param) -{ - struct usb_interface *interface = to_usb_interface(dev); - struct usb_line6_variax *variax = usb_get_intfdata(interface); - int retval = line6_dump_wait_interruptible(&variax->dumpreq); - if (retval < 0) - return retval; - return sprintf(buf, "%d\n", variax->model_data.control[param]); -} - -static ssize_t variax_get_param_float(struct device *dev, char *buf, int param) -{ - /* - We do our own floating point handling here since at the time - this code was written (Jan 2006) it was highly discouraged to - use floating point arithmetic in the kernel. If you think that - this no longer applies, feel free to replace this by generic - floating point code. - */ - - static const int BIAS = 0x7f; - static const int OFFSET = 0xf; - static const int PRECISION = 1000; - - int len = 0; - unsigned part_int, part_frac; - struct usb_interface *interface = to_usb_interface(dev); - struct usb_line6_variax *variax = usb_get_intfdata(interface); - const unsigned char *p = variax->model_data.control + param; - int retval = line6_dump_wait_interruptible(&variax->dumpreq); - if (retval < 0) - return retval; - - if ((p[0] == 0) && (p[1] == 0) && (p[2] == 0)) - part_int = part_frac = 0; - else { - int exponent = (((p[0] & 0x7f) << 1) | (p[1] >> 7)) - BIAS; - unsigned mantissa = (p[1] << 8) | p[2] | 0x8000; - exponent -= OFFSET; - - if (exponent >= 0) { - part_int = mantissa << exponent; - part_frac = 0; - } else { - part_int = mantissa >> -exponent; - part_frac = (mantissa << (32 + exponent)) & 0xffffffff; - } - - part_frac = - (part_frac / ((1UL << 31) / (PRECISION / 2 * 10)) + 5) / 10; - } - - len += - sprintf(buf + len, "%s%d.%03d\n", ((p[0] & 0x80) ? "-" : ""), - part_int, part_frac); - return len; -} - -POD_PARAM_RW(int, tweak); -POD_PARAM_RW(int, wah_position); -POD_PARAM_RW(int, compression_gain); -POD_PARAM_RW(int, vol_pedal_position); -POD_PARAM_RW(int, compression_threshold); -POD_PARAM_RW(int, pan); -POD_PARAM_RW(int, amp_model_setup); -POD_PARAM_RW(int, amp_model); -POD_PARAM_RW(int, drive); -POD_PARAM_RW(int, bass); -POD_PARAM_RW(int, mid); -POD_PARAM_RW(int, lowmid); -POD_PARAM_RW(int, treble); -POD_PARAM_RW(int, highmid); -POD_PARAM_RW(int, chan_vol); -POD_PARAM_RW(int, reverb_mix); -POD_PARAM_RW(int, effect_setup); -POD_PARAM_RW(int, band_1_frequency); -POD_PARAM_RW(int, presence); -POD_PARAM_RW(int, treble__bass); -POD_PARAM_RW(int, noise_gate_enable); -POD_PARAM_RW(int, gate_threshold); -POD_PARAM_RW(int, gate_decay_time); -POD_PARAM_RW(int, stomp_enable); -POD_PARAM_RW(int, comp_enable); -POD_PARAM_RW(int, stomp_time); -POD_PARAM_RW(int, delay_enable); -POD_PARAM_RW(int, mod_param_1); -POD_PARAM_RW(int, delay_param_1); -POD_PARAM_RW(int, delay_param_1_note_value); -POD_PARAM_RW(int, band_2_frequency__bass); -POD_PARAM_RW(int, delay_param_2); -POD_PARAM_RW(int, delay_volume_mix); -POD_PARAM_RW(int, delay_param_3); -POD_PARAM_RW(int, reverb_enable); -POD_PARAM_RW(int, reverb_type); -POD_PARAM_RW(int, reverb_decay); -POD_PARAM_RW(int, reverb_tone); -POD_PARAM_RW(int, reverb_pre_delay); -POD_PARAM_RW(int, reverb_pre_post); -POD_PARAM_RW(int, band_2_frequency); -POD_PARAM_RW(int, band_3_frequency__bass); -POD_PARAM_RW(int, wah_enable); -POD_PARAM_RW(int, modulation_lo_cut); -POD_PARAM_RW(int, delay_reverb_lo_cut); -POD_PARAM_RW(int, volume_pedal_minimum); -POD_PARAM_RW(int, eq_pre_post); -POD_PARAM_RW(int, volume_pre_post); -POD_PARAM_RW(int, di_model); -POD_PARAM_RW(int, di_delay); -POD_PARAM_RW(int, mod_enable); -POD_PARAM_RW(int, mod_param_1_note_value); -POD_PARAM_RW(int, mod_param_2); -POD_PARAM_RW(int, mod_param_3); -POD_PARAM_RW(int, mod_param_4); -POD_PARAM_RW(int, mod_param_5); -POD_PARAM_RW(int, mod_volume_mix); -POD_PARAM_RW(int, mod_pre_post); -POD_PARAM_RW(int, modulation_model); -POD_PARAM_RW(int, band_3_frequency); -POD_PARAM_RW(int, band_4_frequency__bass); -POD_PARAM_RW(int, mod_param_1_double_precision); -POD_PARAM_RW(int, delay_param_1_double_precision); -POD_PARAM_RW(int, eq_enable); -POD_PARAM_RW(int, tap); -POD_PARAM_RW(int, volume_tweak_pedal_assign); -POD_PARAM_RW(int, band_5_frequency); -POD_PARAM_RW(int, tuner); -POD_PARAM_RW(int, mic_selection); -POD_PARAM_RW(int, cabinet_model); -POD_PARAM_RW(int, stomp_model); -POD_PARAM_RW(int, roomlevel); -POD_PARAM_RW(int, band_4_frequency); -POD_PARAM_RW(int, band_6_frequency); -POD_PARAM_RW(int, stomp_param_1_note_value); -POD_PARAM_RW(int, stomp_param_2); -POD_PARAM_RW(int, stomp_param_3); -POD_PARAM_RW(int, stomp_param_4); -POD_PARAM_RW(int, stomp_param_5); -POD_PARAM_RW(int, stomp_param_6); -POD_PARAM_RW(int, amp_switch_select); -POD_PARAM_RW(int, delay_param_4); -POD_PARAM_RW(int, delay_param_5); -POD_PARAM_RW(int, delay_pre_post); -POD_PARAM_RW(int, delay_model); -POD_PARAM_RW(int, delay_verb_model); -POD_PARAM_RW(int, tempo_msb); -POD_PARAM_RW(int, tempo_lsb); -POD_PARAM_RW(int, wah_model); -POD_PARAM_RW(int, bypass_volume); -POD_PARAM_RW(int, fx_loop_on_off); -POD_PARAM_RW(int, tweak_param_select); -POD_PARAM_RW(int, amp1_engage); -POD_PARAM_RW(int, band_1_gain); -POD_PARAM_RW(int, band_2_gain__bass); -POD_PARAM_RW(int, band_2_gain); -POD_PARAM_RW(int, band_3_gain__bass); -POD_PARAM_RW(int, band_3_gain); -POD_PARAM_RW(int, band_4_gain__bass); -POD_PARAM_RW(int, band_5_gain__bass); -POD_PARAM_RW(int, band_4_gain); -POD_PARAM_RW(int, band_6_gain__bass); -VARIAX_PARAM_R(int, body); -VARIAX_PARAM_R(int, pickup1_enable); -VARIAX_PARAM_R(int, pickup1_type); -VARIAX_PARAM_R(float, pickup1_position); -VARIAX_PARAM_R(float, pickup1_angle); -VARIAX_PARAM_R(float, pickup1_level); -VARIAX_PARAM_R(int, pickup2_enable); -VARIAX_PARAM_R(int, pickup2_type); -VARIAX_PARAM_R(float, pickup2_position); -VARIAX_PARAM_R(float, pickup2_angle); -VARIAX_PARAM_R(float, pickup2_level); -VARIAX_PARAM_R(int, pickup_phase); -VARIAX_PARAM_R(float, capacitance); -VARIAX_PARAM_R(float, tone_resistance); -VARIAX_PARAM_R(float, volume_resistance); -VARIAX_PARAM_R(int, taper); -VARIAX_PARAM_R(float, tone_dump); -VARIAX_PARAM_R(int, save_tone); -VARIAX_PARAM_R(float, volume_dump); -VARIAX_PARAM_R(int, tuning_enable); -VARIAX_PARAM_R(int, tuning6); -VARIAX_PARAM_R(int, tuning5); -VARIAX_PARAM_R(int, tuning4); -VARIAX_PARAM_R(int, tuning3); -VARIAX_PARAM_R(int, tuning2); -VARIAX_PARAM_R(int, tuning1); -VARIAX_PARAM_R(float, detune6); -VARIAX_PARAM_R(float, detune5); -VARIAX_PARAM_R(float, detune4); -VARIAX_PARAM_R(float, detune3); -VARIAX_PARAM_R(float, detune2); -VARIAX_PARAM_R(float, detune1); -VARIAX_PARAM_R(float, mix6); -VARIAX_PARAM_R(float, mix5); -VARIAX_PARAM_R(float, mix4); -VARIAX_PARAM_R(float, mix3); -VARIAX_PARAM_R(float, mix2); -VARIAX_PARAM_R(float, mix1); -VARIAX_PARAM_R(int, pickup_wiring); - -static DEVICE_ATTR(tweak, S_IWUSR | S_IRUGO, pod_get_tweak, pod_set_tweak); -static DEVICE_ATTR(wah_position, S_IWUSR | S_IRUGO, pod_get_wah_position, - pod_set_wah_position); -static DEVICE_ATTR(compression_gain, S_IWUSR | S_IRUGO, - pod_get_compression_gain, pod_set_compression_gain); -static DEVICE_ATTR(vol_pedal_position, S_IWUSR | S_IRUGO, - pod_get_vol_pedal_position, pod_set_vol_pedal_position); -static DEVICE_ATTR(compression_threshold, S_IWUSR | S_IRUGO, - pod_get_compression_threshold, - pod_set_compression_threshold); -static DEVICE_ATTR(pan, S_IWUSR | S_IRUGO, pod_get_pan, pod_set_pan); -static DEVICE_ATTR(amp_model_setup, S_IWUSR | S_IRUGO, pod_get_amp_model_setup, - pod_set_amp_model_setup); -static DEVICE_ATTR(amp_model, S_IWUSR | S_IRUGO, pod_get_amp_model, - pod_set_amp_model); -static DEVICE_ATTR(drive, S_IWUSR | S_IRUGO, pod_get_drive, pod_set_drive); -static DEVICE_ATTR(bass, S_IWUSR | S_IRUGO, pod_get_bass, pod_set_bass); -static DEVICE_ATTR(mid, S_IWUSR | S_IRUGO, pod_get_mid, pod_set_mid); -static DEVICE_ATTR(lowmid, S_IWUSR | S_IRUGO, pod_get_lowmid, pod_set_lowmid); -static DEVICE_ATTR(treble, S_IWUSR | S_IRUGO, pod_get_treble, pod_set_treble); -static DEVICE_ATTR(highmid, S_IWUSR | S_IRUGO, pod_get_highmid, - pod_set_highmid); -static DEVICE_ATTR(chan_vol, S_IWUSR | S_IRUGO, pod_get_chan_vol, - pod_set_chan_vol); -static DEVICE_ATTR(reverb_mix, S_IWUSR | S_IRUGO, pod_get_reverb_mix, - pod_set_reverb_mix); -static DEVICE_ATTR(effect_setup, S_IWUSR | S_IRUGO, pod_get_effect_setup, - pod_set_effect_setup); -static DEVICE_ATTR(band_1_frequency, S_IWUSR | S_IRUGO, - pod_get_band_1_frequency, pod_set_band_1_frequency); -static DEVICE_ATTR(presence, S_IWUSR | S_IRUGO, pod_get_presence, - pod_set_presence); -static DEVICE_ATTR2(treble__bass, treble, S_IWUSR | S_IRUGO, - pod_get_treble__bass, pod_set_treble__bass); -static DEVICE_ATTR(noise_gate_enable, S_IWUSR | S_IRUGO, - pod_get_noise_gate_enable, pod_set_noise_gate_enable); -static DEVICE_ATTR(gate_threshold, S_IWUSR | S_IRUGO, pod_get_gate_threshold, - pod_set_gate_threshold); -static DEVICE_ATTR(gate_decay_time, S_IWUSR | S_IRUGO, pod_get_gate_decay_time, - pod_set_gate_decay_time); -static DEVICE_ATTR(stomp_enable, S_IWUSR | S_IRUGO, pod_get_stomp_enable, - pod_set_stomp_enable); -static DEVICE_ATTR(comp_enable, S_IWUSR | S_IRUGO, pod_get_comp_enable, - pod_set_comp_enable); -static DEVICE_ATTR(stomp_time, S_IWUSR | S_IRUGO, pod_get_stomp_time, - pod_set_stomp_time); -static DEVICE_ATTR(delay_enable, S_IWUSR | S_IRUGO, pod_get_delay_enable, - pod_set_delay_enable); -static DEVICE_ATTR(mod_param_1, S_IWUSR | S_IRUGO, pod_get_mod_param_1, - pod_set_mod_param_1); -static DEVICE_ATTR(delay_param_1, S_IWUSR | S_IRUGO, pod_get_delay_param_1, - pod_set_delay_param_1); -static DEVICE_ATTR(delay_param_1_note_value, S_IWUSR | S_IRUGO, - pod_get_delay_param_1_note_value, - pod_set_delay_param_1_note_value); -static DEVICE_ATTR2(band_2_frequency__bass, band_2_frequency, S_IWUSR | S_IRUGO, - pod_get_band_2_frequency__bass, - pod_set_band_2_frequency__bass); -static DEVICE_ATTR(delay_param_2, S_IWUSR | S_IRUGO, pod_get_delay_param_2, - pod_set_delay_param_2); -static DEVICE_ATTR(delay_volume_mix, S_IWUSR | S_IRUGO, - pod_get_delay_volume_mix, pod_set_delay_volume_mix); -static DEVICE_ATTR(delay_param_3, S_IWUSR | S_IRUGO, pod_get_delay_param_3, - pod_set_delay_param_3); -static DEVICE_ATTR(reverb_enable, S_IWUSR | S_IRUGO, pod_get_reverb_enable, - pod_set_reverb_enable); -static DEVICE_ATTR(reverb_type, S_IWUSR | S_IRUGO, pod_get_reverb_type, - pod_set_reverb_type); -static DEVICE_ATTR(reverb_decay, S_IWUSR | S_IRUGO, pod_get_reverb_decay, - pod_set_reverb_decay); -static DEVICE_ATTR(reverb_tone, S_IWUSR | S_IRUGO, pod_get_reverb_tone, - pod_set_reverb_tone); -static DEVICE_ATTR(reverb_pre_delay, S_IWUSR | S_IRUGO, - pod_get_reverb_pre_delay, pod_set_reverb_pre_delay); -static DEVICE_ATTR(reverb_pre_post, S_IWUSR | S_IRUGO, pod_get_reverb_pre_post, - pod_set_reverb_pre_post); -static DEVICE_ATTR(band_2_frequency, S_IWUSR | S_IRUGO, - pod_get_band_2_frequency, pod_set_band_2_frequency); -static DEVICE_ATTR2(band_3_frequency__bass, band_3_frequency, S_IWUSR | S_IRUGO, - pod_get_band_3_frequency__bass, - pod_set_band_3_frequency__bass); -static DEVICE_ATTR(wah_enable, S_IWUSR | S_IRUGO, pod_get_wah_enable, - pod_set_wah_enable); -static DEVICE_ATTR(modulation_lo_cut, S_IWUSR | S_IRUGO, - pod_get_modulation_lo_cut, pod_set_modulation_lo_cut); -static DEVICE_ATTR(delay_reverb_lo_cut, S_IWUSR | S_IRUGO, - pod_get_delay_reverb_lo_cut, pod_set_delay_reverb_lo_cut); -static DEVICE_ATTR(volume_pedal_minimum, S_IWUSR | S_IRUGO, - pod_get_volume_pedal_minimum, pod_set_volume_pedal_minimum); -static DEVICE_ATTR(eq_pre_post, S_IWUSR | S_IRUGO, pod_get_eq_pre_post, - pod_set_eq_pre_post); -static DEVICE_ATTR(volume_pre_post, S_IWUSR | S_IRUGO, pod_get_volume_pre_post, - pod_set_volume_pre_post); -static DEVICE_ATTR(di_model, S_IWUSR | S_IRUGO, pod_get_di_model, - pod_set_di_model); -static DEVICE_ATTR(di_delay, S_IWUSR | S_IRUGO, pod_get_di_delay, - pod_set_di_delay); -static DEVICE_ATTR(mod_enable, S_IWUSR | S_IRUGO, pod_get_mod_enable, - pod_set_mod_enable); -static DEVICE_ATTR(mod_param_1_note_value, S_IWUSR | S_IRUGO, - pod_get_mod_param_1_note_value, - pod_set_mod_param_1_note_value); -static DEVICE_ATTR(mod_param_2, S_IWUSR | S_IRUGO, pod_get_mod_param_2, - pod_set_mod_param_2); -static DEVICE_ATTR(mod_param_3, S_IWUSR | S_IRUGO, pod_get_mod_param_3, - pod_set_mod_param_3); -static DEVICE_ATTR(mod_param_4, S_IWUSR | S_IRUGO, pod_get_mod_param_4, - pod_set_mod_param_4); -static DEVICE_ATTR(mod_param_5, S_IWUSR | S_IRUGO, pod_get_mod_param_5, - pod_set_mod_param_5); -static DEVICE_ATTR(mod_volume_mix, S_IWUSR | S_IRUGO, pod_get_mod_volume_mix, - pod_set_mod_volume_mix); -static DEVICE_ATTR(mod_pre_post, S_IWUSR | S_IRUGO, pod_get_mod_pre_post, - pod_set_mod_pre_post); -static DEVICE_ATTR(modulation_model, S_IWUSR | S_IRUGO, - pod_get_modulation_model, pod_set_modulation_model); -static DEVICE_ATTR(band_3_frequency, S_IWUSR | S_IRUGO, - pod_get_band_3_frequency, pod_set_band_3_frequency); -static DEVICE_ATTR2(band_4_frequency__bass, band_4_frequency, S_IWUSR | S_IRUGO, - pod_get_band_4_frequency__bass, - pod_set_band_4_frequency__bass); -static DEVICE_ATTR(mod_param_1_double_precision, S_IWUSR | S_IRUGO, - pod_get_mod_param_1_double_precision, - pod_set_mod_param_1_double_precision); -static DEVICE_ATTR(delay_param_1_double_precision, S_IWUSR | S_IRUGO, - pod_get_delay_param_1_double_precision, - pod_set_delay_param_1_double_precision); -static DEVICE_ATTR(eq_enable, S_IWUSR | S_IRUGO, pod_get_eq_enable, - pod_set_eq_enable); -static DEVICE_ATTR(tap, S_IWUSR | S_IRUGO, pod_get_tap, pod_set_tap); -static DEVICE_ATTR(volume_tweak_pedal_assign, S_IWUSR | S_IRUGO, - pod_get_volume_tweak_pedal_assign, - pod_set_volume_tweak_pedal_assign); -static DEVICE_ATTR(band_5_frequency, S_IWUSR | S_IRUGO, - pod_get_band_5_frequency, pod_set_band_5_frequency); -static DEVICE_ATTR(tuner, S_IWUSR | S_IRUGO, pod_get_tuner, pod_set_tuner); -static DEVICE_ATTR(mic_selection, S_IWUSR | S_IRUGO, pod_get_mic_selection, - pod_set_mic_selection); -static DEVICE_ATTR(cabinet_model, S_IWUSR | S_IRUGO, pod_get_cabinet_model, - pod_set_cabinet_model); -static DEVICE_ATTR(stomp_model, S_IWUSR | S_IRUGO, pod_get_stomp_model, - pod_set_stomp_model); -static DEVICE_ATTR(roomlevel, S_IWUSR | S_IRUGO, pod_get_roomlevel, - pod_set_roomlevel); -static DEVICE_ATTR(band_4_frequency, S_IWUSR | S_IRUGO, - pod_get_band_4_frequency, pod_set_band_4_frequency); -static DEVICE_ATTR(band_6_frequency, S_IWUSR | S_IRUGO, - pod_get_band_6_frequency, pod_set_band_6_frequency); -static DEVICE_ATTR(stomp_param_1_note_value, S_IWUSR | S_IRUGO, - pod_get_stomp_param_1_note_value, - pod_set_stomp_param_1_note_value); -static DEVICE_ATTR(stomp_param_2, S_IWUSR | S_IRUGO, pod_get_stomp_param_2, - pod_set_stomp_param_2); -static DEVICE_ATTR(stomp_param_3, S_IWUSR | S_IRUGO, pod_get_stomp_param_3, - pod_set_stomp_param_3); -static DEVICE_ATTR(stomp_param_4, S_IWUSR | S_IRUGO, pod_get_stomp_param_4, - pod_set_stomp_param_4); -static DEVICE_ATTR(stomp_param_5, S_IWUSR | S_IRUGO, pod_get_stomp_param_5, - pod_set_stomp_param_5); -static DEVICE_ATTR(stomp_param_6, S_IWUSR | S_IRUGO, pod_get_stomp_param_6, - pod_set_stomp_param_6); -static DEVICE_ATTR(amp_switch_select, S_IWUSR | S_IRUGO, - pod_get_amp_switch_select, pod_set_amp_switch_select); -static DEVICE_ATTR(delay_param_4, S_IWUSR | S_IRUGO, pod_get_delay_param_4, - pod_set_delay_param_4); -static DEVICE_ATTR(delay_param_5, S_IWUSR | S_IRUGO, pod_get_delay_param_5, - pod_set_delay_param_5); -static DEVICE_ATTR(delay_pre_post, S_IWUSR | S_IRUGO, pod_get_delay_pre_post, - pod_set_delay_pre_post); -static DEVICE_ATTR(delay_model, S_IWUSR | S_IRUGO, pod_get_delay_model, - pod_set_delay_model); -static DEVICE_ATTR(delay_verb_model, S_IWUSR | S_IRUGO, - pod_get_delay_verb_model, pod_set_delay_verb_model); -static DEVICE_ATTR(tempo_msb, S_IWUSR | S_IRUGO, pod_get_tempo_msb, - pod_set_tempo_msb); -static DEVICE_ATTR(tempo_lsb, S_IWUSR | S_IRUGO, pod_get_tempo_lsb, - pod_set_tempo_lsb); -static DEVICE_ATTR(wah_model, S_IWUSR | S_IRUGO, pod_get_wah_model, - pod_set_wah_model); -static DEVICE_ATTR(bypass_volume, S_IWUSR | S_IRUGO, pod_get_bypass_volume, - pod_set_bypass_volume); -static DEVICE_ATTR(fx_loop_on_off, S_IWUSR | S_IRUGO, pod_get_fx_loop_on_off, - pod_set_fx_loop_on_off); -static DEVICE_ATTR(tweak_param_select, S_IWUSR | S_IRUGO, - pod_get_tweak_param_select, pod_set_tweak_param_select); -static DEVICE_ATTR(amp1_engage, S_IWUSR | S_IRUGO, pod_get_amp1_engage, - pod_set_amp1_engage); -static DEVICE_ATTR(band_1_gain, S_IWUSR | S_IRUGO, pod_get_band_1_gain, - pod_set_band_1_gain); -static DEVICE_ATTR2(band_2_gain__bass, band_2_gain, S_IWUSR | S_IRUGO, - pod_get_band_2_gain__bass, pod_set_band_2_gain__bass); -static DEVICE_ATTR(band_2_gain, S_IWUSR | S_IRUGO, pod_get_band_2_gain, - pod_set_band_2_gain); -static DEVICE_ATTR2(band_3_gain__bass, band_3_gain, S_IWUSR | S_IRUGO, - pod_get_band_3_gain__bass, pod_set_band_3_gain__bass); -static DEVICE_ATTR(band_3_gain, S_IWUSR | S_IRUGO, pod_get_band_3_gain, - pod_set_band_3_gain); -static DEVICE_ATTR2(band_4_gain__bass, band_4_gain, S_IWUSR | S_IRUGO, - pod_get_band_4_gain__bass, pod_set_band_4_gain__bass); -static DEVICE_ATTR2(band_5_gain__bass, band_5_gain, S_IWUSR | S_IRUGO, - pod_get_band_5_gain__bass, pod_set_band_5_gain__bass); -static DEVICE_ATTR(band_4_gain, S_IWUSR | S_IRUGO, pod_get_band_4_gain, - pod_set_band_4_gain); -static DEVICE_ATTR2(band_6_gain__bass, band_6_gain, S_IWUSR | S_IRUGO, - pod_get_band_6_gain__bass, pod_set_band_6_gain__bass); -static DEVICE_ATTR(body, S_IRUGO, variax_get_body, line6_nop_write); -static DEVICE_ATTR(pickup1_enable, S_IRUGO, variax_get_pickup1_enable, - line6_nop_write); -static DEVICE_ATTR(pickup1_type, S_IRUGO, variax_get_pickup1_type, - line6_nop_write); -static DEVICE_ATTR(pickup1_position, S_IRUGO, variax_get_pickup1_position, - line6_nop_write); -static DEVICE_ATTR(pickup1_angle, S_IRUGO, variax_get_pickup1_angle, - line6_nop_write); -static DEVICE_ATTR(pickup1_level, S_IRUGO, variax_get_pickup1_level, - line6_nop_write); -static DEVICE_ATTR(pickup2_enable, S_IRUGO, variax_get_pickup2_enable, - line6_nop_write); -static DEVICE_ATTR(pickup2_type, S_IRUGO, variax_get_pickup2_type, - line6_nop_write); -static DEVICE_ATTR(pickup2_position, S_IRUGO, variax_get_pickup2_position, - line6_nop_write); -static DEVICE_ATTR(pickup2_angle, S_IRUGO, variax_get_pickup2_angle, - line6_nop_write); -static DEVICE_ATTR(pickup2_level, S_IRUGO, variax_get_pickup2_level, - line6_nop_write); -static DEVICE_ATTR(pickup_phase, S_IRUGO, variax_get_pickup_phase, - line6_nop_write); -static DEVICE_ATTR(capacitance, S_IRUGO, variax_get_capacitance, - line6_nop_write); -static DEVICE_ATTR(tone_resistance, S_IRUGO, variax_get_tone_resistance, - line6_nop_write); -static DEVICE_ATTR(volume_resistance, S_IRUGO, variax_get_volume_resistance, - line6_nop_write); -static DEVICE_ATTR(taper, S_IRUGO, variax_get_taper, line6_nop_write); -static DEVICE_ATTR(tone_dump, S_IRUGO, variax_get_tone_dump, line6_nop_write); -static DEVICE_ATTR(save_tone, S_IRUGO, variax_get_save_tone, line6_nop_write); -static DEVICE_ATTR(volume_dump, S_IRUGO, variax_get_volume_dump, - line6_nop_write); -static DEVICE_ATTR(tuning_enable, S_IRUGO, variax_get_tuning_enable, - line6_nop_write); -static DEVICE_ATTR(tuning6, S_IRUGO, variax_get_tuning6, line6_nop_write); -static DEVICE_ATTR(tuning5, S_IRUGO, variax_get_tuning5, line6_nop_write); -static DEVICE_ATTR(tuning4, S_IRUGO, variax_get_tuning4, line6_nop_write); -static DEVICE_ATTR(tuning3, S_IRUGO, variax_get_tuning3, line6_nop_write); -static DEVICE_ATTR(tuning2, S_IRUGO, variax_get_tuning2, line6_nop_write); -static DEVICE_ATTR(tuning1, S_IRUGO, variax_get_tuning1, line6_nop_write); -static DEVICE_ATTR(detune6, S_IRUGO, variax_get_detune6, line6_nop_write); -static DEVICE_ATTR(detune5, S_IRUGO, variax_get_detune5, line6_nop_write); -static DEVICE_ATTR(detune4, S_IRUGO, variax_get_detune4, line6_nop_write); -static DEVICE_ATTR(detune3, S_IRUGO, variax_get_detune3, line6_nop_write); -static DEVICE_ATTR(detune2, S_IRUGO, variax_get_detune2, line6_nop_write); -static DEVICE_ATTR(detune1, S_IRUGO, variax_get_detune1, line6_nop_write); -static DEVICE_ATTR(mix6, S_IRUGO, variax_get_mix6, line6_nop_write); -static DEVICE_ATTR(mix5, S_IRUGO, variax_get_mix5, line6_nop_write); -static DEVICE_ATTR(mix4, S_IRUGO, variax_get_mix4, line6_nop_write); -static DEVICE_ATTR(mix3, S_IRUGO, variax_get_mix3, line6_nop_write); -static DEVICE_ATTR(mix2, S_IRUGO, variax_get_mix2, line6_nop_write); -static DEVICE_ATTR(mix1, S_IRUGO, variax_get_mix1, line6_nop_write); -static DEVICE_ATTR(pickup_wiring, S_IRUGO, variax_get_pickup_wiring, - line6_nop_write); - -int line6_pod_create_files(int firmware, int type, struct device *dev) -{ - int err; - CHECK_RETURN(device_create_file(dev, &dev_attr_tweak)); - CHECK_RETURN(device_create_file(dev, &dev_attr_wah_position)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - CHECK_RETURN(device_create_file - (dev, &dev_attr_compression_gain)); - CHECK_RETURN(device_create_file(dev, &dev_attr_vol_pedal_position)); - CHECK_RETURN(device_create_file(dev, &dev_attr_compression_threshold)); - CHECK_RETURN(device_create_file(dev, &dev_attr_pan)); - CHECK_RETURN(device_create_file(dev, &dev_attr_amp_model_setup)); - if (firmware >= 200) - CHECK_RETURN(device_create_file(dev, &dev_attr_amp_model)); - CHECK_RETURN(device_create_file(dev, &dev_attr_drive)); - CHECK_RETURN(device_create_file(dev, &dev_attr_bass)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_mid)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_lowmid)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_treble)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_highmid)); - CHECK_RETURN(device_create_file(dev, &dev_attr_chan_vol)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_mix)); - CHECK_RETURN(device_create_file(dev, &dev_attr_effect_setup)); - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_1_frequency)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_presence)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_treble__bass)); - CHECK_RETURN(device_create_file(dev, &dev_attr_noise_gate_enable)); - CHECK_RETURN(device_create_file(dev, &dev_attr_gate_threshold)); - CHECK_RETURN(device_create_file(dev, &dev_attr_gate_decay_time)); - CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_enable)); - CHECK_RETURN(device_create_file(dev, &dev_attr_comp_enable)); - CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_time)); - CHECK_RETURN(device_create_file(dev, &dev_attr_delay_enable)); - CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_1)); - CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_1)); - CHECK_RETURN(device_create_file - (dev, &dev_attr_delay_param_1_note_value)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_2_frequency__bass)); - CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_2)); - CHECK_RETURN(device_create_file(dev, &dev_attr_delay_volume_mix)); - CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_3)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_enable)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_type)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_decay)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_reverb_tone)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - CHECK_RETURN(device_create_file - (dev, &dev_attr_reverb_pre_delay)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - CHECK_RETURN(device_create_file - (dev, &dev_attr_reverb_pre_post)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_2_frequency)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_3_frequency__bass)); - CHECK_RETURN(device_create_file(dev, &dev_attr_wah_enable)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - CHECK_RETURN(device_create_file - (dev, &dev_attr_modulation_lo_cut)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - CHECK_RETURN(device_create_file - (dev, &dev_attr_delay_reverb_lo_cut)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_volume_pedal_minimum)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_eq_pre_post)); - CHECK_RETURN(device_create_file(dev, &dev_attr_volume_pre_post)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_di_model)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_di_delay)); - CHECK_RETURN(device_create_file(dev, &dev_attr_mod_enable)); - CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_1_note_value)); - CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_2)); - CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_3)); - CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_4)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_mod_param_5)); - CHECK_RETURN(device_create_file(dev, &dev_attr_mod_volume_mix)); - CHECK_RETURN(device_create_file(dev, &dev_attr_mod_pre_post)); - CHECK_RETURN(device_create_file(dev, &dev_attr_modulation_model)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_3_frequency)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_4_frequency__bass)); - CHECK_RETURN(device_create_file - (dev, &dev_attr_mod_param_1_double_precision)); - CHECK_RETURN(device_create_file - (dev, &dev_attr_delay_param_1_double_precision)); - if (firmware >= 200) - CHECK_RETURN(device_create_file(dev, &dev_attr_eq_enable)); - CHECK_RETURN(device_create_file(dev, &dev_attr_tap)); - CHECK_RETURN(device_create_file - (dev, &dev_attr_volume_tweak_pedal_assign)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_5_frequency)); - CHECK_RETURN(device_create_file(dev, &dev_attr_tuner)); - CHECK_RETURN(device_create_file(dev, &dev_attr_mic_selection)); - CHECK_RETURN(device_create_file(dev, &dev_attr_cabinet_model)); - CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_model)); - CHECK_RETURN(device_create_file(dev, &dev_attr_roomlevel)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_4_frequency)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_6_frequency)); - CHECK_RETURN(device_create_file - (dev, &dev_attr_stomp_param_1_note_value)); - CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_2)); - CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_3)); - CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_4)); - CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_5)); - CHECK_RETURN(device_create_file(dev, &dev_attr_stomp_param_6)); - if ((type & (LINE6_BITS_LIVE)) != 0) - CHECK_RETURN(device_create_file - (dev, &dev_attr_amp_switch_select)); - CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_4)); - CHECK_RETURN(device_create_file(dev, &dev_attr_delay_param_5)); - CHECK_RETURN(device_create_file(dev, &dev_attr_delay_pre_post)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_delay_model)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - CHECK_RETURN(device_create_file - (dev, &dev_attr_delay_verb_model)); - CHECK_RETURN(device_create_file(dev, &dev_attr_tempo_msb)); - CHECK_RETURN(device_create_file(dev, &dev_attr_tempo_lsb)); - if (firmware >= 300) - CHECK_RETURN(device_create_file(dev, &dev_attr_wah_model)); - if (firmware >= 214) - CHECK_RETURN(device_create_file(dev, &dev_attr_bypass_volume)); - if ((type & (LINE6_BITS_PRO)) != 0) - CHECK_RETURN(device_create_file(dev, &dev_attr_fx_loop_on_off)); - CHECK_RETURN(device_create_file(dev, &dev_attr_tweak_param_select)); - CHECK_RETURN(device_create_file(dev, &dev_attr_amp1_engage)); - if (firmware >= 200) - CHECK_RETURN(device_create_file(dev, &dev_attr_band_1_gain)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_2_gain__bass)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_2_gain)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_3_gain__bass)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_3_gain)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_4_gain__bass)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_5_gain__bass)); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_4_gain)); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - if (firmware >= 200) - CHECK_RETURN(device_create_file - (dev, &dev_attr_band_6_gain__bass)); - return 0; -} - -void line6_pod_remove_files(int firmware, int type, struct device *dev) -{ - device_remove_file(dev, &dev_attr_tweak); - device_remove_file(dev, &dev_attr_wah_position); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - device_remove_file(dev, &dev_attr_compression_gain); - device_remove_file(dev, &dev_attr_vol_pedal_position); - device_remove_file(dev, &dev_attr_compression_threshold); - device_remove_file(dev, &dev_attr_pan); - device_remove_file(dev, &dev_attr_amp_model_setup); - if (firmware >= 200) - device_remove_file(dev, &dev_attr_amp_model); - device_remove_file(dev, &dev_attr_drive); - device_remove_file(dev, &dev_attr_bass); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - device_remove_file(dev, &dev_attr_mid); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - device_remove_file(dev, &dev_attr_lowmid); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - device_remove_file(dev, &dev_attr_treble); - if ((type & (LINE6_BITS_BASSPODXTALL)) != 0) - device_remove_file(dev, &dev_attr_highmid); - device_remove_file(dev, &dev_attr_chan_vol); - if ((type & (LINE6_BITS_PODXTALL)) != 0) - ... [truncated message content] |
From: Stefan H. <ste...@gm...> - 2012-11-07 16:30:16
|
On Wed, Nov 7, 2012 at 5:00 PM, "L. Alberto Giménez" <agi...@sy...> wrote: > El 07/11/2012 10:17, Stefan Hajnoczi escribió: > >> >> Let's not get sidetracked worrying about svn/git etc. This hopefully >> won't be a long effort involving patches from a lot of people - and no >> need for a public repo. > > > Totally agree. But just one question: how do you coordinante changes and > patches between your linux.git clone and Markus' svn repository? Do you just > trade patches between them? I'm just being curious. I will start by sending a patch to Greg KH and the ALSA maintainers that moves the files in linux-next.git from drivers/staging/ to sound/usb/. I drafted the patch this morning and now need to test it. There will probably review comments, which will be addressed by smaller cleanup patches against linux-next.git. Once the cleanups have been merged into linux-next.git I'll send an updated patch to move the driver out of staging. This will repeat until folks are happy. In other words the driver is cleaned up in staging and when there are no more issues a single patch moves it out of staging. Regarding the svn repo: it has branches and features that are not in linux-next.git and are still experimental. I don't care about those branches unless Markus would like me to help move the code into linux-next.git. Stefan |
From: L. A. G. <agi...@sy...> - 2012-11-07 16:00:49
|
El 07/11/2012 10:17, Stefan Hajnoczi escribió: > > Let's not get sidetracked worrying about svn/git etc. This hopefully > won't be a long effort involving patches from a lot of people - and no > need for a public repo. Totally agree. But just one question: how do you coordinante changes and patches between your linux.git clone and Markus' svn repository? Do you just trade patches between them? I'm just being curious. Regards, L. Alberto |
From: Stefan H. <ste...@gm...> - 2012-11-07 09:17:57
|
On Wed, Nov 7, 2012 at 9:23 AM, "L. Alberto Giménez" <agi...@sy...> wrote: > El 07/11/2012 9:03, Stefan Hajnoczi escribió: > >> On Tue, Nov 6, 2012 at 10:10 PM, Markus Grabner <gr...@ic...> >> wrote: >>> >>> Am Samstag, 3. November 2012, 00:06:56 schrieb Stefan Hajnoczi: > >>> >>> >>> Since I'm quite busy at the moment, it's absoutely fine for me if you >>> make the >>> >>> request. I reviewed and applied your latest changes to my working copy >>> and >>> didn't notice any problem. As far as stability is concerned, I think the >>> driver is ready to enter the kernel main line. I can't contribute much to >>> a >>> cleanup, though, since I'm not too familiar with kernel policies >>> (everything >>> which compiles & works is fine for me :-). > > > Well, usually the people that know about the particular subsystem (ALSA, > USB, ...) will point on the right direction regarding APIs or policies. > > >>> >>> Since there are already several branches in the subversion repository >>> https://line6linux.svn.sourceforge.net/svnroot/line6linux/driver, I >>> suggest to >>> create a cleanup branch there if necessary before moving the driver to >>> the >>> main line (I am aware that many people prefer git, but using too many >>> repositories for the same piece of software is getting tedious). What do >>> you >>> think? > > > It's OK for me, but I would suggest to use git, since it will be easier for > us to contribute, and easier to interact with the kernel guys. > > Also, since the kernel is using git, it would be way easier to merge changes > if we use the git repository. > > And last, if someday we make into mainline, no separate repo will be useful > anymore. The "main" line6usb code *will be* part of the kernel. And the > maintenance and developement will be easier than havin an off-tree branch. > > I have experience using git in case you need help (I think that Stefan too), > but if you decide to keep working on SVN, I'll respect that. > > >> >> Is there any code in svn which needs to get into linux.git? >> >> Once we're happy with Greg KH's drivers/staging/line6 I think the process >> is: >> >> 1. Ask ALSA maintainers and Greg KH to review drivers/staging/line6. >> 2. Implement any requested cleanups and go back to 1. >> 3. Success! >> >> I don't think we need a repository for this. The code review happens >> on the lkml, ALSA, and/or staging mailing list. The patch series gets >> sent to those mailing lists. > > > Right, but setting up a repository (or just using one of linux-next, or > Linus' tree or whatever) will ease the developement for us, I think, instead > of trading with patches here and there. > > Anyway, Stefan, what is your public repo address? Let's not get sidetracked worrying about svn/git etc. This hopefully won't be a long effort involving patches from a lot of people - and no need for a public repo. The code lives in Greg KH's staging tree. Patches must be sent to the staging mailing list <de...@dr...>. We should keep an eye on line6usb patches and discuss them. I will include any outstanding changes from svn that Markus wants in. >> When I send cleaned up patches, you and anyone else will be able to >> comment on them. >> >> Does this sound okay? > > > Yes. So, please, as the LKML is a quite high volume list, would you mind > sending patches to this list as well, or just drop some notice pointing to > the LKML messages? Sure, the line6linux-devel and de...@dr... lists will be CCed. Stefan |
From: L. A. G. <agi...@sy...> - 2012-11-07 08:23:42
|
El 07/11/2012 9:03, Stefan Hajnoczi escribió: > On Tue, Nov 6, 2012 at 10:10 PM, Markus Grabner <gr...@ic...> wrote: >> Am Samstag, 3. November 2012, 00:06:56 schrieb Stefan Hajnoczi: >> >> Since I'm quite busy at the moment, it's absoutely fine for me if you make the >> request. I reviewed and applied your latest changes to my working copy and >> didn't notice any problem. As far as stability is concerned, I think the >> driver is ready to enter the kernel main line. I can't contribute much to a >> cleanup, though, since I'm not too familiar with kernel policies (everything >> which compiles & works is fine for me :-). Well, usually the people that know about the particular subsystem (ALSA, USB, ...) will point on the right direction regarding APIs or policies. >> >> Since there are already several branches in the subversion repository >> https://line6linux.svn.sourceforge.net/svnroot/line6linux/driver, I suggest to >> create a cleanup branch there if necessary before moving the driver to the >> main line (I am aware that many people prefer git, but using too many >> repositories for the same piece of software is getting tedious). What do you >> think? It's OK for me, but I would suggest to use git, since it will be easier for us to contribute, and easier to interact with the kernel guys. Also, since the kernel is using git, it would be way easier to merge changes if we use the git repository. And last, if someday we make into mainline, no separate repo will be useful anymore. The "main" line6usb code *will be* part of the kernel. And the maintenance and developement will be easier than havin an off-tree branch. I have experience using git in case you need help (I think that Stefan too), but if you decide to keep working on SVN, I'll respect that. > > Is there any code in svn which needs to get into linux.git? > > Once we're happy with Greg KH's drivers/staging/line6 I think the process is: > > 1. Ask ALSA maintainers and Greg KH to review drivers/staging/line6. > 2. Implement any requested cleanups and go back to 1. > 3. Success! > > I don't think we need a repository for this. The code review happens > on the lkml, ALSA, and/or staging mailing list. The patch series gets > sent to those mailing lists. Right, but setting up a repository (or just using one of linux-next, or Linus' tree or whatever) will ease the developement for us, I think, instead of trading with patches here and there. Anyway, Stefan, what is your public repo address? > > When I send cleaned up patches, you and anyone else will be able to > comment on them. > > Does this sound okay? Yes. So, please, as the LKML is a quite high volume list, would you mind sending patches to this list as well, or just drop some notice pointing to the LKML messages? Thank you! |
From: Stefan H. <ste...@gm...> - 2012-11-07 08:03:52
|
On Tue, Nov 6, 2012 at 10:10 PM, Markus Grabner <gr...@ic...> wrote: > Am Samstag, 3. November 2012, 00:06:56 schrieb Stefan Hajnoczi: >> On Fri, Nov 2, 2012 at 9:02 PM, "L. Alberto Giménez" >> >> <agi...@sy...> wrote: >> > El 02/11/2012 8:02, Stefan Hajnoczi escribió: >> >> Ping? >> > >> > Hi Stefan, >> > >> > I'm interested in helping with the driver code (or user-space >> > applications or wharever). >> > >> > Unfortunately, right now my Linux box is dead and I'm waiting for a >> > motherboard/CPU replacement. When i get everytning running up, I will be >> > able to test/help. >> > >> > By the way, what codebase are you currently working on? The official >> > kernel staging code? or do you use another personal repository? >> >> I write small changes against linux.git. For bigger changes I send >> patches against the subversion repo so Markus can review and send a >> pull request to Greg KH. >> >> > We may set up a github repository for the cleanup process. I think that >> > a lot of changes will be needed since the current code is quite old and >> > a lot of interfaces and kernel policies may have changed. >> >> The code builds against the latest linux.git so there is nothing >> terribly bitrotted. I think the next step is to ask the ALSA >> maintainers to review the code. It would be appropriate for Markus to >> make that request, since he's the maintainer. This is why I'm pinging >> him - I don't want to bypass him by making that request myself. > Since I'm quite busy at the moment, it's absoutely fine for me if you make the > request. I reviewed and applied your latest changes to my working copy and > didn't notice any problem. As far as stability is concerned, I think the > driver is ready to enter the kernel main line. I can't contribute much to a > cleanup, though, since I'm not too familiar with kernel policies (everything > which compiles & works is fine for me :-). > > Since there are already several branches in the subversion repository > https://line6linux.svn.sourceforge.net/svnroot/line6linux/driver, I suggest to > create a cleanup branch there if necessary before moving the driver to the > main line (I am aware that many people prefer git, but using too many > repositories for the same piece of software is getting tedious). What do you > think? Is there any code in svn which needs to get into linux.git? Once we're happy with Greg KH's drivers/staging/line6 I think the process is: 1. Ask ALSA maintainers and Greg KH to review drivers/staging/line6. 2. Implement any requested cleanups and go back to 1. 3. Success! I don't think we need a repository for this. The code review happens on the lkml, ALSA, and/or staging mailing list. The patch series gets sent to those mailing lists. When I send cleaned up patches, you and anyone else will be able to comment on them. Does this sound okay? Stefan |
From: Markus G. <gr...@ic...> - 2012-11-06 21:43:56
|
Am Samstag, 3. November 2012, 00:06:56 schrieb Stefan Hajnoczi: > On Fri, Nov 2, 2012 at 9:02 PM, "L. Alberto Giménez" > > <agi...@sy...> wrote: > > El 02/11/2012 8:02, Stefan Hajnoczi escribió: > >> Ping? > > > > Hi Stefan, > > > > I'm interested in helping with the driver code (or user-space > > applications or wharever). > > > > Unfortunately, right now my Linux box is dead and I'm waiting for a > > motherboard/CPU replacement. When i get everytning running up, I will be > > able to test/help. > > > > By the way, what codebase are you currently working on? The official > > kernel staging code? or do you use another personal repository? > > I write small changes against linux.git. For bigger changes I send > patches against the subversion repo so Markus can review and send a > pull request to Greg KH. > > > We may set up a github repository for the cleanup process. I think that > > a lot of changes will be needed since the current code is quite old and > > a lot of interfaces and kernel policies may have changed. > > The code builds against the latest linux.git so there is nothing > terribly bitrotted. I think the next step is to ask the ALSA > maintainers to review the code. It would be appropriate for Markus to > make that request, since he's the maintainer. This is why I'm pinging > him - I don't want to bypass him by making that request myself. Since I'm quite busy at the moment, it's absoutely fine for me if you make the request. I reviewed and applied your latest changes to my working copy and didn't notice any problem. As far as stability is concerned, I think the driver is ready to enter the kernel main line. I can't contribute much to a cleanup, though, since I'm not too familiar with kernel policies (everything which compiles & works is fine for me :-). Since there are already several branches in the subversion repository https://line6linux.svn.sourceforge.net/svnroot/line6linux/driver, I suggest to create a cleanup branch there if necessary before moving the driver to the main line (I am aware that many people prefer git, but using too many repositories for the same piece of software is getting tedious). What do you think? Kind regards, Markus |
From: Stefan H. <ste...@gm...> - 2012-11-02 23:07:05
|
On Fri, Nov 2, 2012 at 9:02 PM, "L. Alberto Giménez" <agi...@sy...> wrote: > El 02/11/2012 8:02, Stefan Hajnoczi escribió: >> Ping? > > Hi Stefan, > > I'm interested in helping with the driver code (or user-space > applications or wharever). > > Unfortunately, right now my Linux box is dead and I'm waiting for a > motherboard/CPU replacement. When i get everytning running up, I will be > able to test/help. > > By the way, what codebase are you currently working on? The official > kernel staging code? or do you use another personal repository? I write small changes against linux.git. For bigger changes I send patches against the subversion repo so Markus can review and send a pull request to Greg KH. > We may set up a github repository for the cleanup process. I think that > a lot of changes will be needed since the current code is quite old and > a lot of interfaces and kernel policies may have changed. The code builds against the latest linux.git so there is nothing terribly bitrotted. I think the next step is to ask the ALSA maintainers to review the code. It would be appropriate for Markus to make that request, since he's the maintainer. This is why I'm pinging him - I don't want to bypass him by making that request myself. > I'm *very* interested in setting up a DAW system in my Linux box using > my HD 500, so I could really help, but my knowledge on audio devices and > kernel developement is very limited. > > I can provide USB dumps (I have a Windows machine with the HD Edit > software installed), if we want to reverse engineer the application > protocol. Hopefully getting the HD500 working won't be too hard. Markus has written about USB capture here: http://www.tanzband-scream.at/line6/usblog.html (I have also had success with Windows running under KVM with Linux usbmon capture.) If you capture logs of a few common scenarios like plugging the device in, recording audio, and starting the HD Edit software, then it should be possible to figure out how to make the HD500 work. Stefan |
From: L. A. G. <agi...@sy...> - 2012-11-02 20:29:22
|
El 02/11/2012 8:02, Stefan Hajnoczi escribió: > Ping? Hi Stefan, I'm interested in helping with the driver code (or user-space applications or wharever). Unfortunately, right now my Linux box is dead and I'm waiting for a motherboard/CPU replacement. When i get everytning running up, I will be able to test/help. By the way, what codebase are you currently working on? The official kernel staging code? or do you use another personal repository? We may set up a github repository for the cleanup process. I think that a lot of changes will be needed since the current code is quite old and a lot of interfaces and kernel policies may have changed. I'm *very* interested in setting up a DAW system in my Linux box using my HD 500, so I could really help, but my knowledge on audio devices and kernel developement is very limited. I can provide USB dumps (I have a Windows machine with the HD Edit software installed), if we want to reverse engineer the application protocol. Regards! > > ------------------------------------------------------------------------------ > LogMeIn Central: Instant, anywhere, Remote PC access and management. > Stay in control, update software, and manage PCs from one command center > Diagnose problems and improve visibility into emerging IT issues > Automate, monitor and manage. Do more in less time with Central > http://p.sf.net/sfu/logmein12331_d2d > _______________________________________________ > Line6linux-devel mailing list > Lin...@li... > https://lists.sourceforge.net/lists/listinfo/line6linux-devel > |
From: Stefan H. <ste...@gm...> - 2012-11-02 07:02:31
|
Ping? |
From: Stefan H. <ste...@gm...> - 2012-10-15 19:21:52
|
I sent two small cleanup patches after skimming through the line6 code again. I'm really looking for what we need to do in order to move the driver out of staging. The benefit will be that Line 6 devices work out-of-the-box and no longer require users to compile kernel modules. Markus, can you send the code as-is to the ALSA maintainers Jaroslav Kysela <pe...@pe...> and Takashi Iwai <ti...@su...>, and Greg KH? Let's see if they are happy to move it to sound/usb/. I can help to address review comments. Once the driver is out of staging it will be available to a wider audience. It could encourage more people to contribute to the userspace tools. Stefan |
From: Stefan H. <ste...@gm...> - 2012-06-13 08:12:27
|
I don't own a POD HD500 but suggest taking it one step at a time, either audio capture or variax. If you have access to a Windows machine or virtual machine where you can capture USB traffic it should be much easier to understand how the driver needs to behave. Linux has the "usbmon" kernel module which works fine with KVM and probably VirtualBox. Perhaps the variax interface is simply a tunnel straight to the variax device. In other words, the POD doesn't interpret or change the data, it simply forwards it to the variax device. That's just a guess. Stefan |
From: Sébastien C. <nes...@gm...> - 2012-06-12 09:35:09
|
Hello there. First of I have to apologize for the previous spam my mail sended. That won't happen again. Then you'll find a patch for HD500. Unfortunatelly it doesn't make it fully work, but I think it get closer. There's 2 interfaces and that should work like PODXT Live : - An Isochronous interface (AUDIO): Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 1 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 3 Audio Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x002e 1x 46 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x86 EP 6 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x002e 1x 46 bytes bInterval 1 - A Bulk interface (VARIAX): Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 4 User Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1 With this patch I think I managed to make VARIAX one to work, but as I don't have a VARIAX guitar I can't tell. By the way, for people who has a VARIAX device working with this driver , what it is supposed to do ?: Does it creates an ALSA device (look like it) or is it DATA transfer only (commands for software + MIDI )? I didn't managed to get the Isochronous (AUDIO) interface up and running for now , but I'm on it. I get an -EINVAL on the usb_submit_urb function in line6_start_listen (driver.c:134). Here's what I get in the logs : Jun 8 12:30:26 NELL kernel: line6usb 5-2:1.0: Line6 POD HD500 found Jun 8 12:30:26 NELL kernel: line6usb 5-2:1.0: line6_probe: usb_submit_urb failed Jun 8 12:30:26 NELL kernel: line6usb: probe of 5-2:1.0 failed with error -22 Jun 8 12:30:26 NELL kernel: line6usb 5-2:1.1: Line6 POD HD500 found Jun 8 12:30:26 NELL kernel: line6usb 5-2:1.1: Line6 POD HD500 now attached Jun 8 12:30:26 NELL kernel: usbcore: registered new interface driver line6usb Jun 8 17:43:17 NELL kernel: line6usb 5-2:1.1: S0000: F0 7E 7F 06 01 F7 .~.... Jun 8 17:43:17 NELL kernel: line6usb 5-2:1.1: S0000: F0 7E 7F 06 01 F7 .~.... Jun 8 17:43:17 NELL kernel: line6usb 5-2:1.1: S0000: F0 7E 7F 06 01 F7 .~.... Jun 8 17:43:17 NELL kernel: line6usb 5-2:1.1: S0000: F0 7E 7F 06 01 F7 .~.... (...) Best Regards -- CAPOU Sébastien |
From: Georg C. <wil...@gm...> - 2012-01-11 14:05:53
|
*I installed openSUSE RC1 last November about, just before the last final version, and it picked up my Line 6 KB37 right away as far as MIDI Keyboard goes. My unit has two meters, only one lit up. I have a mid-2009 MacBook Pro I tried to do a PC-BSD full install, a openSUSE full install, and many others. Nothing worked 100%. I am in the hopes aptosid Linux or Knoppix will fly soon. I am tired of being stuck with Apple; I can not afford a new machine since I wound up totally disabled, and on disability now. The only thing holding me back is my dependence on Line6 KB37 to jive with Linux or FreeBSD. I do get a good install with Ubuntu, but the RAM limitations of Ubuntu cripple my 8 Gigs of RAM capability. I am not savvy on how to get Ubuntu to go past 2 or 3 Gigs of RAM? I prefer the Debian GNU Distro's. The MacBook is hard to do away with being so proprietary this and that. Anyway, check out the openSUSE for how they got their Distro to identify my KB37 right away during install, and 'mostly' have it serviceable. It might help you guys? It surprised me at first, I was not even done configuring, and openSUSE had my KB37 identified as such, and ready to go. I never tried the full features, because too many other issues like no lights on my keyboard, no camera, etc... I will try my Knoppix on my Virtual Box with your drivers, and see how it goes. If I was not poor now, I would send you guys money. Thanks for all you do, and know I appreciate your work! Sincerely, Georg Curnutt * -- Georg "WildeGeist" Curnutt P.O. Box 10001, PMB A-16 Saipan, MP 96950-8901 (USA) Phone (Moved, will have another soon) |
From: Markus G. <gr...@ic...> - 2012-01-10 23:34:44
|
On Friday 09 December 2011 09:31:59 Petter S. Storvik wrote: > :-) Now I can consider moving my "musicproduction" to linux, finally. Great to hear :-) I did some more changes in https://line6linux.svn.sourceforge.net/svnroot/line6linux/driver/branches/ux2 to avoid potential problems. Could you and Maciej please test the most recent version? Moreover, I have some ideas regarding the monitor volume and mixer control problems. I'll let you know when there is some new code, your help with testing this will be greatly appreciated! Thanks & kind regards, Markus -- Markus Grabner Institute for Computer Graphics and Vision Graz University of Technology, Inffeldgasse 16a/II, 8010 Graz, Austria WWW: http://www.icg.tugraz.at/Members/grabner |
From: Markus G. <gr...@ic...> - 2012-01-09 22:02:48
|
On Monday 09 January 2012 13:56:20 Пупков Евгений wrote: > Hello! > Thank you for so fast response! And shame on my Bachelor > of Physics, my mistake about 48 MHz made to laugh a lot!=) > > I've installed drivers from the location, that you gave. > But after that, connecting guitar port to a computer > leads system to kernel panic! =( If I try to boot with GP > connected, kernel panic occurs after log on. > I use Ubuntu Studio 11.10 x64 on Athlon X2 4400+ with 4GB > of memory. I just tried the two most recent revisions in the UX8 branch and got the following results: *) revision 849: correct playback with audacious, switching between 16 and 24 bits per sample works *) revision 914: no playback, but no kernel panic either I agree that there is definitely something wrong with the most recent version, which I believe could be fixed by merging in some changes done in a different branch. My recommendation is to use revision 849 to evaluate the 16/24 bits per sample and 44.1/48kHz sample rate settings until all relevant pieces have been merged. Can you please report how revision 849 works for you? Thanks & kind regards, Markus -- Markus Grabner Institute for Computer Graphics and Vision Graz University of Technology, Inffeldgasse 16a/II, 8010 Graz, Austria WWW: http://www.icg.tugraz.at/Members/grabner |
From: П. Е. <pup...@ng...> - 2012-01-09 06:56:30
|
Hello! Thank you for so fast response! And shame on my Bachelor of Physics, my mistake about 48 MHz made to laugh a lot!=) I've installed drivers from the location, that you gave. But after that, connecting guitar port to a computer leads system to kernel panic! =( If I try to boot with GP connected, kernel panic occurs after log on. I use Ubuntu Studio 11.10 x64 on Athlon X2 4400+ with 4GB of memory. |
From: Markus G. <gr...@ic...> - 2012-01-07 09:24:25
|
On Friday 06 January 2012 00:40:47 Пупков Евгений wrote: > Hello! My name is Eugeny, I'm from Novosibirsk, Siberia, > Russia. I'm a user of Line 6 GuitarPort in Ubuntu Studio > 11.10. It comes with line6usb module (0.9.1 beta). > Generally, it works fine, thank you for your work! With > It, I can easily play my guitar connected to guitarix via > Jack, and record some demo songs=) > But couple of days ago I decided to make some recordings > with better quality. So, I've just configured 48000 sample > rate instead of 44100 in qJackctl, wanted to setup 24bit > quality, but it doesn't work. qJackctl's indicator shows > 44100 sample rate, and ardour creates a session with the > same value. > > I've googled a lot, and found some information. > 1) In a driver manual I've found that native sample rate > of line6 devices is 39062,5 , and all conversions should > be done by either ALSA, or some software. But writing > plughw instead of hw made JACK not to start. That was probably written by me :-) As far as I know, It only refers to the POD devices before the X3. > 2) Here > https://sourceforge.net/projects/line6linux/forums/forum/713264/topic/227328 > 3 I've found that GuitarPort only supports 44100 and 16bit > sample rate. This topic is three years old, may be > situation has changed, I don't know... > 3) But in official GearBox recording manual I've found > that "TonePort and GuitarPort natively support 44100 and > 48000 Hz sample rates. They will > also support 88200 and 96000 Hz, but will perform a sample > rate conversion process to do so." I understand that this > manual is only for Mac and Windows users, but it gives me > a hope... > > My question is > Do the words in point 3 mean, that there is a hardware > support for 48000 Hz in GuitarPort? And if answer is > "yes", do you plan to make your driver work with GP on > this sample rate, or may be newer versions of driver > already support 48 MHz? I'm sorry, 48MHz won't ever be supported :-), but there is some experimental code for 48kHz support: https://line6linux.svn.sourceforge.net/svnroot/line6linux/driver/branches/ux8 The branch has been created for testing a UX8 implementation, but also has some other stuff, including the 48kHz support for some TonePort-like devices. The latest commit has not yet been tested, so you might have to revert to revision 849, but this is probably what you are looking for. Could you please test this version of the driver and provide feedback if it works for you? And may I ask you to do some additional testing once this branch has been merged back into the trunk (don't know when this will happen, though)? Thanks & kind regards, Markus -- Markus Grabner Institute for Computer Graphics and Vision Graz University of Technology, Inffeldgasse 16a/II, 8010 Graz, Austria WWW: http://www.icg.tugraz.at/Members/grabner |
From: П. Е. <pup...@ng...> - 2012-01-05 17:40:56
|
Hello! My name is Eugeny, I'm from Novosibirsk, Siberia, Russia. I'm a user of Line 6 GuitarPort in Ubuntu Studio 11.10. It comes with line6usb module (0.9.1 beta). Generally, it works fine, thank you for your work! With It, I can easily play my guitar connected to guitarix via Jack, and record some demo songs=) But couple of days ago I decided to make some recordings with better quality. So, I've just configured 48000 sample rate instead of 44100 in qJackctl, wanted to setup 24bit quality, but it doesn't work. qJackctl's indicator shows 44100 sample rate, and ardour creates a session with the same value. I've googled a lot, and found some information. 1) In a driver manual I've found that native sample rate of line6 devices is 39062,5 , and all conversions should be done by either ALSA, or some software. But writing plughw instead of hw made JACK not to start. 2) Here https://sourceforge.net/projects/line6linux/forums/forum/713264/topic/2273283 I've found that GuitarPort only supports 44100 and 16bit sample rate. This topic is three years old, may be situation has changed, I don't know... 3) But in official GearBox recording manual I've found that "TonePort and GuitarPort natively support 44100 and 48000 Hz sample rates. They will also support 88200 and 96000 Hz, but will perform a sample rate conversion process to do so." I understand that this manual is only for Mac and Windows users, but it gives me a hope... My question is Do the words in point 3 mean, that there is a hardware support for 48000 Hz in GuitarPort? And if answer is "yes", do you plan to make your driver work with GP on this sample rate, or may be newer versions of driver already support 48 MHz? In any case, thank you very much! Your driver became a last drop for me to finally migrate to linux from windows in all my music and home needs! =) |
From: Maciej Ł. <loz...@o2...> - 2011-12-11 12:36:08
|
W dniu 10.12.2011 22:08, Markus Grabner pisze: > On Saturday 10 December 2011 10:52:10 Maciej Łoziński wrote: >> It works great for ma as well :-) Thank you guys, I've been waiting for >> this for two years, since I bought my UX2 ;-) >> >> I think that something should be done with the gnome-alsamixer. It >> displays TonePort controls badly. I attach a screenshot. There is no >> card's name displayed and input selection also isn't working. Do you >> think it's gnome-alsamixer problem or line6usb problem? > Let's first see what ALSA reports. Could you please run the following commands > (with the UX2 connected and switched on): > 1.) "export LANG=C" (to switch the current shell session to English) > 2.) "aplay -l" > 3.) "amixer -c<CARD>" > > where<CARD> in 3.) should be replaced by the UX2 card number as reported by > 2.) Then please post the output of command 3. > > Thanks& kind regards, > Markus > Ok, here it is: Simple mixer control 'PCM',0 Capabilities: pvolume penum Playback channels: Front Left - Front Right Limits: Playback 0 - 256 Mono: Front Left: Playback 256 [100%] Front Right: Playback 256 [100%] Simple mixer control 'PCM Capture Source',0 Capabilities: enum Items: 'Microphone' 'Line' 'Instrument' 'Inst & Mic' Item0: 'Microphone' Simple mixer control 'Monitor',0 Capabilities: pvolume pvolume-joined penum Playback channels: Mono Limits: Playback 0 - 256 Mono: Playback 255 [100%] Maciek |
From: Markus G. <gr...@ic...> - 2011-12-10 21:08:40
|
On Saturday 10 December 2011 10:52:10 Maciej Łoziński wrote: > W dniu 09.12.2011 09:31, Petter S. Storvik pisze: > > I have installed the newest version in the branch/ux2 now, and I am > > happy to say; It worked! I got no error when I started up with the > > device plugged in, and I was able to record my guitar. First with just > > audacity, but also with Jack, Ardour and Rakarrack. Great work guys :-D > > Happy to see that the community makes it work without line6!! One > > problem tough.. My monitor works just on the right side, and the sund is > > NOT very good. But I "fixed" this with turning monitor all the way down > > in alsamixer, and then use jack to route back after recording/rakarrack. > > So for me this doesnt matter. I also have two playback in jack, instead > > of four that I had before, but I really dont know what the last two > > was.. I'm just happy everything works :-) Now I can consider moving my > > "musicproduction" to linux, finally. > > It works great for ma as well :-) Thank you guys, I've been waiting for > this for two years, since I bought my UX2 ;-) > > I think that something should be done with the gnome-alsamixer. It > displays TonePort controls badly. I attach a screenshot. There is no > card's name displayed and input selection also isn't working. Do you > think it's gnome-alsamixer problem or line6usb problem? Let's first see what ALSA reports. Could you please run the following commands (with the UX2 connected and switched on): 1.) "export LANG=C" (to switch the current shell session to English) 2.) "aplay -l" 3.) "amixer -c <CARD>" where <CARD> in 3.) should be replaced by the UX2 card number as reported by 2.) Then please post the output of command 3. Thanks & kind regards, Markus -- Markus Grabner Institute for Computer Graphics and Vision Graz University of Technology, Inffeldgasse 16a/II, 8010 Graz, Austria WWW: http://www.icg.tugraz.at/Members/grabner |
From: Maciej Ł. <loz...@o2...> - 2011-12-10 09:52:21
|
W dniu 09.12.2011 09:31, Petter S. Storvik pisze: > I have installed the newest version in the branch/ux2 now, and I am > happy to say; It worked! I got no error when I started up with the > device plugged in, and I was able to record my guitar. First with just > audacity, but also with Jack, Ardour and Rakarrack. Great work guys :-D > Happy to see that the community makes it work without line6!! One > problem tough.. My monitor works just on the right side, and the sund is > NOT very good. But I "fixed" this with turning monitor all the way down > in alsamixer, and then use jack to route back after recording/rakarrack. > So for me this doesnt matter. I also have two playback in jack, instead > of four that I had before, but I really dont know what the last two > was.. I'm just happy everything works :-) Now I can consider moving my > "musicproduction" to linux, finally. > It works great for ma as well :-) Thank you guys, I've been waiting for this for two years, since I bought my UX2 ;-) I think that something should be done with the gnome-alsamixer. It displays TonePort controls badly. I attach a screenshot. There is no card's name displayed and input selection also isn't working. Do you think it's gnome-alsamixer problem or line6usb problem? cheers Maciek |
From: Petter S. S. <pet...@gm...> - 2011-12-09 08:32:05
|
I have installed the newest version in the branch/ux2 now, and I am happy to say; It worked! I got no error when I started up with the device plugged in, and I was able to record my guitar. First with just audacity, but also with Jack, Ardour and Rakarrack. Great work guys :-D Happy to see that the community makes it work without line6!! One problem tough.. My monitor works just on the right side, and the sund is NOT very good. But I "fixed" this with turning monitor all the way down in alsamixer, and then use jack to route back after recording/rakarrack. So for me this doesnt matter. I also have two playback in jack, instead of four that I had before, but I really dont know what the last two was.. I'm just happy everything works :-) Now I can consider moving my "musicproduction" to linux, finally. 2011/12/9 Stefan Hajnoczi <ste...@gm...> > On Fri, Dec 9, 2011 at 1:36 AM, Markus Grabner <gr...@ic...> > wrote: > > On Thursday 08 December 2011 20:48:02 Stefan Hajnoczi wrote: > >> On Thu, Dec 8, 2011 at 4:44 PM, Petter S. Storvik > >> > >> <pet...@gm...> wrote: > >> > One more thing is; I cant start up computer if device is plugged in. > Some > >> > sort of error and it goes to text-mode, and then I have to restart > >> > without the device. But all seems right if I plug it in after startup. > >> > >> This sounds like a kernel panic which can happen if an unexpected > >> error occurs when the driver is running. There is typically a lot of > >> text on the screen and it can contain information that allows > >> developers to fix the bug that caused the panic. If you have a camera > >> on your phone or digital camera, would you be able to capture the > >> error screen? > >> > >> I'm guessing that the kernel panic has nothing to do with recording > >> not working, they are probably different issues but there's a chance > >> they are related. > > Yes, indeed, someone recently moved the buffer allocation from > > line6_pcm_start() to snd_line6_[capture|playback]_hw_params :-) However, > when > > a TonePort device is plugged in, the driver launches a PCM capture and > > playback stream to provide a software monitor. This is not related to > ALSA and > > therefore bypasses ALSA initialization, thus trying to access a buffer > via a > > pointer which is still null, resulting in the kernel panic. > > My bad, sorry for the breakage. > > Stefan > -- Petter Sakrihei Storvik Ω |
From: Stefan H. <ste...@gm...> - 2011-12-09 06:25:30
|
On Fri, Dec 9, 2011 at 1:36 AM, Markus Grabner <gr...@ic...> wrote: > On Thursday 08 December 2011 20:48:02 Stefan Hajnoczi wrote: >> On Thu, Dec 8, 2011 at 4:44 PM, Petter S. Storvik >> >> <pet...@gm...> wrote: >> > One more thing is; I cant start up computer if device is plugged in. Some >> > sort of error and it goes to text-mode, and then I have to restart >> > without the device. But all seems right if I plug it in after startup. >> >> This sounds like a kernel panic which can happen if an unexpected >> error occurs when the driver is running. There is typically a lot of >> text on the screen and it can contain information that allows >> developers to fix the bug that caused the panic. If you have a camera >> on your phone or digital camera, would you be able to capture the >> error screen? >> >> I'm guessing that the kernel panic has nothing to do with recording >> not working, they are probably different issues but there's a chance >> they are related. > Yes, indeed, someone recently moved the buffer allocation from > line6_pcm_start() to snd_line6_[capture|playback]_hw_params :-) However, when > a TonePort device is plugged in, the driver launches a PCM capture and > playback stream to provide a software monitor. This is not related to ALSA and > therefore bypasses ALSA initialization, thus trying to access a buffer via a > pointer which is still null, resulting in the kernel panic. My bad, sorry for the breakage. Stefan |
From: Markus G. <gr...@ic...> - 2011-12-09 01:36:20
|
On Thursday 08 December 2011 20:48:02 Stefan Hajnoczi wrote: > On Thu, Dec 8, 2011 at 4:44 PM, Petter S. Storvik > > <pet...@gm...> wrote: > > One more thing is; I cant start up computer if device is plugged in. Some > > sort of error and it goes to text-mode, and then I have to restart > > without the device. But all seems right if I plug it in after startup. > > This sounds like a kernel panic which can happen if an unexpected > error occurs when the driver is running. There is typically a lot of > text on the screen and it can contain information that allows > developers to fix the bug that caused the panic. If you have a camera > on your phone or digital camera, would you be able to capture the > error screen? > > I'm guessing that the kernel panic has nothing to do with recording > not working, they are probably different issues but there's a chance > they are related. Yes, indeed, someone recently moved the buffer allocation from line6_pcm_start() to snd_line6_[capture|playback]_hw_params :-) However, when a TonePort device is plugged in, the driver launches a PCM capture and playback stream to provide a software monitor. This is not related to ALSA and therefore bypasses ALSA initialization, thus trying to access a buffer via a pointer which is still null, resulting in the kernel panic. I fixed it in the subversion repository and sent the patch to the kernel maintainer. @Petter: could you please try again with the most recent version from branches/ux2? Kind regards, Markus -- Markus Grabner Institute for Computer Graphics and Vision Graz University of Technology, Inffeldgasse 16a/II, 8010 Graz, Austria WWW: http://www.icg.tugraz.at/Members/grabner |