[alsa-devel] [PATCH v2 7/9] ALSA: usb-audio: remove is_playback from implicit feedback quirks

Eldad Zack eldad at fogrefinery.com
Sat Aug 3 11:05:21 CEST 2013


I had some error while sending, and this was sent twice.

On Sat, 3 Aug 2013, Eldad Zack wrote:

> An implicit feedback endpoint can only be a capture source. The
> consumer (sink) of the implicit feedback endpoint is therefore limited
> to playback EPs.
> Check if the target endpoint is a playback first and remove redundant
> checks.
> 
> Signed-off-by: Eldad Zack <eldad at fogrefinery.com>
> ---
>  sound/usb/pcm.c | 40 +++++++++++++++++++---------------------
>  1 file changed, 19 insertions(+), 21 deletions(-)
> 
> diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
> index bb2e0f5..af30e08 100644
> --- a/sound/usb/pcm.c
> +++ b/sound/usb/pcm.c
> @@ -334,41 +334,39 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
>  {
>  	struct usb_host_interface *alts;
>  	struct usb_interface *iface;
> -	int is_playback = subs->direction == SNDRV_PCM_STREAM_PLAYBACK;
>  	int implicit_fb = 0;
>  	unsigned int ep;
>  
> +	/* Implicit feedback sync EPs consumers are always playback EPs */
> +	if (subs->direction != SNDRV_PCM_STREAM_PLAYBACK)
> +		return 0;
> +
>  	switch (subs->stream->chip->usb_id) {
>  	case USB_ID(0x0763, 0x2030): /* M-Audio Fast Track C400 */
>  	case USB_ID(0x0763, 0x2031): /* M-Audio Fast Track C600 */
> -		if (is_playback) {
> -			implicit_fb = 1;
> -			ep = 0x81;
> -			iface = usb_ifnum_to_if(dev, 3);
> +		implicit_fb = 1;
> +		ep = 0x81;
> +		iface = usb_ifnum_to_if(dev, 3);
>  
> -			if (!iface || iface->num_altsetting == 0)
> -				return -EINVAL;
> +		if (!iface || iface->num_altsetting == 0)
> +			return -EINVAL;
>  
> -			alts = &iface->altsetting[1];
> -			goto add_sync_ep;
> -		}
> +		alts = &iface->altsetting[1];
> +		goto add_sync_ep;
>  		break;
>  	case USB_ID(0x0763, 0x2080): /* M-Audio FastTrack Ultra */
>  	case USB_ID(0x0763, 0x2081):
> -		if (is_playback) {
> -			implicit_fb = 1;
> -			ep = 0x81;
> -			iface = usb_ifnum_to_if(dev, 2);
> +		implicit_fb = 1;
> +		ep = 0x81;
> +		iface = usb_ifnum_to_if(dev, 2);
>  
> -			if (!iface || iface->num_altsetting == 0)
> -				return -EINVAL;
> +		if (!iface || iface->num_altsetting == 0)
> +			return -EINVAL;
>  
> -			alts = &iface->altsetting[1];
> -			goto add_sync_ep;
> -		}
> +		alts = &iface->altsetting[1];
> +		goto add_sync_ep;
>  	}
> -	if (is_playback &&
> -	    attr == USB_ENDPOINT_SYNC_ASYNC &&
> +	if (attr == USB_ENDPOINT_SYNC_ASYNC &&
>  	    altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC &&
>  	    altsd->bInterfaceProtocol == 2 &&
>  	    altsd->bNumEndpoints == 1 &&
> -- 
> 1.8.1.5
> 


More information about the Alsa-devel mailing list