linux/drivers/comedi/drivers/icp_multi.c

// SPDX-License-Identifier: GPL-2.0+
/*
 * icp_multi.c
 * Comedi driver for Inova ICP_MULTI board
 *
 * COMEDI - Linux Control and Measurement Device Interface
 * Copyright (C) 1997-2002 David A. Schleef <[email protected]>
 */

/*
 * Driver: icp_multi
 * Description: Inova ICP_MULTI
 * Devices: [Inova] ICP_MULTI (icp_multi)
 * Author: Anne Smorthit <[email protected]>
 * Status: works
 *
 * Configuration options: not applicable, uses PCI auto config
 *
 * The driver works for analog input and output and digital input and
 * output. It does not work with interrupts or with the counters. Currently
 * no support for DMA.
 *
 * It has 16 single-ended or 8 differential Analogue Input channels with
 * 12-bit resolution.  Ranges : 5V, 10V, +/-5V, +/-10V, 0..20mA and 4..20mA.
 * Input ranges can be individually programmed for each channel.  Voltage or
 * current measurement is selected by jumper.
 *
 * There are 4 x 12-bit Analogue Outputs.  Ranges : 5V, 10V, +/-5V, +/-10V
 *
 * 16 x Digital Inputs, 24V
 *
 * 8 x Digital Outputs, 24V, 1A
 *
 * 4 x 16-bit counters - not implemented
 */

#include <linux/module.h>
#include <linux/delay.h>
#include <linux/comedi/comedi_pci.h>

#define ICP_MULTI_ADC_CSR
#define ICP_MULTI_ADC_CSR_ST
#define ICP_MULTI_ADC_CSR_BSY
#define ICP_MULTI_ADC_CSR_BI
#define ICP_MULTI_ADC_CSR_RA
#define ICP_MULTI_ADC_CSR_DI
#define ICP_MULTI_ADC_CSR_DI_CHAN(x)
#define ICP_MULTI_ADC_CSR_SE_CHAN(x)
#define ICP_MULTI_AI
#define ICP_MULTI_DAC_CSR
#define ICP_MULTI_DAC_CSR_ST
#define ICP_MULTI_DAC_CSR_BSY
#define ICP_MULTI_DAC_CSR_BI
#define ICP_MULTI_DAC_CSR_RA
#define ICP_MULTI_DAC_CSR_CHAN(x)
#define ICP_MULTI_AO
#define ICP_MULTI_DI
#define ICP_MULTI_DO
#define ICP_MULTI_INT_EN
#define ICP_MULTI_INT_STAT
#define ICP_MULTI_INT_ADC_RDY
#define ICP_MULTI_INT_DAC_RDY
#define ICP_MULTI_INT_DOUT_ERR
#define ICP_MULTI_INT_DIN_STAT
#define ICP_MULTI_INT_CIE0
#define ICP_MULTI_INT_CIE1
#define ICP_MULTI_INT_CIE2
#define ICP_MULTI_INT_CIE3
#define ICP_MULTI_INT_MASK
#define ICP_MULTI_CNTR0
#define ICP_MULTI_CNTR1
#define ICP_MULTI_CNTR2
#define ICP_MULTI_CNTR3

/* analog input and output have the same range options */
static const struct comedi_lrange icp_multi_ranges =;

static const char range_codes_analog[] =;

static int icp_multi_ai_eoc(struct comedi_device *dev,
			    struct comedi_subdevice *s,
			    struct comedi_insn *insn,
			    unsigned long context)
{}

static int icp_multi_ai_insn_read(struct comedi_device *dev,
				  struct comedi_subdevice *s,
				  struct comedi_insn *insn,
				  unsigned int *data)
{}

static int icp_multi_ao_ready(struct comedi_device *dev,
			      struct comedi_subdevice *s,
			      struct comedi_insn *insn,
			      unsigned long context)
{}

static int icp_multi_ao_insn_write(struct comedi_device *dev,
				   struct comedi_subdevice *s,
				   struct comedi_insn *insn,
				   unsigned int *data)
{}

static int icp_multi_di_insn_bits(struct comedi_device *dev,
				  struct comedi_subdevice *s,
				  struct comedi_insn *insn,
				  unsigned int *data)
{}

static int icp_multi_do_insn_bits(struct comedi_device *dev,
				  struct comedi_subdevice *s,
				  struct comedi_insn *insn,
				  unsigned int *data)
{}

static int icp_multi_reset(struct comedi_device *dev)
{}

static int icp_multi_auto_attach(struct comedi_device *dev,
				 unsigned long context_unused)
{}

static struct comedi_driver icp_multi_driver =;

static int icp_multi_pci_probe(struct pci_dev *dev,
			       const struct pci_device_id *id)
{}

static const struct pci_device_id icp_multi_pci_table[] =;
MODULE_DEVICE_TABLE(pci, icp_multi_pci_table);

static struct pci_driver icp_multi_pci_driver =;
module_comedi_pci_driver();

MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();