• Home
  • Raw
  • Download

Lines Matching +full:tablet +full:- +full:mode

1 // SPDX-License-Identifier: GPL-2.0+
12 #include <linux/input/sparse-keymap.h>
18 /* Returned when NOT in tablet mode on some HP Stream x360 11 models */
20 /* When NOT in tablet mode, VGBS returns with the flag 0x40 */
40 { KE_KEY, 0xC4, { KEY_VOLUMEUP } }, /* volume-up key press */
41 { KE_IGNORE, 0xC5, { KEY_VOLUMEUP } }, /* volume-up key release */
42 { KE_KEY, 0xC6, { KEY_VOLUMEDOWN } }, /* volume-down key press */
43 { KE_IGNORE, 0xC7, { KEY_VOLUMEDOWN } }, /* volume-down key release */
44 { KE_KEY, 0xC8, { KEY_ROTATE_LOCK_TOGGLE } }, /* rotate-lock key press */
45 { KE_KEY, 0xC9, { KEY_ROTATE_LOCK_TOGGLE } }, /* rotate-lock key release */
51 { KE_SW, 0xCC, { .sw = { SW_TABLET_MODE, 1 } } }, /* Tablet */
67 struct intel_vbtn_priv *priv = dev_get_drvdata(&device->dev); in intel_vbtn_input_setup()
71 memcpy(&priv->keymap[keymap_len], intel_vbtn_keymap, in intel_vbtn_input_setup()
77 if (priv->has_switches) { in intel_vbtn_input_setup()
78 memcpy(&priv->keymap[keymap_len], intel_vbtn_switchmap, in intel_vbtn_input_setup()
84 priv->keymap[keymap_len].type = KE_END; in intel_vbtn_input_setup()
86 priv->input_dev = devm_input_allocate_device(&device->dev); in intel_vbtn_input_setup()
87 if (!priv->input_dev) in intel_vbtn_input_setup()
88 return -ENOMEM; in intel_vbtn_input_setup()
90 ret = sparse_keymap_setup(priv->input_dev, priv->keymap, NULL); in intel_vbtn_input_setup()
94 priv->input_dev->dev.parent = &device->dev; in intel_vbtn_input_setup()
95 priv->input_dev->name = "Intel Virtual Button driver"; in intel_vbtn_input_setup()
96 priv->input_dev->id.bustype = BUS_HOST; in intel_vbtn_input_setup()
98 return input_register_device(priv->input_dev); in intel_vbtn_input_setup()
104 struct intel_vbtn_priv *priv = dev_get_drvdata(&device->dev); in notify_handler()
109 if (priv->wakeup_mode) { in notify_handler()
110 ke = sparse_keymap_entry_from_scancode(priv->input_dev, event); in notify_handler()
112 pm_wakeup_hard_event(&device->dev); in notify_handler()
115 * Switch events like tablet mode will wake the device in notify_handler()
119 if (ke->type == KE_SW) in notify_handler()
120 sparse_keymap_report_event(priv->input_dev, in notify_handler()
133 ke_rel = sparse_keymap_entry_from_scancode(priv->input_dev, event | 1); in notify_handler()
134 autorelease = val && (!ke_rel || ke_rel->type == KE_IGNORE); in notify_handler()
136 if (sparse_keymap_report_event(priv->input_dev, event, val, autorelease)) in notify_handler()
140 dev_dbg(&device->dev, "unknown event index 0x%x\n", event); in notify_handler()
145 struct intel_vbtn_priv *priv = dev_get_drvdata(&device->dev); in detect_tablet_mode()
146 acpi_handle handle = ACPI_HANDLE(&device->dev); in detect_tablet_mode()
156 input_report_switch(priv->input_dev, SW_TABLET_MODE, m); in detect_tablet_mode()
158 input_report_switch(priv->input_dev, SW_DOCK, m); in detect_tablet_mode()
162 * There are several laptops (non 2-in-1) models out there which support VGBS,
168 * with libinput, leads to a non-usable system. Where as OTOH many people will
170 * list is used here. This list mainly matches on the chassis-type of 2-in-1s.
172 * There are also some 2-in-1s which use the intel-vbtn ACPI interface to report
173 * SW_TABLET_MODE with a chassis-type of 8 ("Portable") or 10 ("Notebook"),
175 * possible broken VGBS ACPI-method also use these chassis-types.
196 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
217 acpi_handle handle = ACPI_HANDLE(&device->dev); in intel_vbtn_probe()
224 dev_warn(&device->dev, "failed to read Intel Virtual Button driver\n"); in intel_vbtn_probe()
225 return -ENODEV; in intel_vbtn_probe()
228 priv = devm_kzalloc(&device->dev, sizeof(*priv), GFP_KERNEL); in intel_vbtn_probe()
230 return -ENOMEM; in intel_vbtn_probe()
231 dev_set_drvdata(&device->dev, priv); in intel_vbtn_probe()
233 priv->has_switches = intel_vbtn_has_switches(handle); in intel_vbtn_probe()
241 if (priv->has_switches) in intel_vbtn_probe()
249 return -EBUSY; in intel_vbtn_probe()
251 device_init_wakeup(&device->dev, true); in intel_vbtn_probe()
257 acpi_handle handle = ACPI_HANDLE(&device->dev); in intel_vbtn_remove()
259 device_init_wakeup(&device->dev, false); in intel_vbtn_remove()
273 priv->wakeup_mode = true; in intel_vbtn_pm_prepare()
281 priv->wakeup_mode = false; in intel_vbtn_pm_resume()
294 .name = "intel-vbtn",
314 dev_info(&dev->dev, in check_acpi_dev()
315 "intel-vbtn: created platform device\n"); in check_acpi_dev()