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

Reply via email to