Hi,

some machines have no _BQC method, which is used to query the
current display backlight level.  We can still work on those by
starting with the highest level (when there's no _BQC method)
and keeping track of the current level.

Patrick

diff --git a/sys/dev/acpi/acpivideo.c b/sys/dev/acpi/acpivideo.c
index 9498465a418..a46a99a67f7 100644
--- a/sys/dev/acpi/acpivideo.c
+++ b/sys/dev/acpi/acpivideo.c
@@ -149,7 +149,7 @@ acpi_foundvout(struct aml_node *node, void *arg)
        if (node->parent != sc->sc_devnode)
                return (0);
 
-       if (aml_searchname(node, "_BCM") && aml_searchname(node, "_BQC")) {
+       if (aml_searchname(node, "_BCM")) {
                memset(&aaa, 0, sizeof(aaa));
                aaa.aaa_iot = sc->sc_acpi->sc_iot;
                aaa.aaa_memt = sc->sc_acpi->sc_memt;
diff --git a/sys/dev/acpi/acpivout.c b/sys/dev/acpi/acpivout.c
index 5fb6973f595..b63ab5a08f3 100644
--- a/sys/dev/acpi/acpivout.c
+++ b/sys/dev/acpi/acpivout.c
@@ -60,6 +60,7 @@ struct acpivout_softc {
 
        int     *sc_bcl;
        size_t  sc_bcl_len;
+       int     sc_bcl_cur;
 };
 
 void   acpivout_brightness_cycle(struct acpivout_softc *);
@@ -113,10 +114,16 @@ acpivout_attach(struct device *parent, struct device 
*self, void *aux)
        aml_register_notify(sc->sc_devnode, aaa->aaa_dev,
            acpivout_notify, sc, ACPIDEV_NOPOLL);
 
+       acpivout_get_bcl(sc);
+       if (!sc->sc_bcl_len)
+               return;
+
+       sc->sc_bcl_cur = sc->sc_bcl[sc->sc_bcl_len - 1];
+       sc->sc_bcl_cur = acpivout_get_brightness(sc);
+       acpivout_set_brightness(sc, sc->sc_bcl_cur);
+
        ws_get_param = acpivout_get_param;
        ws_set_param = acpivout_set_param;
-
-       acpivout_get_bcl(sc);
 }
 
 int
@@ -200,7 +207,9 @@ acpivout_get_brightness(struct acpivout_softc *sc)
        struct aml_value res;
        int level;
 
-       aml_evalname(sc->sc_acpi, sc->sc_devnode, "_BQC", 0, NULL, &res);
+       if (aml_evalname(sc->sc_acpi, sc->sc_devnode, "_BQC", 0, NULL, &res))
+               return sc->sc_bcl_cur;
+
        level = aml_val2int(&res);
        aml_freevalue(&res);
        DPRINTF(("%s: BQC = %d\n", DEVNAME(sc), level));
@@ -242,6 +251,7 @@ acpivout_set_brightness(struct acpivout_softc *sc, int 
level)
        aml_evalname(sc->sc_acpi, sc->sc_devnode, "_BCM", 1, &args, &res);
 
        aml_freevalue(&res);
+       sc->sc_bcl_cur = level;
 }
 
 void

Reply via email to