[alsa-devel] [PATCH] ALSA: usb-audio: Recurse before saving terminal properties

Julian Scheel julian at jusst.de
Wed Aug 12 22:14:59 CEST 2015


When the descriptor parser recurses into the clock source descriptor, the
terminals properties, like name and type, are set to the values of the clock
selector as check_input_term overwrites term->name and others in the recursive
call. As we want to only fill missing values using the descriptors higher in
the recursion tree the properties taken from the actual descriptor must be
applied after recursing.

Signed-off-by: Julian Scheel <julian at jusst.de>
---
 sound/usb/mixer.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
index 6b3acba..4a49944 100644
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -715,15 +715,16 @@ static int check_input_term(struct mixer_build *state, int id,
 				term->name = d->iTerminal;
 			} else { /* UAC_VERSION_2 */
 				struct uac2_input_terminal_descriptor *d = p1;
-				term->type = le16_to_cpu(d->wTerminalType);
-				term->channels = d->bNrChannels;
-				term->chconfig = le32_to_cpu(d->bmChannelConfig);
-				term->name = d->iTerminal;
 
 				/* call recursively to get the clock selectors */
 				err = check_input_term(state, d->bCSourceID, term);
 				if (err < 0)
 					return err;
+
+				term->type = le16_to_cpu(d->wTerminalType);
+				term->channels = d->bNrChannels;
+				term->chconfig = le32_to_cpu(d->bmChannelConfig);
+				term->name = d->iTerminal;
 			}
 			return 0;
 		case UAC_FEATURE_UNIT: {
-- 
2.5.0




More information about the Alsa-devel mailing list