diff options
author | Ganbold Tsagaankhuu <ganbold@FreeBSD.org> | 2015-05-24 07:45:42 +0000 |
---|---|---|
committer | Ganbold Tsagaankhuu <ganbold@FreeBSD.org> | 2015-05-24 07:45:42 +0000 |
commit | 3a9ac40382469a3ce163a2d4379bd8c41cdf6b47 (patch) | |
tree | a53d7f1b99a7ab76d9db828c32eaac6a69db9eb4 | |
parent | 5db06fccd8d64033897e6e924e1dcece448c0528 (diff) |
Notes
-rw-r--r-- | sys/dev/acpi_support/acpi_ibm.c | 3 | ||||
-rw-r--r-- | sys/dev/gpio/gpioled.c | 27 | ||||
-rw-r--r-- | sys/dev/led/led.c | 3 |
3 files changed, 28 insertions, 5 deletions
diff --git a/sys/dev/acpi_support/acpi_ibm.c b/sys/dev/acpi_support/acpi_ibm.c index c69f8bff2bb11..c2f90d1d4bce7 100644 --- a/sys/dev/acpi_support/acpi_ibm.c +++ b/sys/dev/acpi_support/acpi_ibm.c @@ -445,7 +445,8 @@ acpi_ibm_attach(device_t dev) /* Hook up light to led(4) */ if (sc->light_set_supported) - sc->led_dev = led_create_state(ibm_led, sc, "thinklight", sc->light_val); + sc->led_dev = led_create_state(ibm_led, sc, "thinklight", + (sc->light_val ? 1 : 0)); return (0); } diff --git a/sys/dev/gpio/gpioled.c b/sys/dev/gpio/gpioled.c index 5af73735ffb42..01710c2e8f566 100644 --- a/sys/dev/gpio/gpioled.c +++ b/sys/dev/gpio/gpioled.c @@ -166,8 +166,10 @@ static int gpioled_attach(device_t dev) { struct gpioled_softc *sc; + int state; #ifdef FDT phandle_t node; + char *default_state; char *name; #else const char *name; @@ -177,10 +179,29 @@ gpioled_attach(device_t dev) sc->sc_dev = dev; sc->sc_busdev = device_get_parent(dev); GPIOLED_LOCK_INIT(sc); + + state = 0; + #ifdef FDT - name = NULL; if ((node = ofw_bus_get_node(dev)) == -1) return (ENXIO); + + if (OF_getprop_alloc(node, "default-state", + sizeof(char), (void **)&default_state) != -1) { + if (strcasecmp(default_state, "on") == 0) + state = 1; + else if (strcasecmp(default_state, "off") == 0) + state = 0; + else if (strcasecmp(default_state, "keep") == 0) + state = -1; + else { + device_printf(dev, + "unknown value for default-state in FDT\n"); + } + free(default_state, M_OFWPROP); + } + + name = NULL; if (OF_getprop_alloc(node, "label", 1, (void **)&name) == -1) OF_getprop_alloc(node, "name", 1, (void **)&name); #else @@ -189,8 +210,8 @@ gpioled_attach(device_t dev) name = NULL; #endif - sc->sc_leddev = led_create(gpioled_control, sc, name ? name : - device_get_nameunit(dev)); + sc->sc_leddev = led_create_state(gpioled_control, sc, name ? name : + device_get_nameunit(dev), state); #ifdef FDT if (name != NULL) free(name, M_OFWPROP); diff --git a/sys/dev/led/led.c b/sys/dev/led/led.c index fe0b66b8782e2..c519e2218ece3 100644 --- a/sys/dev/led/led.c +++ b/sys/dev/led/led.c @@ -293,7 +293,8 @@ led_create_state(led_t *func, void *priv, char const *name, int state) mtx_lock(&led_mtx); sc->dev->si_drv1 = sc; LIST_INSERT_HEAD(&led_list, sc, list); - sc->func(sc->private, state != 0); + if (state != -1) + sc->func(sc->private, state != 0); mtx_unlock(&led_mtx); return (sc->dev); |