| From: Alberto Aguirre <albaguirre@gmail.com> |
| Date: Wed, 18 Apr 2018 09:35:34 -0500 |
| Subject: ALSA: usb-audio: simplify set_sync_ep_implicit_fb_quirk |
| |
| commit 103e9625647ad74d201e26fb74afcd8479142a37 upstream. |
| |
| Signed-off-by: Alberto Aguirre <albaguirre@gmail.com> |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| sound/usb/pcm.c | 52 +++++++++++++++++++------------------------------ |
| 1 file changed, 20 insertions(+), 32 deletions(-) |
| |
| --- a/sound/usb/pcm.c |
| +++ b/sound/usb/pcm.c |
| @@ -324,6 +324,7 @@ static int set_sync_ep_implicit_fb_quirk |
| struct usb_host_interface *alts; |
| struct usb_interface *iface; |
| unsigned int ep; |
| + unsigned int ifnum; |
| |
| /* Implicit feedback sync EPs consumers are always playback EPs */ |
| if (subs->direction != SNDRV_PCM_STREAM_PLAYBACK) |
| @@ -333,44 +334,23 @@ static int set_sync_ep_implicit_fb_quirk |
| case USB_ID(0x0763, 0x2030): /* M-Audio Fast Track C400 */ |
| case USB_ID(0x0763, 0x2031): /* M-Audio Fast Track C600 */ |
| ep = 0x81; |
| - iface = usb_ifnum_to_if(dev, 3); |
| - |
| - if (!iface || iface->num_altsetting == 0) |
| - return -EINVAL; |
| - |
| - alts = &iface->altsetting[1]; |
| - goto add_sync_ep; |
| - break; |
| + ifnum = 3; |
| + goto add_sync_ep_from_ifnum; |
| case USB_ID(0x0763, 0x2080): /* M-Audio FastTrack Ultra */ |
| case USB_ID(0x0763, 0x2081): |
| ep = 0x81; |
| - iface = usb_ifnum_to_if(dev, 2); |
| - |
| - if (!iface || iface->num_altsetting == 0) |
| - return -EINVAL; |
| - |
| - alts = &iface->altsetting[1]; |
| - goto add_sync_ep; |
| - case USB_ID(0x2466, 0x8003): |
| + ifnum = 2; |
| + goto add_sync_ep_from_ifnum; |
| + case USB_ID(0x2466, 0x8003): /* Fractal Audio Axe-Fx II */ |
| ep = 0x86; |
| - iface = usb_ifnum_to_if(dev, 2); |
| - |
| - if (!iface || iface->num_altsetting == 0) |
| - return -EINVAL; |
| - |
| - alts = &iface->altsetting[1]; |
| - goto add_sync_ep; |
| - case USB_ID(0x1397, 0x0002): |
| + ifnum = 2; |
| + goto add_sync_ep_from_ifnum; |
| + case USB_ID(0x1397, 0x0002): /* Behringer UFX1204 */ |
| ep = 0x81; |
| - iface = usb_ifnum_to_if(dev, 1); |
| - |
| - if (!iface || iface->num_altsetting == 0) |
| - return -EINVAL; |
| - |
| - alts = &iface->altsetting[1]; |
| - goto add_sync_ep; |
| - |
| + ifnum = 1; |
| + goto add_sync_ep_from_ifnum; |
| } |
| + |
| if (attr == USB_ENDPOINT_SYNC_ASYNC && |
| altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC && |
| altsd->bInterfaceProtocol == 2 && |
| @@ -385,6 +365,14 @@ static int set_sync_ep_implicit_fb_quirk |
| /* No quirk */ |
| return 0; |
| |
| +add_sync_ep_from_ifnum: |
| + iface = usb_ifnum_to_if(dev, ifnum); |
| + |
| + if (!iface || iface->num_altsetting == 0) |
| + return -EINVAL; |
| + |
| + alts = &iface->altsetting[1]; |
| + |
| add_sync_ep: |
| subs->sync_endpoint = snd_usb_add_endpoint(subs->stream->chip, |
| alts, ep, !subs->direction, |