Linux 下的闪光 LED 处理¶
一些 LED 设备提供两种模式 - 手电筒和闪光灯。在 LED 子系统中,这些模式分别由 LED 类(请参阅 Linux 下的 LED 处理)和 LED 闪光类支持。手电筒模式相关的功能默认启用,只有当驱动程序通过设置 LED_DEV_CAP_FLASH 标志声明时,才会启用闪光灯功能。
为了启用对闪光 LED 的支持,必须在内核配置中定义 CONFIG_LEDS_CLASS_FLASH 符号。LED 闪光类驱动程序必须使用 led_classdev_flash_register 函数在 LED 子系统中注册。
以下 sysfs 属性被公开以控制闪光 LED 设备:(请参阅 Documentation/ABI/testing/sysfs-class-led-flash)
flash_brightness
max_flash_brightness
flash_timeout
max_flash_timeout
flash_strobe
flash_fault
用于闪光 LED 的 V4L2 闪光封装器¶
LED 子系统驱动程序也可以从 VideoForLinux2 子系统的级别进行控制。为了启用此功能,必须在内核配置中定义 CONFIG_V4L2_FLASH_LED_CLASS 符号。
驱动程序必须调用 v4l2_flash_init 函数才能在 V4L2 子系统中注册。该函数接受六个参数
- dev
闪光设备,例如 I2C 设备
- of_node
LED 的 of_node,如果与设备的 of_node 相同,则可以为 NULL
- fled_cdev
要封装的 LED 闪光类设备
- iled_cdev
代表与 fled_cdev 关联的指示灯 LED 的 LED 闪光类设备,可以为 NULL
- ops
V4L2 特定的操作
- external_strobe_set
定义闪光 LED 频闪的来源 - V4L2_CID_FLASH_STROBE 控制或外部来源,通常是传感器,这使得可以将闪光频闪的开始与曝光开始同步。
- intensity_to_led_brightness 和 led_brightness_to_intensity
以设备特定的方式执行枚举 led_brightness <-> V4L2 强度转换 - 它们可以用于具有非线性 LED 电流刻度的设备。
- config
V4L2 闪光子设备的配置
- dev_name
媒体实体的名称,在系统中必须唯一。
- flash_faults
LED 闪光类设备可以报告的闪光故障的位掩码;相应的 LED_FAULT* 位定义可在 <linux/led-class-flash.h> 中找到。
- torch_intensity
手电筒模式下 LED 的约束条件,以微安为单位。
- indicator_intensity
指示灯 LED 的约束条件,以微安为单位。
- has_external_strobe
确定闪光频闪源是否可以切换到外部。
在移除时,必须调用 v4l2_flash_release 函数,该函数接受一个参数 - struct v4l2_flash
指针,该指针之前由 v4l2_flash_init 返回。可以安全地使用 NULL 或错误指针参数调用此函数。
有关 v4l2 闪光封装器的示例用法,请参阅 drivers/leds/leds-max77693.c。
一旦创建媒体控制器设备的驱动程序注册了 V4L2 子设备,该子设备节点的作用就类似于本机 V4L2 闪光 API 设备的节点。调用只是简单地路由到 LED 闪光 API。
打开 V4L2 闪光子设备会使 LED 子系统 sysfs 接口不可用。该接口在 V4L2 闪光子设备关闭后重新启用。