Jacek Anaszewski | f6ad395 | 2015-03-04 08:14:24 -0800 | [diff] [blame] | 1 | |
| 2 | Flash LED handling under Linux |
| 3 | ============================== |
| 4 | |
| 5 | Some LED devices provide two modes - torch and flash. In the LED subsystem |
| 6 | those modes are supported by LED class (see Documentation/leds/leds-class.txt) |
| 7 | and LED Flash class respectively. The torch mode related features are enabled |
| 8 | by default and the flash ones only if a driver declares it by setting |
| 9 | LED_DEV_CAP_FLASH flag. |
| 10 | |
| 11 | In order to enable the support for flash LEDs CONFIG_LEDS_CLASS_FLASH symbol |
| 12 | must be defined in the kernel config. A LED Flash class driver must be |
| 13 | registered in the LED subsystem with led_classdev_flash_register function. |
| 14 | |
| 15 | Following sysfs attributes are exposed for controlling flash LED devices: |
| 16 | (see Documentation/ABI/testing/sysfs-class-led-flash) |
| 17 | - flash_brightness |
| 18 | - max_flash_brightness |
| 19 | - flash_timeout |
| 20 | - max_flash_timeout |
| 21 | - flash_strobe |
| 22 | - flash_fault |
Jacek Anaszewski | aaf2cbc | 2015-06-08 02:02:18 -0700 | [diff] [blame] | 23 | |
| 24 | |
| 25 | V4L2 flash wrapper for flash LEDs |
| 26 | ================================= |
| 27 | |
| 28 | A LED subsystem driver can be controlled also from the level of VideoForLinux2 |
| 29 | subsystem. In order to enable this CONFIG_V4L2_FLASH_LED_CLASS symbol has to |
| 30 | be defined in the kernel config. |
| 31 | |
| 32 | The driver must call the v4l2_flash_init function to get registered in the |
| 33 | V4L2 subsystem. The function takes six arguments: |
| 34 | - dev : flash device, e.g. an I2C device |
| 35 | - of_node : of_node of the LED, may be NULL if the same as device's |
| 36 | - fled_cdev : LED flash class device to wrap |
| 37 | - iled_cdev : LED flash class device representing indicator LED associated with |
| 38 | fled_cdev, may be NULL |
| 39 | - ops : V4L2 specific ops |
| 40 | * external_strobe_set - defines the source of the flash LED strobe - |
| 41 | V4L2_CID_FLASH_STROBE control or external source, typically |
| 42 | a sensor, which makes it possible to synchronise the flash |
| 43 | strobe start with exposure start, |
| 44 | * intensity_to_led_brightness and led_brightness_to_intensity - perform |
| 45 | enum led_brightness <-> V4L2 intensity conversion in a device |
| 46 | specific manner - they can be used for devices with non-linear |
| 47 | LED current scale. |
| 48 | - config : configuration for V4L2 Flash sub-device |
| 49 | * dev_name - the name of the media entity, unique in the system, |
| 50 | * flash_faults - bitmask of flash faults that the LED flash class |
| 51 | device can report; corresponding LED_FAULT* bit definitions are |
| 52 | available in <linux/led-class-flash.h>, |
| 53 | * torch_intensity - constraints for the LED in TORCH mode |
| 54 | in microamperes, |
| 55 | * indicator_intensity - constraints for the indicator LED |
| 56 | in microamperes, |
| 57 | * has_external_strobe - determines whether the flash strobe source |
| 58 | can be switched to external, |
| 59 | |
| 60 | On remove the v4l2_flash_release function has to be called, which takes one |
| 61 | argument - struct v4l2_flash pointer returned previously by v4l2_flash_init. |
| 62 | This function can be safely called with NULL or error pointer argument. |
| 63 | |
| 64 | Please refer to drivers/leds/leds-max77693.c for an exemplary usage of the |
| 65 | v4l2 flash wrapper. |
| 66 | |
| 67 | Once the V4L2 sub-device is registered by the driver which created the Media |
| 68 | controller device, the sub-device node acts just as a node of a native V4L2 |
| 69 | flash API device would. The calls are simply routed to the LED flash API. |
| 70 | |
| 71 | Opening the V4L2 flash sub-device makes the LED subsystem sysfs interface |
| 72 | unavailable. The interface is re-enabled after the V4L2 flash sub-device |
| 73 | is closed. |