115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman/*
215d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman * Copyright (C) 2004,2005  ADDI-DATA GmbH for the source code of this module.
315d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman *
415d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman *	ADDI-DATA GmbH
515d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman *	Dieselstrasse 3
615d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman *	D-77833 Ottersweier
715d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman *	Tel: +19(0)7223/9493-0
815d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman *	Fax: +49(0)7223/9493-92
925417922694e60f04cd4dc8448ada9236f18c532Justin P. Mattock *	http://www.addi-data.com
1015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman *	info@addi-data.com
1115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman *
1215d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman * This program is free software; you can redistribute it and/or modify it
1315d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman * under the terms of the GNU General Public License as published by the Free
1415d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman * Software Foundation; either version 2 of the License, or (at your option)
1515d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman * any later version.
1615d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman */
17c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
182696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* Card Specific information */
19c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_BOARD_VENDOR_ID                 0x15B8
20c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_ADDRESS_RANGE                   255
21c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
22c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_DIGITAL_IP                       0x50
23c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_DIGITAL_OP                       0x40
24c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_ANALOG_OUTPUT                    0x00
25c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
262696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* Analog Output related Defines */
27c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_AO_VOLT_MODE                     0
28c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_AO_PROG                          4
29c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_AO_TRIG_SCS                      8
30c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define UNIPOLAR                                  0
31c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define BIPOLAR                                   1
32c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define MODE0                                     0
33c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define MODE1                                     1
342696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* ANALOG OUTPUT RANGE */
35a6dc6d0df2e87c18af3c8b47d3c29613f5c90d9fGreg Kroah-Hartmanstatic struct comedi_lrange range_apci3501_ao = { 2, {
3615d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman					BIP_RANGE(10),
3715d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman					UNI_RANGE(10)
3815d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman					}
39c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH};
40c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
412696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* Watchdog Related Defines */
42c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
43c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_WATCHDOG                         0x20
44c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_TCW_SYNC_ENABLEDISABLE           0
45c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_TCW_RELOAD_VALUE                 4
46c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_TCW_TIMEBASE                     8
47c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_TCW_PROG                         12
48c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_TCW_TRIG_STATUS                  16
49c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_TCW_IRQ                          20
50c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_TCW_WARN_TIMEVAL                 24
51c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3501_TCW_WARN_TIMEBASE                28
52c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define ADDIDATA_TIMER                            0
53c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define ADDIDATA_WATCHDOG                         2
54c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
552696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* Hardware Layer  functions for Apci3501 */
56c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
572696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* AO */
5874b894e56abcb2403894b268100773f4aabe1999Bill Pembertonint i_APCI3501_ConfigAnalogOutput(struct comedi_device *dev, struct comedi_subdevice *s,
5990035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton				  struct comedi_insn *insn, unsigned int *data);
6074b894e56abcb2403894b268100773f4aabe1999Bill Pembertonint i_APCI3501_WriteAnalogOutput(struct comedi_device *dev, struct comedi_subdevice *s,
6190035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton				 struct comedi_insn *insn, unsigned int *data);
62c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
632696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/*
642696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton* DI for di read INT i_APCI3501_ReadDigitalInput(struct
652696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton* comedi_device *dev,struct comedi_subdevice *s,struct comedi_insn
662696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton* *insn,unsigned int *data);
672696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton*/
68c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
6974b894e56abcb2403894b268100773f4aabe1999Bill Pembertonint i_APCI3501_ReadDigitalInput(struct comedi_device *dev, struct comedi_subdevice *s,
7090035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton				struct comedi_insn *insn, unsigned int *data);
71c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
722696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* DO */
7334c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pembertonint i_APCI3501_ConfigDigitalOutput(struct comedi_device *dev, struct comedi_subdevice *s,
7490035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton				   struct comedi_insn *insn, unsigned int *data);
7574b894e56abcb2403894b268100773f4aabe1999Bill Pembertonint i_APCI3501_WriteDigitalOutput(struct comedi_device *dev, struct comedi_subdevice *s,
7690035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton				  struct comedi_insn *insn, unsigned int *data);
7774b894e56abcb2403894b268100773f4aabe1999Bill Pembertonint i_APCI3501_ReadDigitalOutput(struct comedi_device *dev, struct comedi_subdevice *s,
7890035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton				 struct comedi_insn *insn, unsigned int *data);
79c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
802696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* TIMER
812696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton * timer value is passed as u seconds
822696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton */
832696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton
8474b894e56abcb2403894b268100773f4aabe1999Bill Pembertonint i_APCI3501_ConfigTimerCounterWatchdog(struct comedi_device *dev,
8534c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton					  struct comedi_subdevice *s,
8690035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton					  struct comedi_insn *insn, unsigned int *data);
8771b5f4f11971dea972832ad63a994c7e5b45db6bBill Pembertonint i_APCI3501_StartStopWriteTimerCounterWatchdog(struct comedi_device *dev,
8834c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton						  struct comedi_subdevice *s,
8990035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton						  struct comedi_insn *insn,
90790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton						  unsigned int *data);
9171b5f4f11971dea972832ad63a994c7e5b45db6bBill Pembertonint i_APCI3501_ReadTimerCounterWatchdog(struct comedi_device *dev,
9234c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton					struct comedi_subdevice *s,
9390035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton					struct comedi_insn *insn, unsigned int *data);
942696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* Interrupt */
95c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_APCI3501_Interrupt(int irq, void *d);
96c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
972696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* Reset functions */
9871b5f4f11971dea972832ad63a994c7e5b45db6bBill Pembertonint i_APCI3501_Reset(struct comedi_device *dev);
99