staging: comedi: dmm32at: remove forward declarations 1
authorH Hartley Sweeten <hartleys@visionengravers.com>
Tue, 3 Jul 2012 01:11:23 +0000 (18:11 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 6 Jul 2012 22:51:20 +0000 (15:51 -0700)
Move the attach/detach functions as well as the boardinfo variable
to remove the need to most of the forward declarations.

Add some whitespace to the boardinfo during the move.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/dmm32at.c

index ad7fef9153958b8be2c0738c241156d53322397a..9c3d322d0e39799db2d04f17107ab7ddc27ccd72 100644 (file)
@@ -175,19 +175,6 @@ struct dmm32at_board {
        int have_dio;
        int dio_chans;
 };
-static const struct dmm32at_board dmm32at_boards[] = {
-       {
-        .name = "dmm32at",
-        .ai_chans = 32,
-        .ai_bits = 16,
-        .ai_ranges = &dmm32at_airanges,
-        .ao_chans = 4,
-        .ao_bits = 12,
-        .ao_ranges = &dmm32at_aoranges,
-        .have_dio = 1,
-        .dio_chans = 24,
-        },
-};
 
 /* this structure is for data unique to this hardware driver.  If
  * several hardware drivers keep similar information in this structure,
@@ -212,197 +199,9 @@ struct dmm32at_private {
 #define devpriv ((struct dmm32at_private *)dev->private)
 
 /* prototypes for driver functions below */
-static int dmm32at_ai_rinsn(struct comedi_device *dev,
-                           struct comedi_subdevice *s,
-                           struct comedi_insn *insn, unsigned int *data);
-static int dmm32at_ao_winsn(struct comedi_device *dev,
-                           struct comedi_subdevice *s,
-                           struct comedi_insn *insn, unsigned int *data);
-static int dmm32at_ao_rinsn(struct comedi_device *dev,
-                           struct comedi_subdevice *s,
-                           struct comedi_insn *insn, unsigned int *data);
-static int dmm32at_dio_insn_bits(struct comedi_device *dev,
-                                struct comedi_subdevice *s,
-                                struct comedi_insn *insn, unsigned int *data);
-static int dmm32at_dio_insn_config(struct comedi_device *dev,
-                                  struct comedi_subdevice *s,
-                                  struct comedi_insn *insn,
-                                  unsigned int *data);
-static int dmm32at_ai_cmdtest(struct comedi_device *dev,
-                             struct comedi_subdevice *s,
-                             struct comedi_cmd *cmd);
-static int dmm32at_ai_cmd(struct comedi_device *dev,
-                         struct comedi_subdevice *s);
-static int dmm32at_ai_cancel(struct comedi_device *dev,
-                            struct comedi_subdevice *s);
 static int dmm32at_ns_to_timer(unsigned int *ns, int round);
-static irqreturn_t dmm32at_isr(int irq, void *d);
 void dmm32at_setaitimer(struct comedi_device *dev, unsigned int nansec);
 
-/*
- * Attach is called by the Comedi core to configure the driver
- * for a particular board.  If you specified a board_name array
- * in the driver structure, dev->board_ptr contains that
- * address.
- */
-static int dmm32at_attach(struct comedi_device *dev,
-                         struct comedi_devconfig *it)
-{
-       const struct dmm32at_board *board = comedi_board(dev);
-       int ret;
-       struct comedi_subdevice *s;
-       unsigned char aihi, ailo, fifostat, aistat, intstat, airback;
-       unsigned long iobase;
-       unsigned int irq;
-
-       iobase = it->options[0];
-       irq = it->options[1];
-
-       printk(KERN_INFO "comedi%d: dmm32at: attaching\n", dev->minor);
-       printk(KERN_DEBUG "dmm32at: probing at address 0x%04lx, irq %u\n",
-              iobase, irq);
-
-       /* register address space */
-       if (!request_region(iobase, DMM32AT_MEMSIZE, board->name)) {
-               printk(KERN_ERR "comedi%d: dmm32at: I/O port conflict\n",
-                      dev->minor);
-               return -EIO;
-       }
-       dev->iobase = iobase;
-
-       /* the following just makes sure the board is there and gets
-          it to a known state */
-
-       /* reset the board */
-       dmm_outb(dev, DMM32AT_CNTRL, DMM32AT_RESET);
-
-       /* allow a millisecond to reset */
-       udelay(1000);
-
-       /* zero scan and fifo control */
-       dmm_outb(dev, DMM32AT_FIFOCNTRL, 0x0);
-
-       /* zero interrupt and clock control */
-       dmm_outb(dev, DMM32AT_INTCLOCK, 0x0);
-
-       /* write a test channel range, the high 3 bits should drop */
-       dmm_outb(dev, DMM32AT_AILOW, 0x80);
-       dmm_outb(dev, DMM32AT_AIHIGH, 0xff);
-
-       /* set the range at 10v unipolar */
-       dmm_outb(dev, DMM32AT_AICONF, DMM32AT_RANGE_U10);
-
-       /* should take 10 us to settle, here's a hundred */
-       udelay(100);
-
-       /* read back the values */
-       ailo = dmm_inb(dev, DMM32AT_AILOW);
-       aihi = dmm_inb(dev, DMM32AT_AIHIGH);
-       fifostat = dmm_inb(dev, DMM32AT_FIFOSTAT);
-       aistat = dmm_inb(dev, DMM32AT_AISTAT);
-       intstat = dmm_inb(dev, DMM32AT_INTCLOCK);
-       airback = dmm_inb(dev, DMM32AT_AIRBACK);
-
-       printk(KERN_DEBUG "dmm32at: lo=0x%02x hi=0x%02x fifostat=0x%02x\n",
-              ailo, aihi, fifostat);
-       printk(KERN_DEBUG
-              "dmm32at: aistat=0x%02x intstat=0x%02x airback=0x%02x\n",
-              aistat, intstat, airback);
-
-       if ((ailo != 0x00) || (aihi != 0x1f) || (fifostat != 0x80) ||
-           (aistat != 0x60 || (intstat != 0x00) || airback != 0x0c)) {
-               printk(KERN_ERR "dmmat32: board detection failed\n");
-               return -EIO;
-       }
-
-       /* board is there, register interrupt */
-       if (irq) {
-               ret = request_irq(irq, dmm32at_isr, 0, board->name, dev);
-               if (ret < 0) {
-                       printk(KERN_ERR "dmm32at: irq conflict\n");
-                       return ret;
-               }
-               dev->irq = irq;
-       }
-
-       dev->board_name = board->name;
-
-/*
- * Allocate the private structure area.  alloc_private() is a
- * convenient macro defined in comedidev.h.
- */
-       if (alloc_private(dev, sizeof(struct dmm32at_private)) < 0)
-               return -ENOMEM;
-
-       ret = comedi_alloc_subdevices(dev, 3);
-       if (ret)
-               return ret;
-
-       s = dev->subdevices + 0;
-       dev->read_subdev = s;
-       /* analog input subdevice */
-       s->type = COMEDI_SUBD_AI;
-       /* we support single-ended (ground) and differential */
-       s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_DIFF | SDF_CMD_READ;
-       s->n_chan = board->ai_chans;
-       s->maxdata = (1 << board->ai_bits) - 1;
-       s->range_table = board->ai_ranges;
-       s->len_chanlist = 32;   /* This is the maximum chanlist length that
-                                  the board can handle */
-       s->insn_read = dmm32at_ai_rinsn;
-       s->do_cmd = dmm32at_ai_cmd;
-       s->do_cmdtest = dmm32at_ai_cmdtest;
-       s->cancel = dmm32at_ai_cancel;
-
-       s = dev->subdevices + 1;
-       /* analog output subdevice */
-       s->type = COMEDI_SUBD_AO;
-       s->subdev_flags = SDF_WRITABLE;
-       s->n_chan = board->ao_chans;
-       s->maxdata = (1 << board->ao_bits) - 1;
-       s->range_table = board->ao_ranges;
-       s->insn_write = dmm32at_ao_winsn;
-       s->insn_read = dmm32at_ao_rinsn;
-
-       s = dev->subdevices + 2;
-       /* digital i/o subdevice */
-       if (board->have_dio) {
-
-               /* get access to the DIO regs */
-               dmm_outb(dev, DMM32AT_CNTRL, DMM32AT_DIOACC);
-               /* set the DIO's to the defualt input setting */
-               devpriv->dio_config = DMM32AT_DIRA | DMM32AT_DIRB |
-                   DMM32AT_DIRCL | DMM32AT_DIRCH | DMM32AT_DIENABLE;
-               dmm_outb(dev, DMM32AT_DIOCONF, devpriv->dio_config);
-
-               /* set up the subdevice */
-               s->type = COMEDI_SUBD_DIO;
-               s->subdev_flags = SDF_READABLE | SDF_WRITABLE;
-               s->n_chan = board->dio_chans;
-               s->maxdata = 1;
-               s->state = 0;
-               s->range_table = &range_digital;
-               s->insn_bits = dmm32at_dio_insn_bits;
-               s->insn_config = dmm32at_dio_insn_config;
-       } else {
-               s->type = COMEDI_SUBD_UNUSED;
-       }
-
-       /* success */
-       printk(KERN_INFO "comedi%d: dmm32at: attached\n", dev->minor);
-
-       return 1;
-
-}
-
-static void dmm32at_detach(struct comedi_device *dev)
-{
-       if (dev->irq)
-               free_irq(dev->irq, dev);
-       if (dev->iobase)
-               release_region(dev->iobase, DMM32AT_MEMSIZE);
-}
-
 /*
  * "instructions" read/write data in "one-shot" or "software-triggered"
  * mode.
@@ -990,6 +789,178 @@ void dmm32at_setaitimer(struct comedi_device *dev, unsigned int nansec)
 
 }
 
+static int dmm32at_attach(struct comedi_device *dev,
+                         struct comedi_devconfig *it)
+{
+       const struct dmm32at_board *board = comedi_board(dev);
+       int ret;
+       struct comedi_subdevice *s;
+       unsigned char aihi, ailo, fifostat, aistat, intstat, airback;
+       unsigned long iobase;
+       unsigned int irq;
+
+       iobase = it->options[0];
+       irq = it->options[1];
+
+       printk(KERN_INFO "comedi%d: dmm32at: attaching\n", dev->minor);
+       printk(KERN_DEBUG "dmm32at: probing at address 0x%04lx, irq %u\n",
+              iobase, irq);
+
+       /* register address space */
+       if (!request_region(iobase, DMM32AT_MEMSIZE, board->name)) {
+               printk(KERN_ERR "comedi%d: dmm32at: I/O port conflict\n",
+                      dev->minor);
+               return -EIO;
+       }
+       dev->iobase = iobase;
+
+       /* the following just makes sure the board is there and gets
+          it to a known state */
+
+       /* reset the board */
+       dmm_outb(dev, DMM32AT_CNTRL, DMM32AT_RESET);
+
+       /* allow a millisecond to reset */
+       udelay(1000);
+
+       /* zero scan and fifo control */
+       dmm_outb(dev, DMM32AT_FIFOCNTRL, 0x0);
+
+       /* zero interrupt and clock control */
+       dmm_outb(dev, DMM32AT_INTCLOCK, 0x0);
+
+       /* write a test channel range, the high 3 bits should drop */
+       dmm_outb(dev, DMM32AT_AILOW, 0x80);
+       dmm_outb(dev, DMM32AT_AIHIGH, 0xff);
+
+       /* set the range at 10v unipolar */
+       dmm_outb(dev, DMM32AT_AICONF, DMM32AT_RANGE_U10);
+
+       /* should take 10 us to settle, here's a hundred */
+       udelay(100);
+
+       /* read back the values */
+       ailo = dmm_inb(dev, DMM32AT_AILOW);
+       aihi = dmm_inb(dev, DMM32AT_AIHIGH);
+       fifostat = dmm_inb(dev, DMM32AT_FIFOSTAT);
+       aistat = dmm_inb(dev, DMM32AT_AISTAT);
+       intstat = dmm_inb(dev, DMM32AT_INTCLOCK);
+       airback = dmm_inb(dev, DMM32AT_AIRBACK);
+
+       printk(KERN_DEBUG "dmm32at: lo=0x%02x hi=0x%02x fifostat=0x%02x\n",
+              ailo, aihi, fifostat);
+       printk(KERN_DEBUG
+              "dmm32at: aistat=0x%02x intstat=0x%02x airback=0x%02x\n",
+              aistat, intstat, airback);
+
+       if ((ailo != 0x00) || (aihi != 0x1f) || (fifostat != 0x80) ||
+           (aistat != 0x60 || (intstat != 0x00) || airback != 0x0c)) {
+               printk(KERN_ERR "dmmat32: board detection failed\n");
+               return -EIO;
+       }
+
+       /* board is there, register interrupt */
+       if (irq) {
+               ret = request_irq(irq, dmm32at_isr, 0, board->name, dev);
+               if (ret < 0) {
+                       printk(KERN_ERR "dmm32at: irq conflict\n");
+                       return ret;
+               }
+               dev->irq = irq;
+       }
+
+       dev->board_name = board->name;
+
+/*
+ * Allocate the private structure area.  alloc_private() is a
+ * convenient macro defined in comedidev.h.
+ */
+       if (alloc_private(dev, sizeof(struct dmm32at_private)) < 0)
+               return -ENOMEM;
+
+       ret = comedi_alloc_subdevices(dev, 3);
+       if (ret)
+               return ret;
+
+       s = dev->subdevices + 0;
+       dev->read_subdev = s;
+       /* analog input subdevice */
+       s->type = COMEDI_SUBD_AI;
+       /* we support single-ended (ground) and differential */
+       s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_DIFF | SDF_CMD_READ;
+       s->n_chan = board->ai_chans;
+       s->maxdata = (1 << board->ai_bits) - 1;
+       s->range_table = board->ai_ranges;
+       s->len_chanlist = 32;   /* This is the maximum chanlist length that
+                                  the board can handle */
+       s->insn_read = dmm32at_ai_rinsn;
+       s->do_cmd = dmm32at_ai_cmd;
+       s->do_cmdtest = dmm32at_ai_cmdtest;
+       s->cancel = dmm32at_ai_cancel;
+
+       s = dev->subdevices + 1;
+       /* analog output subdevice */
+       s->type = COMEDI_SUBD_AO;
+       s->subdev_flags = SDF_WRITABLE;
+       s->n_chan = board->ao_chans;
+       s->maxdata = (1 << board->ao_bits) - 1;
+       s->range_table = board->ao_ranges;
+       s->insn_write = dmm32at_ao_winsn;
+       s->insn_read = dmm32at_ao_rinsn;
+
+       s = dev->subdevices + 2;
+       /* digital i/o subdevice */
+       if (board->have_dio) {
+
+               /* get access to the DIO regs */
+               dmm_outb(dev, DMM32AT_CNTRL, DMM32AT_DIOACC);
+               /* set the DIO's to the defualt input setting */
+               devpriv->dio_config = DMM32AT_DIRA | DMM32AT_DIRB |
+                   DMM32AT_DIRCL | DMM32AT_DIRCH | DMM32AT_DIENABLE;
+               dmm_outb(dev, DMM32AT_DIOCONF, devpriv->dio_config);
+
+               /* set up the subdevice */
+               s->type = COMEDI_SUBD_DIO;
+               s->subdev_flags = SDF_READABLE | SDF_WRITABLE;
+               s->n_chan = board->dio_chans;
+               s->maxdata = 1;
+               s->state = 0;
+               s->range_table = &range_digital;
+               s->insn_bits = dmm32at_dio_insn_bits;
+               s->insn_config = dmm32at_dio_insn_config;
+       } else {
+               s->type = COMEDI_SUBD_UNUSED;
+       }
+
+       /* success */
+       printk(KERN_INFO "comedi%d: dmm32at: attached\n", dev->minor);
+
+       return 1;
+
+}
+
+static void dmm32at_detach(struct comedi_device *dev)
+{
+       if (dev->irq)
+               free_irq(dev->irq, dev);
+       if (dev->iobase)
+               release_region(dev->iobase, DMM32AT_MEMSIZE);
+}
+
+static const struct dmm32at_board dmm32at_boards[] = {
+       {
+               .name           = "dmm32at",
+               .ai_chans       = 32,
+               .ai_bits        = 16,
+               .ai_ranges      = &dmm32at_airanges,
+               .ao_chans       = 4,
+               .ao_bits        = 12,
+               .ao_ranges      = &dmm32at_aoranges,
+               .have_dio       = 1,
+               .dio_chans      = 24,
+       },
+};
+
 static struct comedi_driver dmm32at_driver = {
        .driver_name    = "dmm32at",
        .module         = THIS_MODULE,