[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