diff options
Diffstat (limited to 'drivers/staging/comedi/drivers/s626.c')
-rw-r--r-- | drivers/staging/comedi/drivers/s626.c | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 48c4b70b736a..d22b95dcb9bd 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -59,6 +59,8 @@ INSN_CONFIG instructions: comedi_do_insn(cf,&insn); //executing configuration */ +#include <linux/module.h> +#include <linux/delay.h> #include <linux/pci.h> #include <linux/interrupt.h> #include <linux/kernel.h> @@ -1660,24 +1662,12 @@ static int s626_dio_insn_config(struct comedi_device *dev, unsigned int *data) { unsigned long group = (unsigned long)s->private; - unsigned int chan = CR_CHAN(insn->chanspec); - unsigned int mask = 1 << chan; + int ret; + + ret = comedi_dio_insn_config(dev, s, insn, data, 0); + if (ret) + return ret; - switch (data[0]) { - case INSN_CONFIG_DIO_QUERY: - data[1] = (s->io_bits & mask) ? COMEDI_OUTPUT : COMEDI_INPUT; - return insn->n; - break; - case COMEDI_INPUT: - s->io_bits &= ~mask; - break; - case COMEDI_OUTPUT: - s->io_bits |= mask; - break; - default: - return -EINVAL; - break; - } DEBIwrite(dev, LP_WRDOUT(group), s->io_bits); return insn->n; @@ -2585,10 +2575,9 @@ static int s626_auto_attach(struct comedi_device *dev, struct comedi_subdevice *s; int ret; - devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); + devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); if (!devpriv) return -ENOMEM; - dev->private = devpriv; ret = comedi_pci_enable(dev); if (ret) |