Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Dec 2014 07:37:30 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r275353 - stable/8/sys/dev/sound/usb
Message-ID:  <201412010737.sB17bUeH076725@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Mon Dec  1 07:37:29 2014
New Revision: 275353
URL: https://svnweb.freebsd.org/changeset/base/275353

Log:
  MFC r274918:
  Don't use the synchronization endpoint unless referenced by the
  isochronous endpoint descriptor used for the data transfers, hence the
  synchronization feature might not be supposed to be supported [yet].
  This makes seamless playback synced with the USB HOST clock work with
  the DN32-USB module for Midas audio systems and possibly other similar
  products from Klark Teknik.

Modified:
  stable/8/sys/dev/sound/usb/uaudio.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/dev/   (props changed)
  stable/8/sys/dev/sound/   (props changed)
  stable/8/sys/dev/sound/usb/   (props changed)

Modified: stable/8/sys/dev/sound/usb/uaudio.c
==============================================================================
--- stable/8/sys/dev/sound/usb/uaudio.c	Mon Dec  1 07:36:00 2014	(r275352)
+++ stable/8/sys/dev/sound/usb/uaudio.c	Mon Dec  1 07:37:29 2014	(r275353)
@@ -195,6 +195,7 @@ struct uaudio_chan_alt {
 	uint8_t	iface_index;
 	uint8_t	iface_alt_index;
 	uint8_t channels;
+	uint8_t enable_sync;
 };
 
 struct uaudio_chan {
@@ -1804,6 +1805,14 @@ uaudio_chan_fill_info_sub(struct uaudio_
 		chan_alt->iface_index = curidx;
 		chan_alt->iface_alt_index = alt_index;
 
+		if (UEP_HAS_SYNCADDR(ed1) && ed1->bSynchAddress != 0) {
+			DPRINTF("Sync endpoint will be used, if present\n");
+			chan_alt->enable_sync = 1;
+		} else {
+			DPRINTF("Sync endpoint will not be used\n");
+			chan_alt->enable_sync = 0;
+		}
+
 		usbd_set_parent_iface(sc->sc_udev, curidx,
 		    sc->sc_mixer_iface_index);
 
@@ -2080,8 +2089,10 @@ tr_transferred:
 		chn_intr(ch->pcm_ch);
 
 		/* start SYNC transfer, if any */
-		if ((ch->last_sync_time++ & 7) == 0)
-			usbd_transfer_start(ch->xfer[UAUDIO_NCHANBUFS]);
+		if (ch->usb_alt[ch->cur_alt].enable_sync != 0) {
+			if ((ch->last_sync_time++ & 7) == 0)
+				usbd_transfer_start(ch->xfer[UAUDIO_NCHANBUFS]);
+		}
 
 	case USB_ST_SETUP:
 		mfl = usbd_xfer_max_framelen(xfer);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201412010737.sB17bUeH076725>