OSDN Git Service

staging: comedi: s526: define the digtial I/O control register and bits
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Mon, 17 Aug 2015 23:58:18 +0000 (16:58 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 13 Sep 2015 01:24:21 +0000 (18:24 -0700)
Define this register and its bits 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/s526.c

index 11a661b..0f56a89 100644 (file)
 #define S526_AI_CTRL_START     BIT(0)
 #define S526_AO_REG            0x08
 #define S526_AI_REG            0x08
-#define REG_DIO 0x0A
+#define S526_DIO_CTRL_REG      0x0a
+#define S526_DIO_CTRL_DIO3_NEG BIT(15) /* irq on DIO3 neg/pos edge */
+#define S526_DIO_CTRL_DIO2_NEG BIT(14) /* irq on DIO2 neg/pos edge */
+#define S526_DIO_CTRL_DIO1_NEG BIT(13) /* irq on DIO1 neg/pos edge */
+#define S526_DIO_CTRL_DIO0_NEG BIT(12) /* irq on DIO0 neg/pos edge */
+#define S526_DIO_CTRL_GRP2_OUT BIT(11)
+#define S526_DIO_CTRL_GRP1_OUT BIT(10)
+#define S526_DIO_CTRL_GRP2_NEG BIT(8)  /* irq on DIO[4-7] neg/pos edge */
 #define S526_INT_ENA_REG       0x0c
 #define S526_INT_STATUS_REG    0x0e
 #define S526_INT_DIO(x)                BIT(8 + ((x) & 0x7))
@@ -490,9 +497,9 @@ static int s526_dio_insn_bits(struct comedi_device *dev,
                              unsigned int *data)
 {
        if (comedi_dio_update_state(s, data))
-               outw(s->state, dev->iobase + REG_DIO);
+               outw(s->state, dev->iobase + S526_DIO_CTRL_REG);
 
-       data[1] = inw(dev->iobase + REG_DIO) & 0xff;
+       data[1] = inw(dev->iobase + S526_DIO_CTRL_REG) & 0xff;
 
        return insn->n;
 }
@@ -506,6 +513,10 @@ static int s526_dio_insn_config(struct comedi_device *dev,
        unsigned int mask;
        int ret;
 
+       /*
+        * Digital I/O can be configured as inputs or outputs in
+        * groups of 4; DIO group 1 (DIO0-3) and DIO group 2 (DIO4-7).
+        */
        if (chan < 4)
                mask = 0x0f;
        else
@@ -515,17 +526,16 @@ static int s526_dio_insn_config(struct comedi_device *dev,
        if (ret)
                return ret;
 
-       /* bit 10/11 set the group 1/2's mode */
        if (s->io_bits & 0x0f)
-               s->state |= (1 << 10);
+               s->state |= S526_DIO_CTRL_GRP1_OUT;
        else
-               s->state &= ~(1 << 10);
+               s->state &= ~S526_DIO_CTRL_GRP1_OUT;
        if (s->io_bits & 0xf0)
-               s->state |= (1 << 11);
+               s->state |= S526_DIO_CTRL_GRP2_OUT;
        else
-               s->state &= ~(1 << 11);
+               s->state &= ~S526_DIO_CTRL_GRP2_OUT;
 
-       outw(s->state, dev->iobase + REG_DIO);
+       outw(s->state, dev->iobase + S526_DIO_CTRL_REG);
 
        return insn->n;
 }