diff options
| author | Steve French <sfrench@us.ibm.com> | 2006-02-14 22:36:31 -0500 |
|---|---|---|
| committer | Steve French <sfrench@us.ibm.com> | 2006-02-14 22:36:31 -0500 |
| commit | 0ed3f64ec3a7ad29e83e03607115eeffa32f553c (patch) | |
| tree | 528681b043e947cfc51527d56098f586b6dfa217 /drivers/char/tipar.c | |
| parent | 5815449d1bfcb22f74b0e36a8b0631d6584cb7fc (diff) | |
| parent | 10ee39fe3ff618d274e1cd0f6abbc2917b736bfd (diff) | |
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'drivers/char/tipar.c')
| -rw-r--r-- | drivers/char/tipar.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/char/tipar.c b/drivers/char/tipar.c index 41a94bc79f67..eb2eb3e12d6a 100644 --- a/drivers/char/tipar.c +++ b/drivers/char/tipar.c | |||
| @@ -250,12 +250,17 @@ tipar_open(struct inode *inode, struct file *file) | |||
| 250 | { | 250 | { |
| 251 | unsigned int minor = iminor(inode) - TIPAR_MINOR; | 251 | unsigned int minor = iminor(inode) - TIPAR_MINOR; |
| 252 | 252 | ||
| 253 | if (minor > tp_count - 1) | 253 | if (tp_count == 0 || minor > tp_count - 1) |
| 254 | return -ENXIO; | 254 | return -ENXIO; |
| 255 | 255 | ||
| 256 | if (test_and_set_bit(minor, &opened)) | 256 | if (test_and_set_bit(minor, &opened)) |
| 257 | return -EBUSY; | 257 | return -EBUSY; |
| 258 | 258 | ||
| 259 | if (!table[minor].dev) { | ||
| 260 | printk(KERN_ERR "%s: NULL device for minor %u\n", | ||
| 261 | __FUNCTION__, minor); | ||
| 262 | return -ENXIO; | ||
| 263 | } | ||
| 259 | parport_claim_or_block(table[minor].dev); | 264 | parport_claim_or_block(table[minor].dev); |
| 260 | init_ti_parallel(minor); | 265 | init_ti_parallel(minor); |
| 261 | parport_release(table[minor].dev); | 266 | parport_release(table[minor].dev); |
| @@ -510,16 +515,20 @@ tipar_init_module(void) | |||
| 510 | err = PTR_ERR(tipar_class); | 515 | err = PTR_ERR(tipar_class); |
| 511 | goto out_chrdev; | 516 | goto out_chrdev; |
| 512 | } | 517 | } |
| 513 | if (parport_register_driver(&tipar_driver)) { | 518 | if (parport_register_driver(&tipar_driver) || tp_count == 0) { |
| 514 | printk(KERN_ERR "tipar: unable to register with parport\n"); | 519 | printk(KERN_ERR "tipar: unable to register with parport\n"); |
| 515 | err = -EIO; | 520 | err = -EIO; |
| 516 | goto out; | 521 | goto out_class; |
| 517 | } | 522 | } |
| 518 | 523 | ||
| 519 | err = 0; | 524 | err = 0; |
| 520 | goto out; | 525 | goto out; |
| 521 | 526 | ||
| 527 | out_class: | ||
| 528 | class_destroy(tipar_class); | ||
| 529 | |||
| 522 | out_chrdev: | 530 | out_chrdev: |
| 531 | devfs_remove("ticables/par"); | ||
| 523 | unregister_chrdev(TIPAR_MAJOR, "tipar"); | 532 | unregister_chrdev(TIPAR_MAJOR, "tipar"); |
| 524 | out: | 533 | out: |
| 525 | return err; | 534 | return err; |
