diff options
-rw-r--r-- | drivers/staging/comedi/drivers/ni_atmio.c | 92 |
1 files changed, 37 insertions, 55 deletions
diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 647c228abfbf..02cf44b38590 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c | |||
@@ -343,49 +343,8 @@ static struct pnp_device_id device_ids[] = { | |||
343 | 343 | ||
344 | MODULE_DEVICE_TABLE(pnp, device_ids); | 344 | MODULE_DEVICE_TABLE(pnp, device_ids); |
345 | 345 | ||
346 | static int ni_atmio_attach(struct comedi_device *dev, | ||
347 | struct comedi_devconfig *it); | ||
348 | static int ni_atmio_detach(struct comedi_device *dev); | ||
349 | static struct comedi_driver driver_atmio = { | ||
350 | .driver_name = "ni_atmio", | ||
351 | .module = THIS_MODULE, | ||
352 | .attach = ni_atmio_attach, | ||
353 | .detach = ni_atmio_detach, | ||
354 | }; | ||
355 | |||
356 | static int __init driver_atmio_init_module(void) | ||
357 | { | ||
358 | return comedi_driver_register(&driver_atmio); | ||
359 | } | ||
360 | |||
361 | static void __exit driver_atmio_cleanup_module(void) | ||
362 | { | ||
363 | comedi_driver_unregister(&driver_atmio); | ||
364 | } | ||
365 | |||
366 | module_init(driver_atmio_init_module); | ||
367 | module_exit(driver_atmio_cleanup_module); | ||
368 | |||
369 | #include "ni_mio_common.c" | 346 | #include "ni_mio_common.c" |
370 | 347 | ||
371 | static int ni_getboardtype(struct comedi_device *dev); | ||
372 | |||
373 | /* clean up allocated resources */ | ||
374 | static int ni_atmio_detach(struct comedi_device *dev) | ||
375 | { | ||
376 | mio_common_detach(dev); | ||
377 | |||
378 | if (dev->iobase) | ||
379 | release_region(dev->iobase, NI_SIZE); | ||
380 | if (dev->irq) | ||
381 | free_irq(dev->irq, dev); | ||
382 | |||
383 | if (devpriv->isapnp_dev) | ||
384 | pnp_device_detach(devpriv->isapnp_dev); | ||
385 | |||
386 | return 0; | ||
387 | } | ||
388 | |||
389 | static int ni_isapnp_find_board(struct pnp_dev **dev) | 348 | static int ni_isapnp_find_board(struct pnp_dev **dev) |
390 | { | 349 | { |
391 | struct pnp_dev *isapnp_dev = NULL; | 350 | struct pnp_dev *isapnp_dev = NULL; |
@@ -424,6 +383,26 @@ static int ni_isapnp_find_board(struct pnp_dev **dev) | |||
424 | return 0; | 383 | return 0; |
425 | } | 384 | } |
426 | 385 | ||
386 | static int ni_getboardtype(struct comedi_device *dev) | ||
387 | { | ||
388 | int device_id = ni_read_eeprom(dev, 511); | ||
389 | int i; | ||
390 | |||
391 | for (i = 0; i < n_ni_boards; i++) { | ||
392 | if (ni_boards[i].device_id == device_id) | ||
393 | return i; | ||
394 | |||
395 | } | ||
396 | if (device_id == 255) | ||
397 | printk(" can't find board\n"); | ||
398 | else if (device_id == 0) | ||
399 | printk(" EEPROM read error (?) or device not found\n"); | ||
400 | else | ||
401 | printk(" unknown device ID %d -- contact author\n", device_id); | ||
402 | |||
403 | return -1; | ||
404 | } | ||
405 | |||
427 | static int ni_atmio_attach(struct comedi_device *dev, | 406 | static int ni_atmio_attach(struct comedi_device *dev, |
428 | struct comedi_devconfig *it) | 407 | struct comedi_devconfig *it) |
429 | { | 408 | { |
@@ -518,22 +497,25 @@ static int ni_atmio_attach(struct comedi_device *dev, | |||
518 | return 0; | 497 | return 0; |
519 | } | 498 | } |
520 | 499 | ||
521 | static int ni_getboardtype(struct comedi_device *dev) | 500 | static int ni_atmio_detach(struct comedi_device *dev) |
522 | { | 501 | { |
523 | int device_id = ni_read_eeprom(dev, 511); | 502 | mio_common_detach(dev); |
524 | int i; | ||
525 | 503 | ||
526 | for (i = 0; i < n_ni_boards; i++) { | 504 | if (dev->iobase) |
527 | if (ni_boards[i].device_id == device_id) | 505 | release_region(dev->iobase, NI_SIZE); |
528 | return i; | 506 | if (dev->irq) |
507 | free_irq(dev->irq, dev); | ||
529 | 508 | ||
530 | } | 509 | if (devpriv->isapnp_dev) |
531 | if (device_id == 255) | 510 | pnp_device_detach(devpriv->isapnp_dev); |
532 | printk(" can't find board\n"); | ||
533 | else if (device_id == 0) | ||
534 | printk(" EEPROM read error (?) or device not found\n"); | ||
535 | else | ||
536 | printk(" unknown device ID %d -- contact author\n", device_id); | ||
537 | 511 | ||
538 | return -1; | 512 | return 0; |
539 | } | 513 | } |
514 | |||
515 | static struct comedi_driver ni_atmio_driver = { | ||
516 | .driver_name = "ni_atmio", | ||
517 | .module = THIS_MODULE, | ||
518 | .attach = ni_atmio_attach, | ||
519 | .detach = ni_atmio_detach, | ||
520 | }; | ||
521 | module_comedi_driver(ni_atmio_driver); | ||