aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb/usbaudio.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/usb/usbaudio.c')
-rw-r--r--sound/usb/usbaudio.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index 8ebc1adb5ed9..7bd5852fcc0d 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -2350,7 +2350,9 @@ static int is_big_endian_format(struct snd_usb_audio *chip, struct audioformat *
2350 return 1; 2350 return 1;
2351 break; 2351 break;
2352 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */ 2352 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
2353 return 1; 2353 if (device_setup[chip->index] == 0x00 ||
2354 fp->altsetting==1 || fp->altsetting==2 || fp->altsetting==3)
2355 return 1;
2354 } 2356 }
2355 return 0; 2357 return 0;
2356} 2358}
@@ -2530,7 +2532,18 @@ static int parse_audio_format_i(struct snd_usb_audio *chip, struct audioformat *
2530 * but we give normal PCM format to get the existing 2532 * but we give normal PCM format to get the existing
2531 * apps working... 2533 * apps working...
2532 */ 2534 */
2533 pcm_format = SNDRV_PCM_FORMAT_S16_LE; 2535 switch (chip->usb_id) {
2536
2537 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
2538 if (device_setup[chip->index] == 0x00 &&
2539 fp->altsetting == 6)
2540 pcm_format = SNDRV_PCM_FORMAT_S16_BE;
2541 else
2542 pcm_format = SNDRV_PCM_FORMAT_S16_LE;
2543 break;
2544 default:
2545 pcm_format = SNDRV_PCM_FORMAT_S16_LE;
2546 }
2534 } else { 2547 } else {
2535 pcm_format = parse_audio_format_i_type(chip, fp, format, fmt); 2548 pcm_format = parse_audio_format_i_type(chip, fp, format, fmt);
2536 if (pcm_format < 0) 2549 if (pcm_format < 0)
@@ -3251,6 +3264,11 @@ static int snd_usb_cm106_boot_quirk(struct usb_device *dev)
3251static int audiophile_skip_setting_quirk(struct snd_usb_audio *chip, 3264static int audiophile_skip_setting_quirk(struct snd_usb_audio *chip,
3252 int iface, int altno) 3265 int iface, int altno)
3253{ 3266{
3267 /* Reset ALL ifaces to 0 altsetting.
3268 * Call it for every possible altsetting of every interface.
3269 */
3270 usb_set_interface(chip->dev, iface, 0);
3271
3254 if (device_setup[chip->index] & AUDIOPHILE_SET) { 3272 if (device_setup[chip->index] & AUDIOPHILE_SET) {
3255 if ((device_setup[chip->index] & AUDIOPHILE_SET_DTS) 3273 if ((device_setup[chip->index] & AUDIOPHILE_SET_DTS)
3256 && altno != 6) 3274 && altno != 6)