ref: 93da12e8aa32dc5c18e9a52d3e73dc74eb0e806b
parent: 078d7a0281cc4ce4f43fd757759bb7610e667fb8
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Mon May 20 18:26:42 EDT 2024
nusb/audio: use correct buffer size for d2h requests, else some devices stalls
--- a/sys/src/cmd/nusb/audio/audio.c
+++ b/sys/src/cmd/nusb/audio/audio.c
@@ -37,7 +37,7 @@
Cnum,
Conlycur = 1<<Cmute | 1<<Cagc | 1<<Cbassboost | 1<<Cloudness,
- Cszone = 1<<Cbass | 1<<Cmid | 1<<Ctreble,
+ Cszone = Conlycur | 1<<Cbass | 1<<Cmid | 1<<Ctreble,
Cmask1 = (1<<Cvolume | Conlycur | Cszone)>>1,
Cmask2 = (
3<<Cmute*2 | 3<<Cvolume*2 | 3<<Cbass*2 |
@@ -380,20 +380,20 @@
}
int
-getvalue(int r, uchar id, uchar hi, uchar lo, short *value)
+getvalue(int r, uchar id, uchar cs, uchar cn, short *value)
{
- uchar b[2 + 32*3*4];
- int rc, i, n;
+ uchar b[2 + 1*3*2];
+ int rc, i, n, sz;
*value = 0;
i = 0;
- if(Proto(ac->csp) == Paudio1)
- rc = usbcmd(adev, Rd2h|Rclass|Riface, r, hi<<8 | lo, id<<8 | ac->id, b, sizeof(b));
- else {
+ sz = (Cszone & (1<<cs)) ? 1 : 2;
+ if(Proto(ac->csp) == Paudio2){
+ sz = 2 + 1*3*sz;
i = r - Rgetmin;
r = r == Rgetcur ? Rcur : Rrange;
- rc = usbcmd(adev, Rd2h|Rclass|Riface, r, hi<<8 | lo, id<<8 | ac->id, b, sizeof(b));
}
+ rc = usbcmd(adev, Rd2h|Rclass|Riface, r, cs<<8 | cn, id<<8 | ac->id, b, sz);
if(rc < 0)
return -1;
if(rc < 1)
--
⑨