summaryrefslogtreecommitdiff
path: root/sys/src/cmd/aux
diff options
context:
space:
mode:
authorSigrid Solveig Haflínudóttir <sigrid@ftrv.se>2022-08-19 01:55:12 +0000
committerSigrid Solveig Haflínudóttir <sigrid@ftrv.se>2022-08-19 01:55:12 +0000
commit48806b3e930899f1705afdcd50dd5cf862c3cbc1 (patch)
tree27bd68142a52ce652ec7e87f1d353b11c09bc489 /sys/src/cmd/aux
parent700bb3fa43f7ba5fc5e8b88873c9743f62344865 (diff)
aux/wm8960: expose 3d stereo controls
Diffstat (limited to 'sys/src/cmd/aux')
-rw-r--r--sys/src/cmd/aux/wm8960.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/sys/src/cmd/aux/wm8960.c b/sys/src/cmd/aux/wm8960.c
index 227de2993..5762a741b 100644
--- a/sys/src/cmd/aux/wm8960.c
+++ b/sys/src/cmd/aux/wm8960.c
@@ -36,6 +36,7 @@ static char *uid = "audio";
static int data;
static int reg1a;
static int rate = 44100;
+static int ⅓d;
static void
wr(int a, int v)
@@ -92,6 +93,14 @@ setvol(Out *o, int l, int r)
wr(o->volreg+1, 1<<8 | zc<<7 | r);
}
+static void
+set3d(int x)
+{
+ ⅓d = CLAMP(x, 0, 100);
+ x = (⅓d+5)/7;
+ wr(0x10, x<<1 | (x ? 1 : 0)<<0);
+}
+
static int
setrate(int s)
{
@@ -159,6 +168,7 @@ reset(void)
wr(0x0f, 0); /* reset registers to default */
setrate(rate);
+ set3d(⅓d);
wr(0x07, 1<<6 | 2); /* master mode; i²s, 16-bit words */
@@ -209,8 +219,9 @@ fsread(Req *r)
}else if(r->fid->file->aux == (void*)Vol){
for(i = 0, o = out; i < Nout; i++, o++)
s = seprint(s, e, "%s %d %d\n", o->name, o->vol[0], o->vol[1]);
- seprint(s, e, "speed %d\n", rate);
+ s = seprint(s, e, "speed %d\n", rate);
}
+ seprint(s, e, "3d %d\n", ⅓d);
readstr(r, msg);
respond(r, nil);
@@ -226,21 +237,23 @@ fswrite(Req *r)
snprint(msg, sizeof(msg), "%.*s",
utfnlen((char*)r->ifcall.data, r->ifcall.count), (char*)r->ifcall.data);
nf = tokenize(msg, f, nelem(f));
- if(nf < 2){
- if(nf == 1 && strcmp(f[0], "reset") == 0){
- reset();
- goto Done;
- }
-Emsg:
- respond(r, "invalid ctl message");
- return;
- }
- if(nf == 2 && strcmp(f[0], "speed") == 0){
+ if(nf == 1 && strcmp(f[0], "reset") == 0){
+ reset();
+ goto Done;
+ }else if(nf == 2 && strcmp(f[0], "speed") == 0){
if(setrate(atoi(f[1])) != 0){
respond(r, "not supported");
return;
}
goto Done;
+ }else if(nf == 2 && strcmp(f[0], "3d") == 0){
+ set3d(atoi(f[1]));
+ goto Done;
+ }
+ if(nf < 2){
+Emsg:
+ respond(r, "invalid ctl message");
+ return;
}
for(i = 0, o = out; i < Nout && strcmp(f[0], o->name) != 0; i++, o++)