Loading Documentation/kernel-parameters.txt +1 −0 Original line number Diff line number Diff line Loading @@ -796,6 +796,7 @@ and is between 256 and 4096 characters. It is defined in the file Defaults to the default architecture's huge page size if not specified. i8042.debug [HW] Toggle i8042 debug mode i8042.direct [HW] Put keyboard port into non-translated mode i8042.dumbkbd [HW] Pretend that controller can only read data from keyboard and cannot control its state Loading MAINTAINERS +1 −1 Original line number Diff line number Diff line Loading @@ -4548,7 +4548,7 @@ WM97XX TOUCHSCREEN DRIVERS P: Mark Brown M: broonie@opensource.wolfsonmicro.com P: Liam Girdwood M: liam.girdwood@wolfsonmicro.com M: lrg@slimlogic.co.uk L: linux-input@vger.kernel.org T: git git://opensource.wolfsonmicro.com/linux-2.6-touch W: http://opensource.wolfsonmicro.com/node/7 Loading drivers/char/keyboard.c +1 −1 Original line number Diff line number Diff line Loading @@ -1249,7 +1249,7 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw) return; } if (keycode > NR_KEYS) if (keycode >= NR_KEYS) if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8) keysym = K(KT_BRL, keycode - KEY_BRL_DOT1 + 1); else Loading drivers/input/gameport/gameport.c +67 −21 Original line number Diff line number Diff line Loading @@ -231,6 +231,7 @@ static void gameport_find_driver(struct gameport *gameport) enum gameport_event_type { GAMEPORT_REGISTER_PORT, GAMEPORT_REGISTER_DRIVER, GAMEPORT_ATTACH_DRIVER, }; struct gameport_event { Loading @@ -245,11 +246,12 @@ static LIST_HEAD(gameport_event_list); static DECLARE_WAIT_QUEUE_HEAD(gameport_wait); static struct task_struct *gameport_task; static void gameport_queue_event(void *object, struct module *owner, static int gameport_queue_event(void *object, struct module *owner, enum gameport_event_type event_type) { unsigned long flags; struct gameport_event *event; int retval = 0; spin_lock_irqsave(&gameport_event_lock, flags); Loading @@ -268,10 +270,21 @@ static void gameport_queue_event(void *object, struct module *owner, } } if ((event = kmalloc(sizeof(struct gameport_event), GFP_ATOMIC))) { event = kmalloc(sizeof(struct gameport_event), GFP_ATOMIC); if (!event) { printk(KERN_ERR "gameport: Not enough memory to queue event %d\n", event_type); retval = -ENOMEM; goto out; } if (!try_module_get(owner)) { printk(KERN_WARNING "gameport: Can't get module reference, dropping event %d\n", event_type); printk(KERN_WARNING "gameport: Can't get module reference, dropping event %d\n", event_type); kfree(event); retval = -EINVAL; goto out; } Loading @@ -281,11 +294,10 @@ static void gameport_queue_event(void *object, struct module *owner, list_add_tail(&event->node, &gameport_event_list); wake_up(&gameport_wait); } else { printk(KERN_ERR "gameport: Not enough memory to queue event %d\n", event_type); } out: spin_unlock_irqrestore(&gameport_event_lock, flags); return retval; } static void gameport_free_event(struct gameport_event *event) Loading Loading @@ -378,9 +390,10 @@ static void gameport_handle_event(void) } /* * Remove all events that have been submitted for a given gameport port. * Remove all events that have been submitted for a given object, * be it a gameport port or a driver. */ static void gameport_remove_pending_events(struct gameport *gameport) static void gameport_remove_pending_events(void *object) { struct list_head *node, *next; struct gameport_event *event; Loading @@ -390,7 +403,7 @@ static void gameport_remove_pending_events(struct gameport *gameport) list_for_each_safe(node, next, &gameport_event_list) { event = list_entry(node, struct gameport_event, node); if (event->object == gameport) { if (event->object == object) { list_del_init(node); gameport_free_event(event); } Loading Loading @@ -705,10 +718,40 @@ static void gameport_add_driver(struct gameport_driver *drv) drv->driver.name, error); } void __gameport_register_driver(struct gameport_driver *drv, struct module *owner) int __gameport_register_driver(struct gameport_driver *drv, struct module *owner, const char *mod_name) { int error; drv->driver.bus = &gameport_bus; gameport_queue_event(drv, owner, GAMEPORT_REGISTER_DRIVER); drv->driver.owner = owner; drv->driver.mod_name = mod_name; /* * Temporarily disable automatic binding because probing * takes long time and we are better off doing it in kgameportd */ drv->ignore = 1; error = driver_register(&drv->driver); if (error) { printk(KERN_ERR "gameport: driver_register() failed for %s, error: %d\n", drv->driver.name, error); return error; } /* * Reset ignore flag and let kgameportd bind the driver to free ports */ drv->ignore = 0; error = gameport_queue_event(drv, NULL, GAMEPORT_ATTACH_DRIVER); if (error) { driver_unregister(&drv->driver); return error; } return 0; } void gameport_unregister_driver(struct gameport_driver *drv) Loading @@ -716,7 +759,9 @@ void gameport_unregister_driver(struct gameport_driver *drv) struct gameport *gameport; mutex_lock(&gameport_mutex); drv->ignore = 1; /* so gameport_find_driver ignores it */ gameport_remove_pending_events(drv); start_over: list_for_each_entry(gameport, &gameport_list, node) { Loading @@ -729,6 +774,7 @@ void gameport_unregister_driver(struct gameport_driver *drv) } driver_unregister(&drv->driver); mutex_unlock(&gameport_mutex); } Loading drivers/input/joystick/a3d.c +1 −2 Original line number Diff line number Diff line Loading @@ -414,8 +414,7 @@ static struct gameport_driver a3d_drv = { static int __init a3d_init(void) { gameport_register_driver(&a3d_drv); return 0; return gameport_register_driver(&a3d_drv); } static void __exit a3d_exit(void) Loading Loading
Documentation/kernel-parameters.txt +1 −0 Original line number Diff line number Diff line Loading @@ -796,6 +796,7 @@ and is between 256 and 4096 characters. It is defined in the file Defaults to the default architecture's huge page size if not specified. i8042.debug [HW] Toggle i8042 debug mode i8042.direct [HW] Put keyboard port into non-translated mode i8042.dumbkbd [HW] Pretend that controller can only read data from keyboard and cannot control its state Loading
MAINTAINERS +1 −1 Original line number Diff line number Diff line Loading @@ -4548,7 +4548,7 @@ WM97XX TOUCHSCREEN DRIVERS P: Mark Brown M: broonie@opensource.wolfsonmicro.com P: Liam Girdwood M: liam.girdwood@wolfsonmicro.com M: lrg@slimlogic.co.uk L: linux-input@vger.kernel.org T: git git://opensource.wolfsonmicro.com/linux-2.6-touch W: http://opensource.wolfsonmicro.com/node/7 Loading
drivers/char/keyboard.c +1 −1 Original line number Diff line number Diff line Loading @@ -1249,7 +1249,7 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw) return; } if (keycode > NR_KEYS) if (keycode >= NR_KEYS) if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8) keysym = K(KT_BRL, keycode - KEY_BRL_DOT1 + 1); else Loading
drivers/input/gameport/gameport.c +67 −21 Original line number Diff line number Diff line Loading @@ -231,6 +231,7 @@ static void gameport_find_driver(struct gameport *gameport) enum gameport_event_type { GAMEPORT_REGISTER_PORT, GAMEPORT_REGISTER_DRIVER, GAMEPORT_ATTACH_DRIVER, }; struct gameport_event { Loading @@ -245,11 +246,12 @@ static LIST_HEAD(gameport_event_list); static DECLARE_WAIT_QUEUE_HEAD(gameport_wait); static struct task_struct *gameport_task; static void gameport_queue_event(void *object, struct module *owner, static int gameport_queue_event(void *object, struct module *owner, enum gameport_event_type event_type) { unsigned long flags; struct gameport_event *event; int retval = 0; spin_lock_irqsave(&gameport_event_lock, flags); Loading @@ -268,10 +270,21 @@ static void gameport_queue_event(void *object, struct module *owner, } } if ((event = kmalloc(sizeof(struct gameport_event), GFP_ATOMIC))) { event = kmalloc(sizeof(struct gameport_event), GFP_ATOMIC); if (!event) { printk(KERN_ERR "gameport: Not enough memory to queue event %d\n", event_type); retval = -ENOMEM; goto out; } if (!try_module_get(owner)) { printk(KERN_WARNING "gameport: Can't get module reference, dropping event %d\n", event_type); printk(KERN_WARNING "gameport: Can't get module reference, dropping event %d\n", event_type); kfree(event); retval = -EINVAL; goto out; } Loading @@ -281,11 +294,10 @@ static void gameport_queue_event(void *object, struct module *owner, list_add_tail(&event->node, &gameport_event_list); wake_up(&gameport_wait); } else { printk(KERN_ERR "gameport: Not enough memory to queue event %d\n", event_type); } out: spin_unlock_irqrestore(&gameport_event_lock, flags); return retval; } static void gameport_free_event(struct gameport_event *event) Loading Loading @@ -378,9 +390,10 @@ static void gameport_handle_event(void) } /* * Remove all events that have been submitted for a given gameport port. * Remove all events that have been submitted for a given object, * be it a gameport port or a driver. */ static void gameport_remove_pending_events(struct gameport *gameport) static void gameport_remove_pending_events(void *object) { struct list_head *node, *next; struct gameport_event *event; Loading @@ -390,7 +403,7 @@ static void gameport_remove_pending_events(struct gameport *gameport) list_for_each_safe(node, next, &gameport_event_list) { event = list_entry(node, struct gameport_event, node); if (event->object == gameport) { if (event->object == object) { list_del_init(node); gameport_free_event(event); } Loading Loading @@ -705,10 +718,40 @@ static void gameport_add_driver(struct gameport_driver *drv) drv->driver.name, error); } void __gameport_register_driver(struct gameport_driver *drv, struct module *owner) int __gameport_register_driver(struct gameport_driver *drv, struct module *owner, const char *mod_name) { int error; drv->driver.bus = &gameport_bus; gameport_queue_event(drv, owner, GAMEPORT_REGISTER_DRIVER); drv->driver.owner = owner; drv->driver.mod_name = mod_name; /* * Temporarily disable automatic binding because probing * takes long time and we are better off doing it in kgameportd */ drv->ignore = 1; error = driver_register(&drv->driver); if (error) { printk(KERN_ERR "gameport: driver_register() failed for %s, error: %d\n", drv->driver.name, error); return error; } /* * Reset ignore flag and let kgameportd bind the driver to free ports */ drv->ignore = 0; error = gameport_queue_event(drv, NULL, GAMEPORT_ATTACH_DRIVER); if (error) { driver_unregister(&drv->driver); return error; } return 0; } void gameport_unregister_driver(struct gameport_driver *drv) Loading @@ -716,7 +759,9 @@ void gameport_unregister_driver(struct gameport_driver *drv) struct gameport *gameport; mutex_lock(&gameport_mutex); drv->ignore = 1; /* so gameport_find_driver ignores it */ gameport_remove_pending_events(drv); start_over: list_for_each_entry(gameport, &gameport_list, node) { Loading @@ -729,6 +774,7 @@ void gameport_unregister_driver(struct gameport_driver *drv) } driver_unregister(&drv->driver); mutex_unlock(&gameport_mutex); } Loading
drivers/input/joystick/a3d.c +1 −2 Original line number Diff line number Diff line Loading @@ -414,8 +414,7 @@ static struct gameport_driver a3d_drv = { static int __init a3d_init(void) { gameport_register_driver(&a3d_drv); return 0; return gameport_register_driver(&a3d_drv); } static void __exit a3d_exit(void) Loading