Using our dtb package's blobs cwfg(4) won't attach on the Pinebook Pro
since linux changed it:

https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/power/supply/cw2015_battery.yaml

Thanks to kettenis and patrick for pointing this out.

This diff makes the sensor attach again and both hw.sensors as well as
apm (with the other diff) show correct values.


NB: This used to work without this diff with whatever blob was on the
machine when it came to me;  it broke after I updated/replaced it with
/usr/local/share/dtb/arm64/rockchip/rk3399-pinebook-pro.dtb .

Feedback? OK?

Index: cwfg.c
===================================================================
RCS file: /cvs/src/sys/dev/fdt/cwfg.c,v
retrieving revision 1.1
diff -u -p -r1.1 cwfg.c
--- cwfg.c      10 Jun 2020 17:51:21 -0000      1.1
+++ cwfg.c      22 Mar 2021 16:37:17 -0000
@@ -124,7 +124,7 @@ cwfg_match(struct device *parent, void *
 {
        struct i2c_attach_args *ia = aux;
 
-       if (strcmp(ia->ia_name, "cellwise,cw201x") == 0)
+       if (strcmp(ia->ia_name, "cellwise,cw2015") == 0)
                return 1;
 
        return 0;
@@ -143,14 +143,14 @@ cwfg_attach(struct device *parent, struc
        sc->sc_addr = ia->ia_addr;
        sc->sc_node = *(int *)ia->ia_cookie;
 
-       len = OF_getproplen(sc->sc_node, "cellwise,bat-config-info");
+       len = OF_getproplen(sc->sc_node, "cellwise,battery-profile");
        if (len <= 0) {
                printf(": missing or invalid battery info\n");
                return;
        }
 
        batinfo = malloc(len, M_TEMP, M_WAITOK);
-       OF_getprop(sc->sc_node, "cellwise,bat-config-info", batinfo, len);
+       OF_getprop(sc->sc_node, "cellwise,battery-profile", batinfo, len);
        switch (len) {
        case BATINFO_SIZE:
                memcpy(sc->sc_batinfo, batinfo, BATINFO_SIZE);
@@ -167,7 +167,7 @@ cwfg_attach(struct device *parent, struc
        free(batinfo, M_TEMP, len);
 
        sc->sc_monitor_interval = OF_getpropint(sc->sc_node,
-           "cellwise,monitor-interval", CWFG_MONITOR_INTERVAL_DEFAULT);
+           "cellwise,monitor-interval-ms", CWFG_MONITOR_INTERVAL_DEFAULT);
        sc->sc_design_capacity = OF_getpropint(sc->sc_node,
            "cellwise,design-capacity", CWFG_DESIGN_CAPACITY_DEFAULT);
        sc->sc_alert_level = OF_getpropint(sc->sc_node,

Reply via email to