diff -u -X /usr/dontdiff /linux.vanilla/drivers/char/logibusmouse.c /linux/drivers/char/logibusmouse.c --- /linux.vanilla/drivers/char/logibusmouse.c Tue Jun 12 10:51:30 2001 +++ /linux/drivers/char/logibusmouse.c Tue Jun 12 11:35:28 2001 @@ -116,8 +116,9 @@ static int open_mouse(struct inode * inode, struct file * file) { - if (request_irq(mouse_irq, mouse_interrupt, 0, "busmouse", NULL)) - return -EBUSY; + int retval; + if ((retval = request_irq(mouse_irq, mouse_interrupt, SA_INTERRUPT | SA_SAMPLE_RANDOM, "busmouse", NULL))) + return retval; MSE_INT_ON(); return 0; } @@ -128,24 +129,25 @@ static int __init logi_busmouse_init(void) { - if (check_region(LOGIBM_BASE, LOGIBM_EXTENT)) - return -EIO; + if (!request_region(LOGIBM_BASE, LOGIBM_EXTENT, "busmouse")) + return -EBUSY; outb(MSE_CONFIG_BYTE, MSE_CONFIG_PORT); outb(MSE_SIGNATURE_BYTE, MSE_SIGNATURE_PORT); udelay(100L); /* wait for reply from mouse */ - if (inb(MSE_SIGNATURE_PORT) != MSE_SIGNATURE_BYTE) + if (inb(MSE_SIGNATURE_PORT) != MSE_SIGNATURE_BYTE) { + release_region(LOGIBM_BASE, LOGIBM_EXTENT); return -EIO; + } outb(MSE_DEFAULT_MODE, MSE_CONFIG_PORT); MSE_INT_OFF(); - - request_region(LOGIBM_BASE, LOGIBM_EXTENT, "busmouse"); msedev = register_busmouse(&busmouse); - if (msedev < 0) + if (msedev < 0) { printk(KERN_WARNING "Unable to register busmouse driver.\n"); - else + release_region(LOGIBM_BASE, LOGIBM_EXTENT); + } else printk(KERN_INFO "Logitech busmouse installed.\n"); return msedev < 0 ? msedev : 0; }