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 閃光子裝置後,該介面將重新啟用。