On Fri, Mar 28, 2014 at 11:59:57AM +0200, Paul Irofti wrote:
> On Thu, Mar 27, 2014 at 08:33:51PM -0400, James Turner wrote:
> > I'm running the most recent amd64 snap (3/27) and it sounds like this
> > diff might be in it?
> >
> > Also not sure if this diff would affect the reporting of acpi battery
> > usage but after upgrading my acpibat0 sensors are all over the place.
> >
> > Initial boot on a plugged in and fully charged battery shows 51%. I let
> > it drain to 35% and rebooted. With the computer still unplugged it
> > showed 100%. I then plugged it back in and it jumped back down to 35%.
>
> Does running with this diff manifest the same battery woes?
>
Things seem to be back to normal with this diff. Battery indicator is
returning the results I would expect.
> Index: acpiec.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/acpiec.c,v
> retrieving revision 1.48
> diff -u -p -r1.48 acpiec.c
> --- acpiec.c 2 Jul 2013 18:37:47 -0000 1.48
> +++ acpiec.c 28 Mar 2014 09:57:43 -0000
> @@ -34,6 +34,7 @@
>
> int acpiec_match(struct device *, void *, void *);
> void acpiec_attach(struct device *, struct device *, void *);
> +int acpiec_activate(struct device *, int);
>
> u_int8_t acpiec_status(struct acpiec_softc *);
> u_int8_t acpiec_read_data(struct acpiec_softc *);
> @@ -54,6 +55,7 @@ int acpiec_getregister(const u_int8_t *
>
> void acpiec_wait(struct acpiec_softc *, u_int8_t, u_int8_t);
> void acpiec_sci_event(struct acpiec_softc *);
> +void acpiec_clear_events(struct acpiec_softc *);
>
> void acpiec_get_events(struct acpiec_softc *);
>
> @@ -82,7 +84,8 @@ void acpiec_unlock(struct acpiec_softc
> int acpiec_reg(struct acpiec_softc *);
>
> struct cfattach acpiec_ca = {
> - sizeof(struct acpiec_softc), acpiec_match, acpiec_attach
> + sizeof(struct acpiec_softc), acpiec_match, acpiec_attach,
> + NULL, acpiec_activate
> };
>
> struct cfdriver acpiec_cd = {
> @@ -296,6 +299,8 @@ acpiec_attach(struct device *parent, str
> acpi_set_gpehandler(sc->sc_acpi, sc->sc_gpe, acpiec_gpehandler,
> sc, 1);
> #endif
> +
> + /* acpiec_clear_events(sc); */
>
> if (aml_evalname(sc->sc_acpi, sc->sc_devnode, "_GLK", 0, NULL, &res))
> sc->sc_glk = 0;
> @@ -307,6 +312,20 @@ acpiec_attach(struct device *parent, str
> printf("\n");
> }
>
> +int
> +acpiec_activate(struct device *self, int act)
> +{
> + struct acpiec_softc *sc = (struct acpiec_softc *)self;
> +
> +
> + switch (act) {
> + case DVACT_RESUME:
> + acpiec_clear_events(sc);
> + break;
> + }
> + return (0);
> +}
> +
> void
> acpiec_get_events(struct acpiec_softc *sc)
> {
> @@ -552,4 +571,18 @@ acpiec_unlock(struct acpiec_softc *sc)
> }
>
> sc->sc_ecbusy = 0;
> +}
> +
> +void
> +acpiec_clear_events(struct acpiec_softc *sc)
> +{
> + int i;
> +
> + for (i = 0; i < 100; i++) {
> + acpiec_write_cmd(sc, EC_CMD_QR);
> + sc->sc_gotsci = 0;
> + if ((acpiec_status(sc) & EC_STAT_SCI_EVT) != EC_STAT_SCI_EVT) {
> + break;
> + }
> + }
> }
>
--
James Turner