diff options
author | Henrique de Moraes Holschuh <hmh@hmh.eng.br> | 2008-02-15 23:17:55 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2008-02-16 00:34:01 -0500 |
commit | b3ec6f911a681f38e4630ef8bf20b3d3cb0f63c2 (patch) | |
tree | 155f98ee6273c1076d445f17cf3a988ec808ef12 /drivers/misc | |
parent | d7c1d17dfed996e84212fc1ce617b2586dd70ec2 (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')
-rw-r--r-- | drivers/misc/thinkpad_acpi.c | 22 |
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 | ||
1175 | static 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 | |||
1175 | static void tpacpi_input_send_key(unsigned int scancode) | 1186 | static 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 */ |