From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2 autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 25939 invoked from network); 15 Feb 2023 06:35:47 -0000 Received: from tb-ob21.topicbox.com (173.228.157.67) by inbox.vuxu.org with ESMTPUTF8; 15 Feb 2023 06:35:47 -0000 Received: from tb-mx0.topicbox.com (tb-mx0.nyi.icgroup.com [10.90.30.73]) by tb-ob21.topicbox.com (Postfix) with ESMTP id 9BDB51808F for ; Wed, 15 Feb 2023 01:35:44 -0500 (EST) (envelope-from bounce.mM6771d495bc597d497acef054.r522be890-2105-11eb-b15e-8d699134e1fa@9fans.bounce.topicbox.com) Received: by tb-mx0.topicbox.com (Postfix, from userid 1132) id 4FA65EB5F51; Wed, 15 Feb 2023 01:35:44 -0500 (EST) ARC-Authentication-Results: i=2; topicbox.com; arc=pass; dkim=none (no signatures found); dmarc=pass policy.published-domain-policy=none policy.published-subdomain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none (p=none,sp=none,d=none,d.eval=none) policy.policy-from=p header.from=sdf.org; spf=pass smtp.mailfrom=adr@sdf.org smtp.helo=mx.sdf.org; x-internal-arc=fail (as.1.topicbox.com=pass, ams.1.topicbox.com=fail (message has been altered)) (Message modified while forwarding at Topicbox) ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d= topicbox.com; h=date:from:to:cc:in-reply-to:message-id :references:mime-version:content-type:content-id:list-help :list-id:list-post:list-subscribe:reply-to:subject :content-transfer-encoding:list-unsubscribe; s=sysmsg-1; t= 1676442944; bh=mHNeqLSadWPSIiLeTBqkG+GmtnUyHb5LV28tuI+hjXM=; b=t GaI/IA1HQIF2kz1fbFdbF+hxXe3EtZjlA/e0K7j4WM3YbTcOEDKZbqcqfc4jGqvG Z+1IAhKO4ld/J1ygUNAZxDVq0DazDHAzxzynpeGaQdvUIwP5K1xmPBBoxb3y/LXy b5u65eSdlPqGo+uJdEZVdQ2G4pHydS54kUUV9pILdk= ARC-Seal: i=2; a=rsa-sha256; cv=pass; d=topicbox.com; s=sysmsg-1; t= 1676442944; b=f/442Sq01trtc4sQRkWqXjqtgqTbXjFOxPBRM6CWJHBnqt90V3 JytBglKKl796LmoZo0zbiW8grO3iCBx0UHws09YhR+6nqZ/TER8yHsL4f42j4Vna yJkETAsN2WBXkGzCzm/wjlxK1wa/ZdwuRvfsqXzx57ojIH4d+i9sLmtrM= Authentication-Results: topicbox.com; arc=pass; dkim=none (no signatures found); dmarc=pass policy.published-domain-policy=none policy.published-subdomain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none (p=none,sp=none,d=none,d.eval=none) policy.policy-from=p header.from=sdf.org; spf=pass smtp.mailfrom=adr@sdf.org smtp.helo=mx.sdf.org; x-internal-arc=fail (as.1.topicbox.com=pass, ams.1.topicbox.com=fail (message has been altered)) (Message modified while forwarding at Topicbox) X-Received-Authentication-Results: tb-mx0.topicbox.com; arc=none (no signatures found); bimi=skipped (DMARC Policy is not at enforcement); dkim=none (no signatures found); dmarc=pass policy.published-domain-policy=none policy.published-subdomain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none (p=none,sp=none,d=none,d.eval=none) policy.policy-from=p header.from=sdf.org; iprev=pass smtp.remote-ip=205.166.94.24 (mx.sdf.org); spf=pass smtp.mailfrom=adr@sdf.org smtp.helo=mx.sdf.org; x-aligned-from=pass (Address match); x-me-sender=none; x-ptr=pass smtp.helo=mx.sdf.org policy.ptr=mx.sdf.org; x-return-mx=pass header.domain=sdf.org policy.is_org=yes (MX Records found: mx.sdf.org); x-return-mx=pass smtp.domain=sdf.org policy.is_org=yes (MX Records found: mx.sdf.org); x-tls=pass smtp.version=TLSv1.2 smtp.cipher=ECDHE-RSA-AES256-GCM-SHA384 smtp.bits=256/256; x-vs=clean score=-100 state=0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=9fans.net; h=date:from :to:cc:in-reply-to:message-id:references:mime-version :content-type:content-id:list-help:list-id:list-post :list-subscribe:reply-to:subject:content-transfer-encoding :list-unsubscribe; s=dkim-1; t=1676442944; x=1676529344; bh=a4+r Ze70aK+Jszu6BKqjGHHatQBTWca3liYc7Bis3yk=; b=aW8OvMJexzap7Dd83bFL 2HRTq+CSsrvp14fSCO/5mIDYSaVsOG3Wz+KDm9Xj5ZKRqKeU51zQHl+eJgC9WL/x hvi8rkilvobYVYr9KoB/t7qrGMon4gYLNW12qqzuL1LHQ00dswxN/zJvoqmHWbHk eg9RrbNq1bbf/idBIQtn4/Y= Received: from tb-mx0.topicbox.com (localhost.local [127.0.0.1]) by tb-mx0.topicbox.com (Postfix) with ESMTP id 1B673EB5B0E for <9fans@9fans.net>; Wed, 15 Feb 2023 01:35:32 -0500 (EST) (envelope-from adr@sdf.org) Received: from tb-mx0.topicbox.com (localhost [127.0.0.1]) by tb-mx0.topicbox.com (Authentication Milter) with ESMTP id 61F8BEF055E; Wed, 15 Feb 2023 01:35:31 -0500 ARC-Seal: i=1; a=rsa-sha256; cv=none; d=topicbox.com; s=arcseal; t= 1676442931; b=nHOuEliiGt8G5K4wlwWPnlZnNLg5SwiX4BAb6krDCrLoUknciR HmuzpXwgZ88gwi97vypRWbRS9xYLLmBub2hAdjhULfPcgAEg/foH9YoXl4MCwhPQ 0AKrNZWnYnRvRJMvf/0gkXW4IgrUuoB1BYeY5S55+bBv0y7G9Z4iESNMcADFIYGq iK+CAswJL3RX679X1y5E/chHCkib/S1/D0JW4rjq9btEcJXSAv25JDOnH59DPZft RW/iaNwDt1MU2h2sdlFz28kTLcd442begqe+utydgyP0+ZaFymjsb9V+wgTcKagV sdSZ/Dp8AIfvCzrJYtR5CLOYHW9yDsi4GRxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= topicbox.com; h=date:from:to:cc:subject:in-reply-to:message-id :references:mime-version:content-type:content-id; s=arcseal; t= 1676442931; bh=WfTerZ45b3VlNGthpt0M8gfQcjsLXMGHxRi2ZwHTFAo=; b=t h5wKERfD/9jGhRhsNmBFcokF+dB6vBjOTLVWNvni+Ya60vcjc1G6ej2ZVvYwXvL3 K8zwOtgObuJrIK6gYv3Z+zX8Rzx8ZHz6+yeYkdnfKWJyWm3lJC3TzdIbMsr3ZKYv PKuo5Cr2CAOhpu0b3mWFZOlJbBETXpDneWDncdq0eDDIzdmuJTvX2mlD152W5uTj UfXQY+INUKa/22WIDrtwdiQKdymQcCfDBWUIvTC4UwQTT28YaeJFenBlVZocniGR TJg4gxHpNW77kzi7vhxQZyHRA8JF3huZqoaavIiOd1vfjRF20AmqxczheBpj5It/ AOFmDtQt8G1BnzIacxO/Q== ARC-Authentication-Results: i=1; tb-mx0.topicbox.com; arc=none (no signatures found); bimi=skipped (DMARC Policy is not at enforcement); dkim=none (no signatures found); dmarc=pass policy.published-domain-policy=none policy.published-subdomain-policy=none policy.applied-disposition=none policy.evaluated-disposition=none (p=none,sp=none,d=none,d.eval=none) policy.policy-from=p header.from=sdf.org; iprev=pass smtp.remote-ip=205.166.94.24 (mx.sdf.org); spf=pass smtp.mailfrom=adr@sdf.org smtp.helo=mx.sdf.org; x-aligned-from=pass (Address match); x-me-sender=none; x-ptr=pass smtp.helo=mx.sdf.org policy.ptr=mx.sdf.org; x-return-mx=pass header.domain=sdf.org policy.is_org=yes (MX Records found: mx.sdf.org); x-return-mx=pass smtp.domain=sdf.org policy.is_org=yes (MX Records found: mx.sdf.org); x-tls=pass smtp.version=TLSv1.2 smtp.cipher=ECDHE-RSA-AES256-GCM-SHA384 smtp.bits=256/256; x-vs=clean score=-100 state=0 X-ME-VSCause: gggruggvucftvghtrhhoucdtuddrgedvhedrudeigedgleeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurhepfffhvfevufgjkfhfgggtsehmtderhidttddvnecu hfhrohhmpegrughruceorggurhesshgufhdrohhrgheqnecuggftrfgrthhtvghrnhephe ejtedvleeiteeugffgleegvdetleelleevfeeggffhteekkeeigeegtefggeehnecuffho mhgrihhnpegrlhhivgigphhrvghsshdrtghomhdpghhithhhuhgsrdgtohhmnecukfhppe dvtdehrdduieeirdelgedrvdegpddvtdehrdduieeirdelgedrudeinecuvehluhhsthgv rhfuihiivgeptdenucfrrghrrghmpehinhgvthepvddthedrudeiiedrleegrddvgedphh gvlhhopehmgidrshgufhdrohhrghdpmhgrihhlfhhrohhmpeeorggurhesshgufhdrohhr gheq X-ME-VSScore: -100 X-ME-VSCategory: clean Received-SPF: pass (sdf.org: 205.166.94.24 is authorized to use 'adr@sdf.org' in 'mfrom' identity (mechanism 'ip4:205.166.94.0/24' matched)) receiver=tb-mx0.topicbox.com; identity=mailfrom; envelope-from="adr@sdf.org"; helo=mx.sdf.org; client-ip=205.166.94.24 Received: from mx.sdf.org (mx.sdf.org [205.166.94.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by tb-mx0.topicbox.com (Postfix) with ESMTPS for <9fans@9fans.net>; Wed, 15 Feb 2023 01:35:31 -0500 (EST) (envelope-from adr@sdf.org) Received: from sdf.org (IDENT:adr@sdf.org [205.166.94.16]) by mx.sdf.org (8.16.1/8.14.5) with ESMTPS id 31F6ZTVT006224 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits) verified NO); Wed, 15 Feb 2023 06:35:30 GMT Received: from localhost (adr@localhost) by sdf.org (8.16.1/8.12.8/Submit) with ESMTP id 31F6ZTpT019659; Wed, 15 Feb 2023 06:35:29 GMT Date: Wed, 15 Feb 2023 06:35:28 +0000 (UTC) From: adr To: Steve Taylor cc: 9fans@9fans.net In-Reply-To: Message-ID: <6dbdf84d-9ecf-96b0-ce95-4cf5ad5eefcd@sdf.org> References: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-537967452-1676428168=:9646" Content-ID: Topicbox-Policy-Reasoning: allow: sender is a member Topicbox-Message-UUID: f505894e-acfa-11ed-98bb-efc1d5813e8b Archived-At: =?UTF-8?B?PGh0dHBzOi8vOWZhbnMudG9waWNib3guY29tL2dyb3Vwcy85?= =?UTF-8?B?ZmFucy9UZjY4MjBkNzRiNzMwNzY1Yi1NNjc3MWQ0OTViYzU5N2Q0OTdhY2Vm?= =?UTF-8?B?MDU0Pg==?= List-Help: List-Id: "9fans" <9fans.9fans.net> List-Post: List-Software: Topicbox v0 List-Subscribe: Precedence: list Reply-To: 9fans <9fans@9fans.net> Subject: [9fans] Re: USB Audio on RPi 4 Content-Transfer-Encoding: 7bit List-Unsubscribe: , Topicbox-Delivery-ID: 2:9fans:437d30aa-c441-11e9-8a57-d036212d11b0:522be890-2105-11eb-b15e-8d699134e1fa:M6771d495bc597d497acef054:1:GyCQXs-NM1xzOkAMj_KMxgBKbm5le8kq7i-3Z_3lktg --0-537967452-1676428168=:9646 Content-Type: text/plain; charset=UTF-8; format=flowed Content-ID: <6abe6bee-ce3a-f14b-fffc-8bb216e6f8e9@sdf.org> Content-Transfer-Encoding: quoted-printable On Mon, 13 Feb 2023, Steve Taylor wrote: > From: Steve Taylor > Hello adr, > > I saw your note on the Plan 9 mailing list about USB audio on the RPi 4 w= ith 9legacy. By USB audio device, do you mean something like a USB DAC? If = so, I have spent several hours on this recently. Whenever I play audio thro= ugh my USB DAC connected to my RPi4, using either 9legacy or 9front, I hear= pops and other small noises like static. I think it is from dropped frames= . If I use OpenBSD on the same hardware, these issues do not occur. The aud= io plays perfectly. > > Are you seeing issues like this? > > I am curious if using a USB DAC which is USB 1.0 would work properly. I i= dentified a couple I could try, but they are about 20 years old and difficu= lt to find for a decent price. The USB DAC I have now uses xhci. > > Thanks, > > Steve Hi Steve, I'm using this cheap one: https://aliexpress.com/item/1005001394902427.html ep6.0 enabled control rw speed full maxpkt 8 pollival 0 samplesz 0 hz 0 hub= 3 port 4 rootport 1 addr 4 busy audio csp 0x000101 csp 0x000201 csp 0x000201 csp 0x000003 vid 0x1b3f did 0x= 2008 GeneralPlus 'USB Audio Device' xhci ep6.5 enabled iso w speed full maxpkt 180 pollival 1 samplesz 4 hz 44100 hu= b 3 port 4 rootport 1 addr 4 busy ep6.6 enabled iso r speed full maxpkt 96 pollival 1 samplesz 2 hz 48000 hub= 3 port 4 rootport 1 addr 4 idle ep6.3 enabled interrupt r speed full maxpkt 8 pollival 32 samplesz 0 hz 0 h= ub 3 port 4 rootport 1 addr 4 busy It works ok with 9front. If you just need decent audio output from your pi, I recommend it. Now about 9legacy. Richard Miller imported the xhci driver from 9front, so I compared them. The only real difference appart from IN isochronous transfers support is the addition of sample delay for buffering. This patch makes the already present control in usb/audio Delay_control an internal one to set this delay. I used the same default as 9front, 40ms. I can play audio perfectly now. Also you can change now the sample rate (speed), the code was reopening the endpoint with openep() every time setspeed() was called. More work has to be done, but for now I hope this is helpful for you. Try increasing the delay with your device. I'm sharing this with the list. P.S. The patch is against the repo at github.com/0intro/plan9-contrib. Regards, adr --- /n/downloads/devusb.c Tue Feb 14 20:42:27 2023 +++ /sys/src/9/bcm/devusb.c Tue Feb 14 11:31:28 2023 @@ -88,6 +88,7 @@ CMdebugep, /* debug n (set/clear debug for this ep) */ CMname, /* name str (show up as #u/name as well) */ CMtmout, /* timeout n (activate timeouts for ep) */ + CMsampledelay, /* maximum delay introduced by buffering (i= so) */ CMpreset, /* reset the port */ /* Hub feature selectors */ @@ -128,6 +129,7 @@ {CMclrhalt, "clrhalt", 1}, {CMname, "name", 2}, {CMtmout, "timeout", 2}, + {CMsampledelay, "sampledelay", 2}, {CMpreset, "reset", 1}, }; @@ -1387,6 +1389,11 @@ ep->tmout =3D strtoul(cb->f[1], nil, 0); if(ep->tmout !=3D 0 && ep->tmout < Xfertmout) ep->tmout =3D Xfertmout; + break; + case CMsampledelay: + if(ep->ttype !=3D Tiso) + error("ctl ignored for this endpoint type"); + ep->sampledelay =3D strtoul(cb->f[1], nil, 0); break; case CMpreset: deprint("usb epctl %s\n", cb->f[0]); --- /n/downloads/usbxhci.c Tue Feb 14 20:41:33 2023 +++ /sys/src/9/bcm/usbxhci.c Tue Feb 14 11:24:53 2023 @@ -194,6 +194,7 @@ int stopped; + int *residue; Wait *pending; Lock; }; @@ -277,6 +278,10 @@ u32int incr; u32int tdsz; + /* isoread */ + u32int rp0; + u32int frame0; + int nleft; }; @@ -1100,10 +1105,17 @@ { if(io->ring =3D=3D nil) return; - io->frame =3D 0; - io->period =3D ep->pollival<<3*(ep->dev->speed =3D=3D Fullspeed); - io->incr =3D (ep->hz*io->period<<8)/8000; - io->tdsz =3D (io->incr+255>>8)*ep->samplesz; + io->rp0 =3D io->ring->wp; + io->frame0 =3D io->frame =3D 0; + io->period =3D ep->pollival << 3*(ep->dev->speed =3D=3D Fullspeed |= | ep->dev->speed =3D=3D Lowspeed); + if(io->ring->id & 1){ + io->ring->residue =3D smalloc((io->ring->mask+1)*sizeof(io-= >ring->residue[0])); + io->incr =3D 0; + io->tdsz =3D ep->maxpkt*ep->ntds; + } else { + io->incr =3D ((vlong)ep->hz*ep->pollival<<8)/1000; + io->tdsz =3D (io->incr+255>>8)*ep->samplesz; + } io->b =3D allocb((io->ring->mask+1)*io->tdsz); } @@ -1336,10 +1348,10 @@ } ?? =3D io->period; ctlr =3D ep->hp->aux; - if(needrecover(ctlr)) - error(Erecover); for(i =3D io->frame;; i++){ for(;;){ + if(needrecover(ctlr)) + error(Erecover); m =3D (int)(io->ring->wp - io->ring->rp); if(m <=3D 0) i =3D (80 + ??frame(ctlr))/??; @@ -1367,11 +1379,13 @@ io->frame =3D i; while(io->ring->rp !=3D io->ring->wp){ int d =3D (int)(i*?? - ??frame(ctlr))/8; - //d -=3D ep->sampledelay*1000 / ep->hz; + d -=3D ep->sampledelay*1000 / ep->hz; if(d < 5) break; *io->ring->doorbell =3D io->ring->id; tsleep(&up->sleep, return0, nil, d); + if(needrecover(ctlr)) + error(Erecover); } qunlock(io); poperror(); --- /n/downloads/audio.h Tue Feb 14 23:52:55 2023 +++ /sys/src/cmd/usb/audio/audio.h Tue Feb 14 23:29:03 2023 @@ -39,6 +39,11 @@ #define SAMPLING_FREQ_CONTROL 0x01 +#define DSPEEDPLAY 44100 +#define DSPEEDREC 44100 +/* 40ms */ +#define DDELAY 1764 + typedef struct Audioalt Audioalt; struct Audioalt { --- /n/downloads/audio.c Tue Feb 14 23:52:36 2023 +++ /sys/src/cmd/usb/audio/audio.c Wed Feb 15 01:00:51 2023 @@ -25,7 +25,7 @@ int verbose; int setrec =3D 0; -int defaultspeed[2] =3D {44100, 44100}; +int defaultspeed[2]=3D { DSPEEDPLAY, DSPEEDREC}; Dev *buttondev; Dev *epdev[2]; @@ -372,6 +372,8 @@ value[0] =3D defaultspeed[Record]; if(endpt[Record] >=3D 0 && setcontrol(Record, "speed", value) < 0) fprint(2, "%s: can't set record speed\n", argv0); + value[0] =3D DDELAY; + setcontrol(Play, "delay", value); value[0] =3D 0; setcontrol(Play, "mute", value); --- /n/downloads/audioctl.c Tue Feb 14 20:43:26 2023 +++ /sys/src/cmd/usb/audio/audioctl.c Wed Feb 15 01:13:48 2023 @@ -18,7 +18,7 @@ Audiocontrol controls[2][Ncontrol] =3D { { - [Speed_control] =3D { "speed", 0, {0}, 0, 4= 4100, Undef}, + [Speed_control] =3D { "speed", 0, {0}, 0, D= SPEEDPLAY, Undef}, [Mute_control] =3D { "mute", 0, {0}, 0, 0= , Undef}, [Volume_control] =3D { "volume", 0, {0}, 0, 0= , Undef}, [Bass_control] =3D { "bass", 0, {0}, 0, 0= , Undef}, @@ -26,14 +26,14 @@ [Treble_control] =3D { "treble", 0, {0}, 0, 0= , Undef}, [Equalizer_control] =3D { "equalizer", 0, {0}, 0, 0= , Undef}, [Agc_control] =3D { "agc", 0, {0}, 0, 0= , Undef}, - [Delay_control] =3D { "delay", 0, {0}, 0, 0= , Undef}, + [Delay_control] =3D { "delay", 1, {1}, 0, D= DELAY, Undef}, [Bassboost_control] =3D { "bassboost", 0, {0}, 0, 0= , Undef}, [Loudness_control] =3D { "loudness", 0, {0}, 0, 0= , Undef}, [Channel_control] =3D { "channels", 0, {0}, 0, 2= , Undef}, [Resolution_control] =3D { "resolution", 0, {0}, 0, 1= 6, Undef}, // [Selector_control] =3D { "selector", 0, {0}, 0, 0= , Undef}, }, { - [Speed_control] =3D { "speed", 0, {0}, 0, 4= 4100, Undef}, + [Speed_control] =3D { "speed", 0, {0}, 0, D= SPEEDREC, Undef}, [Mute_control] =3D { "mute", 0, {0}, 0, 0= , Undef}, [Volume_control] =3D { "volume", 0, {0}, 0, 0= , Undef}, [Bass_control] =3D { "bass", 0, {0}, 0, 0= , Undef}, @@ -129,6 +129,15 @@ } int +setdelay(int rec, int delay) +{ + if(rec =3D=3D Record && !setrec) + return Undef; + devctl(epdev[rec], "sampledelay %ld", delay); + return delay; +} + +int setspeed(int rec, int speed) { int ps, n, no, dist, i; @@ -226,10 +235,11 @@ } dprint(2, "Configuring %s endpoint for %d Hz\n", rec?"record":"playback", speed); - epdev[rec] =3D openep(ad, endpt[rec]); - if(epdev[rec] =3D=3D nil) - sysfatal("openep rec %d: %r", rec); - + if(epdev[rec] =3D=3D nil){ + epdev[rec] =3D openep(ad, endpt[rec]); + if(epdev[rec] =3D=3D nil) + sysfatal("openep rec %d: %r", rec); + } devctl(epdev[rec], "pollival %d", da->interval); devctl(epdev[rec], "samplesz %ld", controls[rec][Channel_control].v= alue[0] * controls[rec][Resolution_control].value[0]/= 8); @@ -391,8 +401,11 @@ c->value[0] =3D value[0]; controls[rec][Speed_control].value[0] =3D defaultspeed[rec]; return 0; - case Volume_control: case Delay_control: + setdelay(rec, value[0]); + c->value[0] =3D value[0]; + return 0; + case Volume_control: count =3D 2; /* fall through */ case Mute_control: @@ -480,8 +493,12 @@ if(req =3D=3D Rgetcur) value[0] =3D controls[rec][ctl].value[0]; return 0; - case Volume_control: case Delay_control: + if(req !=3D Rgetcur) + return Undef; + value[0] =3D controls[rec][ctl].value[0]; + return 0; + case Volume_control: count =3D 2; /* fall through */ case Bass_control: ------------------------------------------ 9fans: 9fans Permalink: https://9fans.topicbox.com/groups/9fans/Tf6820d74b730765b-M6771d= 495bc597d497acef054 Delivery options: https://9fans.topicbox.com/groups/9fans/subscription --0-537967452-1676428168=:9646 Content-Type: text/x-diff; name=usbaudio.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=usbaudio.patch LS0tIC9uL2Rvd25sb2Fkcy9kZXZ1c2IuYwlUdWUgRmViIDE0IDIwOjQyOjI3 IDIwMjMNCisrKyAvc3lzL3NyYy85L2JjbS9kZXZ1c2IuYwlUdWUgRmViIDE0 IDExOjMxOjI4IDIwMjMNCkBAIC04OCw2ICs4OCw3IEBADQogCUNNZGVidWdl cCwJCS8qIGRlYnVnIG4gKHNldC9jbGVhciBkZWJ1ZyBmb3IgdGhpcyBlcCkg Ki8NCiAJQ01uYW1lLAkJCS8qIG5hbWUgc3RyIChzaG93IHVwIGFzICN1L25h bWUgYXMgd2VsbCkgKi8NCiAJQ010bW91dCwJCS8qIHRpbWVvdXQgbiAoYWN0 aXZhdGUgdGltZW91dHMgZm9yIGVwKSAqLw0KKwlDTXNhbXBsZWRlbGF5LAkJ LyogbWF4aW11bSBkZWxheSBpbnRyb2R1Y2VkIGJ5IGJ1ZmZlcmluZyAoaXNv KSAqLw0KIAlDTXByZXNldCwJCS8qIHJlc2V0IHRoZSBwb3J0ICovDQogDQog CS8qIEh1YiBmZWF0dXJlIHNlbGVjdG9ycyAqLw0KQEAgLTEyOCw2ICsxMjks NyBAQA0KIAl7Q01jbHJoYWx0LAkiY2xyaGFsdCIsCTF9LA0KIAl7Q01uYW1l LAkibmFtZSIsCQkyfSwNCiAJe0NNdG1vdXQsCSJ0aW1lb3V0IiwJMn0sDQor CXtDTXNhbXBsZWRlbGF5LAkic2FtcGxlZGVsYXkiLAkyfSwNCiAJe0NNcHJl c2V0LAkicmVzZXQiLAkxfSwNCiB9Ow0KIA0KQEAgLTEzODcsNiArMTM4OSwx MSBAQA0KIAkJZXAtPnRtb3V0ID0gc3RydG91bChjYi0+ZlsxXSwgbmlsLCAw KTsNCiAJCWlmKGVwLT50bW91dCAhPSAwICYmIGVwLT50bW91dCA8IFhmZXJ0 bW91dCkNCiAJCQllcC0+dG1vdXQgPSBYZmVydG1vdXQ7DQorCQlicmVhazsN CisJY2FzZSBDTXNhbXBsZWRlbGF5Og0KKwkJaWYoZXAtPnR0eXBlICE9IFRp c28pDQorCQkJZXJyb3IoImN0bCBpZ25vcmVkIGZvciB0aGlzIGVuZHBvaW50 IHR5cGUiKTsNCisJCWVwLT5zYW1wbGVkZWxheSA9IHN0cnRvdWwoY2ItPmZb MV0sIG5pbCwgMCk7DQogCQlicmVhazsNCiAJY2FzZSBDTXByZXNldDoNCiAJ CWRlcHJpbnQoInVzYiBlcGN0bCAlc1xuIiwgY2ItPmZbMF0pOw0KLS0tIC9u L2Rvd25sb2Fkcy91c2J4aGNpLmMJVHVlIEZlYiAxNCAyMDo0MTozMyAyMDIz DQorKysgL3N5cy9zcmMvOS9iY20vdXNieGhjaS5jCVR1ZSBGZWIgMTQgMTE6 MjQ6NTMgMjAyMw0KQEAgLTE5NCw2ICsxOTQsNyBAQA0KIA0KIAlpbnQJc3Rv cHBlZDsNCiANCisJaW50CSpyZXNpZHVlOw0KIAlXYWl0CSpwZW5kaW5nOw0K IAlMb2NrOw0KIH07DQpAQCAtMjc3LDYgKzI3OCwxMCBAQA0KIAl1MzJpbnQJ aW5jcjsNCiAJdTMyaW50CXRkc3o7DQogDQorCS8qIGlzb3JlYWQgKi8NCisJ dTMyaW50CXJwMDsNCisJdTMyaW50CWZyYW1lMDsNCisNCiAJaW50CW5sZWZ0 Ow0KIH07DQogDQpAQCAtMTEwMCwxMCArMTEwNSwxNyBAQA0KIHsNCiAJaWYo aW8tPnJpbmcgPT0gbmlsKQ0KIAkJcmV0dXJuOw0KLQlpby0+ZnJhbWUgPSAw Ow0KLQlpby0+cGVyaW9kID0gZXAtPnBvbGxpdmFsPDwzKihlcC0+ZGV2LT5z cGVlZCA9PSBGdWxsc3BlZWQpOw0KLQlpby0+aW5jciA9IChlcC0+aHoqaW8t PnBlcmlvZDw8OCkvODAwMDsNCi0JaW8tPnRkc3ogPSAoaW8tPmluY3IrMjU1 Pj44KSplcC0+c2FtcGxlc3o7DQorCWlvLT5ycDAgPSBpby0+cmluZy0+d3A7 DQorCWlvLT5mcmFtZTAgPSBpby0+ZnJhbWUgPSAwOw0KKwlpby0+cGVyaW9k ID0gZXAtPnBvbGxpdmFsIDw8IDMqKGVwLT5kZXYtPnNwZWVkID09IEZ1bGxz cGVlZCB8fCBlcC0+ZGV2LT5zcGVlZCA9PSBMb3dzcGVlZCk7DQorCWlmKGlv LT5yaW5nLT5pZCAmIDEpew0KKwkJaW8tPnJpbmctPnJlc2lkdWUgPSBzbWFs bG9jKChpby0+cmluZy0+bWFzaysxKSpzaXplb2YoaW8tPnJpbmctPnJlc2lk dWVbMF0pKTsNCisJCWlvLT5pbmNyID0gMDsNCisJCWlvLT50ZHN6ID0gZXAt Pm1heHBrdCplcC0+bnRkczsNCisJfSBlbHNlIHsNCisJCWlvLT5pbmNyID0g KCh2bG9uZyllcC0+aHoqZXAtPnBvbGxpdmFsPDw4KS8xMDAwOw0KKwkJaW8t PnRkc3ogPSAoaW8tPmluY3IrMjU1Pj44KSplcC0+c2FtcGxlc3o7DQorCX0N CiAJaW8tPmIgPSBhbGxvY2IoKGlvLT5yaW5nLT5tYXNrKzEpKmlvLT50ZHN6 KTsNCiB9DQogDQpAQCAtMTMzNiwxMCArMTM0OCwxMCBAQA0KIAl9DQogCcK1 ID0gaW8tPnBlcmlvZDsNCiAJY3RsciA9IGVwLT5ocC0+YXV4Ow0KLQlpZihu ZWVkcmVjb3ZlcihjdGxyKSkNCi0JCWVycm9yKEVyZWNvdmVyKTsNCiAJZm9y KGkgPSBpby0+ZnJhbWU7OyBpKyspew0KIAkJZm9yKDs7KXsNCisJCQlpZihu ZWVkcmVjb3ZlcihjdGxyKSkNCisJCQkJZXJyb3IoRXJlY292ZXIpOw0KIAkJ CW0gPSAoaW50KShpby0+cmluZy0+d3AgLSBpby0+cmluZy0+cnApOw0KIAkJ CWlmKG0gPD0gMCkNCiAJCQkJaSA9ICg4MCArIMK1ZnJhbWUoY3RscikpL8K1 Ow0KQEAgLTEzNjcsMTEgKzEzNzksMTMgQEANCiAJaW8tPmZyYW1lID0gaTsN CiAJd2hpbGUoaW8tPnJpbmctPnJwICE9IGlvLT5yaW5nLT53cCl7DQogCQlp bnQgZCA9IChpbnQpKGkqwrUgLSDCtWZyYW1lKGN0bHIpKS84Ow0KLQkJLy9k IC09IGVwLT5zYW1wbGVkZWxheSoxMDAwIC8gZXAtPmh6Ow0KKwkJZCAtPSBl cC0+c2FtcGxlZGVsYXkqMTAwMCAvIGVwLT5oejsNCiAJCWlmKGQgPCA1KQ0K IAkJCWJyZWFrOw0KIAkJKmlvLT5yaW5nLT5kb29yYmVsbCA9IGlvLT5yaW5n LT5pZDsNCiAJCXRzbGVlcCgmdXAtPnNsZWVwLCByZXR1cm4wLCBuaWwsIGQp Ow0KKwkJCWlmKG5lZWRyZWNvdmVyKGN0bHIpKQ0KKwkJCQllcnJvcihFcmVj b3Zlcik7DQogCX0NCiAJcXVubG9jayhpbyk7DQogCXBvcGVycm9yKCk7DQot LS0gL24vZG93bmxvYWRzL2F1ZGlvLmgJVHVlIEZlYiAxNCAyMzo1Mjo1NSAy MDIzDQorKysgL3N5cy9zcmMvY21kL3VzYi9hdWRpby9hdWRpby5oCVR1ZSBG ZWIgMTQgMjM6Mjk6MDMgMjAyMw0KQEAgLTM5LDYgKzM5LDExIEBADQogDQog I2RlZmluZSBTQU1QTElOR19GUkVRX0NPTlRST0wgMHgwMQ0KIA0KKyNkZWZp bmUgRFNQRUVEUExBWSA0NDEwMA0KKyNkZWZpbmUgRFNQRUVEUkVDIDQ0MTAw DQorLyogNDBtcyAqLw0KKyNkZWZpbmUgRERFTEFZIDE3NjQNCisNCiB0eXBl ZGVmIHN0cnVjdCBBdWRpb2FsdCBBdWRpb2FsdDsNCiANCiBzdHJ1Y3QgQXVk aW9hbHQgew0KLS0tIC9uL2Rvd25sb2Fkcy9hdWRpby5jCVR1ZSBGZWIgMTQg MjM6NTI6MzYgMjAyMw0KKysrIC9zeXMvc3JjL2NtZC91c2IvYXVkaW8vYXVk aW8uYwlXZWQgRmViIDE1IDAxOjAwOjUxIDIwMjMNCkBAIC0yNSw3ICsyNSw3 IEBADQogDQogaW50IHZlcmJvc2U7DQogaW50IHNldHJlYyA9IDA7DQotaW50 IGRlZmF1bHRzcGVlZFsyXSA9IHs0NDEwMCwgNDQxMDB9Ow0KK2ludCBkZWZh dWx0c3BlZWRbMl09IHsgRFNQRUVEUExBWSwgRFNQRUVEUkVDfTsNCiBEZXYg KmJ1dHRvbmRldjsNCiBEZXYgKmVwZGV2WzJdOw0KIA0KQEAgLTM3Miw2ICsz NzIsOCBAQA0KIAl2YWx1ZVswXSA9IGRlZmF1bHRzcGVlZFtSZWNvcmRdOw0K IAlpZihlbmRwdFtSZWNvcmRdID49IDAgJiYgc2V0Y29udHJvbChSZWNvcmQs ICJzcGVlZCIsIHZhbHVlKSA8IDApDQogCQlmcHJpbnQoMiwgIiVzOiBjYW4n dCBzZXQgcmVjb3JkIHNwZWVkXG4iLCBhcmd2MCk7DQorCXZhbHVlWzBdID0g RERFTEFZOw0KKwlzZXRjb250cm9sKFBsYXksICJkZWxheSIsIHZhbHVlKTsN CiAJdmFsdWVbMF0gPSAwOw0KIAlzZXRjb250cm9sKFBsYXksICJtdXRlIiwg dmFsdWUpOw0KIA0KLS0tIC9uL2Rvd25sb2Fkcy9hdWRpb2N0bC5jCVR1ZSBG ZWIgMTQgMjA6NDM6MjYgMjAyMw0KKysrIC9zeXMvc3JjL2NtZC91c2IvYXVk aW8vYXVkaW9jdGwuYwlXZWQgRmViIDE1IDAxOjEzOjQ4IDIwMjMNCkBAIC0x OCw3ICsxOCw3IEBADQogDQogQXVkaW9jb250cm9sIGNvbnRyb2xzWzJdW05j b250cm9sXSA9IHsNCiAJew0KLQlbU3BlZWRfY29udHJvbF0gPSB7CQkic3Bl ZWQiLAkwLCB7MH0sIDAsCTQ0MTAwLAlVbmRlZn0sDQorCVtTcGVlZF9jb250 cm9sXSA9IHsJCSJzcGVlZCIsCTAsIHswfSwgMCwJRFNQRUVEUExBWSwJVW5k ZWZ9LA0KIAlbTXV0ZV9jb250cm9sXSA9IHsJCSJtdXRlIiwJCTAsIHswfSwg MCwJMCwJVW5kZWZ9LA0KIAlbVm9sdW1lX2NvbnRyb2xdID0gewkJInZvbHVt ZSIsCTAsIHswfSwgMCwJMCwJVW5kZWZ9LA0KIAlbQmFzc19jb250cm9sXSA9 IHsJCSJiYXNzIiwJCTAsIHswfSwgMCwJMCwJVW5kZWZ9LA0KQEAgLTI2LDE0 ICsyNiwxNCBAQA0KIAlbVHJlYmxlX2NvbnRyb2xdID0gewkJInRyZWJsZSIs CTAsIHswfSwgMCwJMCwJVW5kZWZ9LA0KIAlbRXF1YWxpemVyX2NvbnRyb2xd ID0gewkJImVxdWFsaXplciIsCTAsIHswfSwgMCwJMCwJVW5kZWZ9LA0KIAlb QWdjX2NvbnRyb2xdID0gewkJImFnYyIsCQkwLCB7MH0sIDAsCTAsCVVuZGVm fSwNCi0JW0RlbGF5X2NvbnRyb2xdID0gewkJImRlbGF5IiwJMCwgezB9LCAw LAkwLAlVbmRlZn0sDQorCVtEZWxheV9jb250cm9sXSA9IHsJCSJkZWxheSIs CTEsIHsxfSwgMCwJRERFTEFZLAlVbmRlZn0sDQogCVtCYXNzYm9vc3RfY29u dHJvbF0gPSB7CQkiYmFzc2Jvb3N0IiwJMCwgezB9LCAwLAkwLAlVbmRlZn0s DQogCVtMb3VkbmVzc19jb250cm9sXSA9IHsJCSJsb3VkbmVzcyIsCTAsIHsw fSwgMCwJMCwJVW5kZWZ9LA0KIAlbQ2hhbm5lbF9jb250cm9sXSA9IHsJCSJj aGFubmVscyIsCTAsIHswfSwgMCwJMiwJVW5kZWZ9LA0KIAlbUmVzb2x1dGlv bl9jb250cm9sXSA9IHsJInJlc29sdXRpb24iLAkwLCB7MH0sIDAsCTE2LAlV bmRlZn0sDQogLy8JW1NlbGVjdG9yX2NvbnRyb2xdID0gewkJInNlbGVjdG9y IiwJMCwgezB9LCAwLAkwLAlVbmRlZn0sDQogCX0sIHsNCi0JW1NwZWVkX2Nv bnRyb2xdID0gewkJInNwZWVkIiwJMCwgezB9LCAwLAk0NDEwMCwJVW5kZWZ9 LA0KKwlbU3BlZWRfY29udHJvbF0gPSB7CQkic3BlZWQiLAkwLCB7MH0sIDAs CURTUEVFRFJFQywJVW5kZWZ9LA0KIAlbTXV0ZV9jb250cm9sXSA9IHsJCSJt dXRlIiwJCTAsIHswfSwgMCwJMCwJVW5kZWZ9LA0KIAlbVm9sdW1lX2NvbnRy b2xdID0gewkJInZvbHVtZSIsCTAsIHswfSwgMCwJMCwJVW5kZWZ9LA0KIAlb QmFzc19jb250cm9sXSA9IHsJCSJiYXNzIiwJCTAsIHswfSwgMCwJMCwJVW5k ZWZ9LA0KQEAgLTEyOSw2ICsxMjksMTUgQEANCiB9DQogDQogaW50DQorc2V0 ZGVsYXkoaW50IHJlYywgaW50IGRlbGF5KQ0KK3sNCisJaWYocmVjID09IFJl Y29yZCAmJiAhc2V0cmVjKQ0KKwkJcmV0dXJuIFVuZGVmOw0KKwlkZXZjdGwo ZXBkZXZbcmVjXSwgInNhbXBsZWRlbGF5ICVsZCIsIGRlbGF5KTsNCisJcmV0 dXJuIGRlbGF5Ow0KK30NCisNCitpbnQNCiBzZXRzcGVlZChpbnQgcmVjLCBp bnQgc3BlZWQpDQogew0KIAlpbnQgcHMsIG4sIG5vLCBkaXN0LCBpOw0KQEAg LTIyNiwxMCArMjM1LDExIEBADQogCX0NCiAJZHByaW50KDIsICJDb25maWd1 cmluZyAlcyBlbmRwb2ludCBmb3IgJWQgSHpcbiIsDQogCQkJCXJlYz8icmVj b3JkIjoicGxheWJhY2siLCBzcGVlZCk7DQotCWVwZGV2W3JlY10gPSBvcGVu ZXAoYWQsIGVuZHB0W3JlY10pOw0KLQlpZihlcGRldltyZWNdID09IG5pbCkN Ci0JCXN5c2ZhdGFsKCJvcGVuZXAgcmVjICVkOiAlciIsIHJlYyk7DQotDQor CWlmKGVwZGV2W3JlY10gPT0gbmlsKXsNCisJCWVwZGV2W3JlY10gPSBvcGVu ZXAoYWQsIGVuZHB0W3JlY10pOw0KKwkJaWYoZXBkZXZbcmVjXSA9PSBuaWwp DQorCQkJc3lzZmF0YWwoIm9wZW5lcCByZWMgJWQ6ICVyIiwgcmVjKTsNCisJ fQ0KIAlkZXZjdGwoZXBkZXZbcmVjXSwgInBvbGxpdmFsICVkIiwgZGEtPmlu dGVydmFsKTsNCiAJZGV2Y3RsKGVwZGV2W3JlY10sICJzYW1wbGVzeiAlbGQi LCBjb250cm9sc1tyZWNdW0NoYW5uZWxfY29udHJvbF0udmFsdWVbMF0gKg0K IAkJCQljb250cm9sc1tyZWNdW1Jlc29sdXRpb25fY29udHJvbF0udmFsdWVb MF0vOCk7DQpAQCAtMzkxLDggKzQwMSwxMSBAQA0KIAkJYy0+dmFsdWVbMF0g PSB2YWx1ZVswXTsNCiAJCWNvbnRyb2xzW3JlY11bU3BlZWRfY29udHJvbF0u dmFsdWVbMF0gPSBkZWZhdWx0c3BlZWRbcmVjXTsNCiAJCXJldHVybiAwOw0K LQljYXNlIFZvbHVtZV9jb250cm9sOg0KIAljYXNlIERlbGF5X2NvbnRyb2w6 DQorCQlzZXRkZWxheShyZWMsIHZhbHVlWzBdKTsNCisJCWMtPnZhbHVlWzBd ID0gdmFsdWVbMF07DQorCQlyZXR1cm4gMDsNCisJY2FzZSBWb2x1bWVfY29u dHJvbDoNCiAJCWNvdW50ID0gMjsNCiAJCS8qIGZhbGwgdGhyb3VnaCAqLw0K IAljYXNlIE11dGVfY29udHJvbDoNCkBAIC00ODAsOCArNDkzLDEyIEBADQog CQlpZihyZXEgPT0gUmdldGN1cikNCiAJCQl2YWx1ZVswXSA9IGNvbnRyb2xz W3JlY11bY3RsXS52YWx1ZVswXTsNCiAJCXJldHVybiAwOw0KLQljYXNlIFZv bHVtZV9jb250cm9sOg0KIAljYXNlIERlbGF5X2NvbnRyb2w6DQorCQlpZihy ZXEgIT0gUmdldGN1cikNCisJCQlyZXR1cm4gVW5kZWY7DQorCQl2YWx1ZVsw XSA9IGNvbnRyb2xzW3JlY11bY3RsXS52YWx1ZVswXTsNCisJCXJldHVybiAw Ow0KKwljYXNlIFZvbHVtZV9jb250cm9sOg0KIAkJY291bnQgPSAyOw0KIAkJ LyogZmFsbCB0aHJvdWdoICovDQogCWNhc2UgQmFzc19jb250cm9sOg0K --0-537967452-1676428168=:9646--