diff options
author | H Hartley Sweeten <hsweeten@visionengravers.com> | 2016-04-21 12:04:44 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-04-28 22:19:49 -0700 |
commit | f7d005c33c109ef034c9480334d3d25d91aa2d6d (patch) | |
tree | f9e0c28cf63ecb090e0900dc1daf2320883ad1fb /drivers/staging/comedi/drivers/ni_mio_common.c | |
parent | 3da088cae2a5f2ae6e8192db4b6e36496fd81514 (diff) |
staging: comedi: mite: make mite_ack_linkc() handle mite_sync_dma()
The mite dma is always synced on a LINKC status. Some of the mite users
sync the dma regadless of the status.
Add a 'sync' parameter to mite_ack_linkc() to force a dma sync. Then do
the dma sync as needed.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/drivers/ni_mio_common.c')
-rw-r--r-- | drivers/staging/comedi/drivers/ni_mio_common.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index a3b93c1adf34..dc024f27cc48 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -3632,10 +3632,8 @@ static void handle_cdio_interrupt(struct comedi_device *dev) unsigned long flags; spin_lock_irqsave(&devpriv->mite_channel_lock, flags); - if (devpriv->cdo_mite_chan) { - mite_ack_linkc(devpriv->cdo_mite_chan, s); - mite_sync_dma(devpriv->cdo_mite_chan, s); - } + if (devpriv->cdo_mite_chan) + mite_ack_linkc(devpriv->cdo_mite_chan, s, true); spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); cdio_status = ni_readl(dev, NI_M_CDIO_STATUS_REG); @@ -5150,21 +5148,12 @@ static irqreturn_t ni_E_interrupt(int irq, void *d) #ifdef PCIDMA if (devpriv->mite) { unsigned long flags_too; - unsigned int m_status; spin_lock_irqsave(&devpriv->mite_channel_lock, flags_too); - if (s_ai && devpriv->ai_mite_chan) { - m_status = mite_ack_linkc(devpriv->ai_mite_chan, s_ai); - if (m_status & CHSR_LINKC) - mite_sync_dma(devpriv->ai_mite_chan, s_ai); - } - - if (s_ao && devpriv->ao_mite_chan) { - m_status = mite_ack_linkc(devpriv->ao_mite_chan, s_ao); - if (m_status & CHSR_LINKC) - mite_sync_dma(devpriv->ao_mite_chan, s_ao); - } - + if (s_ai && devpriv->ai_mite_chan) + mite_ack_linkc(devpriv->ai_mite_chan, s_ai, false); + if (s_ao && devpriv->ao_mite_chan) + mite_ack_linkc(devpriv->ao_mite_chan, s_ao, false); spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags_too); } #endif |