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