| |
| Flash LED handling under Linux |
| ============================== |
| |
| Some LED devices provide two modes - torch and flash. In the LED subsystem |
| those modes are supported by LED class (see Documentation/leds/leds-class.txt) |
| and LED Flash class respectively. The torch mode related features are enabled |
| by default and the flash ones only if a driver declares it by setting |
| LED_DEV_CAP_FLASH flag. |
| |
| In order to enable the support for flash LEDs CONFIG_LEDS_CLASS_FLASH symbol |
| must be defined in the kernel config. A LED Flash class driver must be |
| registered in the LED subsystem with led_classdev_flash_register function. |
| |
| Following sysfs attributes are exposed for controlling flash LED devices: |
| (see Documentation/ABI/testing/sysfs-class-led-flash) |
| - flash_brightness |
| - max_flash_brightness |
| - flash_timeout |
| - max_flash_timeout |
| - flash_strobe |
| - flash_fault |
| |
| |
| V4L2 flash wrapper for flash LEDs |
| ================================= |
| |
| A LED subsystem driver can be controlled also from the level of VideoForLinux2 |
| subsystem. In order to enable this CONFIG_V4L2_FLASH_LED_CLASS symbol has to |
| be defined in the kernel config. |
| |
| The driver must call the v4l2_flash_init function to get registered in the |
| V4L2 subsystem. The function takes six arguments: |
| - dev : flash device, e.g. an I2C device |
| - of_node : of_node of the LED, may be NULL if the same as device's |
| - fled_cdev : LED flash class device to wrap |
| - iled_cdev : LED flash class device representing indicator LED associated with |
| fled_cdev, may be NULL |
| - ops : V4L2 specific ops |
| * external_strobe_set - defines the source of the flash LED strobe - |
| V4L2_CID_FLASH_STROBE control or external source, typically |
| a sensor, which makes it possible to synchronise the flash |
| strobe start with exposure start, |
| * intensity_to_led_brightness and led_brightness_to_intensity - perform |
| enum led_brightness <-> V4L2 intensity conversion in a device |
| specific manner - they can be used for devices with non-linear |
| LED current scale. |
| - config : configuration for V4L2 Flash sub-device |
| * dev_name - the name of the media entity, unique in the system, |
| * flash_faults - bitmask of flash faults that the LED flash class |
| device can report; corresponding LED_FAULT* bit definitions are |
| available in <linux/led-class-flash.h>, |
| * torch_intensity - constraints for the LED in TORCH mode |
| in microamperes, |
| * indicator_intensity - constraints for the indicator LED |
| in microamperes, |
| * has_external_strobe - determines whether the flash strobe source |
| can be switched to external, |
| |
| On remove the v4l2_flash_release function has to be called, which takes one |
| argument - struct v4l2_flash pointer returned previously by v4l2_flash_init. |
| This function can be safely called with NULL or error pointer argument. |
| |
| Please refer to drivers/leds/leds-max77693.c for an exemplary usage of the |
| v4l2 flash wrapper. |
| |
| Once the V4L2 sub-device is registered by the driver which created the Media |
| controller device, the sub-device node acts just as a node of a native V4L2 |
| flash API device would. The calls are simply routed to the LED flash API. |
| |
| Opening the V4L2 flash sub-device makes the LED subsystem sysfs interface |
| unavailable. The interface is re-enabled after the V4L2 flash sub-device |
| is closed. |