forked from mirrors/linux
		
	 6039b7e87b
			
		
	
	
		6039b7e87b
		
	
	
	
	
		
			
			Fix multicolor no-ops registration by return 0, and move the same registration functions outside of #ifdef block. Signed-off-by: Gene Chen <gene_chen@richtek.com> Acked-by: Jacek Anaszewski <jacek.anaszewski@gmail.com> Signed-off-by: Pavel Machek <pavel@ucw.cz>
		
			
				
	
	
		
			109 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| /* LED Multicolor class interface
 | |
|  * Copyright (C) 2019-20 Texas Instruments Incorporated - http://www.ti.com/
 | |
|  */
 | |
| 
 | |
| #ifndef _LINUX_MULTICOLOR_LEDS_H_INCLUDED
 | |
| #define _LINUX_MULTICOLOR_LEDS_H_INCLUDED
 | |
| 
 | |
| #include <linux/leds.h>
 | |
| #include <dt-bindings/leds/common.h>
 | |
| 
 | |
| struct mc_subled {
 | |
| 	unsigned int color_index;
 | |
| 	unsigned int brightness;
 | |
| 	unsigned int intensity;
 | |
| 	unsigned int channel;
 | |
| };
 | |
| 
 | |
| struct led_classdev_mc {
 | |
| 	/* led class device */
 | |
| 	struct led_classdev led_cdev;
 | |
| 	unsigned int num_colors;
 | |
| 
 | |
| 	struct mc_subled *subled_info;
 | |
| };
 | |
| 
 | |
| static inline struct led_classdev_mc *lcdev_to_mccdev(
 | |
| 						struct led_classdev *led_cdev)
 | |
| {
 | |
| 	return container_of(led_cdev, struct led_classdev_mc, led_cdev);
 | |
| }
 | |
| 
 | |
| #if IS_ENABLED(CONFIG_LEDS_CLASS_MULTICOLOR)
 | |
| /**
 | |
|  * led_classdev_multicolor_register_ext - register a new object of led_classdev
 | |
|  *				      class with support for multicolor LEDs
 | |
|  * @parent: the multicolor LED to register
 | |
|  * @mcled_cdev: the led_classdev_mc structure for this device
 | |
|  * @init_data: the LED class multicolor device initialization data
 | |
|  *
 | |
|  * Returns: 0 on success or negative error value on failure
 | |
|  */
 | |
| int led_classdev_multicolor_register_ext(struct device *parent,
 | |
| 					    struct led_classdev_mc *mcled_cdev,
 | |
| 					    struct led_init_data *init_data);
 | |
| 
 | |
| /**
 | |
|  * led_classdev_multicolor_unregister - unregisters an object of led_classdev
 | |
|  *					class with support for multicolor LEDs
 | |
|  * @mcled_cdev: the multicolor LED to unregister
 | |
|  *
 | |
|  * Unregister a previously registered via led_classdev_multicolor_register
 | |
|  * object
 | |
|  */
 | |
| void led_classdev_multicolor_unregister(struct led_classdev_mc *mcled_cdev);
 | |
| 
 | |
| /* Calculate brightness for the monochrome LED cluster */
 | |
| int led_mc_calc_color_components(struct led_classdev_mc *mcled_cdev,
 | |
| 				 enum led_brightness brightness);
 | |
| 
 | |
| int devm_led_classdev_multicolor_register_ext(struct device *parent,
 | |
| 					  struct led_classdev_mc *mcled_cdev,
 | |
| 					  struct led_init_data *init_data);
 | |
| 
 | |
| void devm_led_classdev_multicolor_unregister(struct device *parent,
 | |
| 					    struct led_classdev_mc *mcled_cdev);
 | |
| #else
 | |
| 
 | |
| static inline int led_classdev_multicolor_register_ext(struct device *parent,
 | |
| 					    struct led_classdev_mc *mcled_cdev,
 | |
| 					    struct led_init_data *init_data)
 | |
| {
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| static inline void led_classdev_multicolor_unregister(struct led_classdev_mc *mcled_cdev) {};
 | |
| static inline int led_mc_calc_color_components(struct led_classdev_mc *mcled_cdev,
 | |
| 					       enum led_brightness brightness)
 | |
| {
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| static inline int devm_led_classdev_multicolor_register_ext(struct device *parent,
 | |
| 					  struct led_classdev_mc *mcled_cdev,
 | |
| 					  struct led_init_data *init_data)
 | |
| {
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| static inline void devm_led_classdev_multicolor_unregister(struct device *parent,
 | |
| 					    struct led_classdev_mc *mcled_cdev)
 | |
| {};
 | |
| 
 | |
| #endif  /* IS_ENABLED(CONFIG_LEDS_CLASS_MULTICOLOR) */
 | |
| 
 | |
| static inline int led_classdev_multicolor_register(struct device *parent,
 | |
| 					    struct led_classdev_mc *mcled_cdev)
 | |
| {
 | |
| 	return led_classdev_multicolor_register_ext(parent, mcled_cdev, NULL);
 | |
| }
 | |
| 
 | |
| static inline int devm_led_classdev_multicolor_register(struct device *parent,
 | |
| 					     struct led_classdev_mc *mcled_cdev)
 | |
| {
 | |
| 	return devm_led_classdev_multicolor_register_ext(parent, mcled_cdev,
 | |
| 							 NULL);
 | |
| }
 | |
| 
 | |
| #endif	/* _LINUX_MULTICOLOR_LEDS_H_INCLUDED */
 |