]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
platform/x86: samsung-galaxybook: Handle ACPI hotkey notifications
authorAyaan Mirza Baig <ayaanmirzabaig85@gmail.com>
Sat, 18 Apr 2026 00:46:14 +0000 (00:46 +0000)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Thu, 7 May 2026 11:36:20 +0000 (14:36 +0300)
On Samsung Galaxy Book 5 (SAM0430), the keyboard backlight, microphone
mute, and camera block hotkeys do not generate i8042 scancodes.
Instead they arrive as ACPI notifications 0x7d, 0x6e, and 0x6f
respectively, all of which previously fell through to the default
"unknown" warning in galaxybook_acpi_notify().

Add handling for these three events:

 - 0x7d (Fn+F9, keyboard backlight): schedule the existing
   kbd_backlight_hotkey_work which cycles brightness.

 - 0x6e (Fn+F10, microphone mute): emit KEY_MICMUTE via the driver's
   input device.

 - 0x6f (Fn+F11, camera block): if block_recording is active use the
   existing block_recording_hotkey_work; otherwise emit a toggle of
   SW_CAMERA_LENS_COVER via the driver's input device on models where
   the block_recording ACPI feature is not supported.

Tested on Samsung Galaxy Book 5 (SAM0430) and Samsung Galaxy Book2 Pro
(SAM0429).

Signed-off-by: Ayaan Mirza Baig <ayaanmirzabaig85@gmail.com>
Co-developed-by: Joshua Grisham <josh@joshuagrisham.com>
Signed-off-by: Joshua Grisham <josh@joshuagrisham.com>
Link: https://patch.msgid.link/20260418004613.93981-3-ayaanmirzabaig85@gmail.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/samsung-galaxybook.c

index a51ad6b03164edf60616d072930096d7ed1e2c9e..6382af0b106c06d6e890e6d0571a4777ea9db865 100644 (file)
@@ -197,6 +197,9 @@ static const guid_t performance_mode_guid =
 #define GB_ACPI_NOTIFY_DEVICE_ON_TABLE          0x6c
 #define GB_ACPI_NOTIFY_DEVICE_OFF_TABLE         0x6d
 #define GB_ACPI_NOTIFY_HOTKEY_PERFORMANCE_MODE  0x70
+#define GB_ACPI_NOTIFY_HOTKEY_KBD_BACKLIGHT     0x7d
+#define GB_ACPI_NOTIFY_HOTKEY_MICMUTE           0x6e
+#define GB_ACPI_NOTIFY_HOTKEY_CAMERA            0x6f
 
 #define GB_KEY_KBD_BACKLIGHT_KEYDOWN    0x2c
 #define GB_KEY_KBD_BACKLIGHT_KEYUP      0xac
@@ -876,6 +879,7 @@ static int galaxybook_input_init(struct samsung_galaxybook *galaxybook)
        galaxybook->input->phys = DRIVER_NAME "/input0";
        galaxybook->input->id.bustype = BUS_HOST;
 
+       input_set_capability(galaxybook->input, EV_KEY, KEY_MICMUTE);
        input_set_capability(galaxybook->input, EV_SW, SW_CAMERA_LENS_COVER);
 
        return input_register_device(galaxybook->input);
@@ -1259,6 +1263,25 @@ static void galaxybook_acpi_notify(acpi_handle handle, u32 event, void *data)
                if (galaxybook->has_performance_mode)
                        platform_profile_cycle();
                break;
+       case GB_ACPI_NOTIFY_HOTKEY_KBD_BACKLIGHT:
+               if (galaxybook->has_kbd_backlight)
+                       schedule_work(&galaxybook->kbd_backlight_hotkey_work);
+               break;
+       case GB_ACPI_NOTIFY_HOTKEY_MICMUTE:
+               input_report_key(galaxybook->input, KEY_MICMUTE, 1);
+               input_sync(galaxybook->input);
+               input_report_key(galaxybook->input, KEY_MICMUTE, 0);
+               input_sync(galaxybook->input);
+               break;
+       case GB_ACPI_NOTIFY_HOTKEY_CAMERA:
+               if (galaxybook->has_block_recording) {
+                       schedule_work(&galaxybook->block_recording_hotkey_work);
+               } else {
+                       input_report_switch(galaxybook->input, SW_CAMERA_LENS_COVER,
+                                           !test_bit(SW_CAMERA_LENS_COVER, galaxybook->input->sw));
+                       input_sync(galaxybook->input);
+               }
+               break;
        default:
                dev_warn(&galaxybook->platform->dev,
                         "unknown ACPI notification event: 0x%x\n", event);