From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [RESEND PATCH 1/1] Allow any MIDI endpoint to drive use of interrupt transfer on newer Roland devices Date: Sun, 11 Oct 2015 18:21:48 +0200 Message-ID: References: <561a700d.04dfc20a.4d7e9.5ab3@mx.google.com> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id BE88F2606A5 for ; Sun, 11 Oct 2015 18:21:38 +0200 (CEST) In-Reply-To: <561a700d.04dfc20a.4d7e9.5ab3@mx.google.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: maillist@superlative.org Cc: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org On Sun, 11 Oct 2015 16:19:48 +0200, maillist@superlative.org wrote: > > From: "Keith A. Milner" > > This patch enables interrupt transfer mode for MIDI ports on newer > Boss/Roland devices such as the GT-100/001 which support interrupt > transfer on both IN and OUT MIDI endpoints. Previously this wasn't being > enabled for these devices as the code was specifically looking for the > scenario where the IN endpoint supported interrupt transfer and the OUT > endpoint was bulk transfer. Newer devices support interrupt transfer for > both endpoints. > > This has been tested on Boss devices GT-001, BR-80 and JS-8 and Roland > VS-20. > > It would benefit from some regresison testing with other devices if > possible. > > Signed-off-by: Keith A. Milner Thanks, now it looks much better. But the patch didn't apply cleanly to the latest kernel, so I had to adjust manually. At the next time, please try to align with the latest kernel tree. Takashi > > diff --git a/sound/usb/midi.c b/sound/usb/midi.c > index b901f46..d50c649 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 >