|
@@ -17,6 +17,7 @@
|
|
|
|
|
|
/* When NOT in tablet mode, VGBS returns with the flag 0x40 */
|
|
|
#define TABLET_MODE_FLAG 0x40
|
|
|
+#define DOCK_MODE_FLAG 0x80
|
|
|
|
|
|
MODULE_LICENSE("GPL");
|
|
|
MODULE_AUTHOR("AceLan Kao");
|
|
@@ -38,6 +39,8 @@ static const struct key_entry intel_vbtn_keymap[] = {
|
|
|
{ KE_IGNORE, 0xC7, { KEY_VOLUMEDOWN } }, /* volume-down key release */
|
|
|
{ KE_KEY, 0xC8, { KEY_ROTATE_LOCK_TOGGLE } }, /* rotate-lock key press */
|
|
|
{ KE_KEY, 0xC9, { KEY_ROTATE_LOCK_TOGGLE } }, /* rotate-lock key release */
|
|
|
+ { KE_SW, 0xCA, { .sw = { SW_DOCK, 1 } } }, /* Docked */
|
|
|
+ { KE_SW, 0xCB, { .sw = { SW_DOCK, 0 } } }, /* Undocked */
|
|
|
{ KE_SW, 0xCC, { .sw = { SW_TABLET_MODE, 1 } } }, /* Tablet */
|
|
|
{ KE_SW, 0xCD, { .sw = { SW_TABLET_MODE, 0 } } }, /* Laptop */
|
|
|
{ KE_END },
|
|
@@ -121,6 +124,8 @@ static void detect_tablet_mode(struct platform_device *device)
|
|
|
|
|
|
m = !(obj->integer.value & TABLET_MODE_FLAG);
|
|
|
input_report_switch(priv->input_dev, SW_TABLET_MODE, m);
|
|
|
+ m = (obj->integer.value & DOCK_MODE_FLAG) ? 1 : 0;
|
|
|
+ input_report_switch(priv->input_dev, SW_DOCK, m);
|
|
|
out:
|
|
|
kfree(vgbs_output.pointer);
|
|
|
}
|