root/include/linux/led-class-flash.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. lcdev_to_flcdev
  2. led_set_flash_strobe
  3. led_get_flash_strobe

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * LED Flash class interface
   4  *
   5  * Copyright (C) 2015 Samsung Electronics Co., Ltd.
   6  * Author: Jacek Anaszewski <j.anaszewski@samsung.com>
   7  */
   8 #ifndef __LINUX_FLASH_LEDS_H_INCLUDED
   9 #define __LINUX_FLASH_LEDS_H_INCLUDED
  10 
  11 #include <linux/leds.h>
  12 
  13 struct device_node;
  14 struct led_classdev_flash;
  15 
  16 /*
  17  * Supported led fault bits - must be kept in synch
  18  * with V4L2_FLASH_FAULT bits.
  19  */
  20 #define LED_FAULT_OVER_VOLTAGE          (1 << 0)
  21 #define LED_FAULT_TIMEOUT               (1 << 1)
  22 #define LED_FAULT_OVER_TEMPERATURE      (1 << 2)
  23 #define LED_FAULT_SHORT_CIRCUIT         (1 << 3)
  24 #define LED_FAULT_OVER_CURRENT          (1 << 4)
  25 #define LED_FAULT_INDICATOR             (1 << 5)
  26 #define LED_FAULT_UNDER_VOLTAGE         (1 << 6)
  27 #define LED_FAULT_INPUT_VOLTAGE         (1 << 7)
  28 #define LED_FAULT_LED_OVER_TEMPERATURE  (1 << 8)
  29 #define LED_NUM_FLASH_FAULTS            9
  30 
  31 #define LED_FLASH_SYSFS_GROUPS_SIZE     5
  32 
  33 struct led_flash_ops {
  34         /* set flash brightness */
  35         int (*flash_brightness_set)(struct led_classdev_flash *fled_cdev,
  36                                         u32 brightness);
  37         /* get flash brightness */
  38         int (*flash_brightness_get)(struct led_classdev_flash *fled_cdev,
  39                                         u32 *brightness);
  40         /* set flash strobe state */
  41         int (*strobe_set)(struct led_classdev_flash *fled_cdev, bool state);
  42         /* get flash strobe state */
  43         int (*strobe_get)(struct led_classdev_flash *fled_cdev, bool *state);
  44         /* set flash timeout */
  45         int (*timeout_set)(struct led_classdev_flash *fled_cdev, u32 timeout);
  46         /* get the flash LED fault */
  47         int (*fault_get)(struct led_classdev_flash *fled_cdev, u32 *fault);
  48 };
  49 
  50 /*
  51  * Current value of a flash setting along
  52  * with its constraints.
  53  */
  54 struct led_flash_setting {
  55         /* maximum allowed value */
  56         u32 min;
  57         /* maximum allowed value */
  58         u32 max;
  59         /* step value */
  60         u32 step;
  61         /* current value */
  62         u32 val;
  63 };
  64 
  65 struct led_classdev_flash {
  66         /* led class device */
  67         struct led_classdev led_cdev;
  68 
  69         /* flash led specific ops */
  70         const struct led_flash_ops *ops;
  71 
  72         /* flash brightness value in microamperes along with its constraints */
  73         struct led_flash_setting brightness;
  74 
  75         /* flash timeout value in microseconds along with its constraints */
  76         struct led_flash_setting timeout;
  77 
  78         /* LED Flash class sysfs groups */
  79         const struct attribute_group *sysfs_groups[LED_FLASH_SYSFS_GROUPS_SIZE];
  80 };
  81 
  82 static inline struct led_classdev_flash *lcdev_to_flcdev(
  83                                                 struct led_classdev *lcdev)
  84 {
  85         return container_of(lcdev, struct led_classdev_flash, led_cdev);
  86 }
  87 
  88 /**
  89  * led_classdev_flash_register_ext - register a new object of LED class with
  90  *                                   init data and with support for flash LEDs
  91  * @parent: LED flash controller device this flash LED is driven by
  92  * @fled_cdev: the led_classdev_flash structure for this device
  93  * @init_data: the LED class flash device initialization data
  94  *
  95  * Returns: 0 on success or negative error value on failure
  96  */
  97 extern int led_classdev_flash_register_ext(struct device *parent,
  98                                         struct led_classdev_flash *fled_cdev,
  99                                         struct led_init_data *init_data);
 100 
 101 #define led_classdev_flash_register(parent, fled_cdev)          \
 102         led_classdev_flash_register_ext(parent, fled_cdev, NULL)
 103 
 104 /**
 105  * led_classdev_flash_unregister - unregisters an object of led_classdev class
 106  *                                 with support for flash LEDs
 107  * @fled_cdev: the flash LED to unregister
 108  *
 109  * Unregister a previously registered via led_classdev_flash_register object
 110  */
 111 extern void led_classdev_flash_unregister(struct led_classdev_flash *fled_cdev);
 112 
 113 /**
 114  * led_set_flash_strobe - setup flash strobe
 115  * @fled_cdev: the flash LED to set strobe on
 116  * @state: 1 - strobe flash, 0 - stop flash strobe
 117  *
 118  * Strobe the flash LED.
 119  *
 120  * Returns: 0 on success or negative error value on failure
 121  */
 122 static inline int led_set_flash_strobe(struct led_classdev_flash *fled_cdev,
 123                                         bool state)
 124 {
 125         if (!fled_cdev)
 126                 return -EINVAL;
 127         return fled_cdev->ops->strobe_set(fled_cdev, state);
 128 }
 129 
 130 /**
 131  * led_get_flash_strobe - get flash strobe status
 132  * @fled_cdev: the flash LED to query
 133  * @state: 1 - flash is strobing, 0 - flash is off
 134  *
 135  * Check whether the flash is strobing at the moment.
 136  *
 137  * Returns: 0 on success or negative error value on failure
 138  */
 139 static inline int led_get_flash_strobe(struct led_classdev_flash *fled_cdev,
 140                                         bool *state)
 141 {
 142         if (!fled_cdev)
 143                 return -EINVAL;
 144         if (fled_cdev->ops->strobe_get)
 145                 return fled_cdev->ops->strobe_get(fled_cdev, state);
 146 
 147         return -EINVAL;
 148 }
 149 
 150 /**
 151  * led_set_flash_brightness - set flash LED brightness
 152  * @fled_cdev: the flash LED to set
 153  * @brightness: the brightness to set it to
 154  *
 155  * Set a flash LED's brightness.
 156  *
 157  * Returns: 0 on success or negative error value on failure
 158  */
 159 extern int led_set_flash_brightness(struct led_classdev_flash *fled_cdev,
 160                                         u32 brightness);
 161 
 162 /**
 163  * led_update_flash_brightness - update flash LED brightness
 164  * @fled_cdev: the flash LED to query
 165  *
 166  * Get a flash LED's current brightness and update led_flash->brightness
 167  * member with the obtained value.
 168  *
 169  * Returns: 0 on success or negative error value on failure
 170  */
 171 extern int led_update_flash_brightness(struct led_classdev_flash *fled_cdev);
 172 
 173 /**
 174  * led_set_flash_timeout - set flash LED timeout
 175  * @fled_cdev: the flash LED to set
 176  * @timeout: the flash timeout to set it to
 177  *
 178  * Set the flash strobe duration.
 179  *
 180  * Returns: 0 on success or negative error value on failure
 181  */
 182 extern int led_set_flash_timeout(struct led_classdev_flash *fled_cdev,
 183                                         u32 timeout);
 184 
 185 /**
 186  * led_get_flash_fault - get the flash LED fault
 187  * @fled_cdev: the flash LED to query
 188  * @fault: bitmask containing flash faults
 189  *
 190  * Get the flash LED fault.
 191  *
 192  * Returns: 0 on success or negative error value on failure
 193  */
 194 extern int led_get_flash_fault(struct led_classdev_flash *fled_cdev,
 195                                         u32 *fault);
 196 
 197 #endif  /* __LINUX_FLASH_LEDS_H_INCLUDED */

/* [<][>][^][v][top][bottom][index][help] */