All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V2 1/2] leds: core: add OF variants of LED registering functions
@ 2017-03-06  5:19 Rafał Miłecki
  2017-03-06  5:19 ` [PATCH V2 2/2] leds: gpio: use OF variant of LED registering function Rafał Miłecki
  2017-03-07 12:05 ` [PATCH V2 1/2] leds: core: add OF variants of LED registering functions Pavel Machek
  0 siblings, 2 replies; 4+ messages in thread
From: Rafał Miłecki @ 2017-03-06  5:19 UTC (permalink / raw
  To: Richard Purdie, Jacek Anaszewski, Pavel Machek
  Cc: linux-leds, Rafał Miłecki

From: Rafał Miłecki <rafal@milecki.pl>

These new functions allow passing an additional device_node argument
that will be internally set for created LED device. Thanks to this LED
core code and triggers will be able to access DT node for reading extra
info.

The easiest solution for achieving this was reworking old functions to
more generic ones & adding simple defines for API compatibility.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
V2: Use new functions instead of adding property to the struct led_classdev.
---
 drivers/leds/led-class.c | 26 ++++++++++++++++----------
 include/linux/leds.h     | 14 ++++++++++----
 2 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 95d971aa2440..349d334d2e98 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -182,11 +182,14 @@ static int led_classdev_next_name(const char *init_name, char *name,
 }
 
 /**
- * led_classdev_register - register a new object of led_classdev class.
- * @parent: The device to register.
+ * of_led_classdev_register - register a new object of led_classdev class.
+ *
+ * @parent: parent of LED device
  * @led_cdev: the led_classdev structure for this device.
+ * @np: DT node describing this LED
  */
-int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
+int of_led_classdev_register(struct device *parent, struct device_node *np,
+			    struct led_classdev *led_cdev)
 {
 	char name[LED_MAX_NAME_SIZE];
 	int ret;
@@ -199,6 +202,7 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
 				led_cdev, led_cdev->groups, "%s", name);
 	if (IS_ERR(led_cdev->dev))
 		return PTR_ERR(led_cdev->dev);
+	led_cdev->dev->of_node = np;
 
 	if (ret)
 		dev_warn(parent, "Led %s renamed to %s due to name collision",
@@ -234,7 +238,7 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
 
 	return 0;
 }
-EXPORT_SYMBOL_GPL(led_classdev_register);
+EXPORT_SYMBOL_GPL(of_led_classdev_register);
 
 /**
  * led_classdev_unregister - unregisters a object of led_properties class.
@@ -276,12 +280,14 @@ static void devm_led_classdev_release(struct device *dev, void *res)
 }
 
 /**
- * devm_led_classdev_register - resource managed led_classdev_register()
- * @parent: The device to register.
+ * devm_of_led_classdev_register - resource managed led_classdev_register()
+ *
+ * @parent: parent of LED device
  * @led_cdev: the led_classdev structure for this device.
  */
-int devm_led_classdev_register(struct device *parent,
-			       struct led_classdev *led_cdev)
+int devm_of_led_classdev_register(struct device *parent,
+				  struct device_node *np,
+				  struct led_classdev *led_cdev)
 {
 	struct led_classdev **dr;
 	int rc;
@@ -290,7 +296,7 @@ int devm_led_classdev_register(struct device *parent,
 	if (!dr)
 		return -ENOMEM;
 
-	rc = led_classdev_register(parent, led_cdev);
+	rc = of_led_classdev_register(parent, np, led_cdev);
 	if (rc) {
 		devres_free(dr);
 		return rc;
@@ -301,7 +307,7 @@ int devm_led_classdev_register(struct device *parent,
 
 	return 0;
 }
-EXPORT_SYMBOL_GPL(devm_led_classdev_register);
+EXPORT_SYMBOL_GPL(devm_of_led_classdev_register);
 
 static int devm_led_classdev_match(struct device *dev, void *res, void *data)
 {
diff --git a/include/linux/leds.h b/include/linux/leds.h
index 0518903778b6..00dcb9f8293b 100644
--- a/include/linux/leds.h
+++ b/include/linux/leds.h
@@ -114,10 +114,16 @@ struct led_classdev {
 	struct mutex		led_access;
 };
 
-extern int led_classdev_register(struct device *parent,
-				 struct led_classdev *led_cdev);
-extern int devm_led_classdev_register(struct device *parent,
-				      struct led_classdev *led_cdev);
+extern int of_led_classdev_register(struct device *parent,
+				    struct device_node *np,
+				    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);
+#define devm_led_classdev_register(parent, led_cdev)			\
+	devm_of_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.11.0

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH V2 2/2] leds: gpio: use OF variant of LED registering function
  2017-03-06  5:19 [PATCH V2 1/2] leds: core: add OF variants of LED registering functions Rafał Miłecki
@ 2017-03-06  5:19 ` Rafał Miłecki
  2017-03-07 12:05 ` [PATCH V2 1/2] leds: core: add OF variants of LED registering functions Pavel Machek
  1 sibling, 0 replies; 4+ messages in thread
From: Rafał Miłecki @ 2017-03-06  5:19 UTC (permalink / raw
  To: Richard Purdie, Jacek Anaszewski, Pavel Machek
  Cc: linux-leds, Rafał Miłecki

From: Rafał Miłecki <rafal@milecki.pl>

In leds-gpio we support LEDs specified in DT so we should use
(devm_)of_led_classdev_register. This allows passing DT node as argument
for use by the LED subsystem.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
V2: Use the new devm_of_led_classdev_register function.
---
 drivers/leds/leds-gpio.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c
index d400dcaf4d29..c5230249f136 100644
--- a/drivers/leds/leds-gpio.c
+++ b/drivers/leds/leds-gpio.c
@@ -77,7 +77,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,
-	gpio_blink_set_t blink_set)
+	struct device_node *np, gpio_blink_set_t blink_set)
 {
 	int ret, state;
 
@@ -139,7 +139,7 @@ static int create_gpio_led(const struct gpio_led *template,
 	if (ret < 0)
 		return ret;
 
-	return devm_led_classdev_register(parent, &led_dat->cdev);
+	return devm_of_led_classdev_register(parent, np, &led_dat->cdev);
 }
 
 struct gpio_leds_priv {
@@ -206,7 +206,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, NULL);
+		ret = create_gpio_led(&led, led_dat, dev, np, NULL);
 		if (ret < 0) {
 			fwnode_handle_put(child);
 			return ERR_PTR(ret);
@@ -240,9 +240,9 @@ static int gpio_led_probe(struct platform_device *pdev)
 
 		priv->num_leds = pdata->num_leds;
 		for (i = 0; i < priv->num_leds; i++) {
-			ret = create_gpio_led(&pdata->leds[i],
-					      &priv->leds[i],
-					      &pdev->dev, pdata->gpio_blink_set);
+			ret = create_gpio_led(&pdata->leds[i], &priv->leds[i],
+					      &pdev->dev, NULL,
+					      pdata->gpio_blink_set);
 			if (ret < 0)
 				return ret;
 		}
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH V2 1/2] leds: core: add OF variants of LED registering functions
  2017-03-06  5:19 [PATCH V2 1/2] leds: core: add OF variants of LED registering functions Rafał Miłecki
  2017-03-06  5:19 ` [PATCH V2 2/2] leds: gpio: use OF variant of LED registering function Rafał Miłecki
@ 2017-03-07 12:05 ` Pavel Machek
  2017-03-07 19:30   ` Jacek Anaszewski
  1 sibling, 1 reply; 4+ messages in thread
From: Pavel Machek @ 2017-03-07 12:05 UTC (permalink / raw
  To: Rafał Miłecki
  Cc: Richard Purdie, Jacek Anaszewski, linux-leds,
	Rafał Miłecki

[-- Attachment #1: Type: text/plain, Size: 5016 bytes --]

On Mon 2017-03-06 06:19:44, Rafał Miłecki wrote:
> From: Rafał Miłecki <rafal@milecki.pl>
> 
> These new functions allow passing an additional device_node argument
> that will be internally set for created LED device. Thanks to this LED
> core code and triggers will be able to access DT node for reading extra
> info.
> 
> The easiest solution for achieving this was reworking old functions to
> more generic ones & adding simple defines for API compatibility.
> 
> Signed-off-by: Rafał Miłecki <rafal@milecki.pl>

Both patches: Acked-by: Pavel Machek <pavel@ucw.cz>

> ---
> V2: Use new functions instead of adding property to the struct led_classdev.
> ---
>  drivers/leds/led-class.c | 26 ++++++++++++++++----------
>  include/linux/leds.h     | 14 ++++++++++----
>  2 files changed, 26 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
> index 95d971aa2440..349d334d2e98 100644
> --- a/drivers/leds/led-class.c
> +++ b/drivers/leds/led-class.c
> @@ -182,11 +182,14 @@ static int led_classdev_next_name(const char *init_name, char *name,
>  }
>  
>  /**
> - * led_classdev_register - register a new object of led_classdev class.
> - * @parent: The device to register.
> + * of_led_classdev_register - register a new object of led_classdev class.
> + *
> + * @parent: parent of LED device
>   * @led_cdev: the led_classdev structure for this device.
> + * @np: DT node describing this LED
>   */
> -int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
> +int of_led_classdev_register(struct device *parent, struct device_node *np,
> +			    struct led_classdev *led_cdev)
>  {
>  	char name[LED_MAX_NAME_SIZE];
>  	int ret;
> @@ -199,6 +202,7 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
>  				led_cdev, led_cdev->groups, "%s", name);
>  	if (IS_ERR(led_cdev->dev))
>  		return PTR_ERR(led_cdev->dev);
> +	led_cdev->dev->of_node = np;
>  
>  	if (ret)
>  		dev_warn(parent, "Led %s renamed to %s due to name collision",
> @@ -234,7 +238,7 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
>  
>  	return 0;
>  }
> -EXPORT_SYMBOL_GPL(led_classdev_register);
> +EXPORT_SYMBOL_GPL(of_led_classdev_register);
>  
>  /**
>   * led_classdev_unregister - unregisters a object of led_properties class.
> @@ -276,12 +280,14 @@ static void devm_led_classdev_release(struct device *dev, void *res)
>  }
>  
>  /**
> - * devm_led_classdev_register - resource managed led_classdev_register()
> - * @parent: The device to register.
> + * devm_of_led_classdev_register - resource managed led_classdev_register()
> + *
> + * @parent: parent of LED device
>   * @led_cdev: the led_classdev structure for this device.
>   */
> -int devm_led_classdev_register(struct device *parent,
> -			       struct led_classdev *led_cdev)
> +int devm_of_led_classdev_register(struct device *parent,
> +				  struct device_node *np,
> +				  struct led_classdev *led_cdev)
>  {
>  	struct led_classdev **dr;
>  	int rc;
> @@ -290,7 +296,7 @@ int devm_led_classdev_register(struct device *parent,
>  	if (!dr)
>  		return -ENOMEM;
>  
> -	rc = led_classdev_register(parent, led_cdev);
> +	rc = of_led_classdev_register(parent, np, led_cdev);
>  	if (rc) {
>  		devres_free(dr);
>  		return rc;
> @@ -301,7 +307,7 @@ int devm_led_classdev_register(struct device *parent,
>  
>  	return 0;
>  }
> -EXPORT_SYMBOL_GPL(devm_led_classdev_register);
> +EXPORT_SYMBOL_GPL(devm_of_led_classdev_register);
>  
>  static int devm_led_classdev_match(struct device *dev, void *res, void *data)
>  {
> diff --git a/include/linux/leds.h b/include/linux/leds.h
> index 0518903778b6..00dcb9f8293b 100644
> --- a/include/linux/leds.h
> +++ b/include/linux/leds.h
> @@ -114,10 +114,16 @@ struct led_classdev {
>  	struct mutex		led_access;
>  };
>  
> -extern int led_classdev_register(struct device *parent,
> -				 struct led_classdev *led_cdev);
> -extern int devm_led_classdev_register(struct device *parent,
> -				      struct led_classdev *led_cdev);
> +extern int of_led_classdev_register(struct device *parent,
> +				    struct device_node *np,
> +				    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);
> +#define devm_led_classdev_register(parent, led_cdev)			\
> +	devm_of_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);

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH V2 1/2] leds: core: add OF variants of LED registering functions
  2017-03-07 12:05 ` [PATCH V2 1/2] leds: core: add OF variants of LED registering functions Pavel Machek
@ 2017-03-07 19:30   ` Jacek Anaszewski
  0 siblings, 0 replies; 4+ messages in thread
From: Jacek Anaszewski @ 2017-03-07 19:30 UTC (permalink / raw
  To: Pavel Machek, Rafał Miłecki
  Cc: Richard Purdie, linux-leds, Rafał Miłecki

On 03/07/2017 01:05 PM, Pavel Machek wrote:
> On Mon 2017-03-06 06:19:44, Rafał Miłecki wrote:
>> From: Rafał Miłecki <rafal@milecki.pl>
>>
>> These new functions allow passing an additional device_node argument
>> that will be internally set for created LED device. Thanks to this LED
>> core code and triggers will be able to access DT node for reading extra
>> info.
>>
>> The easiest solution for achieving this was reworking old functions to
>> more generic ones & adding simple defines for API compatibility.
>>
>> Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
> 
> Both patches: Acked-by: Pavel Machek <pavel@ucw.cz>

Applied, thanks.

-- 
Best regards,
Jacek Anaszewski

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-03-07 19:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-06  5:19 [PATCH V2 1/2] leds: core: add OF variants of LED registering functions Rafał Miłecki
2017-03-06  5:19 ` [PATCH V2 2/2] leds: gpio: use OF variant of LED registering function Rafał Miłecki
2017-03-07 12:05 ` [PATCH V2 1/2] leds: core: add OF variants of LED registering functions Pavel Machek
2017-03-07 19:30   ` Jacek Anaszewski

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.