}
 EXPORT_SYMBOL_GPL(mite_dma_disarm);
 
-int mite_sync_input_dma(struct mite_channel *mite_chan,
-                       struct comedi_subdevice *s)
+static void mite_sync_input_dma(struct mite_channel *mite_chan,
+                               struct comedi_subdevice *s)
 {
        struct comedi_async *async = s->async;
        int count;
                dev_warn(s->device->class_dev,
                         "mite: DMA overwrite of free area\n");
                async->events |= COMEDI_CB_OVERFLOW;
-               return -1;
+               return;
        }
 
        count = nbytes - async->buf_write_count;
         * it's possible count will be negative due to conservative value
         * returned by mite_bytes_written_to_memory_lb
         */
-       if (count <= 0)
-               return 0;
-
-       comedi_buf_write_free(s, count);
-       comedi_inc_scan_progress(s, count);
-       async->events |= COMEDI_CB_BLOCK;
-       return 0;
+       if (count > 0) {
+               comedi_buf_write_free(s, count);
+               comedi_inc_scan_progress(s, count);
+               async->events |= COMEDI_CB_BLOCK;
+       }
 }
-EXPORT_SYMBOL_GPL(mite_sync_input_dma);
 
-int mite_sync_output_dma(struct mite_channel *mite_chan,
-                        struct comedi_subdevice *s)
+static void mite_sync_output_dma(struct mite_channel *mite_chan,
+                                struct comedi_subdevice *s)
 {
        struct comedi_async *async = s->async;
        struct comedi_cmd *cmd = &async->cmd;
            ((int)(nbytes_ub - old_alloc_count) > 0)) {
                dev_warn(s->device->class_dev, "mite: DMA underrun\n");
                async->events |= COMEDI_CB_OVERFLOW;
-               return -1;
+               return;
        }
 
        if (finite_regen) {
                 * hence we expect that old_alloc_count will reach a maximum of
                 * stop_count bytes.
                 */
-               return 0;
+               return;
        }
 
        count = nbytes_lb - async->buf_read_count;
-       if (count <= 0)
-               return 0;
-
-       if (count) {
+       if (count > 0) {
                comedi_buf_read_free(s, count);
                async->events |= COMEDI_CB_BLOCK;
        }
-       return 0;
 }
-EXPORT_SYMBOL_GPL(mite_sync_output_dma);
+
+void mite_sync_dma(struct mite_channel *mite_chan, struct comedi_subdevice *s)
+{
+       if (mite_chan->dir == COMEDI_INPUT)
+               mite_sync_input_dma(mite_chan, s);
+       else
+               mite_sync_output_dma(mite_chan, s);
+}
+EXPORT_SYMBOL_GPL(mite_sync_dma);
 
 static unsigned int mite_get_status(struct mite_channel *mite_chan)
 {
 
 
 void mite_dma_arm(struct mite_channel *mite_chan);
 void mite_dma_disarm(struct mite_channel *mite_chan);
-int mite_sync_input_dma(struct mite_channel *mite_chan,
-                       struct comedi_subdevice *s);
-int mite_sync_output_dma(struct mite_channel *mite_chan,
-                        struct comedi_subdevice *s);
+void mite_sync_dma(struct mite_channel *mite_chan, struct comedi_subdevice *s);
 u32 mite_bytes_in_transit(struct mite_channel *mite_chan);
 unsigned int mite_ack_linkc(struct mite_channel *mite_chan);
 int mite_done(struct mite_channel *mite_chan);
 
 
        /* lock to avoid race with comedi_poll */
        spin_lock_irqsave(&devpriv->interrupt_lock, flags);
-       mite_sync_input_dma(counter->mite_chan, s);
+       mite_sync_dma(counter->mite_chan, s);
        spin_unlock_irqrestore(&devpriv->interrupt_lock, flags);
        return comedi_buf_read_n_available(s);
 }
 
 
        spin_lock_irqsave(&devpriv->mite_channel_lock, flags);
        if (devpriv->ai_mite_chan)
-               mite_sync_input_dma(devpriv->ai_mite_chan, s);
+               mite_sync_dma(devpriv->ai_mite_chan, s);
        spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags);
 }
 
 
        spin_lock_irqsave(&devpriv->mite_channel_lock, flags);
        if (devpriv->ao_mite_chan)
-               mite_sync_output_dma(devpriv->ao_mite_chan, s);
+               mite_sync_dma(devpriv->ao_mite_chan, s);
        spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags);
 }
 
        spin_lock_irqsave(&devpriv->mite_channel_lock, flags);
        if (devpriv->cdo_mite_chan) {
                mite_ack_linkc(devpriv->cdo_mite_chan);
-               mite_sync_output_dma(devpriv->cdo_mite_chan, s);
+               mite_sync_dma(devpriv->cdo_mite_chan, s);
        }
        spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags);
 
 
        spin_lock_irqsave(&dev->spinlock, irq_flags);
        spin_lock(&devpriv->mite_channel_lock);
        if (devpriv->di_mite_chan)
-               mite_sync_input_dma(devpriv->di_mite_chan, s);
+               mite_sync_dma(devpriv->di_mite_chan, s);
        spin_unlock(&devpriv->mite_channel_lock);
        count = comedi_buf_n_bytes_ready(s);
        spin_unlock_irqrestore(&dev->spinlock, irq_flags);
                unsigned int m_status = mite_ack_linkc(devpriv->di_mite_chan);
 
                if (m_status & CHSR_LINKC) {
-                       mite_sync_input_dma(devpriv->di_mite_chan, s);
+                       mite_sync_dma(devpriv->di_mite_chan, s);
                        /* XXX need to byteswap */
                }
                if (m_status & ~(CHSR_INT | CHSR_LINKC | CHSR_DONE | CHSR_DRDY |
 
        spin_lock_irqsave(&counter->lock, flags);
        if (counter->mite_chan) {
                mite_ack_linkc(counter->mite_chan);
-               mite_sync_input_dma(counter->mite_chan, s);
+               mite_sync_dma(counter->mite_chan, s);
        }
        spin_unlock_irqrestore(&counter->lock, flags);
 }