Staging: comedi: pcmcia irq fixes
[safe/jmp/linux-2.6] / drivers / staging / comedi / drivers / pcl818.c
index 29cc5a5..e95229b 100644 (file)
@@ -195,57 +195,59 @@ A word or two about DMA. Driver support DMA operations at two ways:
 #define MAGIC_DMA_WORD 0x5a5a
 
 static const struct comedi_lrange range_pcl818h_ai = { 9, {
-                       BIP_RANGE(5),
-                       BIP_RANGE(2.5),
-                       BIP_RANGE(1.25),
-                       BIP_RANGE(0.625),
-                       UNI_RANGE(10),
-                       UNI_RANGE(5),
-                       UNI_RANGE(2.5),
-                       UNI_RANGE(1.25),
-                       BIP_RANGE(10),
-       }
+                                                          BIP_RANGE(5),
+                                                          BIP_RANGE(2.5),
+                                                          BIP_RANGE(1.25),
+                                                          BIP_RANGE(0.625),
+                                                          UNI_RANGE(10),
+                                                          UNI_RANGE(5),
+                                                          UNI_RANGE(2.5),
+                                                          UNI_RANGE(1.25),
+                                                          BIP_RANGE(10),
+                                                          }
 };
 
 static const struct comedi_lrange range_pcl818hg_ai = { 10, {
-                       BIP_RANGE(5),
-                       BIP_RANGE(0.5),
-                       BIP_RANGE(0.05),
-                       BIP_RANGE(0.005),
-                       UNI_RANGE(10),
-                       UNI_RANGE(1),
-                       UNI_RANGE(0.1),
-                       UNI_RANGE(0.01),
-                       BIP_RANGE(10),
-                       BIP_RANGE(1),
-                       BIP_RANGE(0.1),
-                       BIP_RANGE(0.01),
-       }
+                                                            BIP_RANGE(5),
+                                                            BIP_RANGE(0.5),
+                                                            BIP_RANGE(0.05),
+                                                            BIP_RANGE(0.005),
+                                                            UNI_RANGE(10),
+                                                            UNI_RANGE(1),
+                                                            UNI_RANGE(0.1),
+                                                            UNI_RANGE(0.01),
+                                                            BIP_RANGE(10),
+                                                            BIP_RANGE(1),
+                                                            BIP_RANGE(0.1),
+                                                            BIP_RANGE(0.01),
+                                                            }
 };
 
 static const struct comedi_lrange range_pcl818l_l_ai = { 4, {
-                       BIP_RANGE(5),
-                       BIP_RANGE(2.5),
-                       BIP_RANGE(1.25),
-                       BIP_RANGE(0.625),
-       }
+                                                            BIP_RANGE(5),
+                                                            BIP_RANGE(2.5),
+                                                            BIP_RANGE(1.25),
+                                                            BIP_RANGE(0.625),
+                                                            }
 };
 
 static const struct comedi_lrange range_pcl818l_h_ai = { 4, {
-                       BIP_RANGE(10),
-                       BIP_RANGE(5),
-                       BIP_RANGE(2.5),
-                       BIP_RANGE(1.25),
-       }
+                                                            BIP_RANGE(10),
+                                                            BIP_RANGE(5),
+                                                            BIP_RANGE(2.5),
+                                                            BIP_RANGE(1.25),
+                                                            }
 };
 
 static const struct comedi_lrange range718_bipolar1 = { 1, {BIP_RANGE(1),} };
-static const struct comedi_lrange range718_bipolar0_5 = { 1, {BIP_RANGE(0.5),} };
+static const struct comedi_lrange range718_bipolar0_5 =
+    { 1, {BIP_RANGE(0.5),} };
 static const struct comedi_lrange range718_unipolar2 = { 1, {UNI_RANGE(2),} };
 static const struct comedi_lrange range718_unipolar1 = { 1, {BIP_RANGE(1),} };
 
-static int pcl818_attach(struct comedi_device * dev, struct comedi_devconfig * it);
-static int pcl818_detach(struct comedi_device * dev);
+static int pcl818_attach(struct comedi_device *dev,
+                        struct comedi_devconfig *it);
+static int pcl818_detach(struct comedi_device *dev);
 
 #ifdef unused
 static int RTC_lock = 0;       /* RTC lock */
@@ -273,42 +275,41 @@ struct pcl818_board {
        int is_818;
 };
 
-
 static const struct pcl818_board boardtypes[] = {
        {"pcl818l", 4, 16, 8, 25000, 1, 16, 16, &range_pcl818l_l_ai,
-                       &range_unipolar5, PCLx1x_RANGE, 0x00fc,
-               0x0a, 0xfff, 0xfff, 0, 1},
+        &range_unipolar5, PCLx1x_RANGE, 0x00fc,
+        0x0a, 0xfff, 0xfff, 0, 1},
        {"pcl818h", 9, 16, 8, 10000, 1, 16, 16, &range_pcl818h_ai,
-                       &range_unipolar5, PCLx1x_RANGE, 0x00fc,
-               0x0a, 0xfff, 0xfff, 0, 1},
+        &range_unipolar5, PCLx1x_RANGE, 0x00fc,
+        0x0a, 0xfff, 0xfff, 0, 1},
        {"pcl818hd", 9, 16, 8, 10000, 1, 16, 16, &range_pcl818h_ai,
-                       &range_unipolar5, PCLx1x_RANGE, 0x00fc,
-               0x0a, 0xfff, 0xfff, 1, 1},
+        &range_unipolar5, PCLx1x_RANGE, 0x00fc,
+        0x0a, 0xfff, 0xfff, 1, 1},
        {"pcl818hg", 12, 16, 8, 10000, 1, 16, 16, &range_pcl818hg_ai,
-                       &range_unipolar5, PCLx1x_RANGE, 0x00fc,
-               0x0a, 0xfff, 0xfff, 1, 1},
+        &range_unipolar5, PCLx1x_RANGE, 0x00fc,
+        0x0a, 0xfff, 0xfff, 1, 1},
        {"pcl818", 9, 16, 8, 10000, 2, 16, 16, &range_pcl818h_ai,
-                       &range_unipolar5, PCLx1x_RANGE, 0x00fc,
-               0x0a, 0xfff, 0xfff, 0, 1},
+        &range_unipolar5, PCLx1x_RANGE, 0x00fc,
+        0x0a, 0xfff, 0xfff, 0, 1},
        {"pcl718", 1, 16, 8, 16000, 2, 16, 16, &range_unipolar5,
-                       &range_unipolar5, PCLx1x_RANGE, 0x00fc,
-               0x0a, 0xfff, 0xfff, 0, 0},
+        &range_unipolar5, PCLx1x_RANGE, 0x00fc,
+        0x0a, 0xfff, 0xfff, 0, 0},
        /* pcm3718 */
        {"pcm3718", 9, 16, 8, 10000, 0, 16, 16, &range_pcl818h_ai,
-                       &range_unipolar5, PCLx1x_RANGE, 0x00fc,
-               0x0a, 0xfff, 0xfff, 0, 1 /* XXX ? */ },
+        &range_unipolar5, PCLx1x_RANGE, 0x00fc,
+        0x0a, 0xfff, 0xfff, 0, 1 /* XXX ? */ },
 };
 
 #define n_boardtypes (sizeof(boardtypes)/sizeof(struct pcl818_board))
 
 static struct comedi_driver driver_pcl818 = {
-      driver_name:"pcl818",
-      module:THIS_MODULE,
-      attach:pcl818_attach,
-      detach:pcl818_detach,
-      board_name:&boardtypes[0].name,
-      num_names:n_boardtypes,
-      offset:sizeof(struct pcl818_board),
+       .driver_name = "pcl818",
+       .module = THIS_MODULE,
+       .attach = pcl818_attach,
+       .detach = pcl818_detach,
+       .board_name = &boardtypes[0].name,
+       .num_names = n_boardtypes,
+       .offset = sizeof(struct pcl818_board),
 };
 
 COMEDI_INITCLEANUP(driver_pcl818);
