staging: comedi: rtd520: remove RtdPacerStop macro
[linux-2.6-block.git] / drivers / staging / comedi / drivers / rtd520.c
index 6ff1fa0fd5de2ce1767950e537ef54a76c5c623c..5fca77b423bc77ab6b16d3f558e9bae8e1634ac8 100644 (file)
@@ -406,93 +406,6 @@ struct rtdPrivate {
 
 /* Macros to access registers */
 
-/* Reset board */
-#define RtdResetBoard(dev) \
-       writel(0, devpriv->las0+LAS0_BOARD_RESET)
-
-/* Reset channel gain table read pointer */
-#define RtdResetCGT(dev) \
-       writel(0, devpriv->las0+LAS0_CGT_RESET)
-
-/* Reset channel gain table read and write pointers */
-#define RtdClearCGT(dev) \
-       writel(0, devpriv->las0+LAS0_CGT_CLEAR)
-
-/* Reset channel gain table read and write pointers */
-#define RtdEnableCGT(dev, v) \
-       writel((v > 0) ? 1 : 0, devpriv->las0+LAS0_CGT_ENABLE)
-
-/* Write channel gain table entry */
-#define RtdWriteCGTable(dev, v) \
-       writel(v, devpriv->las0+LAS0_CGT_WRITE)
-
-/* Write Channel Gain Latch */
-#define RtdWriteCGLatch(dev, v) \
-       writel(v, devpriv->las0+LAS0_CGL_WRITE)
-
-/* Reset ADC FIFO */
-#define RtdAdcClearFifo(dev) \
-       writel(0, devpriv->las0+LAS0_ADC_FIFO_CLEAR)
-
-/* Set ADC start conversion source select (write only) */
-#define RtdAdcConversionSource(dev, v) \
-       writel(v, devpriv->las0+LAS0_ADC_CONVERSION)
-
-/* Set burst start source select (write only) */
-#define RtdBurstStartSource(dev, v) \
-       writel(v, devpriv->las0+LAS0_BURST_START)
-
-/* Set Pacer start source select (write only) */
-#define RtdPacerStartSource(dev, v) \
-       writel(v, devpriv->las0+LAS0_PACER_START)
-
-/* Set Pacer stop source select (write only) */
-#define RtdPacerStopSource(dev, v) \
-       writel(v, devpriv->las0+LAS0_PACER_STOP)
-
-/* Set Pacer clock source select (write only) 0=external 1=internal */
-#define RtdPacerClockSource(dev, v) \
-       writel((v > 0) ? 1 : 0, devpriv->las0+LAS0_PACER_SELECT)
-
-/* Set sample counter source select (write only) */
-#define RtdAdcSampleCounterSource(dev, v) \
-       writel(v, devpriv->las0+LAS0_ADC_SCNT_SRC)
-
-/* Set Pacer trigger mode select (write only) 0=single cycle, 1=repeat */
-#define RtdPacerTriggerMode(dev, v) \
-       writel((v > 0) ? 1 : 0, devpriv->las0+LAS0_PACER_REPEAT)
-
-/* Set About counter stop enable (write only) */
-#define RtdAboutStopEnable(dev, v) \
-       writel((v > 0) ? 1 : 0, devpriv->las0+LAS0_ACNT_STOP_ENABLE)
-
-/* Set external trigger polarity (write only) 0=positive edge, 1=negative */
-#define RtdTriggerPolarity(dev, v) \
-       writel((v > 0) ? 1 : 0, devpriv->las0+LAS0_ETRG_POLARITY)
-
-/* Start single ADC conversion */
-#define RtdAdcStart(dev) \
-       writew(0, devpriv->las0+LAS0_ADC)
-
-/* Read one ADC data value (12bit (with sign extend) as 16bit) */
-/* Note: matches what DMA would get.  Actual value >> 3 */
-#define RtdAdcFifoGet(dev) \
-       readw(devpriv->las1+LAS1_ADC_FIFO)
-
-/* Read two ADC data values (DOESN'T WORK) */
-#define RtdAdcFifoGet2(dev) \
-       readl(devpriv->las1+LAS1_ADC_FIFO)
-
-/* FIFO status */
-#define RtdFifoStatus(dev) \
-       readl(devpriv->las0+LAS0_ADC)
-
-/* pacer start/stop read=start, write=stop*/
-#define RtdPacerStart(dev) \
-       readl(devpriv->las0+LAS0_PACER)
-#define RtdPacerStop(dev) \
-       writel(0, devpriv->las0+LAS0_PACER)
-
 /* Interrupt status */
 #define RtdInterruptStatus(dev) \
        readw(devpriv->las0+LAS0_IT)
@@ -805,15 +718,17 @@ static void rtd_load_channelgain_list(struct comedi_device *dev,
 {
        if (n_chan > 1) {       /* setup channel gain table */
                int ii;
-               RtdClearCGT(dev);
-               RtdEnableCGT(dev, 1);   /* enable table */
+
+               writel(0, devpriv->las0 + LAS0_CGT_CLEAR);
+               writel(1, devpriv->las0 + LAS0_CGT_ENABLE);
                for (ii = 0; ii < n_chan; ii++) {
-                       RtdWriteCGTable(dev, rtdConvertChanGain(dev, list[ii],
-                                                               ii));
+                       writel(rtdConvertChanGain(dev, list[ii], ii),
+                               devpriv->las0 + LAS0_CGT_WRITE);
                }
        } else {                /* just use the channel gain latch */
-               RtdEnableCGT(dev, 0);   /* disable table, enable latch */
-               RtdWriteCGLatch(dev, rtdConvertChanGain(dev, list[0], 0));
+               writel(0, devpriv->las0 + LAS0_CGT_ENABLE);
+               writel(rtdConvertChanGain(dev, list[0], 0),
+                       devpriv->las0 + LAS0_CGL_WRITE);
        }
 }
 
@@ -826,16 +741,16 @@ static int rtd520_probe_fifo_depth(struct comedi_device *dev)
        static const unsigned limit = 0x2000;
        unsigned fifo_size = 0;
 
-       RtdAdcClearFifo(dev);
+       writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR);
        rtd_load_channelgain_list(dev, 1, &chanspec);
-       RtdAdcConversionSource(dev, 0); /* software */
+       writel(0, devpriv->las0 + LAS0_ADC_CONVERSION);
        /* convert  samples */
        for (i = 0; i < limit; ++i) {
                unsigned fifo_status;
                /* trigger conversion */
-               RtdAdcStart(dev);
+               writew(0, devpriv->las0 + LAS0_ADC);
                udelay(1);
-               fifo_status = RtdFifoStatus(dev);
+               fifo_status = readl(devpriv->las0 + LAS0_ADC);
                if ((fifo_status & FS_ADC_HEMPTY) == 0) {
                        fifo_size = 2 * i;
                        break;
@@ -846,7 +761,7 @@ static int rtd520_probe_fifo_depth(struct comedi_device *dev)
                       DRV_NAME);
                return -EIO;
        }
-       RtdAdcClearFifo(dev);
+       writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR);
        if (fifo_size != 0x400 && fifo_size != 0x2000) {
                printk
                    (KERN_INFO "\ncomedi: %s: unexpected fifo size of %i, expected 1024 or 8192.\n",
@@ -872,22 +787,22 @@ static int rtd_ai_rinsn(struct comedi_device *dev,
        int stat;
 
        /* clear any old fifo data */
-       RtdAdcClearFifo(dev);
+       writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR);
 
        /* write channel to multiplexer and clear channel gain table */
        rtd_load_channelgain_list(dev, 1, &insn->chanspec);
 
        /* set conversion source */
-       RtdAdcConversionSource(dev, 0); /* software */
+       writel(0, devpriv->las0 + LAS0_ADC_CONVERSION);
 
        /* convert n samples */
        for (n = 0; n < insn->n; n++) {
                s16 d;
                /* trigger conversion */
-               RtdAdcStart(dev);
+               writew(0, devpriv->las0 + LAS0_ADC);
 
                for (ii = 0; ii < RTD_ADC_TIMEOUT; ++ii) {
-                       stat = RtdFifoStatus(dev);
+                       stat = readl(devpriv->las0 + LAS0_ADC);
                        if (stat & FS_ADC_NOT_EMPTY)    /* 1 -> not empty */
                                break;
                        WAIT_QUIETLY;
@@ -900,7 +815,7 @@ static int rtd_ai_rinsn(struct comedi_device *dev,
                }
 
                /* read data */
-               d = RtdAdcFifoGet(dev); /* get 2s comp value */
+               d = readw(devpriv->las1 + LAS1_ADC_FIFO);
                /*printk ("rtd520: Got 0x%x after %d usec\n", d, ii+1); */
                d = d >> 3;     /* low 3 bits are marker lines */
                if (CHAN_ARRAY_TEST(devpriv->chanBipolar, 0))
@@ -930,17 +845,17 @@ static int ai_read_n(struct comedi_device *dev, struct comedi_subdevice *s,
                s16 d;
 
                if (0 == devpriv->aiCount) {    /* done */
-                       d = RtdAdcFifoGet(dev); /* Read N and discard */
+                       d = readw(devpriv->las1 + LAS1_ADC_FIFO);
                        continue;
                }
 #if 0
-               if (0 == (RtdFifoStatus(dev) & FS_ADC_NOT_EMPTY)) {     /* DEBUG */
+               if (!(readl(devpriv->las0 + LAS0_ADC) & FS_ADC_NOT_EMPTY)) {
                        DPRINTK("comedi: READ OOPS on %d of %d\n", ii + 1,
                                count);
                        break;
                }
 #endif
-               d = RtdAdcFifoGet(dev); /* get 2s comp value */
+               d = readw(devpriv->las1 + LAS1_ADC_FIFO);
 
                d = d >> 3;     /* low 3 bits are marker lines */
                if (CHAN_ARRAY_TEST(devpriv->chanBipolar, s->async->cur_chan)) {
@@ -963,9 +878,9 @@ static int ai_read_n(struct comedi_device *dev, struct comedi_subdevice *s,
 */
 static int ai_read_dregs(struct comedi_device *dev, struct comedi_subdevice *s)
 {
-       while (RtdFifoStatus(dev) & FS_ADC_NOT_EMPTY) { /* 1 -> not empty */
+       while (readl(devpriv->las0 + LAS0_ADC) & FS_ADC_NOT_EMPTY) {
                short sample;
-               s16 d = RtdAdcFifoGet(dev);     /* get 2s comp value */
+               s16 d = readw(devpriv->las1 + LAS1_ADC_FIFO);
 
                if (0 == devpriv->aiCount) {    /* done */
                        continue;       /* read rest */
@@ -1123,7 +1038,7 @@ static irqreturn_t rtd_interrupt(int irq, /* interrupt number (ignored) */
 
        devpriv->intCount++;    /* DEBUG statistics */
 
-       fifoStatus = RtdFifoStatus(dev);
+       fifoStatus = readl(devpriv->las0 + LAS0_ADC);
        /* check for FIFO full, this automatically halts the ADC! */
        if (!(fifoStatus & FS_ADC_NOT_FULL)) {  /* 0 -> full */
                DPRINTK("rtd520: FIFO full! fifo_status=0x%x\n", (fifoStatus ^ 0x6666) & 0x7777);       /* should be all 0s */
@@ -1226,15 +1141,15 @@ static irqreturn_t rtd_interrupt(int irq,       /* interrupt number (ignored) */
        return IRQ_HANDLED;
 
 abortTransfer:
-       RtdAdcClearFifo(dev);   /* clears full flag */
+       writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR);
        s->async->events |= COMEDI_CB_ERROR;
        devpriv->aiCount = 0;   /* stop and don't transfer any more */
        /* fall into transferDone */
 
 transferDone:
-       RtdPacerStopSource(dev, 0);     /* stop on SOFTWARE stop */
-       RtdPacerStop(dev);      /* Stop PACER */
-       RtdAdcConversionSource(dev, 0); /* software trigger only */
+       writel(0, devpriv->las0 + LAS0_PACER_STOP);
+       writel(0, devpriv->las0 + LAS0_PACER);
+       writel(0, devpriv->las0 + LAS0_ADC_CONVERSION);
        RtdInterruptMask(dev, 0);       /* mask out SAMPLE */
 #ifdef USE_DMA
        if (devpriv->flags & DMA0_ACTIVE) {
@@ -1251,7 +1166,7 @@ transferDone:
 #endif /* USE_DMA */
 
        if (devpriv->aiCount > 0) {     /* there shouldn't be anything left */
-               fifoStatus = RtdFifoStatus(dev);
+               fifoStatus = readl(devpriv->las0 + LAS0_ADC);
                DPRINTK("rtd520: Finishing up. %ld remain, fifoStat=%x\n", devpriv->aiCount, (fifoStatus ^ 0x6666) & 0x7777);   /* should read all 0s */
                ai_read_dregs(dev, s);  /* read anything left in FIFO */
        }
@@ -1264,7 +1179,7 @@ transferDone:
        RtdInterruptClearMask(dev, status);
        RtdInterruptClear(dev);
 
-       fifoStatus = RtdFifoStatus(dev);        /* DEBUG */
+       fifoStatus = readl(devpriv->las0 + LAS0_ADC);
        DPRINTK
            ("rtd520: Acquisition complete. %ld ints, intStat=%x, overStat=%x\n",
             devpriv->intCount, status,
@@ -1501,9 +1416,9 @@ static int rtd_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
        int timer;
 
        /* stop anything currently running */
-       RtdPacerStopSource(dev, 0);     /* stop on SOFTWARE stop */
-       RtdPacerStop(dev);      /* make sure PACER is stopped */
-       RtdAdcConversionSource(dev, 0); /* software trigger only */
+       writel(0, devpriv->las0 + LAS0_PACER_STOP);
+       writel(0, devpriv->las0 + LAS0_PACER);
+       writel(0, devpriv->las0 + LAS0_ADC_CONVERSION);
        RtdInterruptMask(dev, 0);
 #ifdef USE_DMA
        if (devpriv->flags & DMA0_ACTIVE) {     /* cancel anything running */
@@ -1517,7 +1432,7 @@ static int rtd_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
        }
        RtdDma0Reset(dev);      /* reset onboard state */
 #endif /* USE_DMA */
-       RtdAdcClearFifo(dev);   /* clear any old data */
+       writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR);
        RtdInterruptOverrunClear(dev);
        devpriv->intCount = 0;
 
@@ -1533,13 +1448,13 @@ static int rtd_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
        /* setup the common case and override if needed */
        if (cmd->chanlist_len > 1) {
                /*DPRINTK ("rtd520: Multi channel setup\n"); */
-               RtdPacerStartSource(dev, 0);    /* software triggers pacer */
-               RtdBurstStartSource(dev, 1);    /* PACER triggers burst */
-               RtdAdcConversionSource(dev, 2); /* BURST triggers ADC */
+               writel(0, devpriv->las0 + LAS0_PACER_START);
+               writel(1, devpriv->las0 + LAS0_BURST_START);
+               writel(2, devpriv->las0 + LAS0_ADC_CONVERSION);
        } else {                /* single channel */
                /*DPRINTK ("rtd520: single channel setup\n"); */
-               RtdPacerStartSource(dev, 0);    /* software triggers pacer */
-               RtdAdcConversionSource(dev, 1); /* PACER triggers ADC */
+               writel(0, devpriv->las0 + LAS0_PACER_START);
+               writel(1, devpriv->las0 + LAS0_ADC_CONVERSION);
        }
        RtdAboutCounter(dev, devpriv->fifoLen / 2 - 1); /* 1/2 FIFO */
 
@@ -1586,8 +1501,8 @@ static int rtd_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
                devpriv->transCount = 0;
                devpriv->flags &= ~SEND_EOS;
        }
-       RtdPacerClockSource(dev, 1);    /* use INTERNAL 8Mhz clock source */
-       RtdAboutStopEnable(dev, 1);     /* just interrupt, dont stop */
+       writel(1, devpriv->las0 + LAS0_PACER_SELECT);
+       writel(1, devpriv->las0 + LAS0_ACNT_STOP_ENABLE);
 
        /* BUG??? these look like enumerated values, but they are bit fields */
 
@@ -1622,7 +1537,7 @@ static int rtd_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
                break;
 
        case TRIG_EXT:
-               RtdPacerStartSource(dev, 1);    /* EXTERNALy trigger pacer */
+               writel(1, devpriv->las0 + LAS0_PACER_START);
                break;
 
        default:
@@ -1644,7 +1559,7 @@ static int rtd_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
                break;
 
        case TRIG_EXT:          /* external */
-               RtdBurstStartSource(dev, 2);    /* EXTERNALy trigger burst */
+               writel(2, devpriv->las0 + LAS0_BURST_START);
                break;
 
        default:
@@ -1688,7 +1603,7 @@ static int rtd_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
 
        /* BUG: start_src is ASSUMED to be TRIG_NOW */
        /* BUG? it seems like things are running before the "start" */
-       RtdPacerStart(dev);     /* Start PACER */
+       readl(devpriv->las0 + LAS0_PACER);
        return 0;
 }
 
@@ -1699,9 +1614,9 @@ static int rtd_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s)
 {
        u16 status;
 
-       RtdPacerStopSource(dev, 0);     /* stop on SOFTWARE stop */
-       RtdPacerStop(dev);      /* Stop PACER */
-       RtdAdcConversionSource(dev, 0); /* software trigger only */
+       writel(0, devpriv->las0 + LAS0_PACER_STOP);
+       writel(0, devpriv->las0 + LAS0_PACER);
+       writel(0, devpriv->las0 + LAS0_ADC_CONVERSION);
        RtdInterruptMask(dev, 0);
        devpriv->aiCount = 0;   /* stop and don't transfer any more */
 #ifdef USE_DMA
@@ -1762,7 +1677,7 @@ static int rtd_ao_winsn(struct comedi_device *dev,
                devpriv->aoValue[chan] = data[i];       /* save for read back */
 
                for (ii = 0; ii < RTD_DAC_TIMEOUT; ++ii) {
-                       stat = RtdFifoStatus(dev);
+                       stat = readl(devpriv->las0 + LAS0_ADC);
                        /* 1 -> not empty */
                        if (stat & ((0 == chan) ? FS_DAC1_NOT_EMPTY :
                                    FS_DAC2_NOT_EMPTY))
@@ -1826,7 +1741,7 @@ static int rtd_dio_insn_bits(struct comedi_device *dev,
 
        /*DPRINTK("rtd520:port_0 wrote: 0x%x read: 0x%x\n", s->state, data[1]); */
 
-       return 2;
+       return insn->n;
 }
 
 /*
@@ -2050,15 +1965,15 @@ static int rtd_attach(struct comedi_device *dev, struct comedi_devconfig *it)
 
        /* initialize board, per RTD spec */
        /* also, initialize shadow registers */
-       RtdResetBoard(dev);
+       writel(0, devpriv->las0 + LAS0_BOARD_RESET);
        udelay(100);            /* needed? */
        RtdPlxInterruptWrite(dev, 0);
        RtdInterruptMask(dev, 0);       /* and sets shadow */
        RtdInterruptClearMask(dev, ~0); /* and sets shadow */
        RtdInterruptClear(dev); /* clears bits set by mask */
        RtdInterruptOverrunClear(dev);
-       RtdClearCGT(dev);
-       RtdAdcClearFifo(dev);
+       writel(0, devpriv->las0 + LAS0_CGT_CLEAR);
+       writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR);
        RtdDacClearFifo(dev, 0);
        RtdDacClearFifo(dev, 1);
        /* clear digital IO fifo */
@@ -2231,7 +2146,7 @@ static void rtd_detach(struct comedi_device *dev)
                }
 #endif /* USE_DMA */
                if (devpriv->las0) {
-                       RtdResetBoard(dev);
+                       writel(0, devpriv->las0 + LAS0_BOARD_RESET);
                        RtdInterruptMask(dev, 0);
                        RtdInterruptClearMask(dev, ~0);
                        RtdInterruptClear(dev); /* clears bits set by mask */