@@ -9,6 +9,7 @@
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/uaccess.h>
+#include <linux/property.h>
#include "leds.h"
@@ -116,6 +117,23 @@ static struct attribute *led_multicolor_attrs[] = {
};
ATTRIBUTE_GROUPS(led_multicolor);
+static void multi_load_default_intensities(struct device *parent,
+ struct led_classdev_mc *mcled_cdev,
+ struct fwnode_handle *fwnode)
+{
+ u32 intensities[LED_COLOR_ID_MAX];
+ int ret;
+ int i;
+
+ ret = fwnode_property_read_u32_array(fwnode, "default-intensities",
+ intensities, mcled_cdev->num_colors);
+ if (ret < 0 && ret != -ENODATA)
+ dev_warn(parent, "failed to read default-intensities property: %d", ret);
+
+ for (i = 0; i < ret; i++)
+ mcled_cdev->subled_info[i].intensity = intensities[i];
+}
+
int led_classdev_multicolor_register_ext(struct device *parent,
struct led_classdev_mc *mcled_cdev,
struct led_init_data *init_data)
@@ -134,6 +152,9 @@ int led_classdev_multicolor_register_ext(struct device *parent,
led_cdev = &mcled_cdev->led_cdev;
mcled_cdev->led_cdev.groups = led_multicolor_groups;
+ if (init_data && init_data->fwnode)
+ multi_load_default_intensities(parent, mcled_cdev, init_data->fwnode);
+
return led_classdev_register_ext(parent, led_cdev, init_data);
}
EXPORT_SYMBOL_GPL(led_classdev_multicolor_register_ext);