diff options
Diffstat (limited to 'drivers/char/applicom.c')
| -rw-r--r-- | drivers/char/applicom.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/drivers/char/applicom.c b/drivers/char/applicom.c index 11f9ee581124..927a5bbe112c 100644 --- a/drivers/char/applicom.c +++ b/drivers/char/applicom.c | |||
| @@ -172,7 +172,7 @@ static int ac_register_board(unsigned long physloc, void __iomem *loc, | |||
| 172 | 172 | ||
| 173 | void cleanup_module(void) | 173 | void cleanup_module(void) |
| 174 | { | 174 | { |
| 175 | int i; | 175 | unsigned int i; |
| 176 | 176 | ||
| 177 | misc_deregister(&ac_miscdev); | 177 | misc_deregister(&ac_miscdev); |
| 178 | 178 | ||
| @@ -195,7 +195,7 @@ int __init applicom_init(void) | |||
| 195 | int i, numisa = 0; | 195 | int i, numisa = 0; |
| 196 | struct pci_dev *dev = NULL; | 196 | struct pci_dev *dev = NULL; |
| 197 | void __iomem *RamIO; | 197 | void __iomem *RamIO; |
| 198 | int boardno; | 198 | int boardno, ret; |
| 199 | 199 | ||
| 200 | printk(KERN_INFO "Applicom driver: $Id: ac.c,v 1.30 2000/03/22 16:03:57 dwmw2 Exp $\n"); | 200 | printk(KERN_INFO "Applicom driver: $Id: ac.c,v 1.30 2000/03/22 16:03:57 dwmw2 Exp $\n"); |
| 201 | 201 | ||
| @@ -294,7 +294,8 @@ int __init applicom_init(void) | |||
| 294 | } | 294 | } |
| 295 | 295 | ||
| 296 | if (!numisa) | 296 | if (!numisa) |
| 297 | printk(KERN_WARNING"ac.o: No valid ISA Applicom boards found at mem 0x%lx\n",mem); | 297 | printk(KERN_WARNING "ac.o: No valid ISA Applicom boards found " |
| 298 | "at mem 0x%lx\n", mem); | ||
| 298 | 299 | ||
| 299 | fin: | 300 | fin: |
| 300 | init_waitqueue_head(&FlagSleepRec); | 301 | init_waitqueue_head(&FlagSleepRec); |
| @@ -304,7 +305,11 @@ int __init applicom_init(void) | |||
| 304 | DeviceErrorCount = 0; | 305 | DeviceErrorCount = 0; |
| 305 | 306 | ||
| 306 | if (numboards) { | 307 | if (numboards) { |
| 307 | misc_register(&ac_miscdev); | 308 | ret = misc_register(&ac_miscdev); |
| 309 | if (ret) { | ||
| 310 | printk(KERN_WARNING "ac.o: Unable to register misc device\n"); | ||
| 311 | goto out; | ||
| 312 | } | ||
| 308 | for (i = 0; i < MAX_BOARD; i++) { | 313 | for (i = 0; i < MAX_BOARD; i++) { |
| 309 | int serial; | 314 | int serial; |
| 310 | char boardname[(SERIAL_NUMBER - TYPE_CARD) + 1]; | 315 | char boardname[(SERIAL_NUMBER - TYPE_CARD) + 1]; |
| @@ -337,6 +342,17 @@ int __init applicom_init(void) | |||
| 337 | 342 | ||
| 338 | else | 343 | else |
| 339 | return -ENXIO; | 344 | return -ENXIO; |
| 345 | |||
| 346 | out: | ||
| 347 | for (i = 0; i < MAX_BOARD; i++) { | ||
| 348 | if (!apbs[i].RamIO) | ||
| 349 | continue; | ||
| 350 | if (apbs[i].irq) | ||
| 351 | free_irq(apbs[i].irq, &dummy); | ||
| 352 | iounmap(apbs[i].RamIO); | ||
| 353 | } | ||
| 354 | pci_disable_device(dev); | ||
| 355 | return ret; | ||
| 340 | } | 356 | } |
| 341 | 357 | ||
| 342 | 358 | ||
