aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb
diff options
context:
space:
mode:
authorDavid Henningsson <david.henningsson@canonical.com>2013-11-04 22:41:07 -0500
committerTakashi Iwai <tiwai@suse.de>2013-11-05 01:46:38 -0500
commite3e35f750fff74e701c8913fd7dd714e37a848cd (patch)
tree9ff01befeba4df75fb7de66006df16d579fe7b08 /sound/usb
parent0dca01c37a68017fe7112b46bc4b48c927db18c6 (diff)
ALSA: usb - For class 2 devices, use channel map from altsettings
The channel config from the streaming descriptor is probably a better indicator of the channel map than the input terminal. Use the input terminal's channel map as fallback only. Signed-off-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb')
-rw-r--r--sound/usb/stream.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sound/usb/stream.c b/sound/usb/stream.c
index b43b6eec3227..badd1d6d175d 100644
--- a/sound/usb/stream.c
+++ b/sound/usb/stream.c
@@ -587,6 +587,7 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
587 587
588 num_channels = as->bNrChannels; 588 num_channels = as->bNrChannels;
589 format = le32_to_cpu(as->bmFormats); 589 format = le32_to_cpu(as->bmFormats);
590 chconfig = le32_to_cpu(as->bmChannelConfig);
590 591
591 /* lookup the terminal associated to this interface 592 /* lookup the terminal associated to this interface
592 * to extract the clock */ 593 * to extract the clock */
@@ -594,7 +595,8 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
594 as->bTerminalLink); 595 as->bTerminalLink);
595 if (input_term) { 596 if (input_term) {
596 clock = input_term->bCSourceID; 597 clock = input_term->bCSourceID;
597 chconfig = le32_to_cpu(input_term->bmChannelConfig); 598 if (!chconfig && (num_channels == input_term->bNrChannels))
599 chconfig = le32_to_cpu(input_term->bmChannelConfig);
598 break; 600 break;
599 } 601 }
600 602