Loading Documentation/kernel-parameters.txt +1 −0 Original line number Original line 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 Defaults to the default architecture's huge page size if not specified. if not specified. i8042.debug [HW] Toggle i8042 debug mode i8042.direct [HW] Put keyboard port into non-translated mode i8042.direct [HW] Put keyboard port into non-translated mode i8042.dumbkbd [HW] Pretend that controller can only read data from i8042.dumbkbd [HW] Pretend that controller can only read data from keyboard and cannot control its state keyboard and cannot control its state Loading MAINTAINERS +1 −1 Original line number Original line Diff line number Diff line Loading @@ -4548,7 +4548,7 @@ WM97XX TOUCHSCREEN DRIVERS P: Mark Brown P: Mark Brown M: broonie@opensource.wolfsonmicro.com M: broonie@opensource.wolfsonmicro.com P: Liam Girdwood P: Liam Girdwood M: liam.girdwood@wolfsonmicro.com M: lrg@slimlogic.co.uk L: linux-input@vger.kernel.org L: linux-input@vger.kernel.org T: git git://opensource.wolfsonmicro.com/linux-2.6-touch T: git git://opensource.wolfsonmicro.com/linux-2.6-touch W: http://opensource.wolfsonmicro.com/node/7 W: http://opensource.wolfsonmicro.com/node/7 Loading drivers/char/keyboard.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1249,7 +1249,7 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw) return; return; } } if (keycode > NR_KEYS) if (keycode >= NR_KEYS) if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8) if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8) keysym = K(KT_BRL, keycode - KEY_BRL_DOT1 + 1); keysym = K(KT_BRL, keycode - KEY_BRL_DOT1 + 1); else else Loading drivers/input/gameport/gameport.c +67 −21 Original line number Original line Diff line number Diff line Loading @@ -231,6 +231,7 @@ static void gameport_find_driver(struct gameport *gameport) enum gameport_event_type { enum gameport_event_type { GAMEPORT_REGISTER_PORT, GAMEPORT_REGISTER_PORT, GAMEPORT_REGISTER_DRIVER, GAMEPORT_REGISTER_DRIVER, GAMEPORT_ATTACH_DRIVER, }; }; struct gameport_event { struct gameport_event { Loading @@ -245,11 +246,12 @@ static LIST_HEAD(gameport_event_list); static DECLARE_WAIT_QUEUE_HEAD(gameport_wait); static DECLARE_WAIT_QUEUE_HEAD(gameport_wait); static struct task_struct *gameport_task; 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) enum gameport_event_type event_type) { { unsigned long flags; unsigned long flags; struct gameport_event *event; struct gameport_event *event; int retval = 0; spin_lock_irqsave(&gameport_event_lock, flags); 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)) { 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); kfree(event); retval = -EINVAL; goto out; 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); list_add_tail(&event->node, &gameport_event_list); wake_up(&gameport_wait); wake_up(&gameport_wait); } else { printk(KERN_ERR "gameport: Not enough memory to queue event %d\n", event_type); } out: out: spin_unlock_irqrestore(&gameport_event_lock, flags); spin_unlock_irqrestore(&gameport_event_lock, flags); return retval; } } static void gameport_free_event(struct gameport_event *event) 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 list_head *node, *next; struct gameport_event *event; 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) { list_for_each_safe(node, next, &gameport_event_list) { event = list_entry(node, struct gameport_event, node); event = list_entry(node, struct gameport_event, node); if (event->object == gameport) { if (event->object == object) { list_del_init(node); list_del_init(node); gameport_free_event(event); gameport_free_event(event); } } Loading Loading @@ -705,10 +718,40 @@ static void gameport_add_driver(struct gameport_driver *drv) drv->driver.name, error); 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; 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) void gameport_unregister_driver(struct gameport_driver *drv) Loading @@ -716,7 +759,9 @@ void gameport_unregister_driver(struct gameport_driver *drv) struct gameport *gameport; struct gameport *gameport; mutex_lock(&gameport_mutex); mutex_lock(&gameport_mutex); drv->ignore = 1; /* so gameport_find_driver ignores it */ drv->ignore = 1; /* so gameport_find_driver ignores it */ gameport_remove_pending_events(drv); start_over: start_over: list_for_each_entry(gameport, &gameport_list, node) { 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); driver_unregister(&drv->driver); mutex_unlock(&gameport_mutex); mutex_unlock(&gameport_mutex); } } Loading drivers/input/joystick/a3d.c +1 −2 Original line number Original line Diff line number Diff line Loading @@ -414,8 +414,7 @@ static struct gameport_driver a3d_drv = { static int __init a3d_init(void) static int __init a3d_init(void) { { gameport_register_driver(&a3d_drv); return gameport_register_driver(&a3d_drv); return 0; } } static void __exit a3d_exit(void) static void __exit a3d_exit(void) Loading Loading
Documentation/kernel-parameters.txt +1 −0 Original line number Original line 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 Defaults to the default architecture's huge page size if not specified. if not specified. i8042.debug [HW] Toggle i8042 debug mode i8042.direct [HW] Put keyboard port into non-translated mode i8042.direct [HW] Put keyboard port into non-translated mode i8042.dumbkbd [HW] Pretend that controller can only read data from i8042.dumbkbd [HW] Pretend that controller can only read data from keyboard and cannot control its state keyboard and cannot control its state Loading
MAINTAINERS +1 −1 Original line number Original line Diff line number Diff line Loading @@ -4548,7 +4548,7 @@ WM97XX TOUCHSCREEN DRIVERS P: Mark Brown P: Mark Brown M: broonie@opensource.wolfsonmicro.com M: broonie@opensource.wolfsonmicro.com P: Liam Girdwood P: Liam Girdwood M: liam.girdwood@wolfsonmicro.com M: lrg@slimlogic.co.uk L: linux-input@vger.kernel.org L: linux-input@vger.kernel.org T: git git://opensource.wolfsonmicro.com/linux-2.6-touch T: git git://opensource.wolfsonmicro.com/linux-2.6-touch W: http://opensource.wolfsonmicro.com/node/7 W: http://opensource.wolfsonmicro.com/node/7 Loading
drivers/char/keyboard.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1249,7 +1249,7 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw) return; return; } } if (keycode > NR_KEYS) if (keycode >= NR_KEYS) if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8) if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8) keysym = K(KT_BRL, keycode - KEY_BRL_DOT1 + 1); keysym = K(KT_BRL, keycode - KEY_BRL_DOT1 + 1); else else Loading
drivers/input/gameport/gameport.c +67 −21 Original line number Original line Diff line number Diff line Loading @@ -231,6 +231,7 @@ static void gameport_find_driver(struct gameport *gameport) enum gameport_event_type { enum gameport_event_type { GAMEPORT_REGISTER_PORT, GAMEPORT_REGISTER_PORT, GAMEPORT_REGISTER_DRIVER, GAMEPORT_REGISTER_DRIVER, GAMEPORT_ATTACH_DRIVER, }; }; struct gameport_event { struct gameport_event { Loading @@ -245,11 +246,12 @@ static LIST_HEAD(gameport_event_list); static DECLARE_WAIT_QUEUE_HEAD(gameport_wait); static DECLARE_WAIT_QUEUE_HEAD(gameport_wait); static struct task_struct *gameport_task; 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) enum gameport_event_type event_type) { { unsigned long flags; unsigned long flags; struct gameport_event *event; struct gameport_event *event; int retval = 0; spin_lock_irqsave(&gameport_event_lock, flags); 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)) { 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); kfree(event); retval = -EINVAL; goto out; 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); list_add_tail(&event->node, &gameport_event_list); wake_up(&gameport_wait); wake_up(&gameport_wait); } else { printk(KERN_ERR "gameport: Not enough memory to queue event %d\n", event_type); } out: out: spin_unlock_irqrestore(&gameport_event_lock, flags); spin_unlock_irqrestore(&gameport_event_lock, flags); return retval; } } static void gameport_free_event(struct gameport_event *event) 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 list_head *node, *next; struct gameport_event *event; 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) { list_for_each_safe(node, next, &gameport_event_list) { event = list_entry(node, struct gameport_event, node); event = list_entry(node, struct gameport_event, node); if (event->object == gameport) { if (event->object == object) { list_del_init(node); list_del_init(node); gameport_free_event(event); gameport_free_event(event); } } Loading Loading @@ -705,10 +718,40 @@ static void gameport_add_driver(struct gameport_driver *drv) drv->driver.name, error); 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; 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) void gameport_unregister_driver(struct gameport_driver *drv) Loading @@ -716,7 +759,9 @@ void gameport_unregister_driver(struct gameport_driver *drv) struct gameport *gameport; struct gameport *gameport; mutex_lock(&gameport_mutex); mutex_lock(&gameport_mutex); drv->ignore = 1; /* so gameport_find_driver ignores it */ drv->ignore = 1; /* so gameport_find_driver ignores it */ gameport_remove_pending_events(drv); start_over: start_over: list_for_each_entry(gameport, &gameport_list, node) { 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); driver_unregister(&drv->driver); mutex_unlock(&gameport_mutex); mutex_unlock(&gameport_mutex); } } Loading
drivers/input/joystick/a3d.c +1 −2 Original line number Original line Diff line number Diff line Loading @@ -414,8 +414,7 @@ static struct gameport_driver a3d_drv = { static int __init a3d_init(void) static int __init a3d_init(void) { { gameport_register_driver(&a3d_drv); return gameport_register_driver(&a3d_drv); return 0; } } static void __exit a3d_exit(void) static void __exit a3d_exit(void) Loading