diff options
author | H Hartley Sweeten <hsweeten@visionengravers.com> | 2013-04-22 21:32:06 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-04-23 13:41:37 -0400 |
commit | 92046ae49dec96ec40d861721c922c50fabf1756 (patch) | |
tree | 872985169cc2c9cb0343577cd2d636e65ce06141 | |
parent | 79a8c0e20eb9f0cb6aaaab87c56addff606d19fe (diff) |
staging: comedi: das800: move das800_attach()
The move the das800_attach() function near the comedi_driver
declaration at the end of the file. This also removes the need
for some of the forward declarations.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/comedi/drivers/das800.c | 195 |
1 files changed, 90 insertions, 105 deletions
diff --git a/drivers/staging/comedi/drivers/das800.c b/drivers/staging/comedi/drivers/das800.c index 3a4041d6f5e6..b3221b77559e 100644 --- a/drivers/staging/comedi/drivers/das800.c +++ b/drivers/staging/comedi/drivers/das800.c | |||
@@ -233,21 +233,6 @@ static int das800_cancel(struct comedi_device *dev, struct comedi_subdevice *s); | |||
233 | static irqreturn_t das800_interrupt(int irq, void *d); | 233 | static irqreturn_t das800_interrupt(int irq, void *d); |
234 | static void enable_das800(struct comedi_device *dev); | 234 | static void enable_das800(struct comedi_device *dev); |
235 | static void disable_das800(struct comedi_device *dev); | 235 | static void disable_das800(struct comedi_device *dev); |
236 | static int das800_ai_do_cmdtest(struct comedi_device *dev, | ||
237 | struct comedi_subdevice *s, | ||
238 | struct comedi_cmd *cmd); | ||
239 | static int das800_ai_do_cmd(struct comedi_device *dev, | ||
240 | struct comedi_subdevice *s); | ||
241 | static int das800_ai_rinsn(struct comedi_device *dev, | ||
242 | struct comedi_subdevice *s, struct comedi_insn *insn, | ||
243 | unsigned int *data); | ||
244 | static int das800_di_rbits(struct comedi_device *dev, | ||
245 | struct comedi_subdevice *s, struct comedi_insn *insn, | ||
246 | unsigned int *data); | ||
247 | static int das800_do_wbits(struct comedi_device *dev, | ||
248 | struct comedi_subdevice *s, struct comedi_insn *insn, | ||
249 | unsigned int *data); | ||
250 | static int das800_probe(struct comedi_device *dev); | ||
251 | static int das800_set_frequency(struct comedi_device *dev); | 236 | static int das800_set_frequency(struct comedi_device *dev); |
252 | 237 | ||
253 | /* checks and probes das-800 series board type */ | 238 | /* checks and probes das-800 series board type */ |
@@ -417,96 +402,6 @@ static irqreturn_t das800_interrupt(int irq, void *d) | |||
417 | return IRQ_HANDLED; | 402 | return IRQ_HANDLED; |
418 | } | 403 | } |
419 | 404 | ||
420 | static int das800_attach(struct comedi_device *dev, struct comedi_devconfig *it) | ||
421 | { | ||
422 | const struct das800_board *thisboard = comedi_board(dev); | ||
423 | struct das800_private *devpriv; | ||
424 | struct comedi_subdevice *s; | ||
425 | unsigned int irq = it->options[1]; | ||
426 | unsigned long irq_flags; | ||
427 | int board; | ||
428 | int ret; | ||
429 | |||
430 | devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); | ||
431 | if (!devpriv) | ||
432 | return -ENOMEM; | ||
433 | dev->private = devpriv; | ||
434 | |||
435 | ret = comedi_request_region(dev, it->options[0], DAS800_SIZE); | ||
436 | if (ret) | ||
437 | return ret; | ||
438 | |||
439 | board = das800_probe(dev); | ||
440 | if (board < 0) { | ||
441 | dev_dbg(dev->class_dev, "unable to determine board type\n"); | ||
442 | return -ENODEV; | ||
443 | } | ||
444 | dev->board_ptr = das800_boards + board; | ||
445 | thisboard = comedi_board(dev); | ||
446 | |||
447 | /* grab our IRQ */ | ||
448 | if (irq == 1 || irq > 7) { | ||
449 | dev_err(dev->class_dev, "irq out of range\n"); | ||
450 | return -EINVAL; | ||
451 | } | ||
452 | if (irq) { | ||
453 | if (request_irq(irq, das800_interrupt, 0, "das800", dev)) { | ||
454 | dev_err(dev->class_dev, "unable to allocate irq %u\n", | ||
455 | irq); | ||
456 | return -EINVAL; | ||
457 | } | ||
458 | } | ||
459 | dev->irq = irq; | ||
460 | |||
461 | dev->board_name = thisboard->name; | ||
462 | |||
463 | ret = comedi_alloc_subdevices(dev, 3); | ||
464 | if (ret) | ||
465 | return ret; | ||
466 | |||
467 | /* analog input subdevice */ | ||
468 | s = &dev->subdevices[0]; | ||
469 | dev->read_subdev = s; | ||
470 | s->type = COMEDI_SUBD_AI; | ||
471 | s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_CMD_READ; | ||
472 | s->n_chan = 8; | ||
473 | s->len_chanlist = 8; | ||
474 | s->maxdata = (1 << thisboard->resolution) - 1; | ||
475 | s->range_table = thisboard->ai_range; | ||
476 | s->do_cmd = das800_ai_do_cmd; | ||
477 | s->do_cmdtest = das800_ai_do_cmdtest; | ||
478 | s->insn_read = das800_ai_rinsn; | ||
479 | s->cancel = das800_cancel; | ||
480 | |||
481 | /* di */ | ||
482 | s = &dev->subdevices[1]; | ||
483 | s->type = COMEDI_SUBD_DI; | ||
484 | s->subdev_flags = SDF_READABLE; | ||
485 | s->n_chan = 3; | ||
486 | s->maxdata = 1; | ||
487 | s->range_table = &range_digital; | ||
488 | s->insn_bits = das800_di_rbits; | ||
489 | |||
490 | /* do */ | ||
491 | s = &dev->subdevices[2]; | ||
492 | s->type = COMEDI_SUBD_DO; | ||
493 | s->subdev_flags = SDF_WRITABLE | SDF_READABLE; | ||
494 | s->n_chan = 4; | ||
495 | s->maxdata = 1; | ||
496 | s->range_table = &range_digital; | ||
497 | s->insn_bits = das800_do_wbits; | ||
498 | |||
499 | disable_das800(dev); | ||
500 | |||
501 | /* initialize digital out channels */ | ||
502 | spin_lock_irqsave(&dev->spinlock, irq_flags); | ||
503 | outb(CONTROL1, dev->iobase + DAS800_GAIN); /* select dev->iobase + 2 to be control register 1 */ | ||
504 | outb(CONTROL1_INTE | devpriv->do_bits, dev->iobase + DAS800_CONTROL1); | ||
505 | spin_unlock_irqrestore(&dev->spinlock, irq_flags); | ||
506 | |||
507 | return 0; | ||
508 | }; | ||
509 | |||
510 | static int das800_cancel(struct comedi_device *dev, struct comedi_subdevice *s) | 405 | static int das800_cancel(struct comedi_device *dev, struct comedi_subdevice *s) |
511 | { | 406 | { |
512 | struct das800_private *devpriv = dev->private; | 407 | struct das800_private *devpriv = dev->private; |
@@ -834,6 +729,96 @@ static int das800_set_frequency(struct comedi_device *dev) | |||
834 | return 0; | 729 | return 0; |
835 | } | 730 | } |
836 | 731 | ||
732 | static int das800_attach(struct comedi_device *dev, struct comedi_devconfig *it) | ||
733 | { | ||
734 | const struct das800_board *thisboard = comedi_board(dev); | ||
735 | struct das800_private *devpriv; | ||
736 | struct comedi_subdevice *s; | ||
737 | unsigned int irq = it->options[1]; | ||
738 | unsigned long irq_flags; | ||
739 | int board; | ||
740 | int ret; | ||
741 | |||
742 | devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); | ||
743 | if (!devpriv) | ||
744 | return -ENOMEM; | ||
745 | dev->private = devpriv; | ||
746 | |||
747 | ret = comedi_request_region(dev, it->options[0], DAS800_SIZE); | ||
748 | if (ret) | ||
749 | return ret; | ||
750 | |||
751 | board = das800_probe(dev); | ||
752 | if (board < 0) { | ||
753 | dev_dbg(dev->class_dev, "unable to determine board type\n"); | ||
754 | return -ENODEV; | ||
755 | } | ||
756 | dev->board_ptr = das800_boards + board; | ||
757 | thisboard = comedi_board(dev); | ||
758 | |||
759 | /* grab our IRQ */ | ||
760 | if (irq == 1 || irq > 7) { | ||
761 | dev_err(dev->class_dev, "irq out of range\n"); | ||
762 | return -EINVAL; | ||
763 | } | ||
764 | if (irq) { | ||
765 | if (request_irq(irq, das800_interrupt, 0, "das800", dev)) { | ||
766 | dev_err(dev->class_dev, "unable to allocate irq %u\n", | ||
767 | irq); | ||
768 | return -EINVAL; | ||
769 | } | ||
770 | } | ||
771 | dev->irq = irq; | ||
772 | |||
773 | dev->board_name = thisboard->name; | ||
774 | |||
775 | ret = comedi_alloc_subdevices(dev, 3); | ||
776 | if (ret) | ||
777 | return ret; | ||
778 | |||
779 | /* analog input subdevice */ | ||
780 | s = &dev->subdevices[0]; | ||
781 | dev->read_subdev = s; | ||
782 | s->type = COMEDI_SUBD_AI; | ||
783 | s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_CMD_READ; | ||
784 | s->n_chan = 8; | ||
785 | s->len_chanlist = 8; | ||
786 | s->maxdata = (1 << thisboard->resolution) - 1; | ||
787 | s->range_table = thisboard->ai_range; | ||
788 | s->do_cmd = das800_ai_do_cmd; | ||
789 | s->do_cmdtest = das800_ai_do_cmdtest; | ||
790 | s->insn_read = das800_ai_rinsn; | ||
791 | s->cancel = das800_cancel; | ||
792 | |||
793 | /* di */ | ||
794 | s = &dev->subdevices[1]; | ||
795 | s->type = COMEDI_SUBD_DI; | ||
796 | s->subdev_flags = SDF_READABLE; | ||
797 | s->n_chan = 3; | ||
798 | s->maxdata = 1; | ||
799 | s->range_table = &range_digital; | ||
800 | s->insn_bits = das800_di_rbits; | ||
801 | |||
802 | /* do */ | ||
803 | s = &dev->subdevices[2]; | ||
804 | s->type = COMEDI_SUBD_DO; | ||
805 | s->subdev_flags = SDF_WRITABLE | SDF_READABLE; | ||
806 | s->n_chan = 4; | ||
807 | s->maxdata = 1; | ||
808 | s->range_table = &range_digital; | ||
809 | s->insn_bits = das800_do_wbits; | ||
810 | |||
811 | disable_das800(dev); | ||
812 | |||
813 | /* initialize digital out channels */ | ||
814 | spin_lock_irqsave(&dev->spinlock, irq_flags); | ||
815 | outb(CONTROL1, dev->iobase + DAS800_GAIN); /* select dev->iobase + 2 to be control register 1 */ | ||
816 | outb(CONTROL1_INTE | devpriv->do_bits, dev->iobase + DAS800_CONTROL1); | ||
817 | spin_unlock_irqrestore(&dev->spinlock, irq_flags); | ||
818 | |||
819 | return 0; | ||
820 | }; | ||
821 | |||
837 | static struct comedi_driver driver_das800 = { | 822 | static struct comedi_driver driver_das800 = { |
838 | .driver_name = "das800", | 823 | .driver_name = "das800", |
839 | .module = THIS_MODULE, | 824 | .module = THIS_MODULE, |