From: James S. <jsi...@us...> - 2002-05-01 18:07:55
|
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))) |