From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Jacek Anaszewski <jacek.anaszewski@gmail.com>,
Pavel Machek <pavel@ucw.cz>, Dan Murphy <dmurphy@ti.com>,
linux-leds@vger.kernel.org
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Subject: [PATCH v1 2/2] leds: Switch to use fwnode instead of be stuck with OF one
Date: Wed, 21 Aug 2019 19:36:17 +0300 [thread overview]
Message-ID: <20190821163617.33881-2-andriy.shevchenko@linux.intel.com> (raw)
In-Reply-To: <20190821163617.33881-1-andriy.shevchenko@linux.intel.com>
There is no need to be stuck with OF node when we may use agnostic
firmware node instead.
It allows users to get property if needed independently of provider.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/leds/led-class.c | 26 ++++++++++++++------------
drivers/leds/leds-cr0014114.c | 8 ++------
drivers/leds/leds-gpio.c | 11 +++++------
drivers/leds/leds-max77650.c | 2 +-
drivers/leds/leds-pwm.c | 3 +--
include/linux/leds.h | 16 ++++++++--------
6 files changed, 31 insertions(+), 35 deletions(-)
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 4793e77808e2..80974de814f3 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -242,14 +242,15 @@ static int led_classdev_next_name(const char *init_name, char *name,
}
/**
- * of_led_classdev_register - register a new object of led_classdev class.
+ * fwnode_led_classdev_register - register a new object of led_classdev class.
*
* @parent: parent of LED device
+ * @fwnode: firmware node describing this LED
* @led_cdev: the led_classdev structure for this device.
- * @np: DT node describing this LED
*/
-int of_led_classdev_register(struct device *parent, struct device_node *np,
- struct led_classdev *led_cdev)
+int fwnode_led_classdev_register(struct device *parent,
+ struct fwnode_handle *fwnode,
+ struct led_classdev *led_cdev)
{
char name[LED_MAX_NAME_SIZE];
int ret;
@@ -266,7 +267,7 @@ int of_led_classdev_register(struct device *parent, struct device_node *np,
mutex_unlock(&led_cdev->led_access);
return PTR_ERR(led_cdev->dev);
}
- led_cdev->dev->of_node = np;
+ led_cdev->dev->fwnode = fwnode;
if (ret)
dev_warn(parent, "Led %s renamed to %s due to name collision",
@@ -311,7 +312,7 @@ int of_led_classdev_register(struct device *parent, struct device_node *np,
return 0;
}
-EXPORT_SYMBOL_GPL(of_led_classdev_register);
+EXPORT_SYMBOL_GPL(fwnode_led_classdev_register);
/**
* led_classdev_unregister - unregisters a object of led_properties class.
@@ -356,14 +357,15 @@ static void devm_led_classdev_release(struct device *dev, void *res)
}
/**
- * devm_of_led_classdev_register - resource managed led_classdev_register()
+ * devm_fwnode_led_classdev_register - resource managed led_classdev_register()
*
* @parent: parent of LED device
+ * @fwnode: firmware node describing this LED
* @led_cdev: the led_classdev structure for this device.
*/
-int devm_of_led_classdev_register(struct device *parent,
- struct device_node *np,
- struct led_classdev *led_cdev)
+int devm_fwnode_led_classdev_register(struct device *parent,
+ struct fwnode_handle *fwnode,
+ struct led_classdev *led_cdev)
{
struct led_classdev **dr;
int rc;
@@ -372,7 +374,7 @@ int devm_of_led_classdev_register(struct device *parent,
if (!dr)
return -ENOMEM;
- rc = of_led_classdev_register(parent, np, led_cdev);
+ rc = fwnode_led_classdev_register(parent, fwnode, led_cdev);
if (rc) {
devres_free(dr);
return rc;
@@ -383,7 +385,7 @@ int devm_of_led_classdev_register(struct device *parent,
return 0;
}
-EXPORT_SYMBOL_GPL(devm_of_led_classdev_register);
+EXPORT_SYMBOL_GPL(devm_fwnode_led_classdev_register);
static int devm_led_classdev_match(struct device *dev, void *res, void *data)
{
diff --git a/drivers/leds/leds-cr0014114.c b/drivers/leds/leds-cr0014114.c
index 0e4262462cb9..cb91dab7a1e1 100644
--- a/drivers/leds/leds-cr0014114.c
+++ b/drivers/leds/leds-cr0014114.c
@@ -183,12 +183,10 @@ static int cr0014114_probe_dt(struct cr0014114 *priv)
size_t i = 0;
struct cr0014114_led *led;
struct fwnode_handle *child;
- struct device_node *np;
int ret;
const char *str;
device_for_each_child_node(priv->dev, child) {
- np = to_of_node(child);
led = &priv->leds[i];
ret = fwnode_property_read_string(child, "label", &str);
@@ -207,8 +205,8 @@ static int cr0014114_probe_dt(struct cr0014114 *priv)
led->ldev.max_brightness = CR_MAX_BRIGHTNESS;
led->ldev.brightness_set_blocking = cr0014114_set_sync;
- ret = devm_of_led_classdev_register(priv->dev, np,
- &led->ldev);
+ ret = devm_fwnode_led_classdev_register(priv->dev, child,
+ &led->ldev);
if (ret) {
dev_err(priv->dev,
"failed to register LED device %s, err %d",
@@ -217,8 +215,6 @@ static int cr0014114_probe_dt(struct cr0014114 *priv)
return ret;
}
- led->ldev.dev->of_node = np;
-
i++;
}
diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c
index bdc98ddca1dc..9035e1c4c534 100644
--- a/drivers/leds/leds-gpio.c
+++ b/drivers/leds/leds-gpio.c
@@ -73,7 +73,7 @@ static int gpio_blink_set(struct led_classdev *led_cdev,
static int create_gpio_led(const struct gpio_led *template,
struct gpio_led_data *led_dat, struct device *parent,
- struct device_node *np, gpio_blink_set_t blink_set)
+ struct fwnode_handle *child, gpio_blink_set_t blink_set)
{
int ret, state;
@@ -108,7 +108,7 @@ static int create_gpio_led(const struct gpio_led *template,
if (ret < 0)
return ret;
- return devm_of_led_classdev_register(parent, np, &led_dat->cdev);
+ return devm_fwnode_led_classdev_register(parent, child, &led_dat->cdev);
}
struct gpio_leds_priv {
@@ -141,11 +141,10 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
struct gpio_led_data *led_dat = &priv->leds[priv->num_leds];
struct gpio_led led = {};
const char *state = NULL;
- struct device_node *np = to_of_node(child);
ret = fwnode_property_read_string(child, "label", &led.name);
- if (ret && IS_ENABLED(CONFIG_OF) && np)
- led.name = np->name;
+ if (ret && is_of_node(child))
+ led.name = to_of_node(child)->name;
if (!led.name) {
fwnode_handle_put(child);
return ERR_PTR(-EINVAL);
@@ -181,7 +180,7 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
if (fwnode_property_present(child, "panic-indicator"))
led.panic_indicator = 1;
- ret = create_gpio_led(&led, led_dat, dev, np, NULL);
+ ret = create_gpio_led(&led, led_dat, dev, child, NULL);
if (ret < 0) {
fwnode_handle_put(child);
return ERR_PTR(ret);
diff --git a/drivers/leds/leds-max77650.c b/drivers/leds/leds-max77650.c
index ae752ec150d9..d6fdbb47fce0 100644
--- a/drivers/leds/leds-max77650.c
+++ b/drivers/leds/leds-max77650.c
@@ -110,7 +110,7 @@ static int max77650_led_probe(struct platform_device *pdev)
fwnode_property_read_string(child, "linux,default-trigger",
&led->cdev.default_trigger);
- rv = devm_of_led_classdev_register(dev, to_of_node(child), &led->cdev);
+ rv = devm_fwnode_led_classdev_register(dev, child, &led->cdev);
if (rv)
return rv;
diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
index 48d068f80f11..a582c3e768e6 100644
--- a/drivers/leds/leds-pwm.c
+++ b/drivers/leds/leds-pwm.c
@@ -111,8 +111,7 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
if (!led_data->period && (led->pwm_period_ns > 0))
led_data->period = led->pwm_period_ns;
- ret = devm_of_led_classdev_register(dev, to_of_node(fwnode),
- &led_data->cdev);
+ ret = devm_fwnode_led_classdev_register(dev, fwnode, &led_data->cdev);
if (ret == 0) {
priv->num_leds++;
led_pwm_set(&led_data->cdev, led_data->cdev.brightness);
diff --git a/include/linux/leds.h b/include/linux/leds.h
index 9b2bf574a17a..c94375ef8af6 100644
--- a/include/linux/leds.h
+++ b/include/linux/leds.h
@@ -125,16 +125,16 @@ struct led_classdev {
struct mutex led_access;
};
-extern int of_led_classdev_register(struct device *parent,
- struct device_node *np,
- struct led_classdev *led_cdev);
+extern int fwnode_led_classdev_register(struct device *parent,
+ struct fwnode_handle *fwnode,
+ struct led_classdev *led_cdev);
#define led_classdev_register(parent, led_cdev) \
- of_led_classdev_register(parent, NULL, led_cdev)
-extern int devm_of_led_classdev_register(struct device *parent,
- struct device_node *np,
- struct led_classdev *led_cdev);
+ fwnode_led_classdev_register(parent, NULL, led_cdev)
+extern int devm_fwnode_led_classdev_register(struct device *parent,
+ struct fwnode_handle *fwnode,
+ struct led_classdev *led_cdev);
#define devm_led_classdev_register(parent, led_cdev) \
- devm_of_led_classdev_register(parent, NULL, led_cdev)
+ devm_fwnode_led_classdev_register(parent, NULL, led_cdev)
extern void led_classdev_unregister(struct led_classdev *led_cdev);
extern void devm_led_classdev_unregister(struct device *parent,
struct led_classdev *led_cdev);
--
2.23.0.rc1
next prev parent reply other threads:[~2019-08-21 16:36 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-21 16:36 [PATCH v1 1/2] leds: max77650: Switch to fwnode property API Andy Shevchenko
2019-08-21 16:36 ` Andy Shevchenko [this message]
2019-08-21 17:51 ` [PATCH v1 2/2] leds: Switch to use fwnode instead of be stuck with OF one Jacek Anaszewski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190821163617.33881-2-andriy.shevchenko@linux.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=dmurphy@ti.com \
--cc=jacek.anaszewski@gmail.com \
--cc=linux-leds@vger.kernel.org \
--cc=pavel@ucw.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).