leds: move default_state read from fwnode to core
authorDenis Osterland-Heim <Denis.Osterland@diehl.com>
Tue, 8 Jun 2021 06:35:53 +0000 (08:35 +0200)
committerPavel Machek <pavel@ucw.cz>
Wed, 18 Aug 2021 06:27:30 +0000 (08:27 +0200)
This patch introduces a new function to read initial
default_state from fwnode.

Suggested-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Denis Osterland-Heim <Denis.Osterland@diehl.com>
Signed-off-by: Pavel Machek <pavel@ucw.cz>
drivers/leds/led-core.c
drivers/leds/leds-gpio.c
drivers/leds/leds.h
include/linux/leds.h

index 8eb8054ef9c61742df9d7655de22d5a2230a12f5..4a97cb7457888c6dd3c265985548163209f8d647 100644 (file)
@@ -477,3 +477,18 @@ int led_compose_name(struct device *dev, struct led_init_data *init_data,
        return 0;
 }
 EXPORT_SYMBOL_GPL(led_compose_name);
+
+enum led_default_state led_init_default_state_get(struct fwnode_handle *fwnode)
+{
+       const char *state = NULL;
+
+       if (!fwnode_property_read_string(fwnode, "default-state", &state)) {
+               if (!strcmp(state, "keep"))
+                       return LEDS_DEFSTATE_KEEP;
+               if (!strcmp(state, "on"))
+                       return LEDS_DEFSTATE_ON;
+       }
+
+       return LEDS_DEFSTATE_OFF;
+}
+EXPORT_SYMBOL_GPL(led_init_default_state_get);
index b5d5e22d2d1ea6ffead4f1a36b274520cbed3408..092eb59a7d325d29a1ed36b80002a1485d2710f7 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/platform_device.h>
 #include <linux/property.h>
 #include <linux/slab.h>
+#include "leds.h"
 
 struct gpio_led_data {
        struct led_classdev cdev;
@@ -144,7 +145,6 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
        device_for_each_child_node(dev, child) {
                struct gpio_led_data *led_dat = &priv->leds[priv->num_leds];
                struct gpio_led led = {};
-               const char *state = NULL;
 
                /*
                 * Acquire gpiod from DT with uninitialized label, which
@@ -161,15 +161,7 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
 
                led_dat->gpiod = led.gpiod;
 
-               if (!fwnode_property_read_string(child, "default-state",
-                                                &state)) {
-                       if (!strcmp(state, "keep"))
-                               led.default_state = LEDS_GPIO_DEFSTATE_KEEP;
-                       else if (!strcmp(state, "on"))
-                               led.default_state = LEDS_GPIO_DEFSTATE_ON;
-                       else
-                               led.default_state = LEDS_GPIO_DEFSTATE_OFF;
-               }
+               led.default_state = led_init_default_state_get(child);
 
                if (fwnode_property_present(child, "retain-state-suspended"))
                        led.retain_state_suspended = 1;
index 345062ccabdaa7a5fa7b2a97774514f7b8840631..aa64757a4d894abf0936612034acab5b01e2cab8 100644 (file)
@@ -27,6 +27,7 @@ ssize_t led_trigger_read(struct file *filp, struct kobject *kobj,
 ssize_t led_trigger_write(struct file *filp, struct kobject *kobj,
                        struct bin_attribute *bin_attr, char *buf,
                        loff_t pos, size_t count);
+enum led_default_state led_init_default_state_get(struct fwnode_handle *fwnode);
 
 extern struct rw_semaphore leds_list_lock;
 extern struct list_head leds_list;
index 329fd914cf243b1fd7da14c09f006905c65770bf..a0b730be40ad2f1bd6c98669ea1b2277dafcc802 100644 (file)
@@ -33,6 +33,12 @@ enum led_brightness {
        LED_FULL        = 255,
 };
 
+enum led_default_state {
+       LEDS_DEFSTATE_OFF       = 0,
+       LEDS_DEFSTATE_ON        = 1,
+       LEDS_DEFSTATE_KEEP      = 2,
+};
+
 struct led_init_data {
        /* device fwnode handle */
        struct fwnode_handle *fwnode;
@@ -520,9 +526,9 @@ struct gpio_led {
        /* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */
        struct gpio_desc *gpiod;
 };
-#define LEDS_GPIO_DEFSTATE_OFF         0
-#define LEDS_GPIO_DEFSTATE_ON          1
-#define LEDS_GPIO_DEFSTATE_KEEP                2
+#define LEDS_GPIO_DEFSTATE_OFF         LEDS_DEFSTATE_OFF
+#define LEDS_GPIO_DEFSTATE_ON          LEDS_DEFSTATE_ON
+#define LEDS_GPIO_DEFSTATE_KEEP                LEDS_DEFSTATE_KEEP
 
 struct gpio_led_platform_data {
        int             num_leds;