Unverified Commit 90dc96c6 authored by Ayaan Mirza Baig's avatar Ayaan Mirza Baig Committed by Ilpo Järvinen
Browse files

platform/x86: samsung-galaxybook: Handle ACPI hotkey notifications



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: default avatarAyaan Mirza Baig <ayaanmirzabaig85@gmail.com>
Co-developed-by: default avatarJoshua Grisham <josh@joshuagrisham.com>
Signed-off-by: default avatarJoshua Grisham <josh@joshuagrisham.com>
Link: https://patch.msgid.link/20260418004613.93981-3-ayaanmirzabaig85@gmail.com


Reviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
parent 72d52bac
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -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);