[1/1] Allow any MIDI endpoint to drive use of interrupt transfer on Roland devices
diff mbox

Message ID 56195ffb.8ac9c20a.97c1e.ffffff8a@mx.google.com
State New
Headers show

Commit Message

maillist@superlative.org Oct. 10, 2015, 6:59 p.m. UTC
From: "Keith A. Milner" <kamilner@superlative.org>

Signed-off-by: Keith A. Milner <maillist@superlative.org>

Comments

Takashi Iwai Oct. 11, 2015, 7:17 a.m. UTC | #1
On Sat, 10 Oct 2015 20:59:01 +0200,
maillist@superlative.org wrote:
> 
> From: "Keith A. Milner" <kamilner@superlative.org>
> 
> Signed-off-by: Keith A. Milner <maillist@superlative.org>

The most important piece is missing -- why this change is needed at
all.  Could you give more detailed description?


thanks,

Takashi

> 
> diff --git a/sound/usb/midi.c b/sound/usb/midi.c
> index b901f46..52b8c72 100644
> --- a/sound/usb/midi.c
> +++ b/sound/usb/midi.c
> @@ -1860,9 +1860,14 @@ static void snd_usbmidi_switch_roland_altsetting(struct snd_usb_midi* umidi)
>  
>  	hostif = &intf->altsetting[1];
>  	intfd = get_iface_desc(hostif);
> +	/* If either or both of the endpoints support interrupt transfer,
> +	 * then use the alternate setting
> +	 */
>  	if (intfd->bNumEndpoints != 2 ||
> -	    (get_endpoint(hostif, 0)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != USB_ENDPOINT_XFER_BULK ||
> -	    (get_endpoint(hostif, 1)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != USB_ENDPOINT_XFER_INT)
> +	    !((get_endpoint(hostif, 0)->bmAttributes
> +	      & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT ||
> +	    (get_endpoint(hostif, 1)->bmAttributes
> +	      & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT))
>  		return;
>  
>  	snd_printdd(KERN_INFO "switching to altsetting %d with int ep\n",
> -- 
> 1.9.1
>

Patch
diff mbox

diff --git a/sound/usb/midi.c b/sound/usb/midi.c
index b901f46..52b8c72 100644
--- a/sound/usb/midi.c
+++ b/sound/usb/midi.c
@@ -1860,9 +1860,14 @@  static void snd_usbmidi_switch_roland_altsetting(struct snd_usb_midi* umidi)
 
 	hostif = &intf->altsetting[1];
 	intfd = get_iface_desc(hostif);
+	/* If either or both of the endpoints support interrupt transfer,
+	 * then use the alternate setting
+	 */
 	if (intfd->bNumEndpoints != 2 ||
-	    (get_endpoint(hostif, 0)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != USB_ENDPOINT_XFER_BULK ||
-	    (get_endpoint(hostif, 1)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != USB_ENDPOINT_XFER_INT)
+	    !((get_endpoint(hostif, 0)->bmAttributes
+	      & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT ||
+	    (get_endpoint(hostif, 1)->bmAttributes
+	      & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT))
 		return;
 
 	snd_printdd(KERN_INFO "switching to altsetting %d with int ep\n",