[alsa-devel] [PATCH v2] ALSA: usb-audio: Recurse before saving terminal properties
Takashi Iwai
tiwai at suse.de
Wed Aug 19 18:06:59 CEST 2015
On Wed, 19 Aug 2015 17:17:19 +0200,
Daniel Mack wrote:
>
> On 08/19/2015 09:28 AM, Julian Scheel wrote:
> > The input terminal parser recurses into the referenced clock entity to verify
> > it is existant and thus the terminal descriptor is valid. The actual property
> > values of the term instance which is initially parsed must not be overriden by
> > the recursion. For this to work the term properties have to be assigned after
> > recursing into the referenced clock entity descriptors.
> >
> > Signed-off-by: Julian Scheel <julian at jusst.de>
>
> Given your explanations, I believe this is the right thing to do.
>
> Acked-by: Daniel Mack <daniel at zonque.org>
Thanks. It's no urgent fix, I'm going to queue it to for-next
branch.
Takashi
>
>
> Thanks!
>
>
> > ---
> > Changes in v2:
> > - Store term->id after recursion as well, as it gets overriden in the
> > recursion
> > - Add comments explaining that the recursion is only for validation of the
> > descriptor validity
> > ---
> > sound/usb/mixer.c | 16 +++++++++++-----
> > 1 file changed, 11 insertions(+), 5 deletions(-)
> >
> > diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
> > index 81055d3..c50790c 100644
> > --- a/sound/usb/mixer.c
> > +++ b/sound/usb/mixer.c
> > @@ -731,15 +731,21 @@ 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 */
> > + /* call recursively to verify that the
> > + * referenced clock entity is valid */
> > err = check_input_term(state, d->bCSourceID, term);
> > if (err < 0)
> > return err;
> > +
> > + /* save input term properties after recursion,
> > + * to ensure they are not overriden by the
> > + * recursion calls */
> > + term->id = id;
> > + 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: {
> >
>
More information about the Alsa-devel
mailing list