Commit c9e5ec25 authored by Andrzej Pietrasiewicz's avatar Andrzej Pietrasiewicz Committed by Greg Kroah-Hartman

staging: comedi: ni_mio_common: add "no_channel" versions of some functions

ni_release_ai_mite_channel(), ni_release_ao_mite_channel(),
ni_release_gpct_mite_channel() and ni_release_cdo_mite_channel()
call functions which interpret -1 as a special value meaning "no channel".
This patch adds explicit "no_channel" versions instead.

On the other hand, after "no_channel" versions are used,
ni_set_ai_dma_channel(), ni_set_ao_dma_channel(),
ni_set_gpct_dma_channel(), ni_set_cdo_dma_channel() are called with actual
"channel" parameter being always unsigned, so their signatures are changed
accordingly.

A side benefit of the changes is suppressesing 4 sparse warnings:
"warning: shift too big (4294967295) for type int".
Signed-off-by: default avatarAndrzej Pietrasiewicz <andrzejtp2010@gmail.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent af904c49
...@@ -579,48 +579,54 @@ static inline unsigned ni_stc_dma_channel_select_bitfield(unsigned channel) ...@@ -579,48 +579,54 @@ static inline unsigned ni_stc_dma_channel_select_bitfield(unsigned channel)
return 0; return 0;
} }
/* negative channel means no channel */ static inline void ni_set_ai_dma_channel(struct comedi_device *dev,
static inline void ni_set_ai_dma_channel(struct comedi_device *dev, int channel) unsigned channel)
{ {
unsigned bits = 0; unsigned bits = ni_stc_dma_channel_select_bitfield(channel);
if (channel >= 0)
bits = ni_stc_dma_channel_select_bitfield(channel);
ni_set_bitfield(dev, NI_E_DMA_AI_AO_SEL_REG, ni_set_bitfield(dev, NI_E_DMA_AI_AO_SEL_REG,
NI_E_DMA_AI_SEL_MASK, NI_E_DMA_AI_SEL(bits)); NI_E_DMA_AI_SEL_MASK, NI_E_DMA_AI_SEL(bits));
} }
/* negative channel means no channel */ static inline void ni_set_ai_dma_no_channel(struct comedi_device *dev)
static inline void ni_set_ao_dma_channel(struct comedi_device *dev, int channel)
{ {
unsigned bits = 0; ni_set_bitfield(dev, NI_E_DMA_AI_AO_SEL_REG, NI_E_DMA_AI_SEL_MASK, 0);
}
if (channel >= 0) static inline void ni_set_ao_dma_channel(struct comedi_device *dev,
bits = ni_stc_dma_channel_select_bitfield(channel); unsigned channel)
{
unsigned bits = ni_stc_dma_channel_select_bitfield(channel);
ni_set_bitfield(dev, NI_E_DMA_AI_AO_SEL_REG, ni_set_bitfield(dev, NI_E_DMA_AI_AO_SEL_REG,
NI_E_DMA_AO_SEL_MASK, NI_E_DMA_AO_SEL(bits)); NI_E_DMA_AO_SEL_MASK, NI_E_DMA_AO_SEL(bits));
} }
/* negative channel means no channel */ static inline void ni_set_ao_dma_no_channel(struct comedi_device *dev)
{
ni_set_bitfield(dev, NI_E_DMA_AI_AO_SEL_REG, NI_E_DMA_AO_SEL_MASK, 0);
}
static inline void ni_set_gpct_dma_channel(struct comedi_device *dev, static inline void ni_set_gpct_dma_channel(struct comedi_device *dev,
unsigned gpct_index, unsigned gpct_index,
int channel) unsigned channel)
{ {
unsigned bits = 0; unsigned bits = ni_stc_dma_channel_select_bitfield(channel);
if (channel >= 0)
bits = ni_stc_dma_channel_select_bitfield(channel);
ni_set_bitfield(dev, NI_E_DMA_G0_G1_SEL_REG, ni_set_bitfield(dev, NI_E_DMA_G0_G1_SEL_REG,
NI_E_DMA_G0_G1_SEL_MASK(gpct_index), NI_E_DMA_G0_G1_SEL_MASK(gpct_index),
NI_E_DMA_G0_G1_SEL(gpct_index, bits)); NI_E_DMA_G0_G1_SEL(gpct_index, bits));
} }
/* negative mite_channel means no channel */ static inline void ni_set_gpct_dma_no_channel(struct comedi_device *dev,
unsigned gpct_index)
{
ni_set_bitfield(dev, NI_E_DMA_G0_G1_SEL_REG,
NI_E_DMA_G0_G1_SEL_MASK(gpct_index), 0);
}
static inline void ni_set_cdo_dma_channel(struct comedi_device *dev, static inline void ni_set_cdo_dma_channel(struct comedi_device *dev,
int mite_channel) unsigned mite_channel)
{ {
struct ni_private *devpriv = dev->private; struct ni_private *devpriv = dev->private;
unsigned long flags; unsigned long flags;
...@@ -628,7 +634,6 @@ static inline void ni_set_cdo_dma_channel(struct comedi_device *dev, ...@@ -628,7 +634,6 @@ static inline void ni_set_cdo_dma_channel(struct comedi_device *dev,
spin_lock_irqsave(&devpriv->soft_reg_copy_lock, flags); spin_lock_irqsave(&devpriv->soft_reg_copy_lock, flags);
devpriv->cdio_dma_select_reg &= ~NI_M_CDIO_DMA_SEL_CDO_MASK; devpriv->cdio_dma_select_reg &= ~NI_M_CDIO_DMA_SEL_CDO_MASK;
if (mite_channel >= 0) {
/* /*
* XXX just guessing ni_stc_dma_channel_select_bitfield() * XXX just guessing ni_stc_dma_channel_select_bitfield()
* returns the right bits, under the assumption the cdio dma * returns the right bits, under the assumption the cdio dma
...@@ -637,7 +642,18 @@ static inline void ni_set_cdo_dma_channel(struct comedi_device *dev, ...@@ -637,7 +642,18 @@ static inline void ni_set_cdo_dma_channel(struct comedi_device *dev,
*/ */
bits = ni_stc_dma_channel_select_bitfield(mite_channel); bits = ni_stc_dma_channel_select_bitfield(mite_channel);
devpriv->cdio_dma_select_reg |= NI_M_CDIO_DMA_SEL_CDO(bits); devpriv->cdio_dma_select_reg |= NI_M_CDIO_DMA_SEL_CDO(bits);
} ni_writeb(dev, devpriv->cdio_dma_select_reg, NI_M_CDIO_DMA_SEL_REG);
mmiowb();
spin_unlock_irqrestore(&devpriv->soft_reg_copy_lock, flags);
}
static inline void ni_set_cdo_dma_no_channel(struct comedi_device *dev)
{
struct ni_private *devpriv = dev->private;
unsigned long flags;
spin_lock_irqsave(&devpriv->soft_reg_copy_lock, flags);
devpriv->cdio_dma_select_reg &= ~NI_M_CDIO_DMA_SEL_CDO_MASK;
ni_writeb(dev, devpriv->cdio_dma_select_reg, NI_M_CDIO_DMA_SEL_REG); ni_writeb(dev, devpriv->cdio_dma_select_reg, NI_M_CDIO_DMA_SEL_REG);
mmiowb(); mmiowb();
spin_unlock_irqrestore(&devpriv->soft_reg_copy_lock, flags); spin_unlock_irqrestore(&devpriv->soft_reg_copy_lock, flags);
...@@ -745,7 +761,7 @@ static void ni_release_ai_mite_channel(struct comedi_device *dev) ...@@ -745,7 +761,7 @@ static void ni_release_ai_mite_channel(struct comedi_device *dev)
spin_lock_irqsave(&devpriv->mite_channel_lock, flags); spin_lock_irqsave(&devpriv->mite_channel_lock, flags);
if (devpriv->ai_mite_chan) { if (devpriv->ai_mite_chan) {
ni_set_ai_dma_channel(dev, -1); ni_set_ai_dma_no_channel(dev);
mite_release_channel(devpriv->ai_mite_chan); mite_release_channel(devpriv->ai_mite_chan);
devpriv->ai_mite_chan = NULL; devpriv->ai_mite_chan = NULL;
} }
...@@ -761,7 +777,7 @@ static void ni_release_ao_mite_channel(struct comedi_device *dev) ...@@ -761,7 +777,7 @@ static void ni_release_ao_mite_channel(struct comedi_device *dev)
spin_lock_irqsave(&devpriv->mite_channel_lock, flags); spin_lock_irqsave(&devpriv->mite_channel_lock, flags);
if (devpriv->ao_mite_chan) { if (devpriv->ao_mite_chan) {
ni_set_ao_dma_channel(dev, -1); ni_set_ao_dma_no_channel(dev);
mite_release_channel(devpriv->ao_mite_chan); mite_release_channel(devpriv->ao_mite_chan);
devpriv->ao_mite_chan = NULL; devpriv->ao_mite_chan = NULL;
} }
...@@ -781,7 +797,7 @@ static void ni_release_gpct_mite_channel(struct comedi_device *dev, ...@@ -781,7 +797,7 @@ static void ni_release_gpct_mite_channel(struct comedi_device *dev,
struct mite_channel *mite_chan = struct mite_channel *mite_chan =
devpriv->counter_dev->counters[gpct_index].mite_chan; devpriv->counter_dev->counters[gpct_index].mite_chan;
ni_set_gpct_dma_channel(dev, gpct_index, -1); ni_set_gpct_dma_no_channel(dev, gpct_index);
ni_tio_set_mite_channel(&devpriv-> ni_tio_set_mite_channel(&devpriv->
counter_dev->counters[gpct_index], counter_dev->counters[gpct_index],
NULL); NULL);
...@@ -799,7 +815,7 @@ static void ni_release_cdo_mite_channel(struct comedi_device *dev) ...@@ -799,7 +815,7 @@ static void ni_release_cdo_mite_channel(struct comedi_device *dev)
spin_lock_irqsave(&devpriv->mite_channel_lock, flags); spin_lock_irqsave(&devpriv->mite_channel_lock, flags);
if (devpriv->cdo_mite_chan) { if (devpriv->cdo_mite_chan) {
ni_set_cdo_dma_channel(dev, -1); ni_set_cdo_dma_no_channel(dev);
mite_release_channel(devpriv->cdo_mite_chan); mite_release_channel(devpriv->cdo_mite_chan);
devpriv->cdo_mite_chan = NULL; devpriv->cdo_mite_chan = NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment