diff options
author | David Henningsson <david.henningsson@canonical.com> | 2013-11-05 04:41:07 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2013-11-05 07:46:38 +0100 |
commit | e3e35f750fff74e701c8913fd7dd714e37a848cd (patch) | |
tree | 9ff01befeba4df75fb7de66006df16d579fe7b08 /sound/usb | |
parent | 0dca01c37a68017fe7112b46bc4b48c927db18c6 (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.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/sound/usb/stream.c b/sound/usb/stream.c index b43b6eec322..badd1d6d175 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) num_channels = as->bNrChannels; format = le32_to_cpu(as->bmFormats); + chconfig = le32_to_cpu(as->bmChannelConfig); /* lookup the terminal associated to this interface * to extract the clock */ @@ -594,7 +595,8 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no) as->bTerminalLink); if (input_term) { clock = input_term->bCSourceID; - chconfig = le32_to_cpu(input_term->bmChannelConfig); + if (!chconfig && (num_channels == input_term->bNrChannels)) + chconfig = le32_to_cpu(input_term->bmChannelConfig); break; } |