[alsa-devel] [PATCH 2/5] ALSA: snd-usb: switch over to new endpoint streaming logic

Daniel Mack zonque at gmail.com
Fri Nov 18 15:41:56 CET 2011


Hi Clemens and Takashi,

I'm back on working on (and hopefully finishing) this series now. One
question that remains is ...

On 11/01/2011 09:57 PM, Clemens Ladisch wrote:
> On 10/31/2011 01:10 PM, Daniel Mack wrote:
>> @@ -276,6 +312,15 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
>>  	if (((is_playback && attr == USB_ENDPOINT_SYNC_ASYNC) ||
>>  	     (! is_playback && attr == USB_ENDPOINT_SYNC_ADAPTIVE)) &&
>>  	    altsd->bNumEndpoints >= 2) {
>> +		switch (subs->stream->chip->usb_id) {
>> +		case USB_ID(0x0763, 0x2080): /* M-Audio FastTrack Ultra */
>> +		case USB_ID(0x0763, 0x2081):
>> +			ep = 0x81;
>> +			iface = usb_ifnum_to_if(dev, 2);
>> +			alts = &iface->altsetting[1];
> 
> Better check that the device actually has these descriptors.
> 
>> +int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream, int cmd)
>> +{
>> +	case SNDRV_PCM_TRIGGER_START:
>> +		err = start_endpoints(subs);
> 
> The trigger callback should execute very quickly; the initial URB
> submission should be handled in the prepare callback.

This is actually the way the current implementation does it as well. And
there seems to be a reason why the inital submission of urbs is done
differently for the two directions. In the prepare callback, there's
also a comment that says

        /* for playback, submit the URBs now; otherwise, the first
hwptr_done
         * updates for all URBs would happen at the same time when
starting */
        if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) {
                subs->ops.prepare = prepare_nodata_playback_urb;
                return start_urbs(subs, runtime);
        }

I'm not sure whether my patch set should touch this implementation
detail for now.


Daniel


More information about the Alsa-devel mailing list