aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/thinkpad_acpi.c
diff options
context:
space:
mode:
authorHenrique de Moraes Holschuh <hmh@hmh.eng.br>2008-02-15 23:17:55 -0500
committerLen Brown <len.brown@intel.com>2008-02-16 00:34:01 -0500
commitb3ec6f911a681f38e4630ef8bf20b3d3cb0f63c2 (patch)
tree155f98ee6273c1076d445f17cf3a988ec808ef12 /drivers/misc/thinkpad_acpi.c
parentd7c1d17dfed996e84212fc1ce617b2586dd70ec2 (diff)
ACPI: thinkpad-acpi: issue input events for tablet swivel events
Issue EV_SW SW_TABLET_MODE events for HKEY events 0x5009 and 0x500A on the X41t/X60t/X61t. As usual, we suppress the HKEY events on the netlink interface to avoid sending duplicate events to userspace. Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/misc/thinkpad_acpi.c')
-rw-r--r--drivers/misc/thinkpad_acpi.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c
index 4ea3866ddf90..35483502a117 100644
--- a/drivers/misc/thinkpad_acpi.c
+++ b/drivers/misc/thinkpad_acpi.c
@@ -1172,6 +1172,17 @@ static void tpacpi_input_send_radiosw(void)
1172 mutex_unlock(&tpacpi_inputdev_send_mutex); 1172 mutex_unlock(&tpacpi_inputdev_send_mutex);
1173} 1173}
1174 1174
1175static void tpacpi_input_send_tabletsw(unsigned int state)
1176{
1177 mutex_lock(&tpacpi_inputdev_send_mutex);
1178
1179 input_report_switch(tpacpi_inputdev,
1180 SW_TABLET_MODE, !!state);
1181 input_sync(tpacpi_inputdev);
1182
1183 mutex_unlock(&tpacpi_inputdev_send_mutex);
1184}
1185
1175static void tpacpi_input_send_key(unsigned int scancode) 1186static void tpacpi_input_send_key(unsigned int scancode)
1176{ 1187{
1177 unsigned int keycode; 1188 unsigned int keycode;
@@ -2020,6 +2031,10 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
2020 set_bit(EV_SW, tpacpi_inputdev->evbit); 2031 set_bit(EV_SW, tpacpi_inputdev->evbit);
2021 set_bit(SW_RADIO, tpacpi_inputdev->swbit); 2032 set_bit(SW_RADIO, tpacpi_inputdev->swbit);
2022 } 2033 }
2034 if (thinkpad_id.vendor == PCI_VENDOR_ID_LENOVO) {
2035 set_bit(EV_SW, tpacpi_inputdev->evbit);
2036 set_bit(SW_TABLET_MODE, tpacpi_inputdev->swbit);
2037 }
2023 2038
2024 dbg_printk(TPACPI_DBG_INIT, 2039 dbg_printk(TPACPI_DBG_INIT,
2025 "enabling hot key handling\n"); 2040 "enabling hot key handling\n");
@@ -2169,11 +2184,14 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
2169 /* 0x5000-0x5FFF: human interface helpers */ 2184 /* 0x5000-0x5FFF: human interface helpers */
2170 switch (hkey) { 2185 switch (hkey) {
2171 case 0x5010: /* Lenovo new BIOS: brightness changed */ 2186 case 0x5010: /* Lenovo new BIOS: brightness changed */
2172 case 0x5009: /* X61t: swivel up (tablet mode) */
2173 case 0x500a: /* X61t: swivel down (normal mode) */
2174 case 0x500b: /* X61t: tablet pen inserted into bay */ 2187 case 0x500b: /* X61t: tablet pen inserted into bay */
2175 case 0x500c: /* X61t: tablet pen removed from bay */ 2188 case 0x500c: /* X61t: tablet pen removed from bay */
2176 break; 2189 break;
2190 case 0x5009: /* X61t: swivel up (tablet mode) */
2191 case 0x500a: /* X61t: swivel down (normal mode) */
2192 tpacpi_input_send_tabletsw((hkey == 0x5009));
2193 send_acpi_ev = 0;
2194 break;
2177 case 0x5001: 2195 case 0x5001:
2178 case 0x5002: 2196 case 0x5002:
2179 /* LID switch events. Do not propagate */ 2197 /* LID switch events. Do not propagate */