Commit 72c7692a authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

staging: comedi: pcmmio: simplify pcmmio_dio_insn_config()

Currently this function uses the subdevice private data to get the
iobase address needed to update the channel configuration. This
subdevice private data is in the process of being removed.

Use the subdevice 'index' to determine the base 'port' needed to
access the correct digital i/o registers. The pcmmio_dio_write()
function can then be used to update the configuration.
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 4edac4a4
...@@ -348,24 +348,16 @@ static int pcmmio_dio_insn_config(struct comedi_device *dev, ...@@ -348,24 +348,16 @@ static int pcmmio_dio_insn_config(struct comedi_device *dev,
struct comedi_insn *insn, struct comedi_insn *insn,
unsigned int *data) unsigned int *data)
{ {
struct pcmmio_subdev_private *subpriv = s->private; /* subdevice 2 uses ports 0-2, subdevice 3 uses ports 3-5 */
unsigned int chan = CR_CHAN(insn->chanspec); int port = s->index == 2 ? 0 : 3;
int byte_no = chan / 8;
int bit_no = chan % 8;
int ret; int ret;
ret = comedi_dio_insn_config(dev, s, insn, data, 0); ret = comedi_dio_insn_config(dev, s, insn, data, 0);
if (ret) if (ret)
return ret; return ret;
if (data[0] == INSN_CONFIG_DIO_INPUT) { if (data[0] == INSN_CONFIG_DIO_INPUT)
unsigned long ioaddr = subpriv->iobases[byte_no]; pcmmio_dio_write(dev, s->io_bits, 0, port);
unsigned char val;
val = inb(ioaddr);
val &= ~(1 << bit_no);
outb(val, ioaddr);
}
return insn->n; return insn->n;
} }
......
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