|
|
@@ -76,12 +76,24 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)
|
|
|
struct platform_device *device = context;
|
|
|
struct intel_vbtn_priv *priv = dev_get_drvdata(&device->dev);
|
|
|
unsigned int val = !(event & 1); /* Even=press, Odd=release */
|
|
|
- const struct key_entry *ke_rel;
|
|
|
+ const struct key_entry *ke, *ke_rel;
|
|
|
bool autorelease;
|
|
|
|
|
|
if (priv->wakeup_mode) {
|
|
|
- if (sparse_keymap_entry_from_scancode(priv->input_dev, event)) {
|
|
|
+ ke = sparse_keymap_entry_from_scancode(priv->input_dev, event);
|
|
|
+ if (ke) {
|
|
|
pm_wakeup_hard_event(&device->dev);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Switch events like tablet mode will wake the device
|
|
|
+ * and report the new switch position to the input
|
|
|
+ * subsystem.
|
|
|
+ */
|
|
|
+ if (ke->type == KE_SW)
|
|
|
+ sparse_keymap_report_event(priv->input_dev,
|
|
|
+ event,
|
|
|
+ val,
|
|
|
+ 0);
|
|
|
return;
|
|
|
}
|
|
|
goto out_unknown;
|