Samsung Galaxy Book 驅動

Joshua Grisham <josh@joshuagrisham.com>

這是用於 Samsung Galaxy Book 系列筆記型電腦裝置的 Linux x86 平臺驅動程式,它利用 Samsung 的 SCAI ACPI 裝置來控制額外功能並接收各種通知。

支援的裝置

任何具有受支援的 ACPI 裝置 ID 之一的裝置都應該受支援。 這涵蓋了截至本文撰寫時目前可用的大多數“Samsung Galaxy Book”系列筆記型電腦,並且可能還包括其他 Samsung 筆記型電腦裝置。

狀態

目前支援以下功能

由於這些裝置的不同型號的功能可能會有所不同,因此驅動程式中內建了邏輯,該邏輯會嘗試測試每個已實現的功能以獲得有效響應,然後再啟用其支援(註冊其他裝置或擴充套件,新增 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_listenacpid 之類的使用者空間工具來接收這些事件。

Fn+F11 效能模式熱鍵將由驅動程式處理; 每次按鍵將迴圈到下一個可用的平臺配置檔案。