2013/8/13 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.
>
> 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;

Probably a stupid question, but is it safe to call aml_evalinteger()
when we're suspending (lid_suspend!=0)?

>                 if (lid == 0)
>                         goto sleep;
>  #endif /* SMALL_KERNEL */
>

--
  WBR,
  Vadim Zhukov

Reply via email to