#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/gfp.h>
#include <linux/delay.h>
#include <linux/io.h>
#include <linux/comedi/comedidev.h>
#include <linux/comedi/comedi_8254.h>
#include <linux/comedi/comedi_isadma.h>
#define PCL812_TIMER_BASE …
#define PCL812_AI_LSB_REG …
#define PCL812_AI_MSB_REG …
#define PCL812_AI_MSB_DRDY …
#define PCL812_AO_LSB_REG(x) …
#define PCL812_AO_MSB_REG(x) …
#define PCL812_DI_LSB_REG …
#define PCL812_DI_MSB_REG …
#define PCL812_STATUS_REG …
#define PCL812_STATUS_DRDY …
#define PCL812_RANGE_REG …
#define PCL812_MUX_REG …
#define PCL812_MUX_CHAN(x) …
#define PCL812_MUX_CS0 …
#define PCL812_MUX_CS1 …
#define PCL812_CTRL_REG …
#define PCL812_CTRL_TRIG(x) …
#define PCL812_CTRL_DISABLE_TRIG …
#define PCL812_CTRL_SOFT_TRIG …
#define PCL812_CTRL_PACER_DMA_TRIG …
#define PCL812_CTRL_PACER_EOC_TRIG …
#define PCL812_SOFTTRIG_REG …
#define PCL812_DO_LSB_REG …
#define PCL812_DO_MSB_REG …
#define MAX_CHANLIST_LEN …
static const struct comedi_lrange range_pcl812pg_ai = …;
static const struct comedi_lrange range_pcl812pg2_ai = …;
static const struct comedi_lrange range812_bipolar1_25 = …;
static const struct comedi_lrange range812_bipolar0_625 = …;
static const struct comedi_lrange range812_bipolar0_3125 = …;
static const struct comedi_lrange range_pcl813b_ai = …;
static const struct comedi_lrange range_pcl813b2_ai = …;
static const struct comedi_lrange range_iso813_1_ai = …;
static const struct comedi_lrange range_iso813_1_2_ai = …;
static const struct comedi_lrange range_iso813_2_ai = …;
static const struct comedi_lrange range_iso813_2_2_ai = …;
static const struct comedi_lrange range_acl8113_1_ai = …;
static const struct comedi_lrange range_acl8113_1_2_ai = …;
static const struct comedi_lrange range_acl8113_2_ai = …;
static const struct comedi_lrange range_acl8113_2_2_ai = …;
static const struct comedi_lrange range_acl8112dg_ai = …;
static const struct comedi_lrange range_acl8112hg_ai = …;
static const struct comedi_lrange range_a821pgh_ai = …;
enum pcl812_boardtype { … };
struct pcl812_board { … };
static const struct pcl812_board boardtypes[] = …;
struct pcl812_private { … };
static void pcl812_ai_setup_dma(struct comedi_device *dev,
struct comedi_subdevice *s,
unsigned int unread_samples)
{ … }
static void pcl812_ai_set_chan_range(struct comedi_device *dev,
unsigned int chanspec, char wait)
{ … }
static void pcl812_ai_clear_eoc(struct comedi_device *dev)
{ … }
static void pcl812_ai_soft_trig(struct comedi_device *dev)
{ … }
static unsigned int pcl812_ai_get_sample(struct comedi_device *dev,
struct comedi_subdevice *s)
{ … }
static int pcl812_ai_eoc(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,
unsigned long context)
{ … }
static int pcl812_ai_cmdtest(struct comedi_device *dev,
struct comedi_subdevice *s, struct comedi_cmd *cmd)
{ … }
static int pcl812_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
{ … }
static bool pcl812_ai_next_chan(struct comedi_device *dev,
struct comedi_subdevice *s)
{ … }
static void pcl812_handle_eoc(struct comedi_device *dev,
struct comedi_subdevice *s)
{ … }
static void transfer_from_dma_buf(struct comedi_device *dev,
struct comedi_subdevice *s,
unsigned short *ptr,
unsigned int bufptr, unsigned int len)
{ … }
static void pcl812_handle_dma(struct comedi_device *dev,
struct comedi_subdevice *s)
{ … }
static irqreturn_t pcl812_interrupt(int irq, void *d)
{ … }
static int pcl812_ai_poll(struct comedi_device *dev, struct comedi_subdevice *s)
{ … }
static int pcl812_ai_cancel(struct comedi_device *dev,
struct comedi_subdevice *s)
{ … }
static int pcl812_ai_insn_read(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,
unsigned int *data)
{ … }
static int pcl812_ao_insn_write(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,
unsigned int *data)
{ … }
static int pcl812_di_insn_bits(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,
unsigned int *data)
{ … }
static int pcl812_do_insn_bits(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,
unsigned int *data)
{ … }
static void pcl812_reset(struct comedi_device *dev)
{ … }
static void pcl812_set_ai_range_table(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_devconfig *it)
{ … }
static void pcl812_alloc_dma(struct comedi_device *dev, unsigned int dma_chan)
{ … }
static void pcl812_free_dma(struct comedi_device *dev)
{ … }
static int pcl812_attach(struct comedi_device *dev, struct comedi_devconfig *it)
{ … }
static void pcl812_detach(struct comedi_device *dev)
{ … }
static struct comedi_driver pcl812_driver = …;
module_comedi_driver(…);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;