]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ALSA: usb-audio: Fix audio output on Roland SC-D70 sound module
authorTakamichi Horikawa <takamichiho@gmail.com>
Tue, 21 Apr 2015 02:23:57 +0000 (11:23 +0900)
committerTakashi Iwai <tiwai@suse.de>
Tue, 21 Apr 2015 05:59:10 +0000 (07:59 +0200)
Roland SC-D70 reports its device class as vendor specific class and
the quirk QUIRK_AUDIO_FIXED_ENDPOINT was used for audio output.

In the quirks table the sampling rate was hard-coded to 44100 Hz
and therefore not worked when the sound module was in 48000 Hz mode.

In this change the quirk is changed to QUIRK_AUDIO_STANDARD_INTERFACE
but as the sound module reports incorrect bSubframeSize in its
descriptors, additional change is made in format.c to detect it and
to override it (which uses the existing code for Edirol SD-90).

Tested both when the sound module was in 44100 Hz mode and 48000 Hz
mode and both audio input and output. MIDI related part of the driver
is not touched.

Signed-off-by: Takamichi Horikawa <takamichiho@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/format.c
sound/usb/quirks-table.h

index 8bcc87cf5667efbebc164e000f07cae23fc2a4c2..789d19ec035daf4aab2e2094d1952be71e25f822 100644 (file)
@@ -79,7 +79,10 @@ static u64 parse_audio_format_i_type(struct snd_usb_audio *chip,
                format = 1 << UAC_FORMAT_TYPE_I_PCM;
        }
        if (format & (1 << UAC_FORMAT_TYPE_I_PCM)) {
-               if (chip->usb_id == USB_ID(0x0582, 0x0016) /* Edirol SD-90 */ &&
+               if (((chip->usb_id == USB_ID(0x0582, 0x0016)) ||
+                    /* Edirol SD-90 */
+                    (chip->usb_id == USB_ID(0x0582, 0x000c))) &&
+                    /* Roland SC-D70 */
                    sample_width == 24 && sample_bytes == 2)
                        sample_bytes = 3;
                else if (sample_width > sample_bytes * 8) {
index 07f984d5f5162809ee6124f651585df5c3a4496f..2f6d3e9a1bcd0144cf81d77f3ec085af3984d07e 100644 (file)
@@ -816,37 +816,11 @@ YAMAHA_DEVICE(0x7010, "UB99"),
                .data = (const struct snd_usb_audio_quirk[]) {
                        {
                                .ifnum = 0,
-                               .type = QUIRK_AUDIO_FIXED_ENDPOINT,
-                               .data = & (const struct audioformat) {
-                                       .formats = SNDRV_PCM_FMTBIT_S24_3LE,
-                                       .channels = 2,
-                                       .iface = 0,
-                                       .altsetting = 1,
-                                       .altset_idx = 1,
-                                       .attributes = 0,
-                                       .endpoint = 0x01,
-                                       .ep_attr = 0x01,
-                                       .rates = SNDRV_PCM_RATE_CONTINUOUS,
-                                       .rate_min = 44100,
-                                       .rate_max = 44100,
-                               }
+                               .type = QUIRK_AUDIO_STANDARD_INTERFACE
                        },
                        {
                                .ifnum = 1,
-                               .type = QUIRK_AUDIO_FIXED_ENDPOINT,
-                               .data = & (const struct audioformat) {
-                                       .formats = SNDRV_PCM_FMTBIT_S24_3LE,
-                                       .channels = 2,
-                                       .iface = 1,
-                                       .altsetting = 1,
-                                       .altset_idx = 1,
-                                       .attributes = 0,
-                                       .endpoint = 0x81,
-                                       .ep_attr = 0x01,
-                                       .rates = SNDRV_PCM_RATE_CONTINUOUS,
-                                       .rate_min = 44100,
-                                       .rate_max = 44100,
-                               }
+                               .type = QUIRK_AUDIO_STANDARD_INTERFACE
                        },
                        {
                                .ifnum = 2,