diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-07 15:57:44 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-07 15:57:44 -0500 |
commit | 6e5565f949af1322f8f3d3f43d044645ae448499 (patch) | |
tree | 92868f6d3dcc6c105a0d35f9412f75c07139402e /drivers/input/serio | |
parent | e5a9e8e6890d9b9c7a0f25b03ffdaf28614a9a4c (diff) | |
parent | 03366e7b9bf1544cb0b98f1a5cd6d340654f486a (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (34 commits)
Input: i8042 - non-x86 build fix
Input: pxa27x_keypad - also enable on PXA3xx
Input: pxa27x_keypad - add debounce_interval to the keypad platform data
Input: pxa27x_keypad - use device resources for I/O memory mapping and IRQ
Input: pxa27x_keypad - enable rotary encoders and direct keys
Input: pxa27x_keypad - introduce pxa27x_keypad_config()
Input: pxa27x_keypad - introduce driver structure and use KEY() to define matrix keys
Input: pxa27x_keypad - remove pin configuration from the driver
Input: pxa27x_keypad - rename the driver (was pxa27x_keyboard)
Input: constify function pointer tables (seq_operations)
Input: i8042 - add Fujitsu-Siemens Amilo Pro 2010 to nomux list
Input: i8042 - enable DMI quirks on x86-64
Input: i8042 - add Dritek quirk for Acer Aspire 9110
Input: add input event to APM event bridge
Input: mousedev - use BIT_MASK instead of BIT
Input: remove duplicate includes
Input: remove cdev from input_dev structure
Input: remove duplicated headers in drivers/char/keyboard.c
Input: i8042 - add Dritek keyboard extension quirk
Input: add Tosa keyboard driver
...
Diffstat (limited to 'drivers/input/serio')
-rw-r--r-- | drivers/input/serio/i8042-x86ia64io.h | 67 | ||||
-rw-r--r-- | drivers/input/serio/i8042.c | 26 | ||||
-rw-r--r-- | drivers/input/serio/libps2.c | 1 |
3 files changed, 88 insertions, 6 deletions
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h index c5e68dcd88ac..662e84482c26 100644 --- a/drivers/input/serio/i8042-x86ia64io.h +++ b/drivers/input/serio/i8042-x86ia64io.h | |||
@@ -63,7 +63,7 @@ static inline void i8042_write_command(int val) | |||
63 | outb(val, I8042_COMMAND_REG); | 63 | outb(val, I8042_COMMAND_REG); |
64 | } | 64 | } |
65 | 65 | ||
66 | #if defined(__i386__) | 66 | #if defined(__i386__) || defined(__x86_64__) |
67 | 67 | ||
68 | #include <linux/dmi.h> | 68 | #include <linux/dmi.h> |
69 | 69 | ||
@@ -186,6 +186,13 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = { | |||
186 | }, | 186 | }, |
187 | }, | 187 | }, |
188 | { | 188 | { |
189 | .ident = "Fujitsu-Siemens Amilo Pro 2010", | ||
190 | .matches = { | ||
191 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), | ||
192 | DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"), | ||
193 | }, | ||
194 | }, | ||
195 | { | ||
189 | /* | 196 | /* |
190 | * No data is coming from the touchscreen unless KBC | 197 | * No data is coming from the touchscreen unless KBC |
191 | * is in legacy mode. | 198 | * is in legacy mode. |
@@ -277,6 +284,57 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = { | |||
277 | 284 | ||
278 | #endif | 285 | #endif |
279 | 286 | ||
287 | #ifdef CONFIG_X86 | ||
288 | |||
289 | #include <linux/dmi.h> | ||
290 | |||
291 | /* | ||
292 | * Some Wistron based laptops need us to explicitly enable the 'Dritek | ||
293 | * keyboard extension' to make their extra keys start generating scancodes. | ||
294 | * Originally, this was just confined to older laptops, but a few Acer laptops | ||
295 | * have turned up in 2007 that also need this again. | ||
296 | */ | ||
297 | static struct dmi_system_id __initdata i8042_dmi_dritek_table[] = { | ||
298 | { | ||
299 | .ident = "Acer Aspire 5630", | ||
300 | .matches = { | ||
301 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | ||
302 | DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5630"), | ||
303 | }, | ||
304 | }, | ||
305 | { | ||
306 | .ident = "Acer Aspire 5650", | ||
307 | .matches = { | ||
308 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | ||
309 | DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5650"), | ||
310 | }, | ||
311 | }, | ||
312 | { | ||
313 | .ident = "Acer Aspire 5680", | ||
314 | .matches = { | ||
315 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | ||
316 | DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5680"), | ||
317 | }, | ||
318 | }, | ||
319 | { | ||
320 | .ident = "Acer Aspire 9110", | ||
321 | .matches = { | ||
322 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | ||
323 | DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 9110"), | ||
324 | }, | ||
325 | }, | ||
326 | { | ||
327 | .ident = "Acer TravelMate 2490", | ||
328 | .matches = { | ||
329 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | ||
330 | DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 2490"), | ||
331 | }, | ||
332 | }, | ||
333 | { } | ||
334 | }; | ||
335 | |||
336 | #endif /* CONFIG_X86 */ | ||
337 | |||
280 | 338 | ||
281 | #ifdef CONFIG_PNP | 339 | #ifdef CONFIG_PNP |
282 | #include <linux/pnp.h> | 340 | #include <linux/pnp.h> |
@@ -512,7 +570,7 @@ static int __init i8042_platform_init(void) | |||
512 | i8042_reset = 1; | 570 | i8042_reset = 1; |
513 | #endif | 571 | #endif |
514 | 572 | ||
515 | #if defined(__i386__) | 573 | #if defined(__i386__) || defined(__x86_64__) |
516 | if (dmi_check_system(i8042_dmi_noloop_table)) | 574 | if (dmi_check_system(i8042_dmi_noloop_table)) |
517 | i8042_noloop = 1; | 575 | i8042_noloop = 1; |
518 | 576 | ||
@@ -520,6 +578,11 @@ static int __init i8042_platform_init(void) | |||
520 | i8042_nomux = 1; | 578 | i8042_nomux = 1; |
521 | #endif | 579 | #endif |
522 | 580 | ||
581 | #ifdef CONFIG_X86 | ||
582 | if (dmi_check_system(i8042_dmi_dritek_table)) | ||
583 | i8042_dritek = 1; | ||
584 | #endif /* CONFIG_X86 */ | ||
585 | |||
523 | return retval; | 586 | return retval; |
524 | } | 587 | } |
525 | 588 | ||
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c index 1a0cea3c5294..2763394869d2 100644 --- a/drivers/input/serio/i8042.c +++ b/drivers/input/serio/i8042.c | |||
@@ -12,7 +12,6 @@ | |||
12 | 12 | ||
13 | #include <linux/delay.h> | 13 | #include <linux/delay.h> |
14 | #include <linux/module.h> | 14 | #include <linux/module.h> |
15 | #include <linux/moduleparam.h> | ||
16 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
17 | #include <linux/ioport.h> | 16 | #include <linux/ioport.h> |
18 | #include <linux/init.h> | 17 | #include <linux/init.h> |
@@ -64,6 +63,12 @@ static unsigned int i8042_blink_frequency = 500; | |||
64 | module_param_named(panicblink, i8042_blink_frequency, uint, 0600); | 63 | module_param_named(panicblink, i8042_blink_frequency, uint, 0600); |
65 | MODULE_PARM_DESC(panicblink, "Frequency with which keyboard LEDs should blink when kernel panics"); | 64 | MODULE_PARM_DESC(panicblink, "Frequency with which keyboard LEDs should blink when kernel panics"); |
66 | 65 | ||
66 | #ifdef CONFIG_X86 | ||
67 | static unsigned int i8042_dritek; | ||
68 | module_param_named(dritek, i8042_dritek, bool, 0); | ||
69 | MODULE_PARM_DESC(dritek, "Force enable the Dritek keyboard extension"); | ||
70 | #endif | ||
71 | |||
67 | #ifdef CONFIG_PNP | 72 | #ifdef CONFIG_PNP |
68 | static int i8042_nopnp; | 73 | static int i8042_nopnp; |
69 | module_param_named(nopnp, i8042_nopnp, bool, 0); | 74 | module_param_named(nopnp, i8042_nopnp, bool, 0); |
@@ -280,7 +285,14 @@ static void i8042_stop(struct serio *serio) | |||
280 | struct i8042_port *port = serio->port_data; | 285 | struct i8042_port *port = serio->port_data; |
281 | 286 | ||
282 | port->exists = 0; | 287 | port->exists = 0; |
283 | synchronize_sched(); | 288 | |
289 | /* | ||
290 | * We synchronize with both AUX and KBD IRQs because there is | ||
291 | * a (very unlikely) chance that AUX IRQ is raised for KBD port | ||
292 | * and vice versa. | ||
293 | */ | ||
294 | synchronize_irq(I8042_AUX_IRQ); | ||
295 | synchronize_irq(I8042_KBD_IRQ); | ||
284 | port->serio = NULL; | 296 | port->serio = NULL; |
285 | } | 297 | } |
286 | 298 | ||
@@ -1139,6 +1151,7 @@ static int __devinit i8042_setup_kbd(void) | |||
1139 | static int __devinit i8042_probe(struct platform_device *dev) | 1151 | static int __devinit i8042_probe(struct platform_device *dev) |
1140 | { | 1152 | { |
1141 | int error; | 1153 | int error; |
1154 | char param; | ||
1142 | 1155 | ||
1143 | error = i8042_controller_selftest(); | 1156 | error = i8042_controller_selftest(); |
1144 | if (error) | 1157 | if (error) |
@@ -1159,7 +1172,14 @@ static int __devinit i8042_probe(struct platform_device *dev) | |||
1159 | if (error) | 1172 | if (error) |
1160 | goto out_fail; | 1173 | goto out_fail; |
1161 | } | 1174 | } |
1162 | 1175 | #ifdef CONFIG_X86 | |
1176 | if (i8042_dritek) { | ||
1177 | param = 0x90; | ||
1178 | error = i8042_command(¶m, 0x1059); | ||
1179 | if (error) | ||
1180 | goto out_fail; | ||
1181 | } | ||
1182 | #endif | ||
1163 | /* | 1183 | /* |
1164 | * Ok, everything is ready, let's register all serio ports | 1184 | * Ok, everything is ready, let's register all serio ports |
1165 | */ | 1185 | */ |
diff --git a/drivers/input/serio/libps2.c b/drivers/input/serio/libps2.c index 10d9d74ae43a..b819239d74dc 100644 --- a/drivers/input/serio/libps2.c +++ b/drivers/input/serio/libps2.c | |||
@@ -13,7 +13,6 @@ | |||
13 | 13 | ||
14 | #include <linux/delay.h> | 14 | #include <linux/delay.h> |
15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
16 | #include <linux/moduleparam.h> | ||
17 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
18 | #include <linux/interrupt.h> | 17 | #include <linux/interrupt.h> |
19 | #include <linux/input.h> | 18 | #include <linux/input.h> |