summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGanbold Tsagaankhuu <ganbold@FreeBSD.org>2015-05-24 07:45:42 +0000
committerGanbold Tsagaankhuu <ganbold@FreeBSD.org>2015-05-24 07:45:42 +0000
commit3a9ac40382469a3ce163a2d4379bd8c41cdf6b47 (patch)
treea53d7f1b99a7ab76d9db828c32eaac6a69db9eb4
parent5db06fccd8d64033897e6e924e1dcece448c0528 (diff)
Notes
-rw-r--r--sys/dev/acpi_support/acpi_ibm.c3
-rw-r--r--sys/dev/gpio/gpioled.c27
-rw-r--r--sys/dev/led/led.c3
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);