leds: move default_state read from fwnode to core
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>
This commit is contained in:
parent
654933ae7d
commit
791bc41163
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user