#include "comedi_isadma.h"
 #include "comedi_fc.h"
-#include "8253.h"
+#include "comedi_8254.h"
 
 #define A2150_DMA_BUFFER_SIZE  0xff00  /*  size in bytes of dma buffer */
 
 #define   DMA_INTR_EN_BIT              0x800   /*  enable interrupt on dma terminal count */
 #define   DMA_DEM_EN_BIT       0x1000  /*  enables demand mode dma */
 #define I8253_BASE_REG         0x14
-#define I8253_MODE_REG         0x17
-#define   HW_COUNT_DISABLE             0x30    /*  disable hardware counting of conversions */
 
 struct a2150_board {
        const char *name;
        struct comedi_isadma_desc *desc = &dma->desc[0];
        struct comedi_async *async = s->async;
        struct comedi_cmd *cmd = &async->cmd;
-       unsigned long timer_base = dev->iobase + I8253_BASE_REG;
        unsigned int old_config_bits = devpriv->config_bits;
        unsigned int trigger_bits;
 
        outw(devpriv->irq_dma_bits, dev->iobase + IRQ_DMA_CNTRL_REG);
 
        /*  may need to wait 72 sampling periods if timing was changed */
-       i8254_set_mode(timer_base, 0, 2, I8254_MODE0 | I8254_BINARY);
-       i8254_write(timer_base, 0, 2, 72);
+       comedi_8254_load(dev->pacer, 2, 72, I8254_MODE0 | I8254_BINARY);
 
        /*  setup start triggering */
        trigger_bits = 0;
        /* an IRQ and DMA are required to support async commands */
        a2150_alloc_irq_and_dma(dev, it);
 
+       dev->pacer = comedi_8254_init(dev->iobase + I8253_BASE_REG,
+                                     0, I8254_IO8, 0);
+       if (!dev->pacer)
+               return -ENOMEM;
+
        ret = comedi_alloc_subdevices(dev, 1);
        if (ret)
                return ret;
                s->cancel = a2150_cancel;
        }
 
-       /* need to do this for software counting of completed conversions, to
-        * prevent hardware count from stopping acquisition */
-       outw(HW_COUNT_DISABLE, dev->iobase + I8253_MODE_REG);
-
        /*  set card's irq and dma levels */
        outw(devpriv->irq_dma_bits, dev->iobase + IRQ_DMA_CNTRL_REG);