Samsung Galaxy Book 驱动¶
Joshua Grisham <josh@joshuagrisham.com>
这是用于 Samsung Galaxy Book 系列笔记本电脑设备的 Linux x86 平台驱动程序,它利用 Samsung 的 SCAI
ACPI 设备来控制额外功能并接收各种通知。
支持的设备¶
任何具有受支持的 ACPI 设备 ID 之一的设备都应该受支持。 这涵盖了截至本文撰写时目前可用的大多数“Samsung Galaxy Book”系列笔记本电脑,并且可能还包括其他 Samsung 笔记本电脑设备。
状态¶
目前支持以下功能
键盘背光 控制
性能模式 控制,使用平台配置文件接口实现
电池充电控制结束阈值(在给定的百分比值停止电池充电),实现为电池挂钩
固件属性,允许控制各种设备设置
处理 Fn 热键 以进行各种操作
由于这些设备的不同型号的功能可能会有所不同,因此驱动程序中内置了逻辑,该逻辑会尝试测试每个已实现的功能以获得有效响应,然后再启用其支持(注册其他设备或扩展,添加 sysfs 属性等)。 因此,重要的是要注意并非所有功能都可能受您的特定设备支持。
以下功能可能可以实现,但需要额外的调查,因此目前不支持
扬声器的“Dolby Atmos”模式
在具有
SAM0427
的型号上用于提高屏幕亮度的“户外模式”在具有
SAM0427
的型号上的“静音模式”
键盘背光¶
创建一个名为 samsung-galaxybook::kbd_backlight
的新 LED 类,然后将在 /sys/class/leds/samsung-galaxybook::kbd_backlight
使用标准的基于 sysfs 的 LED 接口公开该设备。 可以通过将所需的值写入 brightness
sysfs 属性或使用任何其他所需的用户空间实用程序来控制亮度。
注意
这些设备中的大多数都具有环境光传感器,该传感器也会在光线充足的条件下关闭键盘背光。 目前似乎无法控制此行为,但最好了解一下。
性能模式¶
此驱动程序实现了 平台配置文件选择(例如 /sys/firmware/acpi/platform_profile) 接口,用于处理 Samsung ACPI 设备的“性能模式”功能。
驱动程序动态地执行每个 Samsung “性能模式”到其各自的平台配置文件的映射,因为并非所有型号都支持所有相同的性能模式。 您的设备可能具有以下一个或多个映射
“静音”映射到
low-power
“安静”映射到
quiet
“优化”映射到
balanced
“高性能”映射到
performance
加载模块时,可以在内核日志中打印映射结果。 也可以从 /sys/firmware/acpi/platform_profile_choices
中检索支持的配置文件,而 /sys/firmware/acpi/platform_profile
可用于读取或写入当前选择的配置文件。
如果之前未设置任何配置文件,则将在模块加载期间设置 balanced
平台配置文件。
电池充电控制结束阈值¶
此平台驱动程序将增加设置电池充电控制结束阈值的功能,但不具备设置开始阈值的功能。
此功能通常被 Windows 中的各种 Samsung 应用程序称为“电池保护程序”,但在 Linux 中,我们在电池设备上实现了标准化的“充电控制阈值”sysfs 接口,以便从用户空间控制此功能。
sysfs 属性 /sys/class/power_supply/BAT1/charge_control_end_threshold
可用于读取或设置所需的充电结束阈值。
如果您希望与 Windows 中的 Samsung Settings 应用程序保持互操作性,则应将该值设置为 100 以表示“关闭”,或者仅使用以下值之一启用该功能:50、60、70、80 或 90。 否则,驱动程序将接受 1 到 100 之间的任何值作为您希望电池停止充电的百分比。
注意
已经观察到一些设备在给出小于 30 的输入值时会自动“关闭”充电控制结束阈值。
固件属性¶
此驱动程序设置了以下枚举类型的固件属性,如果您的设备支持它们,则应该可以在 /sys/class/firmware-attributes/samsung-galaxybook/attributes/
下访问它们
power_on_lid_open
(打开盖子时设备应通电)usb_charging
(即使设备已断电或处于低睡眠状态,USB 端口也可以为连接的设备供电)block_recording
(阻止访问摄像头和麦克风)
所有这些属性都是简单的类布尔枚举值,使用 0 表示“关闭”,使用 1 表示“打开”。 使用 current_value
属性来获取或更改设备上的设置。
请注意,当更新 block_recording
时,输入设备“Samsung Galaxy Book Lens Cover”将收到一个 SW_CAMERA_LENS_COVER
开关事件,该事件反映当前状态。
键盘热键操作 (i8042 过滤器)¶
i8042 过滤器将吞下 Fn+F9 热键(多级键盘背光切换)和 Fn+F10 热键(阻止录制切换)的键盘事件,而是在驱动程序本身中执行其操作。
Fn+F9 将循环显示键盘背光的亮度级别。 将使用 led_classdev_notify_brightness_hw_changed
发送通知,以便用户空间可以了解更改。 这模仿了其他现有设备的行为,其中亮度级别由嵌入式控制器在内部循环,然后通过通知报告。
Fn+F10 将切换“阻止录制”设置的值,该设置阻止或允许使用内置摄像头和麦克风(并生成上面提到的相同的镜头盖开关事件)。
ACPI 通知和热键操作¶
ACPI 通知将在设备类 samsung-galaxybook
和总线 ID 下生成 ACPI netlink 事件,该总线 ID 与设备上找到的 Samsung ACPI 设备 ID 匹配。 可以使用诸如 acpi_listen
和 acpid
之类的用户空间工具来接收这些事件。
Fn+F11 性能模式热键将由驱动程序处理; 每次按键将循环到下一个可用的平台配置文件。