Linux 下的闪光 LED 处理¶
一些 LED 设备提供两种模式 - 常亮(torch)和闪光(flash)。 在 LED 子系统中,这些模式分别由 LED 类(参见 Linux 下的 LED 处理)和 LED 闪光类支持。 常亮模式相关的功能默认启用,而闪光模式仅在驱动程序通过设置 LED_DEV_CAP_FLASH 标志声明它时才启用。
为了启用对闪光 LED 的支持,必须在内核配置中定义 CONFIG_LEDS_CLASS_FLASH 符号。 LED 闪光类驱动程序必须使用 led_classdev_flash_register 函数在 LED 子系统中注册。
以下 sysfs 属性暴露用于控制闪光 LED 设备:(参见 ABI 文件测试/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 特定的 ops
- external_strobe_set
定义闪光 LED 选通的来源 - V4L2_CID_FLASH_STROBE 控制或外部来源,通常是传感器,这使得可以将闪光选通启动与曝光启动同步。
- intensity_to_led_brightness 和 led_brightness_to_intensity
以设备特定的方式执行 enum led_brightness <-> V4L2 强度转换 - 它们可用于具有非线性 LED 电流刻度的设备。
- config
V4L2 Flash 子设备的配置
- dev_name
媒体实体的名称,在系统中是唯一的
- flash_faults
LED 闪光类设备可以报告的闪光故障的位掩码; 相应的 LED_FAULT* 位定义可在 <linux/led-class-flash.h> 中找到。
- torch_intensity
以微安为单位的常亮模式下 LED 的约束
- indicator_intensity
以微安为单位的指示灯 LED 的约束
- has_external_strobe
确定闪光选通源是否可以切换到外部
在移除时,必须调用 v4l2_flash_release 函数,该函数接受一个参数 - 先前由 v4l2_flash_init 返回的 struct v4l2_flash
指针。 可以安全地使用 NULL 或错误指针参数调用此函数。
有关 v4l2 闪光封装器的示例用法,请参阅 drivers/leds/leds-max77693.c。
一旦 V4L2 子设备由创建媒体控制器设备的驱动程序注册,则该子设备节点的作用就与本机 V4L2 闪光 API 设备的节点一样。 调用只是简单地路由到 LED 闪光 API。
打开 V4L2 闪光子设备会使 LED 子系统 sysfs 接口不可用。 在关闭 V4L2 闪光子设备后,该接口将重新启用。