Commit 6ec37e6b authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'platform-drivers-x86-v5.9-3' of...

Merge tag 'platform-drivers-x86-v5.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86

Pull another x86 platform driver fix from Hans de Goede:
 "One final pdx86 fix for Tablet Mode reporting regressions (which make
  the keyboard and touchpad unusable) on various Asus notebooks.

  These regressions were caused by the asus-nb-wmi and the intel-vbtn
  drivers both receiving recent patches to start reporting Tablet Mode /
  to report it on more models.

  Due to a miscommunication between Andy and me, Andy's earlier pull-req
  only contained the fix for the intel-vbtn driver and not the fix for
  the asus-nb-wmi code.

  This fix has been tested as a downstream patch in Fedora kernels for
  approx two weeks with no problems being reported"

* tag 'platform-drivers-x86-v5.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86:
  platform/x86: asus-wmi: Fix SW_TABLET_MODE always reporting 1 on many different models
parents f1e141e9 1797d588
...@@ -115,6 +115,10 @@ static struct quirk_entry quirk_asus_vendor_backlight = { ...@@ -115,6 +115,10 @@ static struct quirk_entry quirk_asus_vendor_backlight = {
.wmi_backlight_set_devstate = true, .wmi_backlight_set_devstate = true,
}; };
static struct quirk_entry quirk_asus_use_kbd_dock_devid = {
.use_kbd_dock_devid = true,
};
static int dmi_matched(const struct dmi_system_id *dmi) static int dmi_matched(const struct dmi_system_id *dmi)
{ {
pr_info("Identified laptop model '%s'\n", dmi->ident); pr_info("Identified laptop model '%s'\n", dmi->ident);
...@@ -488,6 +492,34 @@ static const struct dmi_system_id asus_quirks[] = { ...@@ -488,6 +492,34 @@ static const struct dmi_system_id asus_quirks[] = {
}, },
.driver_data = &quirk_asus_vendor_backlight, .driver_data = &quirk_asus_vendor_backlight,
}, },
{
.callback = dmi_matched,
.ident = "Asus Transformer T100TA / T100HA / T100CHI",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
/* Match *T100* */
DMI_MATCH(DMI_PRODUCT_NAME, "T100"),
},
.driver_data = &quirk_asus_use_kbd_dock_devid,
},
{
.callback = dmi_matched,
.ident = "Asus Transformer T101HA",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
DMI_MATCH(DMI_PRODUCT_NAME, "T101HA"),
},
.driver_data = &quirk_asus_use_kbd_dock_devid,
},
{
.callback = dmi_matched,
.ident = "Asus Transformer T200TA",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
DMI_MATCH(DMI_PRODUCT_NAME, "T200TA"),
},
.driver_data = &quirk_asus_use_kbd_dock_devid,
},
{}, {},
}; };
......
...@@ -365,12 +365,14 @@ static int asus_wmi_input_init(struct asus_wmi *asus) ...@@ -365,12 +365,14 @@ static int asus_wmi_input_init(struct asus_wmi *asus)
if (err) if (err)
goto err_free_dev; goto err_free_dev;
result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_KBD_DOCK); if (asus->driver->quirks->use_kbd_dock_devid) {
if (result >= 0) { result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_KBD_DOCK);
input_set_capability(asus->inputdev, EV_SW, SW_TABLET_MODE); if (result >= 0) {
input_report_switch(asus->inputdev, SW_TABLET_MODE, !result); input_set_capability(asus->inputdev, EV_SW, SW_TABLET_MODE);
} else if (result != -ENODEV) { input_report_switch(asus->inputdev, SW_TABLET_MODE, !result);
pr_err("Error checking for keyboard-dock: %d\n", result); } else if (result != -ENODEV) {
pr_err("Error checking for keyboard-dock: %d\n", result);
}
} }
err = input_register_device(asus->inputdev); err = input_register_device(asus->inputdev);
...@@ -2115,7 +2117,7 @@ static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus) ...@@ -2115,7 +2117,7 @@ static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus)
return; return;
} }
if (code == NOTIFY_KBD_DOCK_CHANGE) { if (asus->driver->quirks->use_kbd_dock_devid && code == NOTIFY_KBD_DOCK_CHANGE) {
result = asus_wmi_get_devstate_simple(asus, result = asus_wmi_get_devstate_simple(asus,
ASUS_WMI_DEVID_KBD_DOCK); ASUS_WMI_DEVID_KBD_DOCK);
if (result >= 0) { if (result >= 0) {
......
...@@ -33,6 +33,7 @@ struct quirk_entry { ...@@ -33,6 +33,7 @@ struct quirk_entry {
bool wmi_backlight_native; bool wmi_backlight_native;
bool wmi_backlight_set_devstate; bool wmi_backlight_set_devstate;
bool wmi_force_als_set; bool wmi_force_als_set;
bool use_kbd_dock_devid;
int wapf; int wapf;
/* /*
* For machines with AMD graphic chips, it will send out WMI event * For machines with AMD graphic chips, it will send out WMI event
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment