fbd-dev-leds: Probe QCOM HW LED types

Try first the QCOM hardware LED types which require the most features of
LED drivers. Try until we have a single color GPIO LED which is the
minimal LED driver support we require. If the LED does not meet that
expectation either, we ignore the LED.
This commit is contained in:
Dylan Van Assche
2024-06-09 11:21:20 +02:00
committed by Guido Günther
parent 2b53725fcb
commit 6b1eb92b7a
+40 -8
View File
@@ -12,6 +12,8 @@
#include "fbd-enums.h"
#include "fbd-dev-led.h"
#include "fbd-dev-led-multicolor.h"
#include "fbd-dev-led-qcom.h"
#include "fbd-dev-led-qcom-multicolor.h"
#include "fbd-dev-leds.h"
#include "fbd-feedback-led.h"
#include "fbd-udev.h"
@@ -55,6 +57,43 @@ find_led_by_color (FbdDevLeds *self, FbdFeedbackLedColor color)
return self->leds->data;
}
static FbdDevLed*
probe_led (GUdevDevice *dev, GError **error) {
FbdDevLed *led = NULL;
led = fbd_dev_led_qcom_multicolor_new (dev, error);
if (led != NULL) {
g_debug ("Discovered QCOM multicolor LED");
return led;
}
g_clear_error (error);
led = fbd_dev_led_qcom_new (dev, error);
if (led != NULL) {
g_debug ("Discovered QCOM single color LED");
return led;
}
g_clear_error (error);
led = fbd_dev_led_multicolor_new (dev, error);
if (led != NULL) {
g_debug ("Discovered multicolor LED");
return led;
}
g_clear_error (error);
led = fbd_dev_led_new (dev, error);
if (led != NULL) {
g_debug ("Discovered single color LED");
return led;
}
g_debug ("Unable to determine LED driver");
return NULL;
}
static gboolean
initable_init (GInitable *initable,
GCancellable *cancellable,
@@ -79,14 +118,7 @@ initable_init (GInitable *initable,
continue;
}
/* Try multicolor first, fall back to single color */
led = fbd_dev_led_multicolor_new (dev, &err);
if (led == NULL) {
g_debug ("Led not usable as multicolor: '%s'", err->message);
led = fbd_dev_led_new (dev, &err);
if (led == NULL)
g_debug ("Led not usable as single color: '%s'", err->message);
}
led = probe_led (dev, &err);
if (led) {
self->leds = g_slist_append (self->leds, led);