diff options
author | Sigrid Solveig Haflínudóttir <sigrid@ftrv.se> | 2022-08-19 01:55:12 +0000 |
---|---|---|
committer | Sigrid Solveig Haflínudóttir <sigrid@ftrv.se> | 2022-08-19 01:55:12 +0000 |
commit | 48806b3e930899f1705afdcd50dd5cf862c3cbc1 (patch) | |
tree | 27bd68142a52ce652ec7e87f1d353b11c09bc489 /sys | |
parent | 700bb3fa43f7ba5fc5e8b88873c9743f62344865 (diff) |
aux/wm8960: expose 3d stereo controls
Diffstat (limited to 'sys')
-rw-r--r-- | sys/src/cmd/aux/wm8960.c | 35 |
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++) |