support for playback sync endpoints
authorjakemsr <jakemsr@openbsd.org>
Fri, 23 Jul 2010 12:17:48 +0000 (12:17 +0000)
committerjakemsr <jakemsr@openbsd.org>
Fri, 23 Jul 2010 12:17:48 +0000 (12:17 +0000)
commita5a0ab9e5c1d871c0b99671c514be205c8c8a6bc
treea6d7b19a4937caa6e7c0b2655fa119a909fd1775
parentee81eb1960eddf0f22d77878807459c4d098c56f
support for playback sync endpoints

sync endpoints allow for the sample clock on USB audio devices to not
be synchronized to the USB clock.  the sync endpoint gives information
on how much data to send to the data endpoint.  although devices that
require sync endpoints will "work" when the sync endpoint inormation
is ignored, there is a possibility of static, echoing, or any other
type of clock desync error.

requires some small changes to existing code:
* tighten up checks for whether a setting needs/supplies a sync
endpoint.  ignore settings that need a sync endpoint but don't
supply one.  previously all settings that require a sync endpoint
were ignored.
* if a sync endpoint is being used, use the same denominator for
fractional samples as the sync endpoint uses (2**16).

this only implements playback sync endpoints.  recording sync
endpoints are an odd concept: the driver would control the clock
rate of the device.  there may be such devices, but I can't even
imagine how that could be reliably implemented.  I guess you would
sync to the USB clock or the system clock ... but then, what's the
point?
sys/dev/usb/uaudio.c