All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Andrej Krutak <dev@andree.sk>
Cc: Igor Zinovev <zinigor@gmail.com>,
	linux-usb@vger.kernel.org, alsa-devel@alsa-project.org
Subject: Re: [PATCH] ALSA: line6: Always setup isochronous transfer properties
Date: Mon, 06 Feb 2017 22:19:10 +0100	[thread overview]
Message-ID: <s5hpoivf25t.wl-tiwai@suse.de> (raw)
In-Reply-To: <1486409698-32147-1-git-send-email-dev@andree.sk>

On Mon, 06 Feb 2017 20:34:58 +0100,
Andrej Krutak wrote:
> 
> While not all line6 devices currently support PCM, it causes no
> harm to 'have it prepared'.
> 
> This also fixes toneport, which only has PCM - in which case
> we previously skipped the USB transfer properties detection completely.
> 
> Signed-off-by: Andrej Krutak <dev@andree.sk>

Well, this looks too complex and vague as a regression fix.  If it
were 4.10-rc1, I could take it.  But now it's already rc7 and the next
might be final, so I prefer a shorter and easier solution.

That said, we can revert the commit as a clear fix at first for 4.10
(with Cc to stable), then take this on top as an enhancement for
4.11.

Still it's important to know whether this works on Igor's system, so
Igor, please give this one try.


thanks,

Takashi

