Commit 791bc411 authored by Denis Osterland-Heim's avatar Denis Osterland-Heim Committed by Pavel Machek

leds: move default_state read from fwnode to core

This patch introduces a new function to read initial
default_state from fwnode.
Suggested-by: default avatarPavel Machek <pavel@ucw.cz>
Signed-off-by: default avatarDenis Osterland-Heim <Denis.Osterland@diehl.com>
Signed-off-by: default avatarPavel Machek <pavel@ucw.cz>
parent 654933ae
...@@ -477,3 +477,18 @@ int led_compose_name(struct device *dev, struct led_init_data *init_data, ...@@ -477,3 +477,18 @@ int led_compose_name(struct device *dev, struct led_init_data *init_data,
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(led_compose_name); 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);
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/property.h> #include <linux/property.h>
#include <linux/slab.h> #include <linux/slab.h>
#include "leds.h"
struct gpio_led_data { struct gpio_led_data {
struct led_classdev cdev; struct led_classdev cdev;
...@@ -144,7 +145,6 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev) ...@@ -144,7 +145,6 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
device_for_each_child_node(dev, child) { device_for_each_child_node(dev, child) {
struct gpio_led_data *led_dat = &priv->leds[priv->num_leds]; struct gpio_led_data *led_dat = &priv->leds[priv->num_leds];
struct gpio_led led = {}; struct gpio_led led = {};
const char *state = NULL;
/* /*
* Acquire gpiod from DT with uninitialized label, which * Acquire gpiod from DT with uninitialized label, which
...@@ -161,15 +161,7 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev) ...@@ -161,15 +161,7 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
led_dat->gpiod = led.gpiod; led_dat->gpiod = led.gpiod;
if (!fwnode_property_read_string(child, "default-state", led.default_state = led_init_default_state_get(child);
&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;
}
if (fwnode_property_present(child, "retain-state-suspended")) if (fwnode_property_present(child, "retain-state-suspended"))
led.retain_state_suspended = 1; led.retain_state_suspended = 1;
......
...@@ -27,6 +27,7 @@ ssize_t led_trigger_read(struct file *filp, struct kobject *kobj, ...@@ -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, ssize_t led_trigger_write(struct file *filp, struct kobject *kobj,
struct bin_attribute *bin_attr, char *buf, struct bin_attribute *bin_attr, char *buf,
loff_t pos, size_t count); 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 rw_semaphore leds_list_lock;
extern struct list_head leds_list; extern struct list_head leds_list;
......
...@@ -33,6 +33,12 @@ enum led_brightness { ...@@ -33,6 +33,12 @@ enum led_brightness {
LED_FULL = 255, LED_FULL = 255,
}; };
enum led_default_state {
LEDS_DEFSTATE_OFF = 0,
LEDS_DEFSTATE_ON = 1,
LEDS_DEFSTATE_KEEP = 2,
};
struct led_init_data { struct led_init_data {
/* device fwnode handle */ /* device fwnode handle */
struct fwnode_handle *fwnode; struct fwnode_handle *fwnode;
...@@ -520,9 +526,9 @@ struct gpio_led { ...@@ -520,9 +526,9 @@ struct gpio_led {
/* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */ /* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */
struct gpio_desc *gpiod; struct gpio_desc *gpiod;
}; };
#define LEDS_GPIO_DEFSTATE_OFF 0 #define LEDS_GPIO_DEFSTATE_OFF LEDS_DEFSTATE_OFF
#define LEDS_GPIO_DEFSTATE_ON 1 #define LEDS_GPIO_DEFSTATE_ON LEDS_DEFSTATE_ON
#define LEDS_GPIO_DEFSTATE_KEEP 2 #define LEDS_GPIO_DEFSTATE_KEEP LEDS_DEFSTATE_KEEP
struct gpio_led_platform_data { struct gpio_led_platform_data {
int num_leds; int num_leds;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment