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

Takashi Iwai tiwai at suse.de
Fri Aug 14 15:06:58 CEST 2015


On Wed, 12 Aug 2015 22:14:59 +0200,
Julian Scheel wrote:
> 
> 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>

Thanks for the patch.  I vaguely remember of a similar patch, maybe
you who already sent.  One thing I find uncertain is whether this
breaks the current logic completely, namely:

> @@ -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;

... by this override, essentially all fields except for id are
restored.  Then what's the point to call check_input_term() for the
clock source?

Maybe Daniel can answer better how the original code is supposed to
work.  Daniel?


Takashi


More information about the Alsa-devel mailing list