Skip to content
  • Takashi Iwai's avatar
    ALSA: usb-audio: Allow modifying parameters with succeeding hw_params calls · 5f5e6a3e
    Takashi Iwai authored
    The recent fix for the hw constraints for implicit feedback streams
    via commit e4ea77f8 ("ALSA: usb-audio: Always apply the hw
    constraints for implicit fb sync") added the check of the matching
    endpoints and whether those EPs are already opened.  This is needed
    and correct, per se, even for the normal streams without the implicit
    feedback, as the endpoint setup is exclusive.
    
    However, it's reported that there seem applications that behave in
    unexpected ways to update the hw_params without clearing the previous
    setup via hw_free, and those hit a problem now: then hw_params is
    called with still the previous EP setup kept, hence it's restricted
    with the previous own setup.  Although the obvious fix is to call
    snd_pcm_hw_free() API in the application side, it's a kind of
    unwelcome change.
    
    This patch tries to ease the situation: in the endpoint check, we add
    a couple of more conditions and now skip the endpoint that is being
    used only by the stream in question itself.  That is, in addition to
    the presence check of ep (ep->cur_audiofmt is non-NULL), when the
    following conditions are met, we skip such an ep:
    - ep->opened == 1, and
    - ep->cur_audiofmt == subs->cur_audiofmt.
    
    subs->cur_audiofmt is non-NULL only if it's a re-setup of hw_params,
    and ep->cur_audiofmt points to the currently set up parameters.  So if
    those match, it must be this stream itself.
    
    Fixes: e4ea77f8 ("ALSA: usb-audio: Always apply the hw constraints for implicit fb sync")
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=211941
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20210228080138.9936-1-tiwai@suse.de
    
    
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    5f5e6a3e