> ---
>  sound/usb/line6/driver.c | 49 ++++++++++++++++++++++++++----------------------
>  1 file changed, 27 insertions(+), 22 deletions(-)
> 
> diff --git a/sound/usb/line6/driver.c b/sound/usb/line6/driver.c
> index 90009c0..0ff5a7d 100644
> --- a/sound/usb/line6/driver.c
> +++ b/sound/usb/line6/driver.c
> @@ -492,42 +492,46 @@ static void line6_destruct(struct snd_card *card)
>  	usb_put_dev(usbdev);
>  }
>  
> -/* get data from endpoint descriptor (see usb_maxpacket): */
> -static void line6_get_interval(struct usb_line6 *line6)
> +static void line6_get_usb_properties(struct usb_line6 *line6)
>  {
>  	struct usb_device *usbdev = line6->usbdev;
>  	const struct line6_properties *properties = line6->properties;
>  	int pipe;
> -	struct usb_host_endpoint *ep;
> +	struct usb_host_endpoint *ep = NULL;
>  
> -	if (properties->capabilities & LINE6_CAP_CONTROL_MIDI) {
> -		pipe =
> -			usb_rcvintpipe(line6->usbdev, line6->properties->ep_ctrl_r);
> -	} else {
> -		pipe =
> -			usb_rcvbulkpipe(line6->usbdev, line6->properties->ep_ctrl_r);
> +	if (properties->capabilities & LINE6_CAP_CONTROL) {
> +		if (properties->capabilities & LINE6_CAP_CONTROL_MIDI) {
> +			pipe = usb_rcvintpipe(line6->usbdev,
> +				line6->properties->ep_ctrl_r);
> +		} else {
> +			pipe = usb_rcvbulkpipe(line6->usbdev,
> +				line6->properties->ep_ctrl_r);
> +		}
> +		ep = usbdev->ep_in[usb_pipeendpoint(pipe)];
>  	}
> -	ep = usbdev->ep_in[usb_pipeendpoint(pipe)];
>  
> +	/* Control data transfer properties */
>  	if (ep) {
>  		line6->interval = ep->desc.bInterval;
> -		if (usbdev->speed == USB_SPEED_LOW) {
> -			line6->intervals_per_second = USB_LOW_INTERVALS_PER_SECOND;
> -			line6->iso_buffers = USB_LOW_ISO_BUFFERS;
> -		} else {
> -			line6->intervals_per_second = USB_HIGH_INTERVALS_PER_SECOND;
> -			line6->iso_buffers = USB_HIGH_ISO_BUFFERS;
> -		}
> -
>  		line6->max_packet_size = le16_to_cpu(ep->desc.wMaxPacketSize);
>  	} else {
> -		dev_err(line6->ifcdev,
> -			"endpoint not available, using fallback values");
> +		if (properties->capabilities & LINE6_CAP_CONTROL) {
> +			dev_err(line6->ifcdev,
> +				"endpoint not available, using fallback values");
> +		}
>  		line6->interval = LINE6_FALLBACK_INTERVAL;
>  		line6->max_packet_size = LINE6_FALLBACK_MAXPACKETSIZE;
>  	}
> -}
>  
> +	/* Isochronous transfer properties */
> +	if (usbdev->speed == USB_SPEED_LOW) {
> +		line6->intervals_per_second = USB_LOW_INTERVALS_PER_SECOND;
> +		line6->iso_buffers = USB_LOW_ISO_BUFFERS;
> +	} else {
> +		line6->intervals_per_second = USB_HIGH_INTERVALS_PER_SECOND;
> +		line6->iso_buffers = USB_HIGH_ISO_BUFFERS;
> +	}
> +}
>  
>  /* Enable buffering of incoming messages, flush the buffer */
>  static int line6_hwdep_open(struct snd_hwdep *hw, struct file *file)
> @@ -754,8 +758,9 @@ int line6_probe(struct usb_interface *interface,
>  		goto error;
>  	}
>  
> +	line6_get_usb_properties(line6);
> +
>  	if (properties->capabilities & LINE6_CAP_CONTROL) {
> -		line6_get_interval(line6);
>  		ret = line6_init_cap_control(line6);
>  		if (ret < 0)
>  			goto error;
> -- 
> 2.7.4
> 

  reply	other threads:[~2017-02-06 21:19 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAH7_RC8_i0id7YRqzW37qtq3B7BrWfwDU-fXmBADBx0Mej7vsw@mail.gmail.com>
     [not found] ` <CAH7_RC8NA5KJ=eB63fxXnUwk7kkgJAT=p6K29EncrYcgE-utTg@mail.gmail.com>
     [not found]   ` <20170126074724.GA9837@kroah.com>
     [not found]     ` <CAH7_RC9RmhF0eBf7phh_2NROL65_Rw=8Jd2Wf9TsURhkASOuMw@mail.gmail.com>
     [not found]       ` <20170126093002.GA787@kroah.com>
     [not found]         ` <CAH7_RC8Ma6c+VHvQ8i0BHDmA_B5qdrPXNQkBAy2Z0MbCHumrnQ@mail.gmail.com>
     [not found]           ` <20170127165429.GA19745@kroah.com>
     [not found]             ` <CAH7_RC-Lvjyr8o8By27enPNzumigSRFbHEiLp4v+Qmg5if73Xg@mail.gmail.com>
     [not found]               ` <CAH7_RC-Lvjyr8o8By27enPNzumigSRFbHEiLp4v+Qmg5if73Xg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-06 10:18                 ` Fwd: Regression: Line6 Toneport stops working on 4.10-rc5 Greg KH
2017-02-06 11:01                   ` Takashi Iwai
2017-02-06 11:04                     ` Andrej Kruták
     [not found]                       ` <CAFnc+wX6cNcsDp9Mmx2PrxBVj3+rjdtHgFtV4-qGvUVxqFMPjQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-06 11:11                         ` Takashi Iwai
2017-02-06 19:34                           ` [PATCH] ALSA: line6: Always setup isochronous transfer properties Andrej Krutak
2017-02-06 21:19                             ` Takashi Iwai [this message]
     [not found]                               ` <s5hpoivf25t.wl-tiwai-l3A5Bk7waGM@public.gmane.org>
2017-02-06 21:54                                 ` Andrej Kruták
2017-02-07  8:42                                   ` Takashi Iwai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=s5hpoivf25t.wl-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=dev@andree.sk \
    --cc=linux-usb@vger.kernel.org \
    --cc=zinigor@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.