ACPI 视频扩展

此驱动程序实现了 ACPI 2.0 规范附录 B 中指定的用于主板上集成图形设备的 ACPI 显示适配器扩展,允许执行一些基本控制,如定义视频 POST 设备、检索 EDID 信息或设置视频输出等。请注意,这只是一个参考实现。它可能适用于也可能不适用于您的集成视频设备。

ACPI 视频驱动程序在背光控制方面执行 3 项操作。

导出 sysfs 接口供用户空间控制背光亮度级别

如果 ACPI 表有一个视频设备,并且不存在 acpi_backlight=vendor 内核命令行,则驱动程序将注册一个背光设备,并为其设置 sysfs 接口控制所需的背光操作结构。对于每个已注册的类设备,在 /sys/class/backlight 下都会有一个名为 acpi_videoX 的目录。

背光 sysfs 接口在此处具有标准定义:Documentation/ABI/stable/sysfs-class-backlight。

ACPI 视频驱动程序执行的操作是:

actual_brightness

在读取时,将评估控制方法 _BQC 以获取固件认为它所处的亮度级别;

bl_power

未实现,将改为设置当前亮度;

brightness

在写入时,将运行控制方法 _BCM 以设置请求的亮度级别;

max_brightness

从 _BCL 包派生(见下文);

type

firmware

请注意,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(max_brightness)。

通知用户空间有关热键事件

通常有两种热键事件报告的情况

  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 环境启动并希望完全控制背光级别后禁用此行为。