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