diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-01-30 12:15:55 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-01-30 12:15:55 +0100 |
commit | 6eb3db91f2b68cbbcc1b4256333dc683afb54a73 (patch) | |
tree | 0b8fec47c5f66b1bd54e7e15de618698d69123af /sound/usb | |
parent | d832f3dcb6e2d153fbb69b91931058d138bc41cb (diff) | |
parent | 1263f61179821df60cca4bccdb69e2f71fdebaa7 (diff) | |
download | linux-6eb3db91f2b68cbbcc1b4256333dc683afb54a73.tar.bz2 |
Merge branch 'topic/line6' into for-next
Diffstat (limited to 'sound/usb')
-rw-r--r-- | sound/usb/line6/capture.c | 5 | ||||
-rw-r--r-- | sound/usb/line6/driver.c | 4 | ||||
-rw-r--r-- | sound/usb/line6/driver.h | 89 | ||||
-rw-r--r-- | sound/usb/line6/midi.c | 1 | ||||
-rw-r--r-- | sound/usb/line6/midi.h | 32 | ||||
-rw-r--r-- | sound/usb/line6/pcm.h | 57 | ||||
-rw-r--r-- | sound/usb/line6/playback.c | 34 | ||||
-rw-r--r-- | sound/usb/line6/pod.c | 39 | ||||
-rw-r--r-- | sound/usb/line6/podhd.c | 16 | ||||
-rw-r--r-- | sound/usb/line6/revision.h | 4 | ||||
-rw-r--r-- | sound/usb/line6/toneport.c | 31 | ||||
-rw-r--r-- | sound/usb/line6/usbdefs.h | 27 | ||||
-rw-r--r-- | sound/usb/line6/variax.c | 25 |
13 files changed, 114 insertions, 250 deletions
diff --git a/sound/usb/line6/capture.c b/sound/usb/line6/capture.c index 4183c5f5edc2..f518fbbe88de 100644 --- a/sound/usb/line6/capture.c +++ b/sound/usb/line6/capture.c @@ -216,12 +216,11 @@ static int snd_line6_capture_open(struct snd_pcm_substream *substream) err = snd_pcm_hw_constraint_ratdens(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, - (&line6pcm-> - properties->snd_line6_rates)); + &line6pcm->properties->rates); if (err < 0) return err; - runtime->hw = line6pcm->properties->snd_line6_capture_hw; + runtime->hw = line6pcm->properties->capture_hw; return 0; } diff --git a/sound/usb/line6/driver.c b/sound/usb/line6/driver.c index a0436993a167..2328ec9a1ca8 100644 --- a/sound/usb/line6/driver.c +++ b/sound/usb/line6/driver.c @@ -22,8 +22,6 @@ #include "driver.h" #include "midi.h" #include "playback.h" -#include "revision.h" -#include "usbdefs.h" #define DRIVER_AUTHOR "Markus Grabner <grabner@icg.tugraz.at>" #define DRIVER_DESC "Line 6 USB Driver" @@ -44,7 +42,7 @@ static const char line6_request_version[] = { 0xf0, 0x7e, 0x7f, 0x06, 0x01, 0xf7 }; -/** +/* Class for asynchronous messages. */ struct message { diff --git a/sound/usb/line6/driver.h b/sound/usb/line6/driver.h index fce10f12f0d3..fa877a345860 100644 --- a/sound/usb/line6/driver.h +++ b/sound/usb/line6/driver.h @@ -20,6 +20,12 @@ #define DRIVER_NAME "line6usb" +#define USB_INTERVALS_PER_SECOND 1000 + +/* Fallback USB interval and max packet size values */ +#define LINE6_FALLBACK_INTERVAL 10 +#define LINE6_FALLBACK_MAXPACKETSIZE 16 + #define LINE6_TIMEOUT 1 #define LINE6_BUFSIZE_LISTEN 32 #define LINE6_MESSAGE_MAXLEN 256 @@ -60,26 +66,20 @@ extern const unsigned char line6_midi_id[3]; static const int SYSEX_DATA_OFS = sizeof(line6_midi_id) + 3; static const int SYSEX_EXTRA_SIZE = sizeof(line6_midi_id) + 4; -/** +/* Common properties of Line 6 devices. */ struct line6_properties { - /** - Card id string (maximum 16 characters). - This can be used to address the device in ALSA programs as - "default:CARD=<id>" - */ + /* Card id string (maximum 16 characters). + * This can be used to address the device in ALSA programs as + * "default:CARD=<id>" + */ const char *id; - /** - Card short name (maximum 32 characters). - */ + /* Card short name (maximum 32 characters) */ const char *name; - /** - Bit vector defining this device's capabilities in the - line6usb driver. - */ + /* Bit vector defining this device's capabilities in line6usb driver */ int capabilities; int altsetting; @@ -90,70 +90,57 @@ struct line6_properties { unsigned ep_audio_w; }; -/** +/* Capability bits */ +enum { + /* device supports settings parameter via USB */ + LINE6_CAP_CONTROL = 1 << 0, + /* device supports PCM input/output via USB */ + LINE6_CAP_PCM = 1 << 1, + /* device support hardware monitoring */ + LINE6_CAP_HWMON = 1 << 2, +}; + +/* Common data shared by all Line 6 devices. Corresponds to a pair of USB endpoints. */ struct usb_line6 { - /** - USB device. - */ + /* USB device */ struct usb_device *usbdev; - /** - Properties. - */ + /* Properties */ const struct line6_properties *properties; - /** - Interval (ms). - */ + /* Interval (ms) */ int interval; - /** - Maximum size of USB packet. - */ + /* Maximum size of USB packet */ int max_packet_size; - /** - Device representing the USB interface. - */ + /* Device representing the USB interface */ struct device *ifcdev; - /** - Line 6 sound card data structure. - Each device has at least MIDI or PCM. - */ + /* Line 6 sound card data structure. + * Each device has at least MIDI or PCM. + */ struct snd_card *card; - /** - Line 6 PCM device data structure. - */ + /* Line 6 PCM device data structure */ struct snd_line6_pcm *line6pcm; - /** - Line 6 MIDI device data structure. - */ + /* Line 6 MIDI device data structure */ struct snd_line6_midi *line6midi; - /** - URB for listening to PODxt Pro control endpoint. - */ + /* URB for listening to PODxt Pro control endpoint */ struct urb *urb_listen; - /** - Buffer for listening to PODxt Pro control endpoint. - */ + /* Buffer for listening to PODxt Pro control endpoint */ unsigned char *buffer_listen; - /** - Buffer for message to be processed. - */ + /* Buffer for message to be processed */ unsigned char *buffer_message; - /** - Length of message to be processed. - */ + /* Length of message to be processed */ int message_length; void (*process_message)(struct usb_line6 *); diff --git a/sound/usb/line6/midi.c b/sound/usb/line6/midi.c index beeedf9a2cbe..cebea9b7f769 100644 --- a/sound/usb/line6/midi.c +++ b/sound/usb/line6/midi.c @@ -17,7 +17,6 @@ #include "driver.h" #include "midi.h" -#include "usbdefs.h" #define line6_rawmidi_substream_midi(substream) \ ((struct snd_line6_midi *)((substream)->rmidi->private_data)) diff --git a/sound/usb/line6/midi.h b/sound/usb/line6/midi.h index 9d9467b2613c..cf82d69e2747 100644 --- a/sound/usb/line6/midi.h +++ b/sound/usb/line6/midi.h @@ -19,44 +19,28 @@ #define MIDI_BUFFER_SIZE 1024 struct snd_line6_midi { - /** - Pointer back to the Line 6 driver data structure. - */ + /* Pointer back to the Line 6 driver data structure */ struct usb_line6 *line6; - /** - MIDI substream for receiving (or NULL if not active). - */ + /* MIDI substream for receiving (or NULL if not active) */ struct snd_rawmidi_substream *substream_receive; - /** - MIDI substream for transmitting (or NULL if not active). - */ + /* MIDI substream for transmitting (or NULL if not active) */ struct snd_rawmidi_substream *substream_transmit; - /** - Number of currently active MIDI send URBs. - */ + /* Number of currently active MIDI send URBs */ int num_active_send_urbs; - /** - Spin lock to protect MIDI buffer handling. - */ + /* Spin lock to protect MIDI buffer handling */ spinlock_t lock; - /** - Wait queue for MIDI transmission. - */ + /* Wait queue for MIDI transmission */ wait_queue_head_t send_wait; - /** - Buffer for incoming MIDI stream. - */ + /* Buffer for incoming MIDI stream */ struct midi_buffer midibuf_in; - /** - Buffer for outgoing MIDI stream. - */ + /* Buffer for outgoing MIDI stream */ struct midi_buffer midibuf_out; }; diff --git a/sound/usb/line6/pcm.h b/sound/usb/line6/pcm.h index 42d3e6fc2c61..508410adbd51 100644 --- a/sound/usb/line6/pcm.h +++ b/sound/usb/line6/pcm.h @@ -19,7 +19,6 @@ #include <sound/pcm.h> #include "driver.h" -#include "usbdefs.h" /* number of URBs */ #define LINE6_ISO_BUFFERS 2 @@ -66,8 +65,8 @@ the running flag indicates whether the stream is running. For monitor or impulse operations, the driver needs to call - snd_line6_duplex_acquire() or snd_line6_duplex_release() with the - appropriate LINE6_STREAM_* flag. + line6_pcm_acquire() or line6_pcm_release() with the appropriate + LINE6_STREAM_* flag. */ /* stream types */ @@ -84,8 +83,8 @@ enum { }; struct line6_pcm_properties { - struct snd_pcm_hardware snd_line6_playback_hw, snd_line6_capture_hw; - struct snd_pcm_hw_constraint_ratdens snd_line6_rates; + struct snd_pcm_hardware playback_hw, capture_hw; + struct snd_pcm_hw_constraint_ratdens rates; int bytes_per_frame; }; @@ -139,19 +138,13 @@ struct line6_pcm_stream { }; struct snd_line6_pcm { - /** - Pointer back to the Line 6 driver data structure. - */ + /* Pointer back to the Line 6 driver data structure */ struct usb_line6 *line6; - /** - Properties. - */ + /* Properties. */ struct line6_pcm_properties *properties; - /** - ALSA pcm stream - */ + /* ALSA pcm stream */ struct snd_pcm *pcm; /* protection to state changes of in/out streams */ @@ -161,49 +154,31 @@ struct snd_line6_pcm { struct line6_pcm_stream in; struct line6_pcm_stream out; - /** - Previously captured frame (for software monitoring). - */ + /* Previously captured frame (for software monitoring) */ unsigned char *prev_fbuf; - /** - Size of previously captured frame (for software monitoring). - */ + /* Size of previously captured frame (for software monitoring) */ int prev_fsize; - /** - Maximum size of USB packet. - */ + /* Maximum size of USB packet */ int max_packet_size; - /** - PCM playback volume (left and right). - */ + /* PCM playback volume (left and right) */ int volume_playback[2]; - /** - PCM monitor volume. - */ + /* PCM monitor volume */ int volume_monitor; - /** - Volume of impulse response test signal (if zero, test is disabled). - */ + /* Volume of impulse response test signal (if zero, test is disabled) */ int impulse_volume; - /** - Period of impulse response test signal. - */ + /* Period of impulse response test signal */ int impulse_period; - /** - Counter for impulse response test signal. - */ + /* Counter for impulse response test signal */ int impulse_count; - /** - Several status bits (see LINE6_FLAG_*). - */ + /* Several status bits (see LINE6_FLAG_*) */ unsigned long flags; }; diff --git a/sound/usb/line6/playback.c b/sound/usb/line6/playback.c index 1708c05f14db..05dee690f487 100644 --- a/sound/usb/line6/playback.c +++ b/sound/usb/line6/playback.c @@ -31,14 +31,16 @@ static void change_volume(struct urb *urb_out, int volume[], return; /* maximum volume - no change */ if (bytes_per_frame == 4) { - short *p, *buf_end; + __le16 *p, *buf_end; - p = (short *)urb_out->transfer_buffer; + p = (__le16 *)urb_out->transfer_buffer; buf_end = p + urb_out->transfer_buffer_length / sizeof(*p); for (; p < buf_end; ++p) { - int val = (*p * volume[chn & 1]) >> 8; - *p = clamp(val, 0x7fff, -0x8000); + short pv = le16_to_cpu(*p); + int val = (pv * volume[chn & 1]) >> 8; + pv = clamp(val, 0x7fff, -0x8000); + *p = cpu_to_le16(pv); ++chn; } } else if (bytes_per_frame == 6) { @@ -114,15 +116,18 @@ static void add_monitor_signal(struct urb *urb_out, unsigned char *signal, return; /* zero volume - no change */ if (bytes_per_frame == 4) { - short *pi, *po, *buf_end; + __le16 *pi, *po, *buf_end; - pi = (short *)signal; - po = (short *)urb_out->transfer_buffer; + pi = (__le16 *)signal; + po = (__le16 *)urb_out->transfer_buffer; buf_end = po + urb_out->transfer_buffer_length / sizeof(*po); for (; po < buf_end; ++pi, ++po) { - int val = *po + ((*pi * volume) >> 8); - *po = clamp(val, 0x7fff, -0x8000); + short pov = le16_to_cpu(*po); + short piv = le16_to_cpu(*pi); + int val = pov + ((piv * volume) >> 8); + pov = clamp(val, 0x7fff, -0x8000); + *po = cpu_to_le16(pov); } } @@ -143,10 +148,10 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm) int ret; const int bytes_per_frame = line6pcm->properties->bytes_per_frame; const int frame_increment = - line6pcm->properties->snd_line6_rates.rats[0].num_min; + line6pcm->properties->rates.rats[0].num_min; const int frame_factor = - line6pcm->properties->snd_line6_rates.rats[0].den * - (USB_INTERVALS_PER_SECOND / LINE6_ISO_INTERVAL); + line6pcm->properties->rates.rats[0].den * + (USB_INTERVALS_PER_SECOND / LINE6_ISO_INTERVAL); struct urb *urb_out; index = @@ -365,12 +370,11 @@ static int snd_line6_playback_open(struct snd_pcm_substream *substream) 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)); + &line6pcm->properties->rates); if (err < 0) return err; - runtime->hw = line6pcm->properties->snd_line6_playback_hw; + runtime->hw = line6pcm->properties->playback_hw; return 0; } diff --git a/sound/usb/line6/pod.c b/sound/usb/line6/pod.c index 6f7cd585f2d8..61aadd7d4b7f 100644 --- a/sound/usb/line6/pod.c +++ b/sound/usb/line6/pod.c @@ -21,7 +21,6 @@ #include "capture.h" #include "driver.h" #include "playback.h" -#include "usbdefs.h" /* Locate name in binary program dump @@ -58,44 +57,28 @@ enum { }; struct usb_line6_pod { - /** - Generic Line 6 USB data. - */ + /* Generic Line 6 USB data */ struct usb_line6 line6; - /** - Instrument monitor level. - */ + /* Instrument monitor level */ int monitor_level; - /** - Timer for device initializaton. - */ + /* Timer for device initialization */ struct timer_list startup_timer; - /** - Work handler for device initializaton. - */ + /* Work handler for device initialization */ struct work_struct startup_work; - /** - Current progress in startup procedure. - */ + /* Current progress in startup procedure */ int startup_progress; - /** - Serial number of device. - */ + /* Serial number of device */ int serial_number; - /** - Firmware version (x 100). - */ + /* Firmware version (x 100) */ int firmware_version; - /** - Device ID. - */ + /* Device ID */ int device_id; }; @@ -146,7 +129,7 @@ static struct snd_ratden pod_ratden = { }; static struct line6_pcm_properties pod_pcm_properties = { - .snd_line6_playback_hw = { + .playback_hw = { .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -164,7 +147,7 @@ static struct line6_pcm_properties pod_pcm_properties = { .period_bytes_max = 8192, .periods_min = 1, .periods_max = 1024}, - .snd_line6_capture_hw = { + .capture_hw = { .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -181,7 +164,7 @@ static struct line6_pcm_properties pod_pcm_properties = { .period_bytes_max = 8192, .periods_min = 1, .periods_max = 1024}, - .snd_line6_rates = { + .rates = { .nrats = 1, .rats = &pod_ratden}, .bytes_per_frame = POD_BYTES_PER_FRAME diff --git a/sound/usb/line6/podhd.c b/sound/usb/line6/podhd.c index 43c39886597e..9c3c7441fd11 100644 --- a/sound/usb/line6/podhd.c +++ b/sound/usb/line6/podhd.c @@ -17,7 +17,6 @@ #include "driver.h" #include "pcm.h" -#include "usbdefs.h" enum { LINE6_PODHD300, @@ -26,13 +25,6 @@ enum { LINE6_PODHD500_1, }; -struct usb_line6_podhd { - /** - Generic Line 6 USB data. - */ - struct usb_line6 line6; -}; - #define PODHD_BYTES_PER_FRAME 6 /* 24bit audio (stereo) */ static struct snd_ratden podhd_ratden = { @@ -43,7 +35,7 @@ static struct snd_ratden podhd_ratden = { }; static struct line6_pcm_properties podhd_pcm_properties = { - .snd_line6_playback_hw = { + .playback_hw = { .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -61,7 +53,7 @@ static struct line6_pcm_properties podhd_pcm_properties = { .period_bytes_max = 8192, .periods_min = 1, .periods_max = 1024}, - .snd_line6_capture_hw = { + .capture_hw = { .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -78,7 +70,7 @@ static struct line6_pcm_properties podhd_pcm_properties = { .period_bytes_max = 8192, .periods_min = 1, .periods_max = 1024}, - .snd_line6_rates = { + .rates = { .nrats = 1, .rats = &podhd_ratden}, .bytes_per_frame = PODHD_BYTES_PER_FRAME @@ -179,7 +171,7 @@ static int podhd_probe(struct usb_interface *interface, { return line6_probe(interface, id, &podhd_properties_table[id->driver_info], - podhd_init, sizeof(struct usb_line6_podhd)); + podhd_init, sizeof(struct usb_line6)); } static struct usb_driver podhd_driver = { diff --git a/sound/usb/line6/revision.h b/sound/usb/line6/revision.h deleted file mode 100644 index b4eee2b73831..000000000000 --- a/sound/usb/line6/revision.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef DRIVER_REVISION -/* current subversion revision */ -#define DRIVER_REVISION " (904)" -#endif diff --git a/sound/usb/line6/toneport.c b/sound/usb/line6/toneport.c index 819e06b3f3db..b107cf481819 100644 --- a/sound/usb/line6/toneport.c +++ b/sound/usb/line6/toneport.c @@ -21,7 +21,6 @@ #include "capture.h" #include "driver.h" #include "playback.h" -#include "usbdefs.h" enum line6_device_type { LINE6_GUITARPORT, @@ -43,34 +42,22 @@ struct toneport_led { }; struct usb_line6_toneport { - /** - Generic Line 6 USB data. - */ + /* Generic Line 6 USB data */ struct usb_line6 line6; - /** - Source selector. - */ + /* Source selector */ int source; - /** - Serial number of device. - */ + /* Serial number of device */ int serial_number; - /** - Firmware version (x 100). - */ + /* Firmware version (x 100) */ int firmware_version; - /** - Timer for delayed PCM startup. - */ + /* Timer for delayed PCM startup */ struct timer_list timer; - /** - Device type. - */ + /* Device type */ enum line6_device_type type; /* LED instances */ @@ -89,7 +76,7 @@ static struct snd_ratden toneport_ratden = { }; static struct line6_pcm_properties toneport_pcm_properties = { - .snd_line6_playback_hw = { + .playback_hw = { .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -107,7 +94,7 @@ static struct line6_pcm_properties toneport_pcm_properties = { .period_bytes_max = 8192, .periods_min = 1, .periods_max = 1024}, - .snd_line6_capture_hw = { + .capture_hw = { .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -124,7 +111,7 @@ static struct line6_pcm_properties toneport_pcm_properties = { .period_bytes_max = 8192, .periods_min = 1, .periods_max = 1024}, - .snd_line6_rates = { + .rates = { .nrats = 1, .rats = &toneport_ratden}, .bytes_per_frame = 4 diff --git a/sound/usb/line6/usbdefs.h b/sound/usb/line6/usbdefs.h deleted file mode 100644 index 5ef7bcd24e18..000000000000 --- a/sound/usb/line6/usbdefs.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Line 6 Linux USB driver - * - * Copyright (C) 2005-2008 Markus Grabner (grabner@icg.tugraz.at) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation, version 2. - * - */ - -#ifndef USBDEFS_H -#define USBDEFS_H - -#define USB_INTERVALS_PER_SECOND 1000 - -/* device supports settings parameter via USB */ -#define LINE6_CAP_CONTROL (1 << 0) -/* device supports PCM input/output via USB */ -#define LINE6_CAP_PCM (1 << 1) -/* device support hardware monitoring */ -#define LINE6_CAP_HWMON (1 << 2) - -#define LINE6_FALLBACK_INTERVAL 10 -#define LINE6_FALLBACK_MAXPACKETSIZE 16 - -#endif diff --git a/sound/usb/line6/variax.c b/sound/usb/line6/variax.c index 9701ffa61365..b1c1de65d584 100644 --- a/sound/usb/line6/variax.c +++ b/sound/usb/line6/variax.c @@ -17,7 +17,6 @@ #include <sound/core.h> #include "driver.h" -#include "usbdefs.h" #define VARIAX_STARTUP_DELAY1 1000 #define VARIAX_STARTUP_DELAY3 100 @@ -42,30 +41,20 @@ enum { }; struct usb_line6_variax { - /** - Generic Line 6 USB data. - */ + /* Generic Line 6 USB data */ struct usb_line6 line6; - /** - Buffer for activation code. - */ + /* Buffer for activation code */ unsigned char *buffer_activate; - /** - Handler for device initializaton. - */ + /* Handler for device initialization */ struct work_struct startup_work; - /** - Timers for device initializaton. - */ + /* Timers for device initialization */ struct timer_list startup_timer1; struct timer_list startup_timer2; - /** - Current progress in startup procedure. - */ + /* Current progress in startup procedure */ int startup_progress; }; @@ -270,9 +259,7 @@ static const struct line6_properties variax_properties_table[] = { [LINE6_PODXTLIVE_VARIAX] = { .id = "PODxtLive", .name = "PODxt Live", - .capabilities = LINE6_CAP_CONTROL - | LINE6_CAP_PCM - | LINE6_CAP_HWMON, + .capabilities = LINE6_CAP_CONTROL, .altsetting = 1, .ep_ctrl_r = 0x86, .ep_ctrl_w = 0x05, |