svn commit: r303574 - head/sys/dev/gpio

Adrian Chadd adrian at FreeBSD.org
Sun Jul 31 06:24:27 UTC 2016


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_1901 at 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 :


More information about the svn-src-head mailing list