aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH Hartley Sweeten <hsweeten@visionengravers.com>2013-04-22 21:32:06 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-04-23 13:41:37 -0400
commit92046ae49dec96ec40d861721c922c50fabf1756 (patch)
tree872985169cc2c9cb0343577cd2d636e65ce06141
parent79a8c0e20eb9f0cb6aaaab87c56addff606d19fe (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.c195
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);
233static irqreturn_t das800_interrupt(int irq, void *d); 233static irqreturn_t das800_interrupt(int irq, void *d);
234static void enable_das800(struct comedi_device *dev); 234static void enable_das800(struct comedi_device *dev);
235static void disable_das800(struct comedi_device *dev); 235static void disable_das800(struct comedi_device *dev);
236static int das800_ai_do_cmdtest(struct comedi_device *dev,
237 struct comedi_subdevice *s,
238 struct comedi_cmd *cmd);
239static int das800_ai_do_cmd(struct comedi_device *dev,
240 struct comedi_subdevice *s);
241static int das800_ai_rinsn(struct comedi_device *dev,
242 struct comedi_subdevice *s, struct comedi_insn *insn,
243 unsigned int *data);
244static int das800_di_rbits(struct comedi_device *dev,
245 struct comedi_subdevice *s, struct comedi_insn *insn,
246 unsigned int *data);
247static int das800_do_wbits(struct comedi_device *dev,
248 struct comedi_subdevice *s, struct comedi_insn *insn,
249 unsigned int *data);
250static int das800_probe(struct comedi_device *dev);
251static int das800_set_frequency(struct comedi_device *dev); 236static 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
420static 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
510static int das800_cancel(struct comedi_device *dev, struct comedi_subdevice *s) 405static 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
732static 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
837static struct comedi_driver driver_das800 = { 822static struct comedi_driver driver_das800 = {
838 .driver_name = "das800", 823 .driver_name = "das800",
839 .module = THIS_MODULE, 824 .module = THIS_MODULE,