linux/drivers/staging/comedi/drivers/ni_labpc_cs.c
<<
>>
Prefs
   1/*
   2    comedi/drivers/ni_labpc_cs.c
   3    Driver for National Instruments daqcard-1200 boards
   4    Copyright (C) 2001, 2002, 2003 Frank Mori Hess <fmhess@users.sourceforge.net>
   5
   6    PCMCIA crap is adapted from dummy_cs.c 1.31 2001/08/24 12:13:13
   7    from the pcmcia package.
   8    The initial developer of the pcmcia dummy_cs.c code is David A. Hinds
   9    <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
  10    are Copyright (C) 1999 David A. Hinds.
  11
  12    This program is free software; you can redistribute it and/or modify
  13    it under the terms of the GNU General Public License as published by
  14    the Free Software Foundation; either version 2 of the License, or
  15    (at your option) any later version.
  16
  17    This program is distributed in the hope that it will be useful,
  18    but WITHOUT ANY WARRANTY; without even the implied warranty of
  19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20    GNU General Public License for more details.
  21
  22    You should have received a copy of the GNU General Public License
  23    along with this program; if not, write to the Free Software
  24    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  25
  26************************************************************************
  27*/
  28/*
  29Driver: ni_labpc_cs
  30Description: National Instruments Lab-PC (& compatibles)
  31Author: Frank Mori Hess <fmhess@users.sourceforge.net>
  32Devices: [National Instruments] DAQCard-1200 (daqcard-1200)
  33Status: works
  34
  35Thanks go to Fredrik Lingvall for much testing and perseverance in
  36helping to debug daqcard-1200 support.
  37
  38The 1200 series boards have onboard calibration dacs for correcting
  39analog input/output offsets and gains.  The proper settings for these
  40caldacs are stored on the board's eeprom.  To read the caldac values
  41from the eeprom and store them into a file that can be then be used by
  42comedilib, use the comedi_calibrate program.
  43
  44Configuration options:
  45  none
  46
  47The daqcard-1200 has quirky chanlist requirements
  48when scanning multiple channels.  Multiple channel scan
  49sequence must start at highest channel, then decrement down to
  50channel 0.  Chanlists consisting of all one channel
  51are also legal, and allow you to pace conversions in bursts.
  52
  53*/
  54
  55/*
  56
  57NI manuals:
  58340988a (daqcard-1200)
  59
  60*/
  61
  62#include "../comedidev.h"
  63
  64#include <linux/delay.h>
  65#include <linux/slab.h>
  66
  67#include "8253.h"
  68#include "8255.h"
  69#include "comedi_fc.h"
  70#include "ni_labpc.h"
  71
  72#include <pcmcia/cistpl.h>
  73#include <pcmcia/cisreg.h>
  74#include <pcmcia/ds.h>
  75
  76static const struct labpc_board_struct labpc_cs_boards[] = {
  77        {
  78                .name                   = "daqcard-1200",
  79                .device_id              = 0x103,
  80                .ai_speed               = 10000,
  81                .bustype                = pcmcia_bustype,
  82                .register_layout        = labpc_1200_layout,
  83                .has_ao                 = 1,
  84                .ai_range_table         = &range_labpc_1200_ai,
  85                .ai_range_code          = labpc_1200_ai_gain_bits,
  86                .ai_range_is_unipolar   = labpc_1200_is_unipolar,
  87        },
  88};
  89
  90static int labpc_auto_attach(struct comedi_device *dev,
  91                             unsigned long context)
  92{
  93        struct pcmcia_device *link = comedi_to_pcmcia_dev(dev);
  94        struct labpc_private *devpriv;
  95        int ret;
  96
  97        /* The ni_labpc driver needs the board_ptr */
  98        dev->board_ptr = &labpc_cs_boards[0];
  99
 100        link->config_flags |= CONF_AUTO_SET_IO |
 101                              CONF_ENABLE_IRQ | CONF_ENABLE_PULSE_IRQ;
 102        ret = comedi_pcmcia_enable(dev, NULL);
 103        if (ret)
 104                return ret;
 105        dev->iobase = link->resource[0]->start;
 106
 107        if (!link->irq)
 108                return -EINVAL;
 109
 110        devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 111        if (!devpriv)
 112                return -ENOMEM;
 113        dev->private = devpriv;
 114
 115        return labpc_common_attach(dev, dev->iobase, link->irq, 0);
 116}
 117
 118static void labpc_detach(struct comedi_device *dev)
 119{
 120        labpc_common_detach(dev);
 121        comedi_pcmcia_disable(dev);
 122}
 123
 124static struct comedi_driver driver_labpc_cs = {
 125        .driver_name    = "ni_labpc_cs",
 126        .module         = THIS_MODULE,
 127        .auto_attach    = labpc_auto_attach,
 128        .detach         = labpc_detach,
 129};
 130
 131static int labpc_cs_attach(struct pcmcia_device *link)
 132{
 133        return comedi_pcmcia_auto_config(link, &driver_labpc_cs);
 134}
 135
 136static const struct pcmcia_device_id labpc_cs_ids[] = {
 137        PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0103),        /* daqcard-1200 */
 138        PCMCIA_DEVICE_NULL
 139};
 140MODULE_DEVICE_TABLE(pcmcia, labpc_cs_ids);
 141
 142static struct pcmcia_driver labpc_cs_driver = {
 143        .name           = "daqcard-1200",
 144        .owner          = THIS_MODULE,
 145        .id_table       = labpc_cs_ids,
 146        .probe          = labpc_cs_attach,
 147        .remove         = comedi_pcmcia_auto_unconfig,
 148};
 149module_comedi_pcmcia_driver(driver_labpc_cs, labpc_cs_driver);
 150
 151MODULE_DESCRIPTION("Comedi driver for National Instruments Lab-PC");
 152MODULE_AUTHOR("Frank Mori Hess <fmhess@users.sourceforge.net>");
 153MODULE_LICENSE("GPL");
 154
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.