> Date: Tue, 13 Aug 2013 00:00:19 +0200
> From: Landry Breuil <lan...@rhaalovely.net>
> 
> On Mon, Aug 12, 2013 at 06:01:25PM +0200, David Coppa wrote:
> > On Mon, Aug 12, 2013 at 5:40 PM, Landry Breuil <lan...@rhaalovely.net> 
> > wrote:
> > > Hi,
> > >
> > > this diff adds a sensor for acpibtn to show lid status. This allows
> > > userland to monitor/react on lid close/open events, in case one is not
> > > using machdep.lidsuspend. I know sysutils/upower can make use of this, i
> > > just need to add the corresponding code there.
> > >
> > > comments ? I wonder if/how the case when aml_evalinteger() fails should
> > > be handled in acpibtn_attach()..
> > 
> > Where's the diff?
> > 
> Err.. here it is.

ok kettenis@

Wonder if this should change the description to reflect the lid status
like acpidock0 does for the dock status.  But that can be done as a
seperate diff.


> Index: acpibtn.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/acpibtn.c,v
> retrieving revision 1.34
> diff -u -r1.34 acpibtn.c
> --- acpibtn.c 2 Jan 2011 04:56:57 -0000       1.34
> +++ acpibtn.c 12 Aug 2013 15:35:35 -0000
> @@ -46,6 +46,9 @@
>       struct acpi_softc       *sc_acpi;
>       struct aml_node         *sc_devnode;
>  
> +     struct ksensor          sc_sens;
> +     struct ksensordev       sc_sensdev;
> +
>       int                     sc_btn_type;
>  #define      ACPIBTN_UNKNOWN 0
>  #define ACPIBTN_LID  1
> @@ -123,6 +126,7 @@
>       struct acpibtn_softc    *sc = (struct acpibtn_softc *)self;
>       struct acpi_attach_args *aa = aux;
>       struct acpi_lid         *lid;
> +     int64_t                 lid_open;
>  
>       sc->sc_acpi = (struct acpi_softc *)parent;
>       sc->sc_devnode = aa->aaa_node;
> @@ -143,6 +147,20 @@
>  
>       printf(": %s\n", sc->sc_devnode->name);
>  
> +     if (sc->sc_btn_type == ACPIBTN_LID) {
> +             strlcpy(sc->sc_sensdev.xname, DEVNAME(sc),
> +                 sizeof(sc->sc_sensdev.xname));
> +             strlcpy(sc->sc_sens.desc, "lid open",
> +                 sizeof(sc->sc_sens.desc));
> +             sc->sc_sens.type = SENSOR_INDICATOR;
> +             sensor_attach(&sc->sc_sensdev, &sc->sc_sens);
> +             sensordev_install(&sc->sc_sensdev);
> +
> +             aml_evalinteger(sc->sc_acpi, sc->sc_devnode,
> +                 "_LID", 0, NULL, &lid_open);
> +             sc->sc_sens.value = lid_open;
> +     }
> +
>       aml_register_notify(sc->sc_devnode, aa->aaa_dev, acpibtn_notify,
>           sc, ACPIDEV_NOPOLL);
>  }
> @@ -179,11 +197,12 @@
>                * _LID method.  0 means the lid is closed and we
>                * should go to sleep.
>                */
> -             if (lid_suspend == 0)
> -                     break;
>               if (aml_evalinteger(sc->sc_acpi, sc->sc_devnode,
>                   "_LID", 0, NULL, &lid))
>                       return (0);
> +             sc->sc_sens.value = lid;
> +             if (lid_suspend == 0)
> +                     break;
>               if (lid == 0)
>                       goto sleep;
>  #endif /* SMALL_KERNEL */
> 
> 

Reply via email to