diff -u -X /usr/dontdiff /linux.vanilla/drivers/char/pc110pad.c /linux/drivers/char/pc110pad.c --- /linux.vanilla/drivers/char/pc110pad.c Tue Jun 12 10:51:26 2001 +++ /linux/drivers/char/pc110pad.c Tue Jun 12 12:01:44 2001 @@ -802,23 +802,36 @@ static int __init pc110pad_init_driver(void) { + int retval = -EBUSY; + init_MUTEX(&reader_lock); current_params = default_params; - if (request_irq(current_params.irq, pad_irq, 0, "pc110pad", 0)) { - printk(KERN_ERR "pc110pad: Unable to get IRQ.\n"); - return -EBUSY; - } if (!request_region(current_params.io, 4, "pc110pad")) { printk(KERN_ERR "pc110pad: I/O area in use.\n"); - free_irq(current_params.irq,0); - return -EBUSY; + goto err_out; + } + if ((retval = request_irq(current_params.irq, pad_irq, SA_INTERRUPT | SA_SAMPLE_RANDOM, "pc110pad", 0))) { + printk(KERN_ERR "pc110pad: Unable to get IRQ.\n"); + goto err_out_release_region; } init_waitqueue_head(&queue); + + if ((retval = misc_register(&pc110_pad))) { + printk(KERN_ERR "pc110pad: Unable to register driver.\n"); + goto err_out_free_irq; + } + printk(banner, current_params.io, current_params.irq); - misc_register(&pc110_pad); outb(0x30, current_params.io+2); /* switch off digitiser */ return 0; + +err_out_free_irq: + free_irq(current_params.irq, 0); +err_out_release_region: + release_region(current_params.io, 4); +err_out: + return retval; } /*