aux/acpi: connect EC region handler, fixes battery status on eeepc 1000px (thanks Peter Kosyh)

This commit is contained in:
Sigrid 2020-09-25 10:28:25 +02:00
parent 2968225196
commit 878911b628

View file

@ -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);