staging: comedi: remove inline alloc_private()
[deliverable/linux.git] / drivers / staging / comedi / drivers / dt282x.c
index 1f0b40e4bdddccd3d24a22ec7cbc097bca31612a..9746294efc94904ec26ccc11ffce1892f74e9a60 100644 (file)
@@ -248,7 +248,6 @@ struct dt282x_private {
        int dma_dir;
 };
 
-#define devpriv ((struct dt282x_private *)dev->private)
 #define boardtype (*(const struct dt282x_board *)dev->board_ptr)
 
 /*
@@ -290,6 +289,7 @@ static int dt282x_grab_dma(struct comedi_device *dev, int dma1, int dma2);
 static void dt282x_munge(struct comedi_device *dev, short *buf,
                         unsigned int nbytes)
 {
+       struct dt282x_private *devpriv = dev->private;
        unsigned int i;
        unsigned short mask = (1 << boardtype.adbits) - 1;
        unsigned short sign = 1 << (boardtype.adbits - 1);
@@ -309,10 +309,11 @@ static void dt282x_munge(struct comedi_device *dev, short *buf,
 
 static void dt282x_ao_dma_interrupt(struct comedi_device *dev)
 {
+       struct dt282x_private *devpriv = dev->private;
        void *ptr;
        int size;
        int i;
-       struct comedi_subdevice *s = dev->subdevices + 1;
+       struct comedi_subdevice *s = &dev->subdevices[1];
 
        outw(devpriv->supcsr | DT2821_CLRDMADNE, dev->iobase + DT2821_SUPCSR);
 
@@ -341,11 +342,12 @@ static void dt282x_ao_dma_interrupt(struct comedi_device *dev)
 
 static void dt282x_ai_dma_interrupt(struct comedi_device *dev)
 {
+       struct dt282x_private *devpriv = dev->private;
        void *ptr;
        int size;
        int i;
        int ret;
-       struct comedi_subdevice *s = dev->subdevices;
+       struct comedi_subdevice *s = &dev->subdevices[0];
 
        outw(devpriv->supcsr | DT2821_CLRDMADNE, dev->iobase + DT2821_SUPCSR);
 
@@ -393,6 +395,7 @@ static void dt282x_ai_dma_interrupt(struct comedi_device *dev)
 
 static int prep_ai_dma(struct comedi_device *dev, int dma_index, int n)
 {
+       struct dt282x_private *devpriv = dev->private;
        int dma_chan;
        unsigned long dma_ptr;
        unsigned long flags;
@@ -424,6 +427,7 @@ static int prep_ai_dma(struct comedi_device *dev, int dma_index, int n)
 
 static int prep_ao_dma(struct comedi_device *dev, int dma_index, int n)
 {
+       struct dt282x_private *devpriv = dev->private;
        int dma_chan;
        unsigned long dma_ptr;
        unsigned long flags;
@@ -447,6 +451,7 @@ static int prep_ao_dma(struct comedi_device *dev, int dma_index, int n)
 static irqreturn_t dt282x_interrupt(int irq, void *d)
 {
        struct comedi_device *dev = d;
+       struct dt282x_private *devpriv = dev->private;
        struct comedi_subdevice *s;
        struct comedi_subdevice *s_ao;
        unsigned int supcsr, adcsr, dacsr;
@@ -457,8 +462,8 @@ static irqreturn_t dt282x_interrupt(int irq, void *d)
                return IRQ_HANDLED;
        }
 
-       s = dev->subdevices + 0;
-       s_ao = dev->subdevices + 1;
+       s = &dev->subdevices[0];
+       s_ao = &dev->subdevices[1];
        adcsr = inw(dev->iobase + DT2821_ADCSR);
        dacsr = inw(dev->iobase + DT2821_DACSR);
        supcsr = inw(dev->iobase + DT2821_SUPCSR);
@@ -525,6 +530,7 @@ static irqreturn_t dt282x_interrupt(int irq, void *d)
 static void dt282x_load_changain(struct comedi_device *dev, int n,
                                 unsigned int *chanlist)
 {
+       struct dt282x_private *devpriv = dev->private;
        unsigned int i;
        unsigned int chan, range;
 
@@ -548,6 +554,7 @@ static int dt282x_ai_insn_read(struct comedi_device *dev,
                               struct comedi_subdevice *s,
                               struct comedi_insn *insn, unsigned int *data)
 {
+       struct dt282x_private *devpriv = dev->private;
        int i;
 
        /* XXX should we really be enabling the ad clock here? */
