linux/drivers/comedi/drivers/das16.c

// SPDX-License-Identifier: GPL-2.0+
/*
 * das16.c
 * DAS16 driver
 *
 * COMEDI - Linux Control and Measurement Device Interface
 * Copyright (C) 2000 David A. Schleef <[email protected]>
 * Copyright (C) 2000 Chris R. Baugher <[email protected]>
 * Copyright (C) 2001,2002 Frank Mori Hess <[email protected]>
 */

/*
 * Driver: das16
 * Description: DAS16 compatible boards
 * Author: Sam Moore, Warren Jasper, ds, Chris Baugher, Frank Hess, Roman Fietze
 * Devices: [Keithley Metrabyte] DAS-16 (das-16), DAS-16G (das-16g),
 *   DAS-16F (das-16f), DAS-1201 (das-1201), DAS-1202 (das-1202),
 *   DAS-1401 (das-1401), DAS-1402 (das-1402), DAS-1601 (das-1601),
 *   DAS-1602 (das-1602),
 *   [ComputerBoards] PC104-DAS16/JR (pc104-das16jr),
 *   PC104-DAS16JR/16 (pc104-das16jr/16), CIO-DAS16 (cio-das16),
 *   CIO-DAS16F (cio-das16/f), CIO-DAS16/JR (cio-das16/jr),
 *   CIO-DAS16JR/16 (cio-das16jr/16), CIO-DAS1401/12 (cio-das1401/12),
 *   CIO-DAS1402/12 (cio-das1402/12), CIO-DAS1402/16 (cio-das1402/16),
 *   CIO-DAS1601/12 (cio-das1601/12), CIO-DAS1602/12 (cio-das1602/12),
 *   CIO-DAS1602/16 (cio-das1602/16), CIO-DAS16/330 (cio-das16/330)
 * Status: works
 * Updated: 2003-10-12
 *
 * A rewrite of the das16 and das1600 drivers.
 *
 * Options:
 *	[0] - base io address
 *	[1] - irq (does nothing, irq is not used anymore)
 *	[2] - dma channel (optional, required for comedi_command support)
 *	[3] - master clock speed in MHz (optional, 1 or 10, ignored if
 *		board can probe clock, defaults to 1)
 *	[4] - analog input range lowest voltage in microvolts (optional,
 *		only useful if your board does not have software
 *		programmable gain)
 *	[5] - analog input range highest voltage in microvolts (optional,
 *		only useful if board does not have software programmable
 *		gain)
 *	[6] - analog output range lowest voltage in microvolts (optional)
 *	[7] - analog output range highest voltage in microvolts (optional)
 *
 * Passing a zero for an option is the same as leaving it unspecified.
 */

/*
 * Testing and debugging help provided by Daniel Koch.
 *
 * Keithley Manuals:
 *	2309.PDF (das16)
 *	4919.PDF (das1400, 1600)
 *	4922.PDF (das-1400)
 *	4923.PDF (das1200, 1400, 1600)
 *
 * Computer boards manuals also available from their website
 * www.measurementcomputing.com
 */

#include <linux/module.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/comedi/comedidev.h>
#include <linux/comedi/comedi_8255.h>
#include <linux/comedi/comedi_8254.h>
#include <linux/comedi/comedi_isadma.h>

#define DAS16_DMA_SIZE

/*
 * Register I/O map
 */
#define DAS16_TRIG_REG
#define DAS16_AI_LSB_REG
#define DAS16_AI_MSB_REG
#define DAS16_MUX_REG
#define DAS16_DIO_REG
#define DAS16_AO_LSB_REG(x)
#define DAS16_AO_MSB_REG(x)
#define DAS16_STATUS_REG
#define DAS16_STATUS_BUSY
#define DAS16_STATUS_UNIPOLAR
#define DAS16_STATUS_MUXBIT
#define DAS16_STATUS_INT
#define DAS16_CTRL_REG
#define DAS16_CTRL_INTE
#define DAS16_CTRL_IRQ(x)
#define DAS16_CTRL_DMAE
#define DAS16_CTRL_PACING_MASK
#define DAS16_CTRL_INT_PACER
#define DAS16_CTRL_EXT_PACER
#define DAS16_CTRL_SOFT_PACER
#define DAS16_PACER_REG
#define DAS16_PACER_BURST_LEN(x)
#define DAS16_PACER_CTR0
#define DAS16_PACER_TRIG0
#define DAS16_GAIN_REG
#define DAS16_TIMER_BASE_REG

