summaryrefslogtreecommitdiff
path: root/drivers/staging/comedi
diff options
context:
space:
mode:
authorH Hartley Sweeten <hsweeten@visionengravers.com>2016-04-20 10:36:37 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-04-28 22:18:51 -0700
commit4d88096df9ca49b71381eda90aa770c6db237f54 (patch)
treeec62c2f98dfd0c7db6426030a2a7947989e1786f /drivers/staging/comedi
parent96f31530006492b2c753311431acf71df88b0cdd (diff)
staging: comedi: mite: introduce mite_ack_linkc()
Introduce a helper function to handle the ack of a LINKC interrupt. Tidy up the drivers that use the new helper. The extra check for CHSR_INT in the ni_pcidio driver is not necessary. This bit will be set if any of the interrupt sources, including CHSR_LINKC, have generated an interrupt. Remove the extra check. The mite_get_status() function is now only used by the mite driver. Make it static and remove the export. 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')
-rw-r--r--drivers/staging/comedi/drivers/mite.c17
-rw-r--r--drivers/staging/comedi/drivers/mite.h2
-rw-r--r--drivers/staging/comedi/drivers/ni_mio_common.c28
-rw-r--r--drivers/staging/comedi/drivers/ni_pcidio.c10
-rw-r--r--drivers/staging/comedi/drivers/ni_tiocmd.c13
5 files changed, 26 insertions, 44 deletions
diff --git a/drivers/staging/comedi/drivers/mite.c b/drivers/staging/comedi/drivers/mite.c
index 2f24fae47b73..2dcfa76fffd1 100644
--- a/drivers/staging/comedi/drivers/mite.c
+++ b/drivers/staging/comedi/drivers/mite.c
@@ -622,7 +622,7 @@ int mite_sync_output_dma(struct mite_channel *mite_chan,
}
EXPORT_SYMBOL_GPL(mite_sync_output_dma);
-unsigned int mite_get_status(struct mite_channel *mite_chan)
+static unsigned int mite_get_status(struct mite_channel *mite_chan)
{
struct mite_struct *mite = mite_chan->mite;
unsigned int status;
@@ -639,7 +639,20 @@ unsigned int mite_get_status(struct mite_channel *mite_chan)
spin_unlock_irqrestore(&mite->lock, flags);
return status;
}
-EXPORT_SYMBOL_GPL(mite_get_status);
+
+unsigned int mite_ack_linkc(struct mite_channel *mite_chan)
+{
+ struct mite_struct *mite = mite_chan->mite;
+ unsigned int status;
+
+ status = mite_get_status(mite_chan);
+ if (status & CHSR_LINKC)
+ writel(CHOR_CLRLC,
+ mite->mite_io_addr + MITE_CHOR(mite_chan->channel));
+
+ return status;
+}
+EXPORT_SYMBOL_GPL(mite_ack_linkc);
int mite_done(struct mite_channel *mite_chan)
{
diff --git a/drivers/staging/comedi/drivers/mite.h b/drivers/staging/comedi/drivers/mite.h
index f168eceaa56f..406e904edc5f 100644
--- a/drivers/staging/comedi/drivers/mite.h
+++ b/drivers/staging/comedi/drivers/mite.h
@@ -97,7 +97,7 @@ int mite_sync_input_dma(struct mite_channel *mite_chan,
int mite_sync_output_dma(struct mite_channel *mite_chan,
struct comedi_subdevice *s);
u32 mite_bytes_in_transit(struct mite_channel *mite_chan);
-unsigned int mite_get_status(struct mite_channel *mite_chan);
+unsigned int mite_ack_linkc(struct mite_channel *mite_chan);
int mite_done(struct mite_channel *mite_chan);
void mite_prep_dma(struct mite_channel *mite_chan,
diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c
index 081ed3f37817..7f7296e96b25 100644
--- a/drivers/staging/comedi/drivers/ni_mio_common.c
+++ b/drivers/staging/comedi/drivers/ni_mio_common.c
@@ -3697,13 +3697,7 @@ static void handle_cdio_interrupt(struct comedi_device *dev)
spin_lock_irqsave(&devpriv->mite_channel_lock, flags);
if (devpriv->cdo_mite_chan) {
- unsigned int cdo_mite_status =
- mite_get_status(devpriv->cdo_mite_chan);
- if (cdo_mite_status & CHSR_LINKC) {
- writel(CHOR_CLRLC,
- devpriv->mite->mite_io_addr +
- MITE_CHOR(devpriv->cdo_mite_chan->channel));
- }
+ mite_ack_linkc(devpriv->cdo_mite_chan);
mite_sync_output_dma(devpriv->cdo_mite_chan, s);
}
spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags);
@@ -5222,22 +5216,10 @@ static irqreturn_t ni_E_interrupt(int irq, void *d)
unsigned long flags_too;
spin_lock_irqsave(&devpriv->mite_channel_lock, flags_too);
- if (devpriv->ai_mite_chan) {
- ai_mite_status = mite_get_status(devpriv->ai_mite_chan);
- if (ai_mite_status & CHSR_LINKC)
- writel(CHOR_CLRLC,
- devpriv->mite->mite_io_addr +
- MITE_CHOR(devpriv->
- ai_mite_chan->channel));
- }
- if (devpriv->ao_mite_chan) {
- ao_mite_status = mite_get_status(devpriv->ao_mite_chan);
- if (ao_mite_status & CHSR_LINKC)
- writel(CHOR_CLRLC,
- devpriv->mite->mite_io_addr +
- MITE_CHOR(devpriv->
- ao_mite_chan->channel));
- }
+ if (devpriv->ai_mite_chan)
+ ai_mite_status = mite_ack_linkc(devpriv->ai_mite_chan);
+ if (devpriv->ao_mite_chan)
+ ao_mite_status = mite_ack_linkc(devpriv->ao_mite_chan);
spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags_too);
}
#endif
diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c
index c044c8bf88c5..b67358d99466 100644
--- a/drivers/staging/comedi/drivers/ni_pcidio.c
+++ b/drivers/staging/comedi/drivers/ni_pcidio.c
@@ -381,12 +381,10 @@ static irqreturn_t nidio_interrupt(int irq, void *d)
struct nidio96_private *devpriv = dev->private;
struct comedi_subdevice *s = dev->read_subdev;
struct comedi_async *async = s->async;
- struct mite_struct *mite = devpriv->mite;
unsigned int auxdata;
int flags;
int status;
int work = 0;
- unsigned int m_status = 0;
/* interrupcions parasites */
if (!dev->attached) {
@@ -401,14 +399,10 @@ static irqreturn_t nidio_interrupt(int irq, void *d)
flags = readb(dev->mmio + Group_1_Flags);
spin_lock(&devpriv->mite_channel_lock);
- if (devpriv->di_mite_chan)
- m_status = mite_get_status(devpriv->di_mite_chan);
+ if (devpriv->di_mite_chan) {
+ unsigned int m_status = mite_ack_linkc(devpriv->di_mite_chan);
- if (m_status & CHSR_INT) {
if (m_status & CHSR_LINKC) {
- writel(CHOR_CLRLC,
- mite->mite_io_addr +
- MITE_CHOR(devpriv->di_mite_chan->channel));
mite_sync_input_dma(devpriv->di_mite_chan, s);
/* XXX need to byteswap */
}
diff --git a/drivers/staging/comedi/drivers/ni_tiocmd.c b/drivers/staging/comedi/drivers/ni_tiocmd.c
index 3c3f5430e552..dc0b0f3d9db1 100644
--- a/drivers/staging/comedi/drivers/ni_tiocmd.c
+++ b/drivers/staging/comedi/drivers/ni_tiocmd.c
@@ -400,7 +400,6 @@ void ni_tio_handle_interrupt(struct ni_gpct *counter,
struct comedi_subdevice *s)
{
unsigned int cidx = counter->counter_index;
- unsigned int gpct_mite_status;
unsigned long flags;
int gate_error;
int tc_error;
@@ -429,16 +428,10 @@ void ni_tio_handle_interrupt(struct ni_gpct *counter,
break;
}
spin_lock_irqsave(&counter->lock, flags);
- if (!counter->mite_chan) {
- spin_unlock_irqrestore(&counter->lock, flags);
- return;
+ if (counter->mite_chan) {
+ mite_ack_linkc(counter->mite_chan);
+ mite_sync_input_dma(counter->mite_chan, s);
}
- gpct_mite_status = mite_get_status(counter->mite_chan);
- if (gpct_mite_status & CHSR_LINKC)
- writel(CHOR_CLRLC,
- counter->mite_chan->mite->mite_io_addr +
- MITE_CHOR(counter->mite_chan->channel));
- mite_sync_input_dma(counter->mite_chan, s);
spin_unlock_irqrestore(&counter->lock, flags);
}
EXPORT_SYMBOL_GPL(ni_tio_handle_interrupt);