summary refs log tree commit diff stats
path: root/include/hw/misc/led.h
diff options
context:
space:
mode:
authorPhilippe Mathieu-Daudé <f4bug@amsat.org>2020-06-16 06:23:50 +0200
committerPhilippe Mathieu-Daudé <f4bug@amsat.org>2020-10-26 13:44:58 +0100
commitddb67f6402b8096f70ca68e3cffaddfd588b384d (patch)
tree013b0fcb0a0ddfe94cd7c88d8c4d1ed2be82455a /include/hw/misc/led.h
parentc1b29826279b7405990ccb521d1fb5a24db2e58e (diff)
downloadfocaccia-qemu-ddb67f6402b8096f70ca68e3cffaddfd588b384d.tar.gz
focaccia-qemu-ddb67f6402b8096f70ca68e3cffaddfd588b384d.zip
hw/misc/led: Allow connecting from GPIO output
Some devices expose GPIO lines.

Add a GPIO qdev input to our LED device, so we can
connect a GPIO output using qdev_connect_gpio_out().

When used with GPIOs, the intensity can only be either
minium or maximum. This depends of the polarity of the
GPIO (which can be inverted).
Declare the GpioPolarity type to model the polarity.

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Luc Michel <luc.michel@greensocs.com>
Message-Id: <20200912134041.946260-3-f4bug@amsat.org>
Diffstat (limited to 'include/hw/misc/led.h')
-rw-r--r--include/hw/misc/led.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/include/hw/misc/led.h b/include/hw/misc/led.h
index 286d37c75c..aa359b87c2 100644
--- a/include/hw/misc/led.h
+++ b/include/hw/misc/led.h
@@ -9,6 +9,7 @@
 #define HW_MISC_LED_H
 
 #include "qom/object.h"
+#include "hw/qdev-core.h"
 
 #define TYPE_LED "led"
 
@@ -37,10 +38,17 @@ struct LEDState {
     /* Public */
 
     uint8_t intensity_percent;
+    qemu_irq irq;
 
     /* Properties */
     char *description;
     char *color;
+    /*
+     * Determines whether a GPIO is using a positive (active-high)
+     * logic (when used with GPIO, the intensity at reset is related
+     * to the GPIO polarity).
+     */
+    bool gpio_active_high;
 };
 typedef struct LEDState LEDState;
 DECLARE_INSTANCE_CHECKER(LEDState, LED, TYPE_LED)
@@ -72,6 +80,7 @@ void led_set_state(LEDState *s, bool is_emitting);
 /**
  * led_create_simple: Create and realize a LED device
  * @parentobj: the parent object
+ * @gpio_polarity: GPIO polarity
  * @color: color of the LED
  * @description: description of the LED (optional)
  *
@@ -81,6 +90,7 @@ void led_set_state(LEDState *s, bool is_emitting);
  * Returns: The newly allocated and instantiated LED object.
  */
 LEDState *led_create_simple(Object *parentobj,
+                            GpioPolarity gpio_polarity,
                             LEDColor color,
                             const char *description);