#define DAS1600_CONV_REG
#define DAS1600_CONV_DISABLE
#define DAS1600_BURST_REG
#define DAS1600_BURST_VAL
#define DAS1600_ENABLE_REG
#define DAS1600_ENABLE_VAL
#define DAS1600_STATUS_REG
#define DAS1600_STATUS_BME
#define DAS1600_STATUS_ME
#define DAS1600_STATUS_CD
#define DAS1600_STATUS_WS
#define DAS1600_STATUS_CLK_10MHZ

static const struct comedi_lrange range_das1x01_bip =;

static const struct comedi_lrange range_das1x01_unip =;

static const struct comedi_lrange range_das1x02_bip =;

static const struct comedi_lrange range_das1x02_unip =;

static const struct comedi_lrange range_das16jr =;

static const struct comedi_lrange range_das16jr_16 =;

static const int das16jr_gainlist[] =;
static const int das16jr_16_gainlist[] =;
static const int das1600_gainlist[] =;

enum {};

static const int *const das16_gainlists[] =;

static const struct comedi_lrange *const das16_ai_uni_lranges[] =;

static const struct comedi_lrange *const das16_ai_bip_lranges[] =;

struct das16_board {};

static const struct das16_board das16_boards[] =;

/*
 * Period for timer interrupt in jiffies.  It's a function
 * to deal with possibility of dynamic HZ patches
 */
static inline int timer_period(void)
{}

struct das16_private_struct {};

static void das16_ai_setup_dma(struct comedi_device *dev,
			       struct comedi_subdevice *s,
			       unsigned int unread_samples)
{}

static void das16_interrupt(struct comedi_device *dev)
{}

static void das16_timer_interrupt(struct timer_list *t)
{}

static void das16_ai_set_mux_range(struct comedi_device *dev,
				   unsigned int first_chan,
				   unsigned int last_chan,
				   unsigned int range)
{}

static int das16_ai_check_chanlist(struct comedi_device *dev,
				   struct comedi_subdevice *s,
				   struct comedi_cmd *cmd)
{}

static int das16_cmd_test(struct comedi_device *dev, struct comedi_subdevice *s,
			  struct comedi_cmd *cmd)
{}

static unsigned int das16_set_pacer(struct comedi_device *dev, unsigned int ns,
				    unsigned int flags)
{}

static int das16_cmd_exec(struct comedi_device *dev, struct comedi_subdevice *s)
{}

static int das16_cancel(struct comedi_device *dev, struct comedi_subdevice *s)
{}

static void das16_ai_munge(struct comedi_device *dev,
			   struct comedi_subdevice *s, void *array,
			   unsigned int num_bytes,
			   unsigned int start_chan_index)
{}

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

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

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

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

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

static int das16_probe(struct comedi_device *dev, struct comedi_devconfig *it)
{}

static void das16_reset(struct comedi_device *dev)
{}

static void das16_alloc_dma(struct comedi_device *dev, unsigned int dma_chan)
{}

static void das16_free_dma(struct comedi_device *dev)
{}

static const struct comedi_lrange *das16_ai_range(struct comedi_device *dev,
						  struct comedi_subdevice *s,
						  struct comedi_devconfig *it,
						  unsigned int pg_type,
						  unsigned int status)
{}

static const struct comedi_lrange *das16_ao_range(struct comedi_device *dev,
						  struct comedi_subdevice *s,
						  struct comedi_devconfig *it)
{}

static int das16_attach(struct comedi_device *dev, struct comedi_devconfig *it)
{}

static void das16_detach(struct comedi_device *dev)
{}

static struct comedi_driver das16_driver =;
module_comedi_driver();

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