staging: comedi: adv_pci1723: tidy up DIO io_bits initialization
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Fri, 21 Nov 2014 21:22:33 +0000 (14:22 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 26 Nov 2014 23:40:00 +0000 (15:40 -0800)
Tidy up the code that determines the initial io_bits (direction) of the
digital I/O subdevice and remove the magic numbers.

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>
drivers/staging/comedi/drivers/adv_pci1723.c

index 53f2b21585945360f763c9db26aa912dc119eb3c..01e90d9468602b2126734a897981ceafb029aa81 100644 (file)
@@ -144,6 +144,7 @@ static int pci1723_auto_attach(struct comedi_device *dev,
 {
        struct pci_dev *pcidev = comedi_to_pci_dev(dev);
        struct comedi_subdevice *s;
+       unsigned int val;
        int ret;
        int i;
 
@@ -195,22 +196,12 @@ static int pci1723_auto_attach(struct comedi_device *dev,
        s->insn_config  = pci1723_dio_insn_config;
        s->insn_bits    = pci1723_dio_insn_bits;
 
-       /* read DIO config */
-       switch (inw(dev->iobase + PCI1723_DIO_CTRL_REG) & 0x03) {
-       case 0x00:      /* low byte output, high byte output */
-               s->io_bits = 0xFFFF;
-               break;
-       case 0x01:      /* low byte input, high byte output */
-               s->io_bits = 0xFF00;
-               break;
-       case 0x02:      /* low byte output, high byte input */
-               s->io_bits = 0x00FF;
-               break;
-       case 0x03:      /* low byte input, high byte input */
-               s->io_bits = 0x0000;
-               break;
-       }
-       /* read DIO port state */
+       /* get initial DIO direction and state */
+       val = inw(dev->iobase + PCI1723_DIO_CTRL_REG);
+       if (!(val & PCI1723_DIO_CTRL_LDIO))
+               s->io_bits |= 0x00ff;   /* low byte output */
+       if (!(val & PCI1723_DIO_CTRL_HDIO))
+               s->io_bits |= 0xff00;   /* high byte output */
        s->state = inw(dev->iobase + PCI1723_DIO_DATA_REG);
 
        return 0;
This page took 0.027716 seconds and 5 git commands to generate.