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(最大亮度),包含两端。
通知用户空间热键事件¶
热键事件报告通常有两种情况
对于某些笔记本电脑,当用户按下热键时,会生成一个扫描码,并通过键盘驱动程序创建的输入设备作为按键类型输入事件发送到用户空间;经过适当的重映射,以下按键代码将出现在用户空间
EV_KEY, KEY_BRIGHTNESSUP EV_KEY, KEY_BRIGHTNESSDOWN etc.
对于这种情况,ACPI 视频驱动程序不需要做任何事情(实际上,它甚至不知道此事发生)。
对于某些笔记本电脑,按下热键不会生成扫描码;相反,固件会向视频设备的 ACPI 节点通知该事件。事件值在 ACPI 规范中定义。ACPI 视频驱动程序将根据其接收到的通知值生成一个按键类型输入事件,并通过其创建的输入设备将该事件发送到用户空间
事件
键码
0x86
KEY_BRIGHTNESSUP
0x87
KEY_BRIGHTNESSDOWN
等。
因此,这会达到与情况 i) 相同的效果。
一旦用户空间工具接收到此事件,就可以通过 sysfs 接口修改背光级别。
在内核中更改背光级别¶
这适用于第 2 节中情况 ii) 所涵盖的机器。一旦驱动程序收到通知,它将相应地设置背光级别。这不影响事件发送到用户空间,无论视频模块是否直接控制背光级别,事件始终会发送到用户空间。此行为可以通过 brightness_switch_enabled
模块参数控制,如 admin-guide/kernel-parameters.rst
中所述。建议一旦 GUI 环境启动并希望完全控制背光级别时禁用此行为。