leds: flash: Remove extern from the header file
PATCH v2 1/6 leds: flash: Remove extern from the header file
extern is implied and is not needed in the header file. Remove the extern keyword and re-align the code.
--- include/linux/led-class-flash.h | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-)
include/linux/led-class-flash.h +10 -12
@@ -94,12 +94,12 @@ static inline struct led_classdev_flash *lcdev_to_flcdev(* * Returns: 0 on success or negative error value on failure */ -extern int led_classdev_flash_register_ext (struct device *parent, -struct led_classdev_flash *fled_cdev, -struct led_init_data *init_data); +int led_classdev_flash_register_ext (struct device *parent, +struct led_classdev_flash *fled_cdev, +struct led_init_data *init_data);static inline int led_classdev_flash_register (struct device *parent, -struct led_classdev_flash *fled_cdev) +struct led_classdev_flash *fled_cdev) {return led_classdev_flash_register_ext (parent, fled_cdev,NULL ); }
@@ -111,7 +111,7 @@ static inline int led_classdev_flash_register(struct device *parent,* * Unregister a previously registered via led_classdev_flash_register object */ -extern void led_classdev_flash_unregister (struct led_classdev_flash *fled_cdev); +void led_classdev_flash_unregister (struct led_classdev_flash *fled_cdev);/** * led_set_flash_strobe - setup flash strobe
@@ -159,8 +159,8 @@ static inline int led_get_flash_strobe(struct led_classdev_flash *fled_cdev,* * Returns: 0 on success or negative error value on failure */ -extern int led_set_flash_brightness (struct led_classdev_flash *fled_cdev, -u32 brightness); +int led_set_flash_brightness (struct led_classdev_flash *fled_cdev, +u32 brightness);/** * led_update_flash_brightness - update flash LED brightness
@@ -171,7 +171,7 @@ extern int led_set_flash_brightness(struct led_classdev_flash *fled_cdev,* * Returns: 0 on success or negative error value on failure */ -extern int led_update_flash_brightness (struct led_classdev_flash *fled_cdev); +int led_update_flash_brightness (struct led_classdev_flash *fled_cdev);/** * led_set_flash_timeout - set flash LED timeout
@@ -182,8 +182,7 @@ extern int led_update_flash_brightness(struct led_classdev_flash *fled_cdev);* * Returns: 0 on success or negative error value on failure */ -extern int led_set_flash_timeout (struct led_classdev_flash *fled_cdev, -u32 timeout); +int led_set_flash_timeout (struct led_classdev_flash *fled_cdev,u32 timeout);/** * led_get_flash_fault - get the flash LED fault
@@ -194,7 +193,6 @@ extern int led_set_flash_timeout(struct led_classdev_flash *fled_cdev,* * Returns: 0 on success or negative error value on failure */ -extern int led_get_flash_fault (struct led_classdev_flash *fled_cdev, -u32 *fault); +int led_get_flash_fault (struct led_classdev_flash *fled_cdev,u32 *fault);#endif /* __LINUX_FLASH_LEDS_H_INCLUDED */
Signature · 1 line
2.22.0.214.g8dca754b1e
PATCH v2 2/6 leds: flash: Add devm_* functions to the flash class
Add the missing device managed API for registration and unregistration for the LED flash class.
--- drivers/leds/led-class-flash.c | 50 +++++++++++++++++++++++++++++++++ include/linux/led-class-flash.h | 14 +++++++++ 2 files changed, 64 insertions(+)
drivers/leds/led-class-flash.c +50 -0
@@ -327,6 +327,56 @@ void led_classdev_flash_unregister(struct led_classdev_flash *fled_cdev) }EXPORT_SYMBOL_GPL (led_classdev_flash_unregister); +static void devm_led_classdev_flash_release (struct device *dev,void *res) +{ +led_classdev_flash_unregister (*(struct led_classdev_flash **)res); +} + +int devm_led_classdev_flash_register_ext (struct device *parent, +struct led_classdev_flash *fled_cdev, +struct led_init_data *init_data) +{ +struct led_classdev_flash **dr; +int ret; + + dr =devres_alloc (devm_led_classdev_flash_release,sizeof (*dr), +GFP_KERNEL ); +if (!dr) +return -ENOMEM ; + + ret =led_classdev_flash_register_ext (parent, fled_cdev, init_data); +if (ret) { +devres_free (dr); +return ret; + } + + *dr = fled_cdev; +devres_add (parent, dr); + +return 0 ; +} +EXPORT_SYMBOL_GPL (devm_led_classdev_flash_register_ext); + +static int devm_led_classdev_flash_match (struct device *dev, +void *res,void *data) +{ +struct led_classdev_flash **p = res; + +if (WARN_ON (!p || !*p)) +return 0 ; + +return *p == data; +} + +void devm_led_classdev_flash_unregister (struct device *dev, +struct led_classdev_flash *fled_cdev) +{ +WARN_ON (devres_release (dev, + devm_led_classdev_flash_release, + devm_led_classdev_flash_match, fled_cdev)); +} +EXPORT_SYMBOL_GPL (devm_led_classdev_flash_unregister); +static void led_clamp_align (struct led_flash_setting *s) {u32 v, offset;
include/linux/led-class-flash.h +14 -0
@@ -113,6 +113,20 @@ static inline int led_classdev_flash_register(struct device *parent,*/ void led_classdev_flash_unregister (struct led_classdev_flash *fled_cdev); +int devm_led_classdev_flash_register_ext (struct device *parent, +struct led_classdev_flash *fled_cdev, +struct led_init_data *init_data); + + +static inline int devm_led_classdev_flash_register (struct device *parent, +struct led_classdev_flash *fled_cdev) +{ +return devm_led_classdev_flash_register_ext (parent, fled_cdev,NULL ); +} + +void devm_led_classdev_flash_unregister (struct device *parent, +struct led_classdev_flash *fled_cdev); +/** * led_set_flash_strobe - setup flash strobe * @fled_cdev: the flash LED to set strobe on
Signature · 1 line
2.22.0.214.g8dca754b1e
PATCH v2 3/6 leds: lm3601x: Convert class registration to device managed
In reply to Dan MurphyConvert LED flash class registration to device managed class registration API.
--- drivers/leds/leds-lm3601x.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/leds/leds-lm3601x.c +1 -3
@@ -350,8 +350,7 @@ static int lm3601x_register_leds(struct lm3601x_led *led, init_data.devicename = led->client->name; init_data.default_label = (led->led_mode ==LM3601X_LED_TORCH ) ?"torch" :"infrared" ; - -return led_classdev_flash_register_ext (&led->client->dev, +return devm_led_classdev_flash_register_ext (&led->client->dev, &led->fled_cdev, &init_data); }
@@ -445,7 +444,6 @@ static int lm3601x_remove(struct i2c_client *client) {struct lm3601x_led *led =i2c_get_clientdata (client); -led_classdev_flash_unregister (&led->fled_cdev);mutex_destroy (&led->lock); return regmap_update_bits(led->regmap, LM3601X_ENABLE_REG,
Signature · 1 line
2.22.0.214.g8dca754b1e
PATCH v2 4/6 leds: core: Remove extern from header
In reply to Dan Murphyextern is implied and is not needed in the header file. Remove the extern keyword and re-align the code.
--- include/linux/leds.h | 95 ++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 51 deletions(-)
include/linux/leds.h +44 -51
@@ -161,7 +161,7 @@ struct led_classdev {* * Returns: 0 on success or negative error value on failure */ -extern int led_classdev_register_ext (struct device *parent, +int led_classdev_register_ext (struct device *parent,struct led_classdev *led_cdev,struct led_init_data *init_data);
@@ -181,7 +181,7 @@ static inline int led_classdev_register(struct device *parent,return led_classdev_register_ext (parent, led_cdev,NULL ); } -extern int devm_led_classdev_register_ext (struct device *parent, +int devm_led_classdev_register_ext (struct device *parent,struct led_classdev *led_cdev,struct led_init_data *init_data);
@@ -190,11 +190,11 @@ static inline int devm_led_classdev_register(struct device *parent, {return devm_led_classdev_register_ext (parent, led_cdev,NULL ); } -extern void led_classdev_unregister (struct led_classdev *led_cdev); -extern void devm_led_classdev_unregister (struct device *parent, -struct led_classdev *led_cdev); -extern void led_classdev_suspend (struct led_classdev *led_cdev); -extern void led_classdev_resume (struct led_classdev *led_cdev); +void led_classdev_unregister (struct led_classdev *led_cdev); +void devm_led_classdev_unregister (struct device *parent, +struct led_classdev *led_cdev); +void led_classdev_suspend (struct led_classdev *led_cdev); +void led_classdev_resume (struct led_classdev *led_cdev);/** * led_blink_set - set blinking with software fallback
@@ -211,9 +211,8 @@ extern void led_classdev_resume(struct led_classdev *led_cdev);* led_cdev->brightness_set() will not stop the blinking, * use led_classdev_brightness_set() instead. */ -extern void led_blink_set (struct led_classdev *led_cdev, -unsigned long *delay_on, -unsigned long *delay_off); +void led_blink_set (struct led_classdev *led_cdev,unsigned long *delay_on, +unsigned long *delay_off);/** * led_blink_set_oneshot - do a oneshot software blink * @led_cdev: the LED to start blinking
@@ -228,10 +227,9 @@ extern void led_blink_set(struct led_classdev *led_cdev,* If invert is set, led blinks for delay_off first, then for * delay_on and leave the led on after the on-off cycle. */ -extern void led_blink_set_oneshot (struct led_classdev *led_cdev, -unsigned long *delay_on, -unsigned long *delay_off, -int invert); +void led_blink_set_oneshot (struct led_classdev *led_cdev, +unsigned long *delay_on,unsigned long *delay_off, +int invert);/** * led_set_brightness - set LED brightness * @led_cdev: the LED to set
@@ -241,8 +239,8 @@ extern void led_blink_set_oneshot(struct led_classdev *led_cdev,* software blink timer that implements blinking when the * hardware doesn't. This function is guaranteed not to sleep. */ -extern void led_set_brightness (struct led_classdev *led_cdev, -enum led_brightness brightness); +void led_set_brightness (struct led_classdev *led_cdev, +enum led_brightness brightness);/** * led_set_brightness_sync - set LED brightness synchronously
@@ -255,8 +253,8 @@ extern void led_set_brightness(struct led_classdev *led_cdev,* * Returns: 0 on success or negative error value on failure */ -extern int led_set_brightness_sync (struct led_classdev *led_cdev, -enum led_brightness value); +int led_set_brightness_sync (struct led_classdev *led_cdev, +enum led_brightness value);/** * led_update_brightness - update LED brightness
@@ -267,7 +265,7 @@ extern int led_set_brightness_sync(struct led_classdev *led_cdev,* * Returns: 0 on success or negative error value on failure */ -extern int led_update_brightness (struct led_classdev *led_cdev); +int led_update_brightness (struct led_classdev *led_cdev);/** * led_get_default_pattern - return default pattern
@@ -279,8 +277,7 @@ extern int led_update_brightness(struct led_classdev *led_cdev);* Return: Allocated array of integers with default pattern from device tree * or NULL. Caller is responsible for kfree(). */ -extern u32 *led_get_default_pattern (struct led_classdev *led_cdev, -unsigned int *size); +u32 *led_get_default_pattern (struct led_classdev *led_cdev,unsigned int *size);/** * led_sysfs_disable - disable LED sysfs interface
@@ -288,7 +285,7 @@ extern u32 *led_get_default_pattern(struct led_classdev *led_cdev,* * Disable the led_cdev's sysfs interface. */ -extern void led_sysfs_disable (struct led_classdev *led_cdev); +void led_sysfs_disable (struct led_classdev *led_cdev);/** * led_sysfs_enable - enable LED sysfs interface
@@ -296,7 +293,7 @@ extern void led_sysfs_disable(struct led_classdev *led_cdev);* * Enable the led_cdev's sysfs interface. */ -extern void led_sysfs_enable (struct led_classdev *led_cdev); +void led_sysfs_enable (struct led_classdev *led_cdev);/** * led_compose_name - compose LED class device name
@@ -311,8 +308,8 @@ extern void led_sysfs_enable(struct led_classdev *led_cdev);* * Returns: 0 on success or negative error value on failure */ -extern int led_compose_name (struct device *dev,struct led_init_data *init_data, -char *led_classdev_name); +int led_compose_name (struct device *dev,struct led_init_data *init_data, +char *led_classdev_name);/** * led_sysfs_is_disabled - check if LED sysfs interface is disabled
@@ -362,27 +359,24 @@ struct led_trigger {#define led_trigger_get_drvdata (dev) (led_get_trigger_data(led_trigger_get_led(dev)))/* Registration functions for complex triggers */ -extern int led_trigger_register (struct led_trigger *trigger); -extern void led_trigger_unregister (struct led_trigger *trigger); -extern int devm_led_trigger_register (struct device *dev, +int led_trigger_register (struct led_trigger *trigger); +void led_trigger_unregister (struct led_trigger *trigger); +int devm_led_trigger_register (struct device *dev,struct led_trigger *trigger); -extern void led_trigger_register_simple (const char *name, +void led_trigger_register_simple (const char *name,struct led_trigger **trigger); -extern void led_trigger_unregister_simple (struct led_trigger *trigger); -extern void led_trigger_event (struct led_trigger *trigger, -enum led_brightness event); -extern void led_trigger_blink (struct led_trigger *trigger, -unsigned long *delay_on, -unsigned long *delay_off); -extern void led_trigger_blink_oneshot (struct led_trigger *trigger, -unsigned long *delay_on, -unsigned long *delay_off, -int invert); -extern void led_trigger_set_default (struct led_classdev *led_cdev); -extern int led_trigger_set (struct led_classdev *led_cdev, -struct led_trigger *trigger); -extern void led_trigger_remove (struct led_classdev *led_cdev); +void led_trigger_unregister_simple (struct led_trigger *trigger); +void led_trigger_event (struct led_trigger *trigger,enum led_brightness event); +void led_trigger_blink (struct led_trigger *trigger,unsigned long *delay_on, +unsigned long *delay_off); +void led_trigger_blink_oneshot (struct led_trigger *trigger, +unsigned long *delay_on, +unsigned long *delay_off, +int invert); +void led_trigger_set_default (struct led_classdev *led_cdev); +int led_trigger_set (struct led_classdev *led_cdev,struct led_trigger *trigger); +void led_trigger_remove (struct led_classdev *led_cdev);static inline void led_set_trigger_data (struct led_classdev *led_cdev,void *trigger_data)
@@ -410,8 +404,7 @@ static inline void *led_get_trigger_data(struct led_classdev *led_cdev)* This is meant to be used on triggers with statically * allocated name. */ -extern void led_trigger_rename_static (const char *name, -struct led_trigger *trig); +void led_trigger_rename_static (const char *name,struct led_trigger *trig);#define module_led_trigger (__led_trigger) \ module_driver(__led_trigger, led_trigger_register, \
@@ -453,20 +446,20 @@ static inline void *led_get_trigger_data(struct led_classdev *led_cdev)/* Trigger specific functions */ #ifdef CONFIG_LEDS_TRIGGER_DISK -extern void ledtrig_disk_activity (bool write); +void ledtrig_disk_activity (bool write);#else static inline void ledtrig_disk_activity (bool write) {}#endif #ifdef CONFIG_LEDS_TRIGGER_MTD -extern void ledtrig_mtd_activity (void ); +void ledtrig_mtd_activity (void );#else static inline void ledtrig_mtd_activity (void ) {}#endif #if defined(CONFIG_LEDS_TRIGGER_CAMERA ) || defined(CONFIG_LEDS_TRIGGER_CAMERA_MODULE ) -extern void ledtrig_flash_ctrl (bool on); -extern void ledtrig_torch_ctrl (bool on); +void ledtrig_flash_ctrl (bool on); +void ledtrig_torch_ctrl (bool on);#else static inline void ledtrig_flash_ctrl (bool on) {}static inline void ledtrig_torch_ctrl (bool on) {}
@@ -546,7 +539,7 @@ enum cpu_led_event { CPU_LED_HALTED, /* Machine shutdown */ };#ifdef CONFIG_LEDS_TRIGGER_CPU -extern void ledtrig_cpu (enum cpu_led_event evt); +void ledtrig_cpu (enum cpu_led_event evt);#else static inline void ledtrig_cpu (enum cpu_led_event evt) {
@@ -555,7 +548,7 @@ static inline void ledtrig_cpu(enum cpu_led_event evt)#endif #ifdef CONFIG_LEDS_BRIGHTNESS_HW_CHANGED -extern void led_classdev_notify_brightness_hw_changed ( +void led_classdev_notify_brightness_hw_changed (struct led_classdev *led_cdev,enum led_brightness brightness);#else static inline void led_classdev_notify_brightness_hw_changed(
Signature · 1 line
2.22.0.214.g8dca754b1e
PATCH v2 5/6 leds: core: Fix devm_classdev_match to reference correct structure
In reply to Dan MurphyFix the devm_classdev_match pointer initilization to the correct structure type.
--- drivers/leds/led-class.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/leds/led-class.c +1 -1
@@ -403,7 +403,7 @@ EXPORT_SYMBOL_GPL(devm_led_classdev_register_ext);static int devm_led_classdev_match (struct device *dev,void *res,void *data) { -struct led_cdev **p = res; +struct led_classdev **p = res;if (WARN_ON (!p || !*p))return 0 ;
Signature · 1 line
2.22.0.214.g8dca754b1e
PATCH v2 6/6 leds: core: Fix leds.h structure documentation
In reply to Dan MurphyUpdate the leds.h structure documentation to define the correct arguments.
--- include/linux/leds.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
include/linux/leds.h +2 -3
@@ -245,7 +245,7 @@ void led_set_brightness(struct led_classdev *led_cdev,/** * led_set_brightness_sync - set LED brightness synchronously * @led_cdev: the LED to set -* @brightness: the brightness to set it to +* @value: the brightness to set it to * * Set an LED's brightness immediately. This function will block * the caller for the time required for accessing device registers,
@@ -298,8 +298,7 @@ void led_sysfs_enable(struct led_classdev *led_cdev);/** * led_compose_name - compose LED class device name * @dev: LED controller device object -* @child: child fwnode_handle describing a LED or a group of synchronized LEDs; -* it must be provided only for fwnode based LEDs +* @init_data: the LED class device initialization data * @led_classdev_name: composed LED class device name * * Create LED class device name basing on the provided init_data argument.
Signature · 1 line
2.22.0.214.g8dca754b1e
Hi Dan,
Thank you for the update.
Quoted 7 lines · Dan Murphy
extern is implied and is not needed in the header file. Remove the extern keyword and re-align the code.
Signed-off-by Dan Murphy <[email protected]>--- include/linux/led-class-flash.h | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-)
Patch set applied.
Signature · 2 lines
Best regards, Jacek Anaszewski