cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

led-class-multicolor.h (3338B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* LED Multicolor class interface
      3 * Copyright (C) 2019-20 Texas Instruments Incorporated - http://www.ti.com/
      4 */
      5
      6#ifndef _LINUX_MULTICOLOR_LEDS_H_INCLUDED
      7#define _LINUX_MULTICOLOR_LEDS_H_INCLUDED
      8
      9#include <linux/leds.h>
     10#include <dt-bindings/leds/common.h>
     11
     12struct mc_subled {
     13	unsigned int color_index;
     14	unsigned int brightness;
     15	unsigned int intensity;
     16	unsigned int channel;
     17};
     18
     19struct led_classdev_mc {
     20	/* led class device */
     21	struct led_classdev led_cdev;
     22	unsigned int num_colors;
     23
     24	struct mc_subled *subled_info;
     25};
     26
     27static inline struct led_classdev_mc *lcdev_to_mccdev(
     28						struct led_classdev *led_cdev)
     29{
     30	return container_of(led_cdev, struct led_classdev_mc, led_cdev);
     31}
     32
     33#if IS_ENABLED(CONFIG_LEDS_CLASS_MULTICOLOR)
     34/**
     35 * led_classdev_multicolor_register_ext - register a new object of led_classdev
     36 *				      class with support for multicolor LEDs
     37 * @parent: the multicolor LED to register
     38 * @mcled_cdev: the led_classdev_mc structure for this device
     39 * @init_data: the LED class multicolor device initialization data
     40 *
     41 * Returns: 0 on success or negative error value on failure
     42 */
     43int led_classdev_multicolor_register_ext(struct device *parent,
     44					    struct led_classdev_mc *mcled_cdev,
     45					    struct led_init_data *init_data);
     46
     47/**
     48 * led_classdev_multicolor_unregister - unregisters an object of led_classdev
     49 *					class with support for multicolor LEDs
     50 * @mcled_cdev: the multicolor LED to unregister
     51 *
     52 * Unregister a previously registered via led_classdev_multicolor_register
     53 * object
     54 */
     55void led_classdev_multicolor_unregister(struct led_classdev_mc *mcled_cdev);
     56
     57/* Calculate brightness for the monochrome LED cluster */
     58int led_mc_calc_color_components(struct led_classdev_mc *mcled_cdev,
     59				 enum led_brightness brightness);
     60
     61int devm_led_classdev_multicolor_register_ext(struct device *parent,
     62					  struct led_classdev_mc *mcled_cdev,
     63					  struct led_init_data *init_data);
     64
     65void devm_led_classdev_multicolor_unregister(struct device *parent,
     66					    struct led_classdev_mc *mcled_cdev);
     67#else
     68
     69static inline int led_classdev_multicolor_register_ext(struct device *parent,
     70					    struct led_classdev_mc *mcled_cdev,
     71					    struct led_init_data *init_data)
     72{
     73	return 0;
     74}
     75
     76static inline void led_classdev_multicolor_unregister(struct led_classdev_mc *mcled_cdev) {};
     77static inline int led_mc_calc_color_components(struct led_classdev_mc *mcled_cdev,
     78					       enum led_brightness brightness)
     79{
     80	return 0;
     81}
     82
     83static inline int devm_led_classdev_multicolor_register_ext(struct device *parent,
     84					  struct led_classdev_mc *mcled_cdev,
     85					  struct led_init_data *init_data)
     86{
     87	return 0;
     88}
     89
     90static inline void devm_led_classdev_multicolor_unregister(struct device *parent,
     91					    struct led_classdev_mc *mcled_cdev)
     92{};
     93
     94#endif  /* IS_ENABLED(CONFIG_LEDS_CLASS_MULTICOLOR) */
     95
     96static inline int led_classdev_multicolor_register(struct device *parent,
     97					    struct led_classdev_mc *mcled_cdev)
     98{
     99	return led_classdev_multicolor_register_ext(parent, mcled_cdev, NULL);
    100}
    101
    102static inline int devm_led_classdev_multicolor_register(struct device *parent,
    103					     struct led_classdev_mc *mcled_cdev)
    104{
    105	return devm_led_classdev_multicolor_register_ext(parent, mcled_cdev,
    106							 NULL);
    107}
    108
    109#endif	/* _LINUX_MULTICOLOR_LEDS_H_INCLUDED */