@@ -582,47 +589,24 @@ static int dt282x_ai_cmdtest(struct comedi_device *dev,
        int err = 0;
        int tmp;
 
-       /* step 1: make sure trigger sources are trivially valid */
+       /* Step 1 : check if triggers 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 | TRIG_EXT;
-       if (!cmd->scan_begin_src || tmp != cmd->scan_begin_src)
-               err++;
-
-       tmp = cmd->convert_src;
-       cmd->convert_src &= TRIG_TIMER;
-       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++;
-
-       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 | TRIG_EXT);
+       err |= cfc_check_trigger_src(&cmd->convert_src, TRIG_TIMER);
+       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 */
 
-       /* note that mutual compatibility is not an issue here */
-       if (cmd->scan_begin_src != TRIG_FOLLOW &&
-           cmd->scan_begin_src != TRIG_EXT)
-               err++;
-       if (cmd->stop_src != TRIG_COUNT && cmd->stop_src != TRIG_NONE)
-               err++;
+       err |= cfc_check_trigger_is_unique(cmd->scan_begin_src);
+       err |= cfc_check_trigger_is_unique(cmd->stop_src);
+
+       /* Step 2b : and mutually compatible */
 
        if (err)
                return 2;
@@ -694,6 +678,7 @@ static int dt282x_ai_cmdtest(struct comedi_device *dev,
 static int dt282x_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
 {
        const struct dt282x_board *board = comedi_board(dev);
+       struct dt282x_private *devpriv = dev->private;
        struct comedi_cmd *cmd = &s->async->cmd;
        int timer;
 
@@ -756,6 +741,8 @@ static int dt282x_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
 
 static void dt282x_disable_dma(struct comedi_device *dev)
 {
+       struct dt282x_private *devpriv = dev->private;
+
        if (devpriv->usedma) {
                disable_dma(devpriv->dma[0].chan);
                disable_dma(devpriv->dma[1].chan);
@@ -765,6 +752,8 @@ static void dt282x_disable_dma(struct comedi_device *dev)
 static int dt282x_ai_cancel(struct comedi_device *dev,
                            struct comedi_subdevice *s)
 {
+       struct dt282x_private *devpriv = dev->private;
+
        dt282x_disable_dma(dev);
 
        devpriv->adcsr = 0;
@@ -817,6 +806,8 @@ static int dt282x_ao_insn_read(struct comedi_device *dev,
                               struct comedi_subdevice *s,
                               struct comedi_insn *insn, unsigned int *data)
 {
+       struct dt282x_private *devpriv = dev->private;
+
        data[0] = devpriv->ao[CR_CHAN(insn->chanspec)];
 
        return 1;
@@ -826,6 +817,7 @@ static int dt282x_ao_insn_write(struct comedi_device *dev,
                                struct comedi_subdevice *s,
                                struct comedi_insn *insn, unsigned int *data)
 {
+       struct dt282x_private *devpriv = dev->private;
        short d;
        unsigned int chan;
 
@@ -862,44 +854,22 @@ static int dt282x_ao_cmdtest(struct comedi_device *dev,
        int err = 0;
        int tmp;
 
-       /* step 1: make sure trigger sources are trivially valid */
+       /* Step 1 : check if triggers are trivially valid */
 
-       tmp = cmd->start_src;
-       cmd->start_src &= TRIG_INT;
-       if (!cmd->start_src || tmp != cmd->start_src)
-               err++;
-
-       tmp = cmd->scan_begin_src;
-       cmd->scan_begin_src &= TRIG_TIMER;
-       if (!cmd->scan_begin_src || tmp != cmd->scan_begin_src)
-               err++;
-
-       tmp = cmd->convert_src;
-       cmd->convert_src &= TRIG_NOW;
-       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++;
-
-       tmp = cmd->stop_src;
-       cmd->stop_src &= TRIG_NONE;
-       if (!cmd->stop_src || tmp != cmd->stop_src)
-               err++;
+       err |= cfc_check_trigger_src(&cmd->start_src, TRIG_INT);
+       err |= cfc_check_trigger_src(&cmd->scan_begin_src, TRIG_TIMER);
+       err |= cfc_check_trigger_src(&cmd->convert_src, TRIG_NOW);
+       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 */
 
-       /* note that mutual compatibility is not an issue here */
-       if (cmd->stop_src != TRIG_COUNT && cmd->stop_src != TRIG_NONE)
-               err++;
+       err |= cfc_check_trigger_is_unique(cmd->stop_src);
+
+       /* Step 2b : and mutually compatible */
 
        if (err)
                return 2;
@@ -953,6 +923,7 @@ static int dt282x_ao_cmdtest(struct comedi_device *dev,
 static int dt282x_ao_inttrig(struct comedi_device *dev,
                             struct comedi_subdevice *s, unsigned int x)
 {
+       struct dt282x_private *devpriv = dev->private;
        int size;
 
        if (x != 0)
@@ -982,6 +953,7 @@ static int dt282x_ao_inttrig(struct comedi_device *dev,
 
 static int dt282x_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
 {
+       struct dt282x_private *devpriv = dev->private;
        int timer;
        struct comedi_cmd *cmd = &s->async->cmd;
 
@@ -1018,6 +990,8 @@ static int dt282x_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
 static int dt282x_ao_cancel(struct comedi_device *dev,
                            struct comedi_subdevice *s)
 {
+       struct dt282x_private *devpriv = dev->private;
+
        dt282x_disable_dma(dev);
 
        devpriv->dacsr = 0;
@@ -1048,6 +1022,7 @@ static int dt282x_dio_insn_config(struct comedi_device *dev,
                                  struct comedi_subdevice *s,
                                  struct comedi_insn *insn, unsigned int *data)
 {
+       struct dt282x_private *devpriv = dev->private;
        int mask;
 
        mask = (CR_CHAN(insn->chanspec) < 8) ? 0x00ff : 0xff00;
@@ -1119,6 +1094,7 @@ enum {  /* i/o base, irq, dma channels */
 
 static int dt282x_grab_dma(struct comedi_device *dev, int dma1, int dma2)
 {
+       struct dt282x_private *devpriv = dev->private;
        int ret;
 
        devpriv->usedma = 0;
@@ -1180,6 +1156,7 @@ static int dt282x_grab_dma(struct comedi_device *dev, int dma1, int dma2)
 static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it)
 {
        const struct dt282x_board *board = comedi_board(dev);
+       struct dt282x_private *devpriv;
        int i, irq;
        int ret;
        struct comedi_subdevice *s;
@@ -1262,9 +1239,10 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it)
 #endif
        }
 
-       ret = alloc_private(dev, sizeof(struct dt282x_private));
-       if (ret < 0)
-               return ret;
+       devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
+       if (!devpriv)
+               return -ENOMEM;
+       dev->private = devpriv;
 
        ret = dt282x_grab_dma(dev, it->options[opt_dma1],
                              it->options[opt_dma2]);
@@ -1275,7 +1253,7 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it)
        if (ret)
                return ret;
 
-       s = dev->subdevices + 0;
+       s = &dev->subdevices[0];
 
        dev->read_subdev = s;
        /* ai subdevice */
@@ -1294,7 +1272,7 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it)
            opt_ai_range_lkup(boardtype.ispgl, it->options[opt_ai_range]);
        devpriv->ad_2scomp = it->options[opt_ai_twos];
 
-       s++;
+       s = &dev->subdevices[1];
 
        s->n_chan = boardtype.dachan;
        if (s->n_chan) {
@@ -1320,7 +1298,7 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it)
                s->type = COMEDI_SUBD_UNUSED;
        }
 
-       s++;
+       s = &dev->subdevices[2];
        /* dio subsystem */
        s->type = COMEDI_SUBD_DIO;
        s->subdev_flags = SDF_READABLE | SDF_WRITABLE;
@@ -1337,6 +1315,8 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it)
 
 static void dt282x_detach(struct comedi_device *dev)
 {
+       struct dt282x_private *devpriv = dev->private;
+
        if (dev->irq)
                free_irq(dev->irq, dev);
        if (dev->iobase)
This page took 0.03 seconds and 5 git commands to generate.