Author: adrian
Date: Sun Jul 31 06:24:26 2016
New Revision: 303574
URL: https://svnweb.freebsd.org/changeset/base/303574

Log:
  [gpioled] add support for inverting the LED polarity.
  
  No, this isn't a star trek science joke - sometimes LEDs are wired
  up to be active low, so this is needed.
  
  Submitted by: Dan Nelson <dnelson_1...@yahoo.com>

Modified:
  head/sys/dev/gpio/gpioled.c

Modified: head/sys/dev/gpio/gpioled.c
==============================================================================
--- head/sys/dev/gpio/gpioled.c Sun Jul 31 06:03:27 2016        (r303573)
+++ head/sys/dev/gpio/gpioled.c Sun Jul 31 06:24:26 2016        (r303574)
@@ -66,6 +66,7 @@ struct gpioled_softc 
        device_t        sc_busdev;
        struct mtx      sc_mtx;
        struct cdev     *sc_leddev;
+       int             sc_invert;
 };
 
 static void gpioled_control(void *, int);
@@ -82,6 +83,8 @@ gpioled_control(void *priv, int onoff)
        GPIOLED_LOCK(sc);
        if (GPIOBUS_PIN_SETFLAGS(sc->sc_busdev, sc->sc_dev, GPIOLED_PIN,
            GPIO_PIN_OUTPUT) == 0) {
+               if (sc->sc_invert)
+                       onoff = !onoff;
                GPIOBUS_PIN_SET(sc->sc_busdev, sc->sc_dev, GPIOLED_PIN,
                    onoff ? GPIO_PIN_HIGH : GPIO_PIN_LOW);
        }
@@ -199,6 +202,8 @@ gpioled_attach(device_t dev)
        if (resource_string_value(device_get_name(dev), 
            device_get_unit(dev), "name", &name))
                name = NULL;
+       resource_int_value(device_get_name(dev),
+           device_get_unit(dev), "invert", &sc->sc_invert);
 #endif
 
        sc->sc_leddev = led_create_state(gpioled_control, sc, name ? name :
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to