[alsa-devel] [PATCH 2/2] ALSA: usb: handle descriptor with SYNC_NONE illegal value
Takashi Iwai
tiwai at suse.de
Fri Aug 14 18:03:55 CEST 2015
On Fri, 14 Aug 2015 00:42:33 +0200,
Pierre-Louis Bossart wrote:
> --- a/sound/usb/pcm.c
> +++ b/sound/usb/pcm.c
> @@ -411,10 +411,17 @@ static int set_sync_endpoint(struct snd_usb_substream *subs,
> if (altsd->bNumEndpoints < 2)
> return 0;
>
> - if ((is_playback && attr != USB_ENDPOINT_SYNC_ASYNC) ||
> + if ((is_playback && attr == USB_ENDPOINT_SYNC_SYNC) ||
> + (is_playback && attr == USB_ENDPOINT_SYNC_ADAPTIVE) ||
Better to be:
(is_playback && (attr == USB_ENDPOINT_SYNC_SYNC ||
attr == USB_ENDPOINT_SYNC_ADAPTIVE)) ||
> (!is_playback && attr != USB_ENDPOINT_SYNC_ADAPTIVE))
> return 0;
>
> + /*
> + * In case of illegal SYNC_NONE for OUT endpoint, we keep going to see
> + * if we don't find a sync endpoint, as on M-Audio Transit. In case of
> + * error fall back to SYNC mode and don't create sync endpoint
> + */
> +
> /* check sync-pipe endpoint */
> /* ... and check descriptor size before accessing bSynchAddress
> because there is a version of the SB Audigy 2 NX firmware lacking
> @@ -428,6 +435,8 @@ static int set_sync_endpoint(struct snd_usb_substream *subs,
> get_endpoint(alts, 1)->bmAttributes,
> get_endpoint(alts, 1)->bLength,
> get_endpoint(alts, 1)->bSynchAddress);
> + if (is_playback && attr == USB_ENDPOINT_SYNC_NONE)
> + goto no_valid_sync_ep_found;
We handle this as a success case, so the error message should be
avoided for SYNC_NONE. Also, it's fine just returning 0 here.
> return -EINVAL;
> }
> ep = get_endpoint(alts, 1)->bEndpointAddress;
> @@ -438,6 +447,8 @@ static int set_sync_endpoint(struct snd_usb_substream *subs,
> "%d:%d : invalid sync pipe. is_playback %d, ep %02x, bSynchAddress %02x\n",
> fmt->iface, fmt->altsetting,
> is_playback, ep, get_endpoint(alts, 0)->bSynchAddress);
> + if (is_playback && attr == USB_ENDPOINT_SYNC_NONE)
> + goto no_valid_sync_ep_found;
Ditto.
thanks,
Takashi
More information about the Alsa-devel
mailing list