diff options
Diffstat (limited to 'sound/usb/usbaudio.c')
-rw-r--r-- | sound/usb/usbaudio.c | 22 |
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) | |||
3251 | static int audiophile_skip_setting_quirk(struct snd_usb_audio *chip, | 3264 | static 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) |