• Takashi Iwai's avatar
    ALSA: usb-audio: Avoid unnecessary interface re-setup · 00272c61
    Takashi Iwai authored
    The current endpoint handling assumed (more or less) a unique 1:1
    relation between the endpoint and the iface/altset.  The exception was
    the sync EP without the implicit feedback which has usually the
    secondary EP of the same altset.  This works fine for most devices,
    but it turned out that some unusual devices like Pinoeer's ones have
    both playback and capture endpoints in the same iface/altsetting and
    use both for the implicit feedback mode.  For handling such a case, we
    need to extend the endpoint management to take the shared interface
    into account.
    
    This patch does that: it adds a new object snd_usb_iface_ref for
    managing the reference counts of the each USB interface that is used
    by each endpoint.  The interface setup is performed only once for the
    (sharing) endpoints, and the doubly initialization is avoided.
    
    Along with this, the resource release of endpoints and interface
    refcounts are put into a single function, snd_usb_endpoint_free_all()
    instead of looping in the caller side.
    
    Fixes: bf6313a0 ("ALSA: usb-audio: Refactor endpoint management")
    Link: https://lore.kernel.org/r/20210108075219.21463-4-tiwai@suse.de
    
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    00272c61