Update of /cvsroot/linuxconsole/ruby/linux/drivers/usb/input
In directory usw-pr-cvs1:/tmp/cvs-serv3020/linux/drivers/usb/input
Modified Files:
hiddev.c
Log Message:
Synced against 2.5.11
Index: hiddev.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/usb/input/hiddev.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- hiddev.c 26 Apr 2002 17:23:40 -0000 1.2
+++ hiddev.c 1 May 2002 18:07:50 -0000 1.3
@@ -25,10 +25,7 @@
* e-mail - mail your message to Paul Stewart <st...@we...>
*/
-#define HIDDEV_MINOR_BASE 96
-#define HIDDEV_MINORS 16
-#define HIDDEV_BUFFER_SIZE 64
-
+#include <linux/config.h>
#include <linux/poll.h>
#include <linux/slab.h>
#include <linux/module.h>
@@ -39,6 +36,15 @@
#include "hid.h"
#include <linux/hiddev.h>
+#ifdef CONFIG_USB_DYNAMIC_MINORS
+#define HIDDEV_MINOR_BASE 0
+#define HIDDEV_MINORS 256
+#else
+#define HIDDEV_MINOR_BASE 96
+#define HIDDEV_MINORS 16
+#endif
+#define HIDDEV_BUFFER_SIZE 64
+
struct hiddev {
int exist;
int open;
@@ -62,6 +68,9 @@
static struct hiddev *hiddev_table[HIDDEV_MINORS];
static devfs_handle_t hiddev_devfs_handle;
+/* forward reference to make our lives easier */
+extern struct usb_driver hiddev_driver;
+
/*
* Find a report, given the report's type and ID. The ID can be specified
* indirectly by REPORT_ID_FIRST (which returns the first report of the given
@@ -184,6 +193,7 @@
static void hiddev_cleanup(struct hiddev *hiddev)
{
devfs_unregister(hiddev->devfs);
+ usb_deregister_dev(&hiddev_driver, 1, hiddev->minor);
hiddev_table[hiddev->minor] = NULL;
kfree(hiddev);
}
@@ -627,10 +637,12 @@
if (i == hid->maxapplication)
return -1;
- for (minor = 0; minor < HIDDEV_MINORS && hiddev_table[minor]; minor++);
- if (minor == HIDDEV_MINORS) {
- printk(KERN_ERR "hiddev: no more free hiddev devices\n");
- return -1;
+ if (usb_register_dev (&hiddev_driver, 1, &minor)) {
+ for (minor = 0; minor < HIDDEV_MINORS && hiddev_table[minor]; minor++);
+ if (minor == HIDDEV_MINORS) {
+ printk(KERN_ERR "hiddev: no more free hiddev devices\n");
+ return -1;
+ }
}
if (!(hiddev = kmalloc(sizeof(struct hiddev), GFP_KERNEL)))
|