diff options
author | Sigrid <ftrvxmtrx@gmail.com> | 2020-09-25 10:28:25 +0200 |
---|---|---|
committer | Sigrid <ftrvxmtrx@gmail.com> | 2020-09-25 10:28:25 +0200 |
commit | 878911b628207d05a1cf829235e61112bcae59f5 (patch) | |
tree | 305c5743cc6e2315fc64a0f88daf77cb9d1596d1 | |
parent | 2968225196d6078203e88d26572a51216f545c1d (diff) | |
download | plan9front-878911b628207d05a1cf829235e61112bcae59f5.tar.xz |
aux/acpi: connect EC region handler, fixes battery status on eeepc 1000px (thanks Peter Kosyh)
-rw-r--r-- | sys/src/cmd/aux/acpi.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/sys/src/cmd/aux/acpi.c b/sys/src/cmd/aux/acpi.c index e5252022b..9bd5e38fc 100644 --- a/sys/src/cmd/aux/acpi.c +++ b/sys/src/cmd/aux/acpi.c @@ -84,6 +84,41 @@ Dfile dfile[] = { {{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 +536,7 @@ threadmain(int argc, char **argv) } close(fd); + amlenum(amlroot, "_HID", enumec, nil); amlenum(amlroot, "_BIF", enumbat, nil); amlenum(amlroot, "_PSL", enumtmp, nil); |