|
@@ -3528,37 +3528,21 @@ static int ni_ao_reset(struct comedi_device *dev, struct comedi_subdevice *s)
|
|
|
|
|
|
static int ni_dio_insn_config(struct comedi_device *dev,
|
|
static int ni_dio_insn_config(struct comedi_device *dev,
|
|
struct comedi_subdevice *s,
|
|
struct comedi_subdevice *s,
|
|
- struct comedi_insn *insn, unsigned int *data)
|
|
|
|
|
|
+ struct comedi_insn *insn,
|
|
|
|
+ unsigned int *data)
|
|
{
|
|
{
|
|
struct ni_private *devpriv = dev->private;
|
|
struct ni_private *devpriv = dev->private;
|
|
|
|
+ int ret;
|
|
|
|
|
|
-#ifdef DEBUG_DIO
|
|
|
|
- printk("ni_dio_insn_config() chan=%d io=%d\n",
|
|
|
|
- CR_CHAN(insn->chanspec), data[0]);
|
|
|
|
-#endif
|
|
|
|
- switch (data[0]) {
|
|
|
|
- case INSN_CONFIG_DIO_OUTPUT:
|
|
|
|
- s->io_bits |= 1 << CR_CHAN(insn->chanspec);
|
|
|
|
- break;
|
|
|
|
- case INSN_CONFIG_DIO_INPUT:
|
|
|
|
- s->io_bits &= ~(1 << CR_CHAN(insn->chanspec));
|
|
|
|
- break;
|
|
|
|
- case INSN_CONFIG_DIO_QUERY:
|
|
|
|
- data[1] =
|
|
|
|
- (s->
|
|
|
|
- io_bits & (1 << CR_CHAN(insn->chanspec))) ? COMEDI_OUTPUT :
|
|
|
|
- COMEDI_INPUT;
|
|
|
|
- return insn->n;
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- return -EINVAL;
|
|
|
|
- }
|
|
|
|
|
|
+ ret = comedi_dio_insn_config(dev, s, insn, data, 0);
|
|
|
|
+ if (ret)
|
|
|
|
+ return ret;
|
|
|
|
|
|
devpriv->dio_control &= ~DIO_Pins_Dir_Mask;
|
|
devpriv->dio_control &= ~DIO_Pins_Dir_Mask;
|
|
devpriv->dio_control |= DIO_Pins_Dir(s->io_bits);
|
|
devpriv->dio_control |= DIO_Pins_Dir(s->io_bits);
|
|
devpriv->stc_writew(dev, devpriv->dio_control, DIO_Control_Register);
|
|
devpriv->stc_writew(dev, devpriv->dio_control, DIO_Control_Register);
|
|
|
|
|
|
- return 1;
|
|
|
|
|
|
+ return insn->n;
|
|
}
|
|
}
|
|
|
|
|
|
static int ni_dio_insn_bits(struct comedi_device *dev,
|
|
static int ni_dio_insn_bits(struct comedi_device *dev,
|
|
@@ -3596,32 +3580,15 @@ static int ni_m_series_dio_insn_config(struct comedi_device *dev,
|
|
unsigned int *data)
|
|
unsigned int *data)
|
|
{
|
|
{
|
|
struct ni_private *devpriv __maybe_unused = dev->private;
|
|
struct ni_private *devpriv __maybe_unused = dev->private;
|
|
|
|
+ int ret;
|
|
|
|
|
|
-#ifdef DEBUG_DIO
|
|
|
|
- printk("ni_m_series_dio_insn_config() chan=%d io=%d\n",
|
|
|
|
- CR_CHAN(insn->chanspec), data[0]);
|
|
|
|
-#endif
|
|
|
|
- switch (data[0]) {
|
|
|
|
- case INSN_CONFIG_DIO_OUTPUT:
|
|
|
|
- s->io_bits |= 1 << CR_CHAN(insn->chanspec);
|
|
|
|
- break;
|
|
|
|
- case INSN_CONFIG_DIO_INPUT:
|
|
|
|
- s->io_bits &= ~(1 << CR_CHAN(insn->chanspec));
|
|
|
|
- break;
|
|
|
|
- case INSN_CONFIG_DIO_QUERY:
|
|
|
|
- data[1] =
|
|
|
|
- (s->
|
|
|
|
- io_bits & (1 << CR_CHAN(insn->chanspec))) ? COMEDI_OUTPUT :
|
|
|
|
- COMEDI_INPUT;
|
|
|
|
- return insn->n;
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- return -EINVAL;
|
|
|
|
- }
|
|
|
|
|
|
+ ret = comedi_dio_insn_config(dev, s, insn, data, 0);
|
|
|
|
+ if (ret)
|
|
|
|
+ return ret;
|
|
|
|
|
|
ni_writel(s->io_bits, M_Offset_DIO_Direction);
|
|
ni_writel(s->io_bits, M_Offset_DIO_Direction);
|
|
|
|
|
|
- return 1;
|
|
|
|
|
|
+ return insn->n;
|
|
}
|
|
}
|
|
|
|
|
|
static int ni_m_series_dio_insn_bits(struct comedi_device *dev,
|
|
static int ni_m_series_dio_insn_bits(struct comedi_device *dev,
|