From: Jacek Anaszewski <jacek.anaszewski@gmail.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Pavel Machek <pavel@ucw.cz>, Dan Murphy <dmurphy@ti.com>,
linux-leds@vger.kernel.org
Subject: Re: [PATCH v1 2/2] leds: Switch to use fwnode instead of be stuck with OF one
Date: Wed, 21 Aug 2019 19:51:45 +0200 [thread overview]
Message-ID: <48a4786c-5d4c-0751-1b66-9aac79de0c14@gmail.com> (raw)
In-Reply-To: <20190821163617.33881-2-andriy.shevchenko@linux.intel.com>
Hi Andy,
Thank you for the patch.
We've had some changes in this area during current cycle,
so most of your changes will be not needed. Please compare patch set [0]
that is already in linux-next.
Best regards,
Jacek Anaszewski
On 8/21/19 6:36 PM, Andy Shevchenko wrote:
> 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);
>
[0]
https://lore.kernel.org/linux-leds/20190609190803.14815-1-jacek.anaszewski@gmail.com/T/#md8895442b1b7bc9fe23ede32aaf8a4a3a2b494ff
prev parent reply other threads:[~2019-08-21 17:51 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 ` [PATCH v1 2/2] leds: Switch to use fwnode instead of be stuck with OF one Andy Shevchenko
2019-08-21 17:51 ` Jacek Anaszewski [this message]
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=48a4786c-5d4c-0751-1b66-9aac79de0c14@gmail.com \
--to=jacek.anaszewski@gmail.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=dmurphy@ti.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).