aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb/format.c
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /sound/usb/format.c
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (diff)
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts: litmus/sched_cedf.c
Diffstat (limited to 'sound/usb/format.c')
-rw-r--r--sound/usb/format.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sound/usb/format.c b/sound/usb/format.c
index 69148212aa70..8d042dce0d16 100644
--- a/sound/usb/format.c
+++ b/sound/usb/format.c
@@ -30,6 +30,7 @@
30#include "helper.h" 30#include "helper.h"
31#include "debug.h" 31#include "debug.h"
32#include "clock.h" 32#include "clock.h"
33#include "format.h"
33 34
34/* 35/*
35 * parse the audio format type I descriptor 36 * parse the audio format type I descriptor
@@ -76,7 +77,10 @@ static u64 parse_audio_format_i_type(struct snd_usb_audio *chip,
76 format = 1 << UAC_FORMAT_TYPE_I_PCM; 77 format = 1 << UAC_FORMAT_TYPE_I_PCM;
77 } 78 }
78 if (format & (1 << UAC_FORMAT_TYPE_I_PCM)) { 79 if (format & (1 << UAC_FORMAT_TYPE_I_PCM)) {
79 if (sample_width > sample_bytes * 8) { 80 if (chip->usb_id == USB_ID(0x0582, 0x0016) /* Edirol SD-90 */ &&
81 sample_width == 24 && sample_bytes == 2)
82 sample_bytes = 3;
83 else if (sample_width > sample_bytes * 8) {
80 snd_printk(KERN_INFO "%d:%u:%d : sample bitwidth %d in over sample bytes %d\n", 84 snd_printk(KERN_INFO "%d:%u:%d : sample bitwidth %d in over sample bytes %d\n",
81 chip->dev->devnum, fp->iface, fp->altsetting, 85 chip->dev->devnum, fp->iface, fp->altsetting,
82 sample_width, sample_bytes); 86 sample_width, sample_bytes);
@@ -173,9 +177,11 @@ static int parse_audio_format_rates_v1(struct snd_usb_audio *chip, struct audiof
173 if (!rate) 177 if (!rate)
174 continue; 178 continue;
175 /* C-Media CM6501 mislabels its 96 kHz altsetting */ 179 /* C-Media CM6501 mislabels its 96 kHz altsetting */
180 /* Terratec Aureon 7.1 USB C-Media 6206, too */
176 if (rate == 48000 && nr_rates == 1 && 181 if (rate == 48000 && nr_rates == 1 &&
177 (chip->usb_id == USB_ID(0x0d8c, 0x0201) || 182 (chip->usb_id == USB_ID(0x0d8c, 0x0201) ||
178 chip->usb_id == USB_ID(0x0d8c, 0x0102)) && 183 chip->usb_id == USB_ID(0x0d8c, 0x0102) ||
184 chip->usb_id == USB_ID(0x0ccd, 0x00b1)) &&
179 fp->altsetting == 5 && fp->maxpacksize == 392) 185 fp->altsetting == 5 && fp->maxpacksize == 392)
180 rate = 96000; 186 rate = 96000;
181 /* Creative VF0470 Live Cam reports 16 kHz instead of 8kHz */ 187 /* Creative VF0470 Live Cam reports 16 kHz instead of 8kHz */