123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
- Date: Mon, 6 Mar 2017 06:19:44 +0100
- Subject: [PATCH] leds: core: add OF variants of LED registering functions
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- 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>
- Acked-by: Pavel Machek <pavel@ucw.cz>
- Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
- ---
- drivers/leds/led-class.c | 26 ++++++++++++++++----------
- include/linux/leds.h | 14 ++++++++++----
- 2 files changed, 26 insertions(+), 14 deletions(-)
- --- a/drivers/leds/led-class.c
- +++ b/drivers/leds/led-class.c
- @@ -181,11 +181,14 @@ static int led_classdev_next_name(const
- }
-
- /**
- - * 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[64];
- int ret;
- @@ -198,6 +201,7 @@ int led_classdev_register(struct device
- 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",
- @@ -228,7 +232,7 @@ int led_classdev_register(struct device
-
- 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.
- @@ -270,12 +274,14 @@ static void devm_led_classdev_release(st
- }
-
- /**
- - * 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;
- @@ -284,7 +290,7 @@ int devm_led_classdev_register(struct de
- 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;
- @@ -295,7 +301,7 @@ int devm_led_classdev_register(struct de
-
- 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)
- {
- --- a/include/linux/leds.h
- +++ b/include/linux/leds.h
- @@ -109,10 +109,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);
|