Unverified Commit 9286dfd5 authored by Mathieu Fenniak's avatar Mathieu Fenniak Committed by Ilpo Järvinen
Browse files

platform/x86: asus-wmi: Fix spurious rfkill on UX8406MA



The Asus Zenbook Duo (UX8406MA) has a keyboard which can be
placed on the laptop to connect it via USB, or can be removed from the
laptop to reveal a hidden secondary display in which case the keyboard
operates via Bluetooth.

When it is placed on the secondary display to connect via USB, it emits
a keypress for a wireless disable. This causes the rfkill system to be
activated disconnecting the current wifi connection, which doesn't
reflect the user's true intention.

Detect this hardware and suppress any wireless switches from the
keyboard; this keyboard does not have a wireless toggle capability so
these presses are always spurious.

Signed-off-by: default avatarMathieu Fenniak <mathieu@fenniak.net>
Reviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20240823135630.128447-1-mathieu@fenniak.net


Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
parent a24cd5cf
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -145,6 +145,10 @@ static struct quirk_entry quirk_asus_ignore_fan = {
	.wmi_ignore_fan = true,
};

static struct quirk_entry quirk_asus_zenbook_duo_kbd = {
	.ignore_key_wlan = true,
};

static int dmi_matched(const struct dmi_system_id *dmi)
{
	pr_info("Identified laptop model '%s'\n", dmi->ident);
@@ -516,6 +520,15 @@ static const struct dmi_system_id asus_quirks[] = {
		},
		.driver_data = &quirk_asus_ignore_fan,
	},
	{
		.callback = dmi_matched,
		.ident = "ASUS Zenbook Duo UX8406MA",
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
			DMI_MATCH(DMI_PRODUCT_NAME, "UX8406MA"),
		},
		.driver_data = &quirk_asus_zenbook_duo_kbd,
	},
	{},
};

@@ -630,7 +643,12 @@ static void asus_nb_wmi_key_filter(struct asus_wmi_driver *asus_wmi, int *code,
	case 0x32: /* Volume Mute */
		if (atkbd_reports_vol_keys)
			*code = ASUS_WMI_KEY_IGNORE;

		break;
	case 0x5D: /* Wireless console Toggle */
	case 0x5E: /* Wireless console Enable */
	case 0x5F: /* Wireless console Disable */
		if (quirks->ignore_key_wlan)
			*code = ASUS_WMI_KEY_IGNORE;
		break;
	}
}
+1 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ struct quirk_entry {
	bool wmi_force_als_set;
	bool wmi_ignore_fan;
	bool filter_i8042_e1_extended_codes;
	bool ignore_key_wlan;
	enum asus_wmi_tablet_switch_mode tablet_switch_mode;
	int wapf;
	/*