Hi!
As promised, here comes a patch that brings mouse mixing support back to
mousedev.c, after moving to major 13. It also fixes one nasty
overwriting bug in this support that used to be present before the move
to a new major.
It also adds 'static' declarations to input _init and _exit.
--
Vojtech Pavlik
SuSE Labs
diff -urN linux-2.3.99-pre3-old/drivers/usb/input.c linux/drivers/usb/input.c
--- linux-2.3.99-pre3-old/drivers/usb/input.c Wed Mar 29 11:27:25 2000
+++ linux/drivers/usb/input.c Wed Mar 29 10:15:08 2000
@@ -334,7 +334,7 @@
open: input_open_file,
};
-int __init input_init(void)
+static int __init input_init(void)
{
if (register_chrdev(INPUT_MAJOR, "input", &input_fops)) {
printk(KERN_ERR "input: unable to register char major %d",
INPUT_MAJOR);
@@ -343,7 +343,7 @@
return 0;
}
-void __exit input_exit(void)
+static void __exit input_exit(void)
{
unregister_chrdev(INPUT_MAJOR, "input");
}
diff -urN linux-2.3.99-pre3-old/drivers/usb/mousedev.c linux/drivers/usb/mousedev.c
--- linux-2.3.99-pre3-old/drivers/usb/mousedev.c Wed Mar 29 11:27:25 2000
+++ linux/drivers/usb/mousedev.c Wed Mar 29 11:17:28 2000
@@ -48,7 +48,6 @@
struct mousedev {
int used;
int minor;
- struct input_handle handle;
wait_queue_head_t wait;
struct mousedev_list *list;
};
@@ -342,7 +341,8 @@
static int mousedev_connect(struct input_handler *handler, struct input_dev *dev)
{
struct mousedev *mousedev;
- int minor;
+ struct input_handle *handle;
+ int minor = 0;
if (!test_bit(EV_KEY, dev->evbit) ||
(!test_bit(BTN_LEFT, dev->keybit) && !test_bit(BTN_TOUCH, dev->keybit)))
@@ -352,31 +352,42 @@
(!test_bit(EV_ABS, dev->evbit) || !test_bit(ABS_X, dev->absbit)))
return -1;
+#ifndef CONFIG_INPUT_MOUSEDEV_MIX
for (minor = 0; minor < MOUSEDEV_MINORS && mousedev_table[minor]; minor++);
if (mousedev_table[minor]) {
printk(KERN_ERR "mousedev: no more free mousedev devices\n");
return -1;
}
+#else
+ if (!mousedev_table[minor]) {
+#endif
+
+ if (!(mousedev = kmalloc(sizeof(struct mousedev), GFP_KERNEL)))
+ return -1;
+ memset(mousedev, 0, sizeof(struct mousedev));
+ init_waitqueue_head(&mousedev->wait);
+
+#ifdef CONFIG_INPUT_MOUSEDEV_MIX
+ } else mousedev = mousedev_table[minor];
+#endif
- if (!(mousedev = kmalloc(sizeof(struct mousedev), GFP_KERNEL)))
+ if (!(handle = kmalloc(sizeof(struct input_handle), GFP_KERNEL))) {
+ if (!mousedev->used) kfree(mousedev);
return -1;
- memset(mousedev, 0, sizeof(struct mousedev));
+ }
+ memset(handle, 0, sizeof(struct input_handle));
+ mousedev->used++;
mousedev->minor = minor;
mousedev_table[minor] = mousedev;
- mousedev->handle.dev = dev;
- mousedev->handle.handler = handler;
- mousedev->handle.private = mousedev;
-
- init_waitqueue_head(&mousedev->wait);
-
- mousedev->used = 1;
+ handle->dev = dev;
+ handle->handler = handler;
+ handle->private = mousedev;
- input_open_device(&mousedev->handle);
+ input_open_device(handle);
- printk("mouse%d: PS/2 mouse device for input%d\n",
- minor, dev->number);
+ printk("mouse%d: PS/2 mouse device for input%d\n", minor, dev->number);
return 0;
}
@@ -385,6 +396,7 @@
{
struct mousedev *mousedev = handle->private;
input_close_device(handle);
+ kfree(handle);
if (!--mousedev->used) {
mousedev_table[mousedev->minor] = NULL;
kfree(mousedev);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]