Commit 6be70ccd authored by Hans de Goede's avatar Hans de Goede
Browse files

platform/x86: asus-nb-wmi: Allow configuring SW_TABLET_MODE method with a module option

Unfortunately we have been unable to find a reliable way to detect if
and how SW_TABLET_MODE reporting is supported, so we are relying on
DMI quirks for this.

Add a module-option to specify the SW_TABLET_MODE method so that this can
be easily tested without needing to rebuild the kernel.

BugLink: https://gitlab.freedesktop.org/libinput/libinput/-/issues/639


Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20210812145513.39117-1-hdegoede@redhat.com
parent 636a1e69
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -41,6 +41,10 @@ static int wapf = -1;
module_param(wapf, uint, 0444);
MODULE_PARM_DESC(wapf, "WAPF value");

static int tablet_mode_sw = -1;
module_param(tablet_mode_sw, uint, 0444);
MODULE_PARM_DESC(tablet_mode_sw, "Tablet mode detect: -1:auto 0:disable 1:kbd-dock 2:lid-flip");

static struct quirk_entry *quirks;

static bool asus_q500a_i8042_filter(unsigned char data, unsigned char str,
@@ -477,6 +481,21 @@ static void asus_nb_wmi_quirks(struct asus_wmi_driver *driver)
	else
		wapf = quirks->wapf;

	switch (tablet_mode_sw) {
	case 0:
		quirks->use_kbd_dock_devid = false;
		quirks->use_lid_flip_devid = false;
		break;
	case 1:
		quirks->use_kbd_dock_devid = true;
		quirks->use_lid_flip_devid = false;
		break;
	case 2:
		quirks->use_kbd_dock_devid = false;
		quirks->use_lid_flip_devid = true;
		break;
	}

	if (quirks->i8042_filter) {
		ret = i8042_install_filter(quirks->i8042_filter);
		if (ret) {