mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-25 13:43:55 +08:00
staging: comedi: 8255: provide common defines for registers
There are a couple comedi drivers that duplicate some of the register defines used by the 8255 module. Move these defines into the header so the duplication can be removed. 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>
This commit is contained in:
parent
5c19084bbd
commit
f016209146
@ -79,19 +79,6 @@ I/O port base address can be found in the output of 'lspci -v'.
|
||||
#include "comedi_fc.h"
|
||||
#include "8255.h"
|
||||
|
||||
#define _8255_SIZE 4
|
||||
|
||||
#define _8255_DATA 0
|
||||
#define _8255_CR 3
|
||||
|
||||
#define CR_C_LO_IO 0x01
|
||||
#define CR_B_IO 0x02
|
||||
#define CR_B_MODE 0x04
|
||||
#define CR_C_HI_IO 0x08
|
||||
#define CR_A_IO 0x10
|
||||
#define CR_A_MODE(a) ((a)<<5)
|
||||
#define CR_CW 0x80
|
||||
|
||||
struct subdev_8255_private {
|
||||
unsigned long regbase;
|
||||
int (*io)(struct comedi_device *, int, int, int, unsigned long);
|
||||
@ -130,18 +117,19 @@ static int subdev_8255_insn(struct comedi_device *dev,
|
||||
mask = comedi_dio_update_state(s, data);
|
||||
if (mask) {
|
||||
if (mask & 0xff)
|
||||
spriv->io(dev, 1, _8255_DATA, s->state & 0xff, regbase);
|
||||
spriv->io(dev, 1, I8255_DATA_A_REG,
|
||||
s->state & 0xff, regbase);
|
||||
if (mask & 0xff00)
|
||||
spriv->io(dev, 1, _8255_DATA + 1,
|
||||
spriv->io(dev, 1, I8255_DATA_B_REG,
|
||||
(s->state >> 8) & 0xff, regbase);
|
||||
if (mask & 0xff0000)
|
||||
spriv->io(dev, 1, _8255_DATA + 2,
|
||||
spriv->io(dev, 1, I8255_DATA_C_REG,
|
||||
(s->state >> 16) & 0xff, regbase);
|
||||
}
|
||||
|
||||
v = spriv->io(dev, 0, _8255_DATA, 0, regbase);
|
||||
v |= (spriv->io(dev, 0, _8255_DATA + 1, 0, regbase) << 8);
|
||||
v |= (spriv->io(dev, 0, _8255_DATA + 2, 0, regbase) << 16);
|
||||
v = spriv->io(dev, 0, I8255_DATA_A_REG, 0, regbase);
|
||||
v |= (spriv->io(dev, 0, I8255_DATA_B_REG, 0, regbase) << 8);
|
||||
v |= (spriv->io(dev, 0, I8255_DATA_C_REG, 0, regbase) << 16);
|
||||
|
||||
data[1] = v;
|
||||
|
||||
@ -155,18 +143,18 @@ static void subdev_8255_do_config(struct comedi_device *dev,
|
||||
unsigned long regbase = spriv->regbase;
|
||||
int config;
|
||||
|
||||
config = CR_CW;
|
||||
config = I8255_CTRL_CW;
|
||||
/* 1 in io_bits indicates output, 1 in config indicates input */
|
||||
if (!(s->io_bits & 0x0000ff))
|
||||
config |= CR_A_IO;
|
||||
config |= I8255_CTRL_A_IO;
|
||||
if (!(s->io_bits & 0x00ff00))
|
||||
config |= CR_B_IO;
|
||||
config |= I8255_CTRL_B_IO;
|
||||
if (!(s->io_bits & 0x0f0000))
|
||||
config |= CR_C_LO_IO;
|
||||
config |= I8255_CTRL_C_LO_IO;
|
||||
if (!(s->io_bits & 0xf00000))
|
||||
config |= CR_C_HI_IO;
|
||||
config |= I8255_CTRL_C_HI_IO;
|
||||
|
||||
spriv->io(dev, 1, _8255_CR, config, regbase);
|
||||
spriv->io(dev, 1, I8255_CTRL_REG, config, regbase);
|
||||
}
|
||||
|
||||
static int subdev_8255_insn_config(struct comedi_device *dev,
|
||||
@ -286,7 +274,7 @@ static int dev_8255_attach(struct comedi_device *dev,
|
||||
* comedi_config, the 'iobase' is the actual I/O port
|
||||
* base address of the chip.
|
||||
*/
|
||||
ret = __comedi_request_region(dev, iobase, _8255_SIZE);
|
||||
ret = __comedi_request_region(dev, iobase, I8255_SIZE);
|
||||
if (ret) {
|
||||
s->type = COMEDI_SUBD_UNUSED;
|
||||
} else {
|
||||
@ -309,7 +297,7 @@ static void dev_8255_detach(struct comedi_device *dev)
|
||||
s = &dev->subdevices[i];
|
||||
if (s->type != COMEDI_SUBD_UNUSED) {
|
||||
spriv = s->private;
|
||||
release_region(spriv->regbase, _8255_SIZE);
|
||||
release_region(spriv->regbase, I8255_SIZE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,20 @@
|
||||
|
||||
#include "../comedidev.h"
|
||||
|
||||
#define I8255_SIZE 0x04
|
||||
|
||||
#define I8255_DATA_A_REG 0x00
|
||||
#define I8255_DATA_B_REG 0x01
|
||||
#define I8255_DATA_C_REG 0x02
|
||||
#define I8255_CTRL_REG 0x03
|
||||
#define I8255_CTRL_C_LO_IO (1 << 0)
|
||||
#define I8255_CTRL_B_IO (1 << 1)
|
||||
#define I8255_CTRL_B_MODE (1 << 2)
|
||||
#define I8255_CTRL_C_HI_IO (1 << 3)
|
||||
#define I8255_CTRL_A_IO (1 << 4)
|
||||
#define I8255_CTRL_A_MODE(x) ((x) << 5)
|
||||
#define I8255_CTRL_CW (1 << 7)
|
||||
|
||||
int subdev_8255_init(struct comedi_device *, struct comedi_subdevice *,
|
||||
int (*io)(struct comedi_device *,
|
||||
int, int, int, unsigned long),
|
||||
|
@ -236,9 +236,9 @@ static int pci_8255_auto_attach(struct comedi_device *dev,
|
||||
for (i = 0; i < board->n_8255; i++) {
|
||||
s = &dev->subdevices[i];
|
||||
if (dev->mmio)
|
||||
ret = subdev_8255_mm_init(dev, s, NULL, i * 4);
|
||||
ret = subdev_8255_mm_init(dev, s, NULL, i * I8255_SIZE);
|
||||
else
|
||||
ret = subdev_8255_init(dev, s, NULL, i * 4);
|
||||
ret = subdev_8255_init(dev, s, NULL, i * I8255_SIZE);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
@ -66,7 +66,6 @@ enum hw_io_access {
|
||||
* subdevice) */
|
||||
|
||||
#define SIZE_8254 4 /* 8254 IO space length */
|
||||
#define SIZE_8255 4 /* 8255 IO space length */
|
||||
|
||||
#define PCIDIO_MAINREG 2 /* main I/O region for all Advantech cards? */
|
||||
|
||||
@ -1133,7 +1132,7 @@ static int pci_dio_auto_attach(struct comedi_device *dev,
|
||||
s = &dev->subdevices[subdev];
|
||||
ret = subdev_8255_init(dev, s, NULL,
|
||||
this_board->sdio[i].addr +
|
||||
SIZE_8255 * j);
|
||||
j * I8255_SIZE);
|
||||
if (ret)
|
||||
return ret;
|
||||
subdev++;
|
||||
|
@ -27,15 +27,7 @@
|
||||
#include "amplc_dio200.h"
|
||||
#include "comedi_fc.h"
|
||||
#include "8253.h"
|
||||
|
||||
/* 8255 control register bits */
|
||||
#define CR_C_LO_IO 0x01
|
||||
#define CR_B_IO 0x02
|
||||
#define CR_B_MODE 0x04
|
||||
#define CR_C_HI_IO 0x08
|
||||
#define CR_A_IO 0x10
|
||||
#define CR_A_MODE(a) ((a)<<5)
|
||||
#define CR_CW 0x80
|
||||
#include "8255.h" /* only for register defines */
|
||||
|
||||
/* 200 series registers */
|
||||
#define DIO200_IO_SIZE 0x20
|
||||
@ -815,17 +807,17 @@ static void dio200_subdev_8255_set_dir(struct comedi_device *dev,
|
||||
struct dio200_subdev_8255 *subpriv = s->private;
|
||||
int config;
|
||||
|
||||
config = CR_CW;
|
||||
config = I8255_CTRL_CW;
|
||||
/* 1 in io_bits indicates output, 1 in config indicates input */
|
||||
if (!(s->io_bits & 0x0000ff))
|
||||
config |= CR_A_IO;
|
||||
config |= I8255_CTRL_A_IO;
|
||||
if (!(s->io_bits & 0x00ff00))
|
||||
config |= CR_B_IO;
|
||||
config |= I8255_CTRL_B_IO;
|
||||
if (!(s->io_bits & 0x0f0000))
|
||||
config |= CR_C_LO_IO;
|
||||
config |= I8255_CTRL_C_LO_IO;
|
||||
if (!(s->io_bits & 0xf00000))
|
||||
config |= CR_C_HI_IO;
|
||||
dio200_write8(dev, subpriv->ofs + 3, config);
|
||||
config |= I8255_CTRL_C_HI_IO;
|
||||
dio200_write8(dev, subpriv->ofs + I8255_CTRL_REG, config);
|
||||
}
|
||||
|
||||
static int dio200_subdev_8255_bits(struct comedi_device *dev,
|
||||
@ -840,18 +832,19 @@ static int dio200_subdev_8255_bits(struct comedi_device *dev,
|
||||
mask = comedi_dio_update_state(s, data);
|
||||
if (mask) {
|
||||
if (mask & 0xff)
|
||||
dio200_write8(dev, subpriv->ofs, s->state & 0xff);
|
||||
dio200_write8(dev, subpriv->ofs + I8255_DATA_A_REG,
|
||||
s->state & 0xff);
|
||||
if (mask & 0xff00)
|
||||
dio200_write8(dev, subpriv->ofs + 1,
|
||||
dio200_write8(dev, subpriv->ofs + I8255_DATA_B_REG,
|
||||
(s->state >> 8) & 0xff);
|
||||
if (mask & 0xff0000)
|
||||
dio200_write8(dev, subpriv->ofs + 2,
|
||||
dio200_write8(dev, subpriv->ofs + I8255_DATA_C_REG,
|
||||
(s->state >> 16) & 0xff);
|
||||
}
|
||||
|
||||
val = dio200_read8(dev, subpriv->ofs);
|
||||
val |= dio200_read8(dev, subpriv->ofs + 1) << 8;
|
||||
val |= dio200_read8(dev, subpriv->ofs + 2) << 16;
|
||||
val = dio200_read8(dev, subpriv->ofs + I8255_DATA_A_REG);
|
||||
val |= dio200_read8(dev, subpriv->ofs + I8255_DATA_B_REG) << 8;
|
||||
val |= dio200_read8(dev, subpriv->ofs + I8255_DATA_C_REG) << 16;
|
||||
|
||||
data[1] = val;
|
||||
|
||||
|
@ -378,7 +378,7 @@ static int cb_pcidda_auto_attach(struct comedi_device *dev,
|
||||
/* two 8255 digital io subdevices */
|
||||
for (i = 0; i < 2; i++) {
|
||||
s = &dev->subdevices[1 + i];
|
||||
ret = subdev_8255_init(dev, s, NULL, i * 4);
|
||||
ret = subdev_8255_init(dev, s, NULL, i * I8255_SIZE);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
@ -32,8 +32,6 @@
|
||||
|
||||
#include "8255.h"
|
||||
|
||||
#define SIZE_8255 4
|
||||
|
||||
struct pcl724_board {
|
||||
const char *name;
|
||||
unsigned int io_range;
|
||||
@ -85,7 +83,7 @@ static int pcl724_8255mapped_io(struct comedi_device *dev,
|
||||
int dir, int port, int data,
|
||||
unsigned long iobase)
|
||||
{
|
||||
int movport = SIZE_8255 * (iobase >> 12);
|
||||
int movport = I8255_SIZE * (iobase >> 12);
|
||||
|
||||
iobase &= 0x0fff;
|
||||
|
||||
@ -133,7 +131,7 @@ static int pcl724_attach(struct comedi_device *dev,
|
||||
ret = subdev_8255_init(dev, s, pcl724_8255mapped_io,
|
||||
iobase);
|
||||
} else {
|
||||
ret = subdev_8255_init(dev, s, NULL, i * SIZE_8255);
|
||||
ret = subdev_8255_init(dev, s, NULL, i * I8255_SIZE);
|
||||
}
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -33,8 +33,6 @@ Copy/pasted/hacked from pcm724.c
|
||||
|
||||
#include "8255.h"
|
||||
|
||||
#define SIZE_8255 4
|
||||
|
||||
#define BUF_C0 0x1
|
||||
#define BUF_B0 0x2
|
||||
#define BUF_A0 0x4
|
||||
@ -49,16 +47,6 @@ Copy/pasted/hacked from pcm724.c
|
||||
#define GATE_B1 0x10
|
||||
#define GATE_C1 0x8
|
||||
|
||||
/* from 8255.c */
|
||||
#define CR_CW 0x80
|
||||
#define _8255_CR 3
|
||||
#define CR_B_IO 0x02
|
||||
#define CR_B_MODE 0x04
|
||||
#define CR_C_IO 0x09
|
||||
#define CR_A_IO 0x10
|
||||
#define CR_A_MODE(a) ((a)<<5)
|
||||
#define CR_CW 0x80
|
||||
|
||||
/* used to track configured dios */
|
||||
struct priv_pcm3724 {
|
||||
int dio_1;
|
||||
@ -98,26 +86,26 @@ static void do_3724_config(struct comedi_device *dev,
|
||||
int buffer_config;
|
||||
unsigned long port_8255_cfg;
|
||||
|
||||
config = CR_CW;
|
||||
config = I8255_CTRL_CW;
|
||||
buffer_config = 0;
|
||||
|
||||
/* 1 in io_bits indicates output, 1 in config indicates input */
|
||||
if (!(s->io_bits & 0x0000ff))
|
||||
config |= CR_A_IO;
|
||||
config |= I8255_CTRL_A_IO;
|
||||
|
||||
if (!(s->io_bits & 0x00ff00))
|
||||
config |= CR_B_IO;
|
||||
config |= I8255_CTRL_B_IO;
|
||||
|
||||
if (!(s->io_bits & 0xff0000))
|
||||
config |= CR_C_IO;
|
||||
config |= I8255_CTRL_C_HI_IO | I8255_CTRL_C_LO_IO;
|
||||
|
||||
buffer_config = compute_buffer(0, 0, s_dio1);
|
||||
buffer_config = compute_buffer(buffer_config, 1, s_dio2);
|
||||
|
||||
if (s == s_dio1)
|
||||
port_8255_cfg = dev->iobase + _8255_CR;
|
||||
port_8255_cfg = dev->iobase + I8255_CTRL_REG;
|
||||
else
|
||||
port_8255_cfg = dev->iobase + SIZE_8255 + _8255_CR;
|
||||
port_8255_cfg = dev->iobase + I8255_SIZE + I8255_CTRL_REG;
|
||||
|
||||
outb(buffer_config, dev->iobase + 8); /* update buffer register */
|
||||
|
||||
@ -211,7 +199,7 @@ static int pcm3724_attach(struct comedi_device *dev,
|
||||
|
||||
for (i = 0; i < dev->n_subdevices; i++) {
|
||||
s = &dev->subdevices[i];
|
||||
ret = subdev_8255_init(dev, s, NULL, i * SIZE_8255);
|
||||
ret = subdev_8255_init(dev, s, NULL, i * I8255_SIZE);
|
||||
if (ret)
|
||||
return ret;
|
||||
s->insn_config = subdev_3724_insn_config;
|
||||
|
Loading…
Reference in New Issue
Block a user