#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/slab.h>
#include <linux/comedi/comedidev.h>
#define PCMMIO_AI_LSB_REG …
#define PCMMIO_AI_MSB_REG …
#define PCMMIO_AI_CMD_REG …
#define PCMMIO_AI_CMD_SE …
#define PCMMIO_AI_CMD_ODD_CHAN …
#define PCMMIO_AI_CMD_CHAN_SEL(x) …
#define PCMMIO_AI_CMD_RANGE(x) …
#define PCMMIO_RESOURCE_REG …
#define PCMMIO_RESOURCE_IRQ(x) …
#define PCMMIO_AI_STATUS_REG …
#define PCMMIO_AI_STATUS_DATA_READY …
#define PCMMIO_AI_STATUS_DATA_DMA_PEND …
#define PCMMIO_AI_STATUS_CMD_DMA_PEND …
#define PCMMIO_AI_STATUS_IRQ_PEND …
#define PCMMIO_AI_STATUS_DATA_DRQ_ENA …
#define PCMMIO_AI_STATUS_REG_SEL …
#define PCMMIO_AI_STATUS_CMD_DRQ_ENA …
#define PCMMIO_AI_STATUS_IRQ_ENA …
#define PCMMIO_AI_RES_ENA_REG …
#define PCMMIO_AI_RES_ENA_CMD_REG_ACCESS …
#define PCMMIO_AI_RES_ENA_AI_RES_ACCESS …
#define PCMMIO_AI_RES_ENA_DIO_RES_ACCESS …
#define PCMMIO_AI_2ND_ADC_OFFSET …
#define PCMMIO_AO_LSB_REG …
#define PCMMIO_AO_LSB_SPAN(x) …
#define PCMMIO_AO_MSB_REG …
#define PCMMIO_AO_CMD_REG …
#define PCMMIO_AO_CMD_WR_SPAN …
#define PCMMIO_AO_CMD_WR_CODE …
#define PCMMIO_AO_CMD_UPDATE …
#define PCMMIO_AO_CMD_UPDATE_ALL …
#define PCMMIO_AO_CMD_WR_SPAN_UPDATE …
#define PCMMIO_AO_CMD_WR_CODE_UPDATE …
#define PCMMIO_AO_CMD_WR_SPAN_UPDATE_ALL …
#define PCMMIO_AO_CMD_WR_CODE_UPDATE_ALL …
#define PCMMIO_AO_CMD_RD_B1_SPAN …
#define PCMMIO_AO_CMD_RD_B1_CODE …
#define PCMMIO_AO_CMD_RD_B2_SPAN …
#define PCMMIO_AO_CMD_RD_B2_CODE …
#define PCMMIO_AO_CMD_NOP …
#define PCMMIO_AO_CMD_CHAN_SEL(x) …
#define PCMMIO_AO_CMD_CHAN_SEL_ALL …
#define PCMMIO_AO_STATUS_REG …
#define PCMMIO_AO_STATUS_DATA_READY …
#define PCMMIO_AO_STATUS_DATA_DMA_PEND …
#define PCMMIO_AO_STATUS_CMD_DMA_PEND …
#define PCMMIO_AO_STATUS_IRQ_PEND …
#define PCMMIO_AO_STATUS_DATA_DRQ_ENA …
#define PCMMIO_AO_STATUS_REG_SEL …
#define PCMMIO_AO_STATUS_CMD_DRQ_ENA …
#define PCMMIO_AO_STATUS_IRQ_ENA …
#define PCMMIO_AO_RESOURCE_ENA_REG …
#define PCMMIO_AO_2ND_DAC_OFFSET …
#define PCMMIO_PORT_REG(x) …
#define PCMMIO_INT_PENDING_REG …
#define PCMMIO_PAGE_LOCK_REG …
#define PCMMIO_LOCK_PORT(x) …
#define PCMMIO_PAGE(x) …
#define PCMMIO_PAGE_MASK …
#define PCMMIO_PAGE_POL …
#define PCMMIO_PAGE_ENAB …
#define PCMMIO_PAGE_INT_ID …
#define PCMMIO_PAGE_REG(x) …
static const struct comedi_lrange pcmmio_ai_ranges = …;
static const struct comedi_lrange pcmmio_ao_ranges = …;
struct pcmmio_private { … };
static void pcmmio_dio_write(struct comedi_device *dev, unsigned int val,
int page, int port)
{ … }
static unsigned int pcmmio_dio_read(struct comedi_device *dev,
int page, int port)
{ … }
static int pcmmio_dio_insn_bits(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,
unsigned int *data)
{ … }
static int pcmmio_dio_insn_config(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,
unsigned int *data)
{ … }
static void pcmmio_reset(struct comedi_device *dev)
{ … }
static void pcmmio_stop_intr(struct comedi_device *dev,
struct comedi_subdevice *s)
{ … }
static void pcmmio_handle_dio_intr(struct comedi_device *dev,
struct comedi_subdevice *s,
unsigned int triggered)
{ … }
static irqreturn_t interrupt_pcmmio(int irq, void *d)
{ … }
static void pcmmio_start_intr(struct comedi_device *dev,
struct comedi_subdevice *s)
{ … }
static int pcmmio_cancel(struct comedi_device *dev, struct comedi_subdevice *s)
{ … }
static int pcmmio_inttrig_start_intr(struct comedi_device *dev,
struct comedi_subdevice *s,
unsigned int trig_num)
{ … }
static int pcmmio_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
{ … }
static int pcmmio_cmdtest(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_cmd *cmd)
{ … }
static int pcmmio_ai_eoc(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,
unsigned long context)
{ … }
static int pcmmio_ai_insn_read(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,
unsigned int *data)
{ … }
static int pcmmio_ao_eoc(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,
unsigned long context)
{ … }
static int pcmmio_ao_insn_write(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,
unsigned int *data)
{ … }
static int pcmmio_attach(struct comedi_device *dev, struct comedi_devconfig *it)
{ … }
static struct comedi_driver pcmmio_driver = …;
module_comedi_driver(…);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;