ACPI 影片擴充套件

該驅動實現了主機板整合顯示卡裝置的 ACPI 顯示介面卡擴充套件,具體在 ACPI 2.0 規範附錄 B 中有所規定。它允許執行一些基本控制,例如定義影片 POST 裝置、檢索 EDID 資訊或設定影片輸出等。請注意,這僅是一個參考實現,可能不適用於您的整合影片裝置。

ACPI 影片驅動在背光控制方面做了三件事。

為使用者空間匯出 sysfs 介面以控制背光亮度

如果 ACPI 表中存在影片裝置,且核心命令列中未包含 acpi_backlight=vendor,則驅動將註冊一個背光裝置,併為其設定所需的背光操作結構,以進行 sysfs 介面控制。對於每個已註冊的類裝置,在 /sys/class/backlight 下都會有一個名為 acpi_videoX 的目錄。

背光 sysfs 介面的標準定義在這裡: ABI 檔案 stable/sysfs-class-backlight

ACPI 影片驅動的作用是:

實際亮度

讀取時,將評估控制方法 _BQC 以獲取韌體認為的當前亮度級別;

bl_power

未實現,將改為設定當前亮度;

亮度

寫入時,將執行控制方法 _BCM 以設定請求的亮度級別;

最大亮度

從 _BCL 包(見下文)派生;

型別

韌體

請注意,ACPI 影片背光碟機動程式將始終使用索引來表示亮度 (brightness)、實際亮度 (actual_brightness) 和最大亮度 (max_brightness)。因此,如果我們有以下 _BCL 包

Method (_BCL, 0, NotSerialized)
{
        Return (Package (0x0C)
        {
                0x64,
                0x32,
                0x0A,
                0x14,
                0x1E,
                0x28,
                0x32,
                0x3C,
                0x46,
                0x50,
                0x5A,
                0x64
        })
}

前兩個級別用於筆記型電腦在使用交流電源或電池供電時,目前 Linux 不使用。剩餘的 10 個級別是我們可以選擇支援的級別。適用的索引值從 0(對應亮度值 0x0A)到 9(對應亮度值 0x64),包含兩端。每個索引值都被視為“亮度級別”指示器。因此,從使用者空間的角度來看,可用亮度級別的範圍是 0 到 9(最大亮度),包含兩端。

通知使用者空間熱鍵事件

熱鍵事件報告通常有兩種情況

  1. 對於某些筆記型電腦,當用戶按下熱鍵時,會生成一個掃描碼,並透過鍵盤驅動程式建立的輸入裝置作為按鍵型別輸入事件傳送到使用者空間;經過適當的重對映,以下按鍵程式碼將出現在使用者空間

    EV_KEY, KEY_BRIGHTNESSUP
    EV_KEY, KEY_BRIGHTNESSDOWN
    etc.
    

對於這種情況,ACPI 影片驅動程式不需要做任何事情(實際上,它甚至不知道此事發生)。

  1. 對於某些筆記型電腦,按下熱鍵不會生成掃描碼;相反,韌體會向影片裝置的 ACPI 節點通知該事件。事件值在 ACPI 規範中定義。ACPI 影片驅動程式將根據其接收到的通知值生成一個按鍵型別輸入事件,並透過其建立的輸入裝置將該事件傳送到使用者空間

    事件

    鍵碼

    0x86

    KEY_BRIGHTNESSUP

    0x87

    KEY_BRIGHTNESSDOWN

    等。

因此,這會達到與情況 i) 相同的效果。

一旦使用者空間工具接收到此事件,就可以透過 sysfs 介面修改背光級別。

在核心中更改背光級別

這適用於第 2 節中情況 ii) 所涵蓋的機器。一旦驅動程式收到通知,它將相應地設定背光級別。這不影響事件傳送到使用者空間,無論影片模組是否直接控制背光級別,事件始終會發送到使用者空間。此行為可以透過 brightness_switch_enabled 模組引數控制,如 admin-guide/kernel-parameters.rst 中所述。建議一旦 GUI 環境啟動並希望完全控制背光級別時停用此行為。