@@ -353,7 +354,7 @@ struct pcl818_private {
        unsigned int *ai_chanlist;      /*  actaul chanlist */
        unsigned int ai_flags;  /*  flaglist */
        unsigned int ai_data_len;       /*  len of data buffer */
-       short *ai_data; /*  data buffer */
+       short *ai_data;         /*  data buffer */
        unsigned int ai_timer1; /*  timers */
        unsigned int ai_timer2;
        struct comedi_subdevice *sub_ai;        /*  ptr to AI subdevice */
@@ -361,7 +362,6 @@ struct pcl818_private {
        unsigned int ao_readback[2];
 };
 
-
 static const unsigned int muxonechan[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,     /*  used for gain list programming */
        0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff
 };
@@ -372,14 +372,18 @@ static const unsigned int muxonechan[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0
 /*
 ==============================================================================
 */
-static void setup_channel_list(struct comedi_device * dev, struct comedi_subdevice * s,
-       unsigned int *chanlist, unsigned int n_chan, unsigned int seglen);
-static int check_channel_list(struct comedi_device * dev, struct comedi_subdevice * s,
-       unsigned int *chanlist, unsigned int n_chan);
-
-static int pcl818_ai_cancel(struct comedi_device * dev, struct comedi_subdevice * s);
-static void start_pacer(struct comedi_device * dev, int mode, unsigned int divisor1,
-       unsigned int divisor2);
+static void setup_channel_list(struct comedi_device *dev,
+                              struct comedi_subdevice *s,
+                              unsigned int *chanlist, unsigned int n_chan,
+                              unsigned int seglen);
+static int check_channel_list(struct comedi_device *dev,
+                             struct comedi_subdevice *s,
+                             unsigned int *chanlist, unsigned int n_chan);
+
+static int pcl818_ai_cancel(struct comedi_device *dev,
+                           struct comedi_subdevice *s);
+static void start_pacer(struct comedi_device *dev, int mode,
+                       unsigned int divisor1, unsigned int divisor2);
 
 #ifdef unused
 static int set_rtc_irq_bit(unsigned char bit);
@@ -391,8 +395,9 @@ static int rtc_setfreq_irq(int freq);
 ==============================================================================
    ANALOG INPUT MODE0, 818 cards, slow version
 */
-static int pcl818_ai_insn_read(struct comedi_device * dev, struct comedi_subdevice * s,
-       struct comedi_insn * insn, unsigned int * data)
+static int pcl818_ai_insn_read(struct comedi_device *dev,
+                              struct comedi_subdevice *s,
+                              struct comedi_insn *insn, unsigned int *data)
 {
        int n;
        int timeout;
@@ -418,16 +423,16 @@ static int pcl818_ai_insn_read(struct comedi_device * dev, struct comedi_subdevi
                while (timeout--) {
                        if (inb(dev->iobase + PCL818_STATUS) & 0x10)
                                goto conv_finish;
-                       comedi_udelay(1);
+                       udelay(1);
                }
                comedi_error(dev, "A/D insn timeout");
                /* clear INT (conversion end) flag */
                outb(0, dev->iobase + PCL818_CLRINT);
                return -EIO;
 
-             conv_finish:
+conv_finish:
                data[n] = ((inb(dev->iobase + PCL818_AD_HI) << 4) |
-                       (inb(dev->iobase + PCL818_AD_LO) >> 4));
+                          (inb(dev->iobase + PCL818_AD_LO) >> 4));
        }
 
        return n;
@@ -438,8 +443,9 @@ static int pcl818_ai_insn_read(struct comedi_device * dev, struct comedi_subdevi
    ANALOG OUTPUT MODE0, 818 cards
    only one sample per call is supported
 */
-static int pcl818_ao_insn_read(struct comedi_device * dev, struct comedi_subdevice * s,
-       struct comedi_insn * insn, unsigned int * data)
+static int pcl818_ao_insn_read(struct comedi_device *dev,
+                              struct comedi_subdevice *s,
+                              struct comedi_insn *insn, unsigned int *data)
 {
        int n;
        int chan = CR_CHAN(insn->chanspec);
@@ -451,8 +457,9 @@ static int pcl818_ao_insn_read(struct comedi_device * dev, struct comedi_subdevi
        return n;
 }
 
-static int pcl818_ao_insn_write(struct comedi_device * dev, struct comedi_subdevice * s,
-       struct comedi_insn * insn, unsigned int * data)
+static int pcl818_ao_insn_write(struct comedi_device *dev,
+                               struct comedi_subdevice *s,
+                               struct comedi_insn *insn, unsigned int *data)
 {
        int n;
        int chan = CR_CHAN(insn->chanspec);
@@ -460,9 +467,9 @@ static int pcl818_ao_insn_write(struct comedi_device * dev, struct comedi_subdev
        for (n = 0; n < insn->n; n++) {
                devpriv->ao_readback[chan] = data[n];
                outb((data[n] & 0x000f) << 4, dev->iobase +
-                       (chan) ? PCL718_DA2_LO : PCL818_DA_LO);
+                    (chan ? PCL718_DA2_LO : PCL818_DA_LO));
                outb((data[n] & 0x0ff0) >> 4, dev->iobase +
-                       (chan) ? PCL718_DA2_HI : PCL818_DA_HI);
+                    (chan ? PCL718_DA2_HI : PCL818_DA_HI));
        }
 
        return n;
@@ -474,14 +481,15 @@ static int pcl818_ao_insn_write(struct comedi_device * dev, struct comedi_subdev
 
    only one sample per call is supported
 */
-static int pcl818_di_insn_bits(struct comedi_device * dev, struct comedi_subdevice * s,
-       struct comedi_insn * insn, unsigned int * data)
+static int pcl818_di_insn_bits(struct comedi_device *dev,
+                              struct comedi_subdevice *s,
+                              struct comedi_insn *insn, unsigned int *data)
 {
        if (insn->n != 2)
                return -EINVAL;
 
        data[1] = inb(dev->iobase + PCL818_DI_LO) |
-               (inb(dev->iobase + PCL818_DI_HI) << 8);
+           (inb(dev->iobase + PCL818_DI_HI) << 8);
 
        return 2;
 }
@@ -492,8 +500,9 @@ static int pcl818_di_insn_bits(struct comedi_device * dev, struct comedi_subdevi
 
    only one sample per call is supported
 */
-static int pcl818_do_insn_bits(struct comedi_device * dev, struct comedi_subdevice * s,
-       struct comedi_insn * insn, unsigned int * data)
+static int pcl818_do_insn_bits(struct comedi_device *dev,
+                              struct comedi_subdevice *s,
+                              struct comedi_insn *insn, unsigned int *data)
 {
        if (insn->n != 2)
                return -EINVAL;
@@ -524,7 +533,7 @@ static irqreturn_t interrupt_pcl818_ai_mode13_int(int irq, void *d)
        while (timeout--) {
                if (inb(dev->iobase + PCL818_STATUS) & 0x10)
                        goto conv_finish;
-               comedi_udelay(1);
+               udelay(1);
        }
        outb(0, dev->iobase + PCL818_STATUS);   /* clear INT request */
        comedi_error(dev, "A/D mode1/3 IRQ without DRDY!");
@@ -533,23 +542,23 @@ static irqreturn_t interrupt_pcl818_ai_mode13_int(int irq, void *d)
        comedi_event(dev, s);
        return IRQ_HANDLED;
 
-      conv_finish:
+conv_finish:
        low = inb(dev->iobase + PCL818_AD_LO);
        comedi_buf_put(s->async, ((inb(dev->iobase + PCL818_AD_HI) << 4) | (low >> 4)));        /*  get one sample */
        outb(0, dev->iobase + PCL818_CLRINT);   /* clear INT request */
 
        if ((low & 0xf) != devpriv->act_chanlist[devpriv->act_chanlist_pos]) {  /*  dropout! */
-               rt_printk
-                       ("comedi: A/D mode1/3 IRQ - channel dropout %x!=%x !\n",
-                       (low & 0xf),
-                       devpriv->act_chanlist[devpriv->act_chanlist_pos]);
+               printk
+                   ("comedi: A/D mode1/3 IRQ - channel dropout %x!=%x !\n",
+                    (low & 0xf),
+                    devpriv->act_chanlist[devpriv->act_chanlist_pos]);
                pcl818_ai_cancel(dev, s);
                s->async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR;
                comedi_event(dev, s);
                return IRQ_HANDLED;
        }
        if (s->async->cur_chan == 0) {
-               /*  rt_printk("E"); */
+               /*  printk("E"); */
                devpriv->ai_act_scan--;
        }
 
@@ -581,33 +590,33 @@ static irqreturn_t interrupt_pcl818_ai_mode13_dma(int irq, void *d)
                set_dma_mode(devpriv->dma, DMA_MODE_READ);
                flags = claim_dma_lock();
                set_dma_addr(devpriv->dma,
-                       devpriv->hwdmaptr[devpriv->next_dma_buf]);
+                            devpriv->hwdmaptr[devpriv->next_dma_buf]);
                if (devpriv->dma_runs_to_end || devpriv->neverending_ai) {
                        set_dma_count(devpriv->dma,
-                               devpriv->hwdmasize[devpriv->next_dma_buf]);
+                                     devpriv->hwdmasize[devpriv->
+                                                        next_dma_buf]);
                } else {
                        set_dma_count(devpriv->dma, devpriv->last_dma_run);
                }
                release_dma_lock(flags);
                enable_dma(devpriv->dma);
        }
-       rt_printk("comedi: A/D mode1/3 IRQ \n");
+       printk("comedi: A/D mode1/3 IRQ \n");
 
        devpriv->dma_runs_to_end--;
        outb(0, dev->iobase + PCL818_CLRINT);   /* clear INT request */
-       ptr = (short *) devpriv->dmabuf[1 - devpriv->next_dma_buf];
+       ptr = (short *)devpriv->dmabuf[1 - devpriv->next_dma_buf];
 
        len = devpriv->hwdmasize[0] >> 1;
        bufptr = 0;
 
        for (i = 0; i < len; i++) {
                if ((ptr[bufptr] & 0xf) != devpriv->act_chanlist[devpriv->act_chanlist_pos]) {  /*  dropout! */
-                       rt_printk
-                               ("comedi: A/D mode1/3 DMA - channel dropout %d(card)!=%d(chanlist) at %d !\n",
-                               (ptr[bufptr] & 0xf),
-                               devpriv->act_chanlist[devpriv->
-                                       act_chanlist_pos],
-                               devpriv->act_chanlist_pos);
+                       printk
+                           ("comedi: A/D mode1/3 DMA - channel dropout %d(card)!=%d(chanlist) at %d !\n",
+                            (ptr[bufptr] & 0xf),
+                            devpriv->act_chanlist[devpriv->act_chanlist_pos],
+                            devpriv->act_chanlist_pos);
                        pcl818_ai_cancel(dev, s);
                        s->async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR;
                        comedi_event(dev, s);
@@ -649,7 +658,7 @@ static irqreturn_t interrupt_pcl818_ai_mode13_dma_rtc(int irq, void *d)
        unsigned long tmp;
        unsigned int top1, top2, i, bufptr;
        long ofs_dats;
-       short *dmabuf = (short *) devpriv->dmabuf[0];
+       short *dmabuf = (short *)devpriv->dmabuf[0];
 
        /* outb(2,0x378); */
        switch (devpriv->ai_mode) {
@@ -657,7 +666,7 @@ static irqreturn_t interrupt_pcl818_ai_mode13_dma_rtc(int irq, void *d)
        case INT_TYPE_AI3_DMA_RTC:
                tmp = (CMOS_READ(RTC_INTR_FLAGS) & 0xF0);
                mod_timer(&devpriv->rtc_irq_timer,
-                       jiffies + HZ / devpriv->rtc_freq + 2 * HZ / 100);
+                         jiffies + HZ / devpriv->rtc_freq + 2 * HZ / 100);
 
                for (i = 0; i < 10; i++) {
                        top1 = get_dma_residue(devpriv->dma);
@@ -681,26 +690,26 @@ static irqreturn_t interrupt_pcl818_ai_mode13_dma_rtc(int irq, void *d)
 
                if (dmabuf[i] != MAGIC_DMA_WORD) {      /*  DMA overflow! */
                        comedi_error(dev, "A/D mode1/3 DMA buffer overflow!");
-                       /* rt_printk("I %d dmabuf[i] %d %d\n",i,dmabuf[i],devpriv->dmasamplsize); */
+                       /* printk("I %d dmabuf[i] %d %d\n",i,dmabuf[i],devpriv->dmasamplsize); */
                        pcl818_ai_cancel(dev, s);
                        s->async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR;
                        comedi_event(dev, s);
                        return IRQ_HANDLED;
                }
-               /* rt_printk("r %ld ",ofs_dats); */
+               /* printk("r %ld ",ofs_dats); */
 
                bufptr = devpriv->last_top_dma;
 
                for (i = 0; i < ofs_dats; i++) {
                        if ((dmabuf[bufptr] & 0xf) != devpriv->act_chanlist[devpriv->act_chanlist_pos]) {       /*  dropout! */
-                               rt_printk
-                                       ("comedi: A/D mode1/3 DMA - channel dropout %d!=%d !\n",
-                                       (dmabuf[bufptr] & 0xf),
-                                       devpriv->act_chanlist[devpriv->
-                                               act_chanlist_pos]);
+                               printk
+                                   ("comedi: A/D mode1/3 DMA - channel dropout %d!=%d !\n",
+                                    (dmabuf[bufptr] & 0xf),
+                                    devpriv->
+                                    act_chanlist[devpriv->act_chanlist_pos]);
                                pcl818_ai_cancel(dev, s);
                                s->async->events |=
-                                       COMEDI_CB_EOA | COMEDI_CB_ERROR;
+                                   COMEDI_CB_EOA | COMEDI_CB_ERROR;
                                comedi_event(dev, s);
                                return IRQ_HANDLED;
                        }
@@ -775,11 +784,10 @@ static irqreturn_t interrupt_pcl818_ai_mode13_fifo(int irq, void *d)
        for (i = 0; i < len; i++) {
                lo = inb(dev->iobase + PCL818_FI_DATALO);
                if ((lo & 0xf) != devpriv->act_chanlist[devpriv->act_chanlist_pos]) {   /*  dropout! */
-                       rt_printk
-                               ("comedi: A/D mode1/3 FIFO - channel dropout %d!=%d !\n",
-                               (lo & 0xf),
-                               devpriv->act_chanlist[devpriv->
-                                       act_chanlist_pos]);
+                       printk
+                           ("comedi: A/D mode1/3 FIFO - channel dropout %d!=%d !\n",
+                            (lo & 0xf),
+                            devpriv->act_chanlist[devpriv->act_chanlist_pos]);
                        pcl818_ai_cancel(dev, s);
                        s->async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR;
                        comedi_event(dev, s);
@@ -818,7 +826,28 @@ static irqreturn_t interrupt_pcl818(int irq, void *d)
                comedi_error(dev, "premature interrupt");
                return IRQ_HANDLED;
        }
-       /* rt_printk("I\n"); */
+       /* printk("I\n"); */
+
+       if (devpriv->irq_blocked && devpriv->irq_was_now_closed) {
+               if ((devpriv->neverending_ai || (!devpriv->neverending_ai &&
+                                                devpriv->ai_act_scan > 0)) &&
+                   (devpriv->ai_mode == INT_TYPE_AI1_DMA ||
+                    devpriv->ai_mode == INT_TYPE_AI3_DMA)) {
+                       /* The cleanup from ai_cancel() has been delayed
+                          until now because the card doesn't seem to like
+                          being reprogrammed while a DMA transfer is in
+                          progress.
+                        */
+                       struct comedi_subdevice *s = dev->subdevices + 0;
+                       devpriv->ai_act_scan = 0;
+                       devpriv->neverending_ai = 0;
+                       pcl818_ai_cancel(dev, s);
+               }
+
+               outb(0, dev->iobase + PCL818_CLRINT);   /* clear INT request */
+
+               return IRQ_HANDLED;
+       }
 
        switch (devpriv->ai_mode) {
        case INT_TYPE_AI1_DMA:
@@ -842,26 +871,7 @@ static irqreturn_t interrupt_pcl818(int irq, void *d)
        outb(0, dev->iobase + PCL818_CLRINT);   /* clear INT request */
 
        if ((!dev->irq) || (!devpriv->irq_free) || (!devpriv->irq_blocked)
-               || (!devpriv->ai_mode)) {
-               if (devpriv->irq_was_now_closed) {
-                       if (devpriv->neverending_ai &&
-                               (devpriv->ai_mode == INT_TYPE_AI1_DMA
-                                       || devpriv->ai_mode ==
-                                       INT_TYPE_AI3_DMA)) {
-                               /* we had neverending ai but ai_cancel() has been called
-                                  the cleanup from ai_cancel() has been delayed until know
-                                  because the card doesn't seem to like being reprogrammed
-                                  while a DMA transfer is in progress
-                                */
-                               struct comedi_subdevice *s = dev->subdevices + 0;
-                               devpriv->ai_mode = devpriv->irq_was_now_closed;
-                               devpriv->irq_was_now_closed = 0;
-                               devpriv->neverending_ai = 0;
-                               pcl818_ai_cancel(dev, s);
-                       }
-                       devpriv->irq_was_now_closed = 0;
-                       return IRQ_HANDLED;
-               }
+           || (!devpriv->ai_mode)) {
                comedi_error(dev, "bad IRQ!");
                return IRQ_NONE;
        }
@@ -874,13 +884,13 @@ static irqreturn_t interrupt_pcl818(int irq, void *d)
 ==============================================================================
    ANALOG INPUT MODE 1 or 3 DMA , 818 cards
 */
-static void pcl818_ai_mode13dma_int(int mode, struct comedi_device * dev,
-       struct comedi_subdevice * s)
+static void pcl818_ai_mode13dma_int(int mode, struct comedi_device *dev,
+                                   struct comedi_subdevice *s)
 {
        unsigned int flags;
        unsigned int bytes;
 
-       rt_printk("mode13dma_int, mode: %d\n", mode);
+       printk("mode13dma_int, mode: %d\n", mode);
        disable_dma(devpriv->dma);      /*  disable dma */
        bytes = devpriv->hwdmasize[0];
        if (!devpriv->neverending_ai) {
@@ -915,8 +925,8 @@ static void pcl818_ai_mode13dma_int(int mode, struct comedi_device * dev,
 ==============================================================================
    ANALOG INPUT MODE 1 or 3 DMA rtc, 818 cards
 */
-static void pcl818_ai_mode13dma_rtc(int mode, struct comedi_device * dev,
-       struct comedi_subdevice * s)
+static void pcl818_ai_mode13dma_rtc(int mode, struct comedi_device *dev,
+                                   struct comedi_subdevice *s)
 {
        unsigned int flags;
        short *pole;
@@ -929,13 +939,13 @@ static void pcl818_ai_mode13dma_rtc(int mode, struct comedi_device * dev,
        release_dma_lock(flags);
        enable_dma(devpriv->dma);
        devpriv->last_top_dma = 0;      /* devpriv->hwdmasize[0]; */
-       pole = (short *) devpriv->dmabuf[0];
+       pole = (short *)devpriv->dmabuf[0];
        devpriv->dmasamplsize = devpriv->hwdmasize[0] / 2;
        pole[devpriv->dmasamplsize - 1] = MAGIC_DMA_WORD;
 #ifdef unused
        devpriv->rtc_freq = rtc_setfreq_irq(2048);
        devpriv->rtc_irq_timer.expires =
-               jiffies + HZ / devpriv->rtc_freq + 2 * HZ / 100;
+           jiffies + HZ / devpriv->rtc_freq + 2 * HZ / 100;
        devpriv->rtc_irq_timer.data = (unsigned long)dev;
        devpriv->rtc_irq_timer.function = rtc_dropped_irq;
 
@@ -956,14 +966,14 @@ static void pcl818_ai_mode13dma_rtc(int mode, struct comedi_device * dev,
 ==============================================================================
    ANALOG INPUT MODE 1 or 3, 818 cards
 */
-static int pcl818_ai_cmd_mode(int mode, struct comedi_device * dev,
-       struct comedi_subdevice * s)
+static int pcl818_ai_cmd_mode(int mode, struct comedi_device *dev,
+                             struct comedi_subdevice *s)
 {
        struct comedi_cmd *cmd = &s->async->cmd;
        int divisor1, divisor2;
        unsigned int seglen;
 
-       rt_printk("pcl818_ai_cmd_mode()\n");
+       printk("pcl818_ai_cmd_mode()\n");
        if ((!dev->irq) && (!devpriv->dma_rtc)) {
                comedi_error(dev, "IRQ not defined!");
                return -EINVAL;
@@ -975,13 +985,13 @@ static int pcl818_ai_cmd_mode(int mode, struct comedi_device * dev,
        start_pacer(dev, -1, 0, 0);     /*  stop pacer */
 
        seglen = check_channel_list(dev, s, devpriv->ai_chanlist,
-               devpriv->ai_n_chan);
+                                   devpriv->ai_n_chan);
        if (seglen < 1)
                return -EINVAL;
        setup_channel_list(dev, s, devpriv->ai_chanlist,
-               devpriv->ai_n_chan, seglen);
+                          devpriv->ai_n_chan, seglen);
 
-       comedi_udelay(1);
+       udelay(1);
 
        devpriv->ai_act_scan = devpriv->ai_scans;
        devpriv->ai_act_chan = 0;
@@ -996,7 +1006,8 @@ static int pcl818_ai_cmd_mode(int mode, struct comedi_device * dev,
 
        if (mode == 1) {
                i8253_cascade_ns_to_timer(devpriv->i8253_osc_base, &divisor1,
-                       &divisor2, &cmd->convert_arg, TRIG_ROUND_NEAREST);
+                                         &divisor2, &cmd->convert_arg,
+                                         TRIG_ROUND_NEAREST);
                if (divisor1 == 1) {    /* PCL718/818 crash if any divisor is set to 1 */
                        divisor1 = 2;
                        divisor2 /= 2;
@@ -1028,15 +1039,17 @@ static int pcl818_ai_cmd_mode(int mode, struct comedi_device * dev,
        case 0:
                if (!devpriv->usefifo) {
                        /* IRQ */
-                       /* rt_printk("IRQ\n"); */
+                       /* printk("IRQ\n"); */
                        if (mode == 1) {
                                devpriv->ai_mode = INT_TYPE_AI1_INT;
                                /* Pacer+IRQ */
-                               outb(0x83 | (dev->irq << 4), dev->iobase + PCL818_CONTROL);
+                               outb(0x83 | (dev->irq << 4),
+                                    dev->iobase + PCL818_CONTROL);
                        } else {
                                devpriv->ai_mode = INT_TYPE_AI3_INT;
                                /* Ext trig+IRQ */
-                               outb(0x82 | (dev->irq << 4), dev->iobase + PCL818_CONTROL);
+                               outb(0x82 | (dev->irq << 4),
+                                    dev->iobase + PCL818_CONTROL);
                        }
                } else {
                        /* FIFO */
@@ -1063,7 +1076,7 @@ static int pcl818_ai_cmd_mode(int mode, struct comedi_device * dev,
                break;
        }
 #endif
-       rt_printk("pcl818_ai_cmd_mode() end\n");
+       printk("pcl818_ai_cmd_mode() end\n");
        return 0;
 }
 
@@ -1073,8 +1086,8 @@ static int pcl818_ai_cmd_mode(int mode, struct comedi_device * dev,
    ANALOG OUTPUT MODE 1 or 3, 818 cards
 */
 #ifdef PCL818_MODE13_AO
-static int pcl818_ao_mode13(int mode, struct comedi_device * dev, struct comedi_subdevice * s,
-       comedi_trig * it)
+static int pcl818_ao_mode13(int mode, struct comedi_device *dev,
+                           struct comedi_subdevice *s, comedi_trig * it)
 {
        int divisor1, divisor2;
 
@@ -1097,7 +1110,8 @@ static int pcl818_ao_mode13(int mode, struct comedi_device * dev, struct comedi_
 
        if (mode == 1) {
                i8253_cascade_ns_to_timer(devpriv->i8253_osc_base, &divisor1,
-                       &divisor2, &it->trigvar, TRIG_ROUND_NEAREST);
+                                         &divisor2, &it->trigvar,
+                                         TRIG_ROUND_NEAREST);
                if (divisor1 == 1) {    /* PCL818 crash if any divisor is set to 1 */
                        divisor1 = 2;
                        divisor2 /= 2;
@@ -1126,8 +1140,8 @@ static int pcl818_ao_mode13(int mode, struct comedi_device * dev, struct comedi_
 ==============================================================================
    ANALOG OUTPUT MODE 1, 818 cards
 */
-static int pcl818_ao_mode1(struct comedi_device * dev, struct comedi_subdevice * s,
-       comedi_trig * it)
+static int pcl818_ao_mode1(struct comedi_device *dev,
+                          struct comedi_subdevice *s, comedi_trig * it)
 {
        return pcl818_ao_mode13(1, dev, s, it);
 }
@@ -1136,8 +1150,8 @@ static int pcl818_ao_mode1(struct comedi_device * dev, struct comedi_subdevice *
 ==============================================================================
    ANALOG OUTPUT MODE 3, 818 cards
 */
-static int pcl818_ao_mode3(struct comedi_device * dev, struct comedi_subdevice * s,
-       comedi_trig * it)
+static int pcl818_ao_mode3(struct comedi_device *dev,
+                          struct comedi_subdevice *s, comedi_trig * it)
 {
        return pcl818_ao_mode13(3, dev, s, it);
 }
@@ -1148,12 +1162,12 @@ static int pcl818_ao_mode3(struct comedi_device * dev, struct comedi_subdevice *
 ==============================================================================
  Start/stop pacer onboard pacer
 */
-static void start_pacer(struct comedi_device * dev, int mode, unsigned int divisor1,
-       unsigned int divisor2)
+static void start_pacer(struct comedi_device *dev, int mode,
+                       unsigned int divisor1, unsigned int divisor2)
 {
        outb(0xb4, dev->iobase + PCL818_CTRCTL);
        outb(0x74, dev->iobase + PCL818_CTRCTL);
-       comedi_udelay(1);
+       udelay(1);
 
        if (mode == 1) {
                outb(divisor2 & 0xff, dev->iobase + PCL818_CTR2);
@@ -1168,8 +1182,9 @@ static void start_pacer(struct comedi_device * dev, int mode, unsigned int divis
  Check if channel list from user is builded correctly
  If it's ok, then program scan/gain logic
 */
-static int check_channel_list(struct comedi_device * dev, struct comedi_subdevice * s,
-       unsigned int *chanlist, unsigned int n_chan)
+static int check_channel_list(struct comedi_device *dev,
+                             struct comedi_subdevice *s,
+                             unsigned int *chanlist, unsigned int n_chan)
 {
        unsigned int chansegment[16];
        unsigned int i, nowmustbechan, seglen, segpos;
@@ -1186,7 +1201,7 @@ static int check_channel_list(struct comedi_device * dev, struct comedi_subdevic
                /*  build part of chanlist */
                for (i = 1, seglen = 1; i < n_chan; i++, seglen++) {
 
-                       /* rt_printk("%d. %d * %d\n",i,
+                       /* printk("%d. %d * %d\n",i,
                         * CR_CHAN(it->chanlist[i]),CR_RANGE(it->chanlist[i]));*/
 
                        /* we detect loop, this must by finish */
@@ -1194,12 +1209,12 @@ static int check_channel_list(struct comedi_device * dev, struct comedi_subdevic
                        if (chanlist[0] == chanlist[i])
                                break;
                        nowmustbechan =
-                               (CR_CHAN(chansegment[i - 1]) + 1) % s->n_chan;
+                           (CR_CHAN(chansegment[i - 1]) + 1) % s->n_chan;
                        if (nowmustbechan != CR_CHAN(chanlist[i])) {    /*  channel list isn't continous :-( */
-                               rt_printk
-                                       ("comedi%d: pcl818: channel list must be continous! chanlist[%i]=%d but must be %d or %d!\n",
-                                       dev->minor, i, CR_CHAN(chanlist[i]),
-                                       nowmustbechan, CR_CHAN(chanlist[0]));
+                               printk
+                                   ("comedi%d: pcl818: channel list must be continous! chanlist[%i]=%d but must be %d or %d!\n",
+                                    dev->minor, i, CR_CHAN(chanlist[i]),
+                                    nowmustbechan, CR_CHAN(chanlist[0]));
                                return 0;
                        }
                        /*  well, this is next correct channel in list */
@@ -1208,28 +1223,30 @@ static int check_channel_list(struct comedi_device * dev, struct comedi_subdevic
 
                /*  check whole chanlist */
                for (i = 0, segpos = 0; i < n_chan; i++) {
-                       /* rt_printk("%d %d=%d %d\n",CR_CHAN(chansegment[i%seglen]),CR_RANGE(chansegment[i%seglen]),CR_CHAN(it->chanlist[i]),CR_RANGE(it->chanlist[i])); */
+                       /* printk("%d %d=%d %d\n",CR_CHAN(chansegment[i%seglen]),CR_RANGE(chansegment[i%seglen]),CR_CHAN(it->chanlist[i]),CR_RANGE(it->chanlist[i])); */
                        if (chanlist[i] != chansegment[i % seglen]) {
-                               rt_printk
-                                       ("comedi%d: pcl818: bad channel or range number! chanlist[%i]=%d,%d,%d and not %d,%d,%d!\n",
-                                       dev->minor, i, CR_CHAN(chansegment[i]),
-                                       CR_RANGE(chansegment[i]),
-                                       CR_AREF(chansegment[i]),
-                                       CR_CHAN(chanlist[i % seglen]),
-                                       CR_RANGE(chanlist[i % seglen]),
-                                       CR_AREF(chansegment[i % seglen]));
+                               printk
+                                   ("comedi%d: pcl818: bad channel or range number! chanlist[%i]=%d,%d,%d and not %d,%d,%d!\n",
+                                    dev->minor, i, CR_CHAN(chansegment[i]),
+                                    CR_RANGE(chansegment[i]),
+                                    CR_AREF(chansegment[i]),
+                                    CR_CHAN(chanlist[i % seglen]),
+                                    CR_RANGE(chanlist[i % seglen]),
+                                    CR_AREF(chansegment[i % seglen]));
                                return 0;       /*  chan/gain list is strange */
                        }
                }
        } else {
                seglen = 1;
        }
-       rt_printk("check_channel_list: seglen %d\n", seglen);
+       printk("check_channel_list: seglen %d\n", seglen);
        return seglen;
 }
 
-static void setup_channel_list(struct comedi_device * dev, struct comedi_subdevice * s,
-       unsigned int *chanlist, unsigned int n_chan, unsigned int seglen)
+static void setup_channel_list(struct comedi_device *dev,
+                              struct comedi_subdevice *s,
+                              unsigned int *chanlist, unsigned int n_chan,
+                              unsigned int seglen)
 {
        int i;
 
@@ -1242,11 +1259,12 @@ static void setup_channel_list(struct comedi_device * dev, struct comedi_subdevi
                outb(CR_RANGE(chanlist[i]), dev->iobase + PCL818_RANGE);        /* select gain */
        }
 
-       comedi_udelay(1);
+       udelay(1);
 
        /* select channel interval to scan */
        outb(devpriv->act_chanlist[0] | (devpriv->act_chanlist[seglen -
-                               1] << 4), dev->iobase + PCL818_MUX);
+                                                              1] << 4),
+            dev->iobase + PCL818_MUX);
 }
 
 /*
@@ -1265,8 +1283,8 @@ static int check_single_ended(unsigned int port)
 /*
 ==============================================================================
 */
-static int ai_cmdtest(struct comedi_device * dev, struct comedi_subdevice * s,
-       struct comedi_cmd * cmd)
+static int ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s,
+                     struct comedi_cmd *cmd)
 {
        int err = 0;
        int tmp, divisor1, divisor2;
@@ -1384,8 +1402,8 @@ static int ai_cmdtest(struct comedi_device * dev, struct comedi_subdevice * s,
        if (cmd->convert_src == TRIG_TIMER) {
                tmp = cmd->convert_arg;
                i8253_cascade_ns_to_timer(devpriv->i8253_osc_base, &divisor1,
-                       &divisor2, &cmd->convert_arg,
-                       cmd->flags & TRIG_ROUND_MASK);
+                                         &divisor2, &cmd->convert_arg,
+                                         cmd->flags & TRIG_ROUND_MASK);
                if (cmd->convert_arg < this_board->ns_min)
                        cmd->convert_arg = this_board->ns_min;
                if (tmp != cmd->convert_arg)
@@ -1400,7 +1418,7 @@ static int ai_cmdtest(struct comedi_device * dev, struct comedi_subdevice * s,
 
        if (cmd->chanlist) {
                if (!check_channel_list(dev, s, cmd->chanlist,
-                               cmd->chanlist_len))
+                                       cmd->chanlist_len))
                        return 5;       /*  incorrect channels list */
        }
 
@@ -1410,12 +1428,12 @@ static int ai_cmdtest(struct comedi_device * dev, struct comedi_subdevice * s,
 /*
 ==============================================================================
 */
-static int ai_cmd(struct comedi_device * dev, struct comedi_subdevice * s)
+static int ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
 {
        struct comedi_cmd *cmd = &s->async->cmd;
        int retval;
 
-       rt_printk("pcl818_ai_cmd()\n");
+       printk("pcl818_ai_cmd()\n");
        devpriv->ai_n_chan = cmd->chanlist_len;
        devpriv->ai_chanlist = cmd->chanlist;
        devpriv->ai_flags = cmd->flags;
@@ -1434,7 +1452,7 @@ static int ai_cmd(struct comedi_device * dev, struct comedi_subdevice * s)
                if (cmd->convert_src == TRIG_TIMER) {   /*  mode 1 */
                        devpriv->ai_timer1 = cmd->convert_arg;
                        retval = pcl818_ai_cmd_mode(1, dev, s);
-                       rt_printk("pcl818_ai_cmd() end\n");
+                       printk("pcl818_ai_cmd() end\n");
                        return retval;
                }
                if (cmd->convert_src == TRIG_EXT) {     /*  mode 3 */
@@ -1449,14 +1467,14 @@ static int ai_cmd(struct comedi_device * dev, struct comedi_subdevice * s)
 ==============================================================================
  cancel any mode 1-4 AI
 */
-static int pcl818_ai_cancel(struct comedi_device * dev, struct comedi_subdevice * s)
+static int pcl818_ai_cancel(struct comedi_device *dev,
+                           struct comedi_subdevice *s)
 {
        if (devpriv->irq_blocked > 0) {
-               rt_printk("pcl818_ai_cancel()\n");
-               devpriv->irq_was_now_closed = devpriv->ai_mode;
-               devpriv->ai_mode = 0;
+               printk("pcl818_ai_cancel()\n");
+               devpriv->irq_was_now_closed = 1;
 
-               switch (devpriv->irq_was_now_closed) {
+               switch (devpriv->ai_mode) {
 #ifdef unused
                case INT_TYPE_AI1_DMA_RTC:
                case INT_TYPE_AI3_DMA_RTC:
@@ -1465,7 +1483,9 @@ static int pcl818_ai_cancel(struct comedi_device * dev, struct comedi_subdevice
 #endif
                case INT_TYPE_AI1_DMA:
                case INT_TYPE_AI3_DMA:
-                       if (devpriv->neverending_ai) {
+                       if (devpriv->neverending_ai ||
+                           (!devpriv->neverending_ai &&
+                            devpriv->ai_act_scan > 0)) {
                                /* wait for running dma transfer to end, do cleanup in interrupt */
                                goto end;
                        }
@@ -1479,7 +1499,7 @@ static int pcl818_ai_cancel(struct comedi_device * dev, struct comedi_subdevice
                case INT_TYPE_AO3_INT:
 #endif
                        outb(inb(dev->iobase + PCL818_CONTROL) & 0x73, dev->iobase + PCL818_CONTROL);   /* Stop A/D */
-                       comedi_udelay(1);
+                       udelay(1);
                        start_pacer(dev, -1, 0, 0);
                        outb(0, dev->iobase + PCL818_AD_LO);
                        inb(dev->iobase + PCL818_AD_LO);
@@ -1494,12 +1514,14 @@ static int pcl818_ai_cancel(struct comedi_device * dev, struct comedi_subdevice
                        devpriv->irq_blocked = 0;
                        devpriv->last_int_sub = s;
                        devpriv->neverending_ai = 0;
+                       devpriv->ai_mode = 0;
+                       devpriv->irq_was_now_closed = 0;
                        break;
                }
        }
 
-      end:
-       rt_printk("pcl818_ai_cancel() end\n");
+end:
+       printk("pcl818_ai_cancel() end\n");
        return 0;
 }
 
@@ -1510,17 +1532,17 @@ static int pcl818_ai_cancel(struct comedi_device * dev, struct comedi_subdevice
 static int pcl818_check(unsigned long iobase)
 {
        outb(0x00, iobase + PCL818_MUX);
-       comedi_udelay(1);
+       udelay(1);
        if (inb(iobase + PCL818_MUX) != 0x00)
                return 1;       /* there isn't card */
        outb(0x55, iobase + PCL818_MUX);
-       comedi_udelay(1);
+       udelay(1);
        if (inb(iobase + PCL818_MUX) != 0x55)
                return 1;       /* there isn't card */
        outb(0x00, iobase + PCL818_MUX);
-       comedi_udelay(1);
+       udelay(1);
        outb(0x18, iobase + PCL818_CONTROL);
-       comedi_udelay(1);
+       udelay(1);
        if (inb(iobase + PCL818_CONTROL) != 0x18)
                return 1;       /* there isn't card */
        return 0;               /*  ok, card exist */
@@ -1530,7 +1552,7 @@ static int pcl818_check(unsigned long iobase)
 ==============================================================================
  reset whole PCL-818 cards
 */
-static void pcl818_reset(struct comedi_device * dev)
+static void pcl818_reset(struct comedi_device *dev)
 {
        if (devpriv->usefifo) { /*  FIFO shutdown */
                outb(0, dev->iobase + PCL818_FI_INTCLR);
@@ -1539,10 +1561,10 @@ static void pcl818_reset(struct comedi_device * dev)
        }
        outb(0, dev->iobase + PCL818_DA_LO);    /*  DAC=0V */
        outb(0, dev->iobase + PCL818_DA_HI);
-       comedi_udelay(1);
+       udelay(1);
        outb(0, dev->iobase + PCL818_DO_HI);    /*  DO=$0000 */
        outb(0, dev->iobase + PCL818_DO_LO);
-       comedi_udelay(1);
+       udelay(1);
        outb(0, dev->iobase + PCL818_CONTROL);
        outb(0, dev->iobase + PCL818_CNTENABLE);
        outb(0, dev->iobase + PCL818_MUX);
@@ -1607,7 +1629,7 @@ static void rtc_dropped_irq(unsigned long data)
        case INT_TYPE_AI1_DMA_RTC:
        case INT_TYPE_AI3_DMA_RTC:
                mod_timer(&devpriv->rtc_irq_timer,
-                       jiffies + HZ / devpriv->rtc_freq + 2 * HZ / 100);
+                         jiffies + HZ / devpriv->rtc_freq + 2 * HZ / 100);
                save_flags(flags);
                cli();
                tmp = (CMOS_READ(RTC_INTR_FLAGS) & 0xF0);       /* restart */
@@ -1651,9 +1673,9 @@ static int rtc_setfreq_irq(int freq)
 ==============================================================================
   Free any resources that we have claimed
 */
-static void free_resources(struct comedi_device * dev)
+static void free_resources(struct comedi_device *dev)
 {
-       /* rt_printk("free_resource()\n"); */
+       /* printk("free_resource()\n"); */
        if (dev->private) {
                pcl818_ai_cancel(dev, devpriv->sub_ai);
                pcl818_reset(dev);
@@ -1665,11 +1687,11 @@ static void free_resources(struct comedi_device * dev)
                        free_pages(devpriv->dmabuf[1], devpriv->dmapages[1]);
 #ifdef unused
                if (devpriv->rtc_irq)
-                       comedi_free_irq(devpriv->rtc_irq, dev);
+                       free_irq(devpriv->rtc_irq, dev);
                if ((devpriv->dma_rtc) && (RTC_lock == 1)) {
                        if (devpriv->rtc_iobase)
                                release_region(devpriv->rtc_iobase,
-                                       devpriv->rtc_iosize);
+                                              devpriv->rtc_iosize);
                }
                if (devpriv->dma_rtc)
                        RTC_lock--;
@@ -1680,7 +1702,7 @@ static void free_resources(struct comedi_device * dev)
                free_irq(dev->irq, dev);
        if (dev->iobase)
                release_region(dev->iobase, devpriv->io_range);
-       /* rt_printk("free_resource() end\n"); */
+       /* printk("free_resource() end\n"); */
 }
 
 /*
@@ -1689,7 +1711,7 @@ static void free_resources(struct comedi_device * dev)
    Initialization
 
 */
-static int pcl818_attach(struct comedi_device * dev, struct comedi_devconfig * it)
+static int pcl818_attach(struct comedi_device *dev, struct comedi_devconfig *it)
 {
        int ret;
        unsigned long iobase;
@@ -1698,27 +1720,28 @@ static int pcl818_attach(struct comedi_device * dev, struct comedi_devconfig * i
        unsigned long pages;
        struct comedi_subdevice *s;
 
-       if ((ret = alloc_private(dev, sizeof(struct pcl818_private))) < 0)
+       ret = alloc_private(dev, sizeof(struct pcl818_private));
+       if (ret < 0)
                return ret;     /* Can't alloc mem */
 
        /* claim our I/O space */
        iobase = it->options[0];
        printk("comedi%d: pcl818:  board=%s, ioport=0x%03lx",
-               dev->minor, this_board->name, iobase);
+              dev->minor, this_board->name, iobase);
        devpriv->io_range = this_board->io_range;
        if ((this_board->fifo) && (it->options[2] == -1)) {     /*  we've board with FIFO and we want to use FIFO */
                devpriv->io_range = PCLx1xFIFO_RANGE;
                devpriv->usefifo = 1;
        }
        if (!request_region(iobase, devpriv->io_range, "pcl818")) {
-               rt_printk("I/O port conflict\n");
+               printk("I/O port conflict\n");
                return -EIO;
        }
 
        dev->iobase = iobase;
 
        if (pcl818_check(iobase)) {
-               rt_printk(", I can't detect board. FAIL!\n");
+               printk(", I can't detect board. FAIL!\n");
                return -EIO;
        }
 
@@ -1730,19 +1753,19 @@ static int pcl818_attach(struct comedi_device * dev, struct comedi_devconfig * i
                irq = it->options[1];
                if (irq) {      /* we want to use IRQ */
                        if (((1 << irq) & this_board->IRQbits) == 0) {
-                               rt_printk
-                                       (", IRQ %u is out of allowed range, DISABLING IT",
-                                       irq);
+                               printk
+                                   (", IRQ %u is out of allowed range, DISABLING IT",
+                                    irq);
                                irq = 0;        /* Bad IRQ */
                        } else {
-                               if (comedi_request_irq(irq, interrupt_pcl818, 0,
-                                               "pcl818", dev)) {
-                                       rt_printk
-                                               (", unable to allocate IRQ %u, DISABLING IT",
-                                               irq);
+                               if (request_irq
+                                   (irq, interrupt_pcl818, 0, "pcl818", dev)) {
+                                       printk
+                                           (", unable to allocate IRQ %u, DISABLING IT",
+                                            irq);
                                        irq = 0;        /* Can't use IRQ */
                                } else {
-                                       rt_printk(", irq=%u", irq);
+                                       printk(", irq=%u", irq);
                                }
                        }
                }
@@ -1764,31 +1787,30 @@ static int pcl818_attach(struct comedi_device * dev, struct comedi_devconfig * i
        if (it->options[2] > 0) {       /*  we want to use DMA */
                if (RTC_lock == 0) {
                        if (!request_region(RTC_PORT(0), RTC_IO_EXTENT,
-                                       "pcl818 (RTC)"))
+                                           "pcl818 (RTC)"))
                                goto no_rtc;
                }
                devpriv->rtc_iobase = RTC_PORT(0);
                devpriv->rtc_iosize = RTC_IO_EXTENT;
                RTC_lock++;
-               if (!comedi_request_irq(RTC_IRQ,
-                               interrupt_pcl818_ai_mode13_dma_rtc, 0,
-                               "pcl818 DMA (RTC)", dev)) {
+               if (!request_irq(RTC_IRQ, interrupt_pcl818_ai_mode13_dma_rtc, 0,
+                                "pcl818 DMA (RTC)", dev)) {
                        devpriv->dma_rtc = 1;
                        devpriv->rtc_irq = RTC_IRQ;
-                       rt_printk(", dma_irq=%u", devpriv->rtc_irq);
+                       printk(", dma_irq=%u", devpriv->rtc_irq);
                } else {
                        RTC_lock--;
                        if (RTC_lock == 0) {
                                if (devpriv->rtc_iobase)
                                        release_region(devpriv->rtc_iobase,
-                                               devpriv->rtc_iosize);
+                                                      devpriv->rtc_iosize);
                        }
                        devpriv->rtc_iobase = 0;
                        devpriv->rtc_iosize = 0;
                }
        }
 
-      no_rtc:
+no_rtc:
 #endif
        /* grab our DMA */
        dma = 0;
@@ -1800,44 +1822,45 @@ static int pcl818_attach(struct comedi_device * dev, struct comedi_devconfig * i
                if (dma < 1)
                        goto no_dma;    /* DMA disabled */
                if (((1 << dma) & this_board->DMAbits) == 0) {
-                       rt_printk(", DMA is out of allowed range, FAIL!\n");
+                       printk(", DMA is out of allowed range, FAIL!\n");
                        return -EINVAL; /* Bad DMA */
                }
                ret = request_dma(dma, "pcl818");
                if (ret) {
-                       rt_printk(", unable to allocate DMA %u, FAIL!\n", dma);
+                       printk(", unable to allocate DMA %u, FAIL!\n", dma);
                        return -EBUSY;  /* DMA isn't free */
                }
                devpriv->dma = dma;
-               rt_printk(", dma=%u", dma);
+               printk(", dma=%u", dma);
                pages = 2;      /* we need 16KB */
                devpriv->dmabuf[0] = __get_dma_pages(GFP_KERNEL, pages);
                if (!devpriv->dmabuf[0]) {
-                       rt_printk(", unable to allocate DMA buffer, FAIL!\n");
+                       printk(", unable to allocate DMA buffer, FAIL!\n");
                        /* maybe experiment with try_to_free_pages() will help .... */
                        return -EBUSY;  /* no buffer :-( */
                }
                devpriv->dmapages[0] = pages;
                devpriv->hwdmaptr[0] = virt_to_bus((void *)devpriv->dmabuf[0]);
                devpriv->hwdmasize[0] = (1 << pages) * PAGE_SIZE;
-               /* rt_printk("%d %d %ld, ",devpriv->dmapages[0],devpriv->hwdmasize[0],PAGE_SIZE); */
+               /* printk("%d %d %ld, ",devpriv->dmapages[0],devpriv->hwdmasize[0],PAGE_SIZE); */
                if (devpriv->dma_rtc == 0) {    /*  we must do duble buff :-( */
                        devpriv->dmabuf[1] = __get_dma_pages(GFP_KERNEL, pages);
                        if (!devpriv->dmabuf[1]) {
-                               rt_printk
-                                       (", unable to allocate DMA buffer, FAIL!\n");
+                               printk
+                                   (", unable to allocate DMA buffer, FAIL!\n");
                                return -EBUSY;
                        }
                        devpriv->dmapages[1] = pages;
                        devpriv->hwdmaptr[1] =
-                               virt_to_bus((void *)devpriv->dmabuf[1]);
+                           virt_to_bus((void *)devpriv->dmabuf[1]);
                        devpriv->hwdmasize[1] = (1 << pages) * PAGE_SIZE;
                }
        }
 
-      no_dma:
+no_dma:
 
-       if ((ret = alloc_subdevices(dev, 4)) < 0)
+       ret = alloc_subdevices(dev, 4);
+       if (ret < 0)
                return ret;
 
        s = dev->subdevices + 0;
@@ -1982,7 +2005,7 @@ static int pcl818_attach(struct comedi_device * dev, struct comedi_devconfig * i
 
        pcl818_reset(dev);
 
-       rt_printk("\n");
+       printk("\n");
 
        return 0;
 }
@@ -1991,9 +2014,9 @@ static int pcl818_attach(struct comedi_device * dev, struct comedi_devconfig * i
 ==============================================================================
   Removes device
  */
-static int pcl818_detach(struct comedi_device * dev)
+static int pcl818_detach(struct comedi_device *dev)
 {
-       /*   rt_printk("comedi%d: pcl818: remove\n", dev->minor); */
+       /*   printk("comedi%d: pcl818: remove\n", dev->minor); */
        free_resources(dev);
        return 0;
 }