staging: comedi: remove inline alloc_private()
[deliverable/linux.git] / drivers / staging / comedi / drivers / pcl818.c
index 34169c16fb9215e31c9f20986f22cd36116757b3..c94f289e3f3acd18394d92c1a4543f9eb4b64644 100644 (file)
@@ -107,6 +107,7 @@ A word or two about DMA. Driver support DMA operations at two ways:
 #include <linux/io.h>
 #include <asm/dma.h>
 
+#include "comedi_fc.h"
 #include "8253.h"
 
 /* #define PCL818_MODE13_AO 1 */
@@ -325,8 +326,6 @@ static const unsigned int muxonechan[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0
        0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff
 };
 
-#define devpriv ((struct pcl818_private *)dev->private)
-
 /*
 ==============================================================================
 */
@@ -405,6 +404,7 @@ static int pcl818_ao_insn_read(struct comedi_device *dev,
                               struct comedi_subdevice *s,
                               struct comedi_insn *insn, unsigned int *data)
 {
+       struct pcl818_private *devpriv = dev->private;
        int n;
        int chan = CR_CHAN(insn->chanspec);
 
@@ -418,6 +418,7 @@ static int pcl818_ao_insn_write(struct comedi_device *dev,
                                struct comedi_subdevice *s,
                                struct comedi_insn *insn, unsigned int *data)
 {
+       struct pcl818_private *devpriv = dev->private;
        int n;
        int chan = CR_CHAN(insn->chanspec);
 
@@ -477,7 +478,8 @@ static int pcl818_do_insn_bits(struct comedi_device *dev,
 static irqreturn_t interrupt_pcl818_ai_mode13_int(int irq, void *d)
 {
        struct comedi_device *dev = d;
-       struct comedi_subdevice *s = dev->subdevices + 0;
+       struct pcl818_private *devpriv = dev->private;
+       struct comedi_subdevice *s = &dev->subdevices[0];
        int low;
        int timeout = 50;       /* wait max 50us */
 
@@ -536,7 +538,8 @@ conv_finish:
 static irqreturn_t interrupt_pcl818_ai_mode13_dma(int irq, void *d)
 {
        struct comedi_device *dev = d;
-       struct comedi_subdevice *s = dev->subdevices + 0;
+       struct pcl818_private *devpriv = dev->private;
+       struct comedi_subdevice *s = &dev->subdevices[0];
        int i, len, bufptr;
        unsigned long flags;
        short *ptr;
@@ -615,7 +618,8 @@ static irqreturn_t interrupt_pcl818_ai_mode13_dma(int irq, void *d)
 static irqreturn_t interrupt_pcl818_ai_mode13_dma_rtc(int irq, void *d)
 {
        struct comedi_device *dev = d;
-       struct comedi_subdevice *s = dev->subdevices + 0;
+       struct pcl818_private *devpriv = dev->private;
+       struct comedi_subdevice *s = &dev->subdevices[0];
        unsigned long tmp;
        unsigned int top1, top2, i, bufptr;
        long ofs_dats;
@@ -720,7 +724,8 @@ static irqreturn_t interrupt_pcl818_ai_mode13_dma_rtc(int irq, void *d)
 static irqreturn_t interrupt_pcl818_ai_mode13_fifo(int irq, void *d)
 {
        struct comedi_device *dev = d;
-       struct comedi_subdevice *s = dev->subdevices + 0;
+       struct pcl818_private *devpriv = dev->private;
+       struct comedi_subdevice *s = &dev->subdevices[0];
        int i, len, lo;
 
        outb(0, dev->iobase + PCL818_FI_INTCLR);        /*  clear fifo int request */
@@ -794,6 +799,7 @@ static irqreturn_t interrupt_pcl818_ai_mode13_fifo(int irq, void *d)
 static irqreturn_t interrupt_pcl818(int irq, void *d)
 {
        struct comedi_device *dev = d;
+       struct pcl818_private *devpriv = dev->private;
 
        if (!dev->attached) {
                comedi_error(dev, "premature interrupt");
@@ -811,7 +817,7 @@ static irqreturn_t interrupt_pcl818(int irq, void *d)
                           being reprogrammed while a DMA transfer is in
                           progress.
                         */
-                       struct comedi_subdevice *s = dev->subdevices + 0;
+                       struct comedi_subdevice *s = &dev->subdevices[0];
                        devpriv->ai_act_scan = 0;
                        devpriv->neverending_ai = 0;
                        pcl818_ai_cancel(dev, s);
@@ -860,6 +866,7 @@ static irqreturn_t interrupt_pcl818(int irq, void *d)
 static void pcl818_ai_mode13dma_int(int mode, struct comedi_device *dev,
                                    struct comedi_subdevice *s)
 {
+       struct pcl818_private *devpriv = dev->private;
        unsigned int flags;
        unsigned int bytes;
 
@@ -901,6 +908,7 @@ static void pcl818_ai_mode13dma_int(int mode, struct comedi_device *dev,
 static void pcl818_ai_mode13dma_rtc(int mode, struct comedi_device *dev,
                                    struct comedi_subdevice *s)
 {
+       struct pcl818_private *devpriv = dev->private;
        unsigned int flags;
        short *pole;
 
@@ -942,6 +950,7 @@ static void pcl818_ai_mode13dma_rtc(int mode, struct comedi_device *dev,
 static int pcl818_ai_cmd_mode(int mode, struct comedi_device *dev,
                              struct comedi_subdevice *s)
 {
+       struct pcl818_private *devpriv = dev->private;
        struct comedi_cmd *cmd = &s->async->cmd;
        int divisor1 = 0, divisor2 = 0;
        unsigned int seglen;
@@ -1062,6 +1071,7 @@ static int pcl818_ai_cmd_mode(int mode, struct comedi_device *dev,
 static int pcl818_ao_mode13(int mode, struct comedi_device *dev,
                            struct comedi_subdevice *s, comedi_trig * it)
 {
+       struct pcl818_private *devpriv = dev->private;
        int divisor1 = 0, divisor2 = 0;
 
        if (!dev->irq) {
@@ -1221,6 +1231,7 @@ static void setup_channel_list(struct comedi_device *dev,
                               unsigned int *chanlist, unsigned int n_chan,
                               unsigned int seglen)
 {
+       struct pcl818_private *devpriv = dev->private;
        int i;
 
        devpriv->act_chanlist_len = seglen;
@@ -1258,46 +1269,27 @@ static int ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s,
                      struct comedi_cmd *cmd)
 {
        const struct pcl818_board *board = comedi_board(dev);
+       struct pcl818_private *devpriv = dev->private;
        int err = 0;
        int tmp, divisor1 = 0, divisor2 = 0;
 
-       /* step 1: make sure trigger sources are trivially valid */
-
-       tmp = cmd->start_src;
-       cmd->start_src &= TRIG_NOW;
-       if (!cmd->start_src || tmp != cmd->start_src)
-               err++;
-
-       tmp = cmd->scan_begin_src;
-       cmd->scan_begin_src &= TRIG_FOLLOW;
-       if (!cmd->scan_begin_src || tmp != cmd->scan_begin_src)
-               err++;
-
-       tmp = cmd->convert_src;
-       cmd->convert_src &= TRIG_TIMER | TRIG_EXT;
-       if (!cmd->convert_src || tmp != cmd->convert_src)
-               err++;
-
-       tmp = cmd->scan_end_src;
-       cmd->scan_end_src &= TRIG_COUNT;
-       if (!cmd->scan_end_src || tmp != cmd->scan_end_src)
-               err++;
+       /* Step 1 : check if triggers are trivially valid */
 
-       tmp = cmd->stop_src;
-       cmd->stop_src &= TRIG_COUNT | TRIG_NONE;
-       if (!cmd->stop_src || tmp != cmd->stop_src)
-               err++;
+       err |= cfc_check_trigger_src(&cmd->start_src, TRIG_NOW);
+       err |= cfc_check_trigger_src(&cmd->scan_begin_src, TRIG_FOLLOW);
+       err |= cfc_check_trigger_src(&cmd->convert_src, TRIG_TIMER | TRIG_EXT);
+       err |= cfc_check_trigger_src(&cmd->scan_end_src, TRIG_COUNT);
+       err |= cfc_check_trigger_src(&cmd->stop_src, TRIG_COUNT | TRIG_NONE);
 
        if (err)
                return 1;
 
-       /* step 2: make sure trigger sources are unique and mutually compatible */
+       /* Step 2a : make sure trigger sources are unique */
 
-       if (cmd->convert_src != TRIG_TIMER && cmd->convert_src != TRIG_EXT)
-               err++;
+       err |= cfc_check_trigger_is_unique(cmd->convert_src);
+       err |= cfc_check_trigger_is_unique(cmd->stop_src);
 
-       if (cmd->stop_src != TRIG_NONE && cmd->stop_src != TRIG_COUNT)
-               err++;
+       /* Step 2b : and mutually compatible */
 
        if (err)
                return 2;
@@ -1377,6 +1369,7 @@ static int ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s,
 */
 static int ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
 {
+       struct pcl818_private *devpriv = dev->private;
        struct comedi_cmd *cmd = &s->async->cmd;
        int retval;
 
@@ -1416,6 +1409,8 @@ static int ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
 static int pcl818_ai_cancel(struct comedi_device *dev,
                            struct comedi_subdevice *s)
 {
+       struct pcl818_private *devpriv = dev->private;
+
        if (devpriv->irq_blocked > 0) {
                dev_dbg(dev->class_dev, "pcl818_ai_cancel()\n");
                devpriv->irq_was_now_closed = 1;
@@ -1501,6 +1496,7 @@ static int pcl818_check(unsigned long iobase)
 static void pcl818_reset(struct comedi_device *dev)
 {
        const struct pcl818_board *board = comedi_board(dev);
+       struct pcl818_private *devpriv = dev->private;
 
        if (devpriv->usefifo) { /*  FIFO shutdown */
                outb(0, dev->iobase + PCL818_FI_INTCLR);
@@ -1571,6 +1567,7 @@ static int set_rtc_irq_bit(unsigned char bit)
 static void rtc_dropped_irq(unsigned long data)
 {
        struct comedi_device *dev = (void *)data;
+       struct pcl818_private *devpriv = dev->private;
        unsigned long flags, tmp;
 
        switch (devpriv->int818_mode) {
@@ -1620,6 +1617,7 @@ static int rtc_setfreq_irq(int freq)
 static int pcl818_attach(struct comedi_device *dev, struct comedi_devconfig *it)
 {
        const struct pcl818_board *board = comedi_board(dev);
+       struct pcl818_private *devpriv;
        int ret;
        unsigned long iobase;
        unsigned int irq;
@@ -1627,9 +1625,10 @@ static int pcl818_attach(struct comedi_device *dev, struct comedi_devconfig *it)
        unsigned long pages;
        struct comedi_subdevice *s;
 
-       ret = alloc_private(dev, sizeof(struct pcl818_private));
-       if (ret < 0)
-               return ret;     /* Can't alloc mem */
+       devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
+       if (!devpriv)
+               return -ENOMEM;
+       dev->private = devpriv;
 
        /* claim our I/O space */
        iobase = it->options[0];
@@ -1763,7 +1762,7 @@ no_dma:
        if (ret)
                return ret;
 
-       s = dev->subdevices + 0;
+       s = &dev->subdevices[0];
        if (!board->n_aichan_se) {
                s->type = COMEDI_SUBD_UNUSED;
        } else {
@@ -1829,7 +1828,7 @@ no_dma:
                }
        }
 
-       s = dev->subdevices + 1;
+       s = &dev->subdevices[1];
        if (!board->n_aochan) {
                s->type = COMEDI_SUBD_UNUSED;
        } else {
@@ -1862,7 +1861,7 @@ no_dma:
                }
        }
 
-       s = dev->subdevices + 2;
+       s = &dev->subdevices[2];
        if (!board->n_dichan) {
                s->type = COMEDI_SUBD_UNUSED;
        } else {
@@ -1875,7 +1874,7 @@ no_dma:
                s->insn_bits = pcl818_di_insn_bits;
        }
 
-       s = dev->subdevices + 3;
+       s = &dev->subdevices[3];
        if (!board->n_dochan) {
                s->type = COMEDI_SUBD_UNUSED;
        } else {
@@ -1911,7 +1910,9 @@ no_dma:
 
 static void pcl818_detach(struct comedi_device *dev)
 {
-       if (dev->private) {
+       struct pcl818_private *devpriv = dev->private;
+
+       if (devpriv) {
                pcl818_ai_cancel(dev, devpriv->sub_ai);
                pcl818_reset(dev);
                if (devpriv->dma)
This page took 0.02893 seconds and 5 git commands to generate.