staging: comedi: ni_6527: tidy up ni6527_di_insn_config()
The core will validate the insn->n value based on the actual instruction (data[0]) that is being handled. Remove the sanity check and change the instruction handling into a switch. This follows the normal format for (*insn_config) functions and make adding additional instructions easier. 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>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
e3f6ce205c
commit
c6d9681b40
@@ -123,32 +123,36 @@ static void ni6527_set_filter_enable(struct comedi_device *dev,
|
||||
|
||||
static int ni6527_di_insn_config(struct comedi_device *dev,
|
||||
struct comedi_subdevice *s,
|
||||
struct comedi_insn *insn, unsigned int *data)
|
||||
struct comedi_insn *insn,
|
||||
unsigned int *data)
|
||||
{
|
||||
struct ni6527_private *devpriv = dev->private;
|
||||
int chan = CR_CHAN(insn->chanspec);
|
||||
unsigned int chan = CR_CHAN(insn->chanspec);
|
||||
unsigned int interval;
|
||||
|
||||
if (insn->n != 2)
|
||||
return -EINVAL;
|
||||
|
||||
if (data[0] != INSN_CONFIG_FILTER)
|
||||
return -EINVAL;
|
||||
|
||||
if (data[1]) {
|
||||
switch (data[0]) {
|
||||
case INSN_CONFIG_FILTER:
|
||||
/*
|
||||
* The deglitch filter interval is specified in nanoseconds.
|
||||
* The hardware supports intervals in 200ns increments. Round
|
||||
* the user values up and return the actual interval.
|
||||
*/
|
||||
interval = (data[1] + 100) / 200;
|
||||
data[1] = interval * 200;
|
||||
|
||||
ni6527_set_filter_interval(dev, interval);
|
||||
|
||||
devpriv->filter_enable |= 1 << chan;
|
||||
} else {
|
||||
devpriv->filter_enable &= ~(1 << chan);
|
||||
if (interval) {
|
||||
ni6527_set_filter_interval(dev, interval);
|
||||
devpriv->filter_enable |= 1 << chan;
|
||||
} else {
|
||||
devpriv->filter_enable &= ~(1 << chan);
|
||||
}
|
||||
ni6527_set_filter_enable(dev, devpriv->filter_enable);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ni6527_set_filter_enable(dev, devpriv->filter_enable);
|
||||
|
||||
return 2;
|
||||
return insn->n;
|
||||
}
|
||||
|
||||
static int ni6527_di_insn_bits(struct comedi_device *dev,
|
||||
|
||||
Reference in New Issue
Block a user