81 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.4 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);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * 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);
 | |
| 
 | |
| 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 */
 |