diff -r 5ca47d85e288 sys/src/cmd/aux/acpi.c --- a/sys/src/cmd/aux/acpi.c Mon Sep 21 11:43:31 2020 -0700 +++ b/sys/src/cmd/aux/acpi.c Fri Sep 25 10:16:52 2020 +0300 @@ -83,7 +83,39 @@ {{Qcputemp}, "cputemp", 0444, tmpread, nil}, {{Qctl}, "ctl", 0666, ctlread, ctlwrite}, }; +static char* +eisaid(void *v) +{ + static char id[8]; + ulong b, l; + int i; + if(amltag(v) == 's') + return v; + b = amlint(v); + for(l = 0, i=24; i>=0; i -= 8, b >>= 8) + l |= (b & 0xFF) << i; + id[7] = 0; + for(i=6; i>=3; i--, l >>= 4) + id[i] = "0123456789ABCDEF"[l & 0xF]; + for(i=2; i>=0; i--, l >>= 5) + id[i] = '@' + (l & 0x1F); + return id; +} +static int +enumec(void *dot, void *) +{ + void *p; + char *id; + id = eisaid(amlval(amlwalk(dot, "^_HID"))); + if (id == nil || strcmp(id, "PNP0C09") != 0) + return 1; + p = amlwalk(dot, "^_REG"); + if (p != nil) { + amleval(p, "ii", 0x3, 1, nil); + } + return 1; +} static int enumbat(void *dot, void *) { @@ -501,6 +533,7 @@ } close(fd); + amlenum(amlroot, "_HID", enumec, nil); amlenum(amlroot, "_BIF", enumbat, nil); amlenum(amlroot, "_PSL", enumtmp, nil);