linux/drivers/staging/comedi/drivers/das08_isa.c
<<
>>
Prefs
   1/*
   2 *  das08_isa.c
   3 *  comedi driver for DAS08 ISA/PC-104 boards
   4 *
   5 *  COMEDI - Linux Control and Measurement Device Interface
   6 *  Copyright (C) 2000 David A. Schleef <ds@schleef.org>
   7 *  Copyright (C) 2001,2002,2003 Frank Mori Hess <fmhess@users.sourceforge.net>
   8 *  Copyright (C) 2004 Salvador E. Tropea <set@users.sf.net> <set@ieee.org>
   9 *
  10 *  This program is free software; you can redistribute it and/or modify
  11 *  it under the terms of the GNU General Public License as published by
  12 *  the Free Software Foundation; either version 2 of the License, or
  13 *  (at your option) any later version.
  14 *
  15 *  This program is distributed in the hope that it will be useful,
  16 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  17 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18 *  GNU General Public License for more details.
  19 */
  20
  21/*
  22 * Driver: das08_isa
  23 * Description: DAS-08 ISA/PC-104 compatible boards
  24 * Devices: [Keithley Metrabyte] DAS08 (isa-das08),
  25 *   [ComputerBoards] DAS08 (isa-das08), DAS08-PGM (das08-pgm),
  26 *   DAS08-PGH (das08-pgh), DAS08-PGL (das08-pgl), DAS08-AOH (das08-aoh),
  27 *   DAS08-AOL (das08-aol), DAS08-AOM (das08-aom), DAS08/JR-AO (das08/jr-ao),
  28 *   DAS08/JR-16-AO (das08jr-16-ao), PC104-DAS08 (pc104-das08),
  29 *   DAS08/JR/16 (das08jr/16)
  30 * Author: Warren Jasper, ds, Frank Hess
  31 * Updated: Fri, 31 Aug 2012 19:19:06 +0100
  32 * Status: works
  33 *
  34 * This is the ISA/PC-104-specific support split off from the das08 driver.
  35 *
  36 * Configuration Options:
  37 *      [0] - base io address
  38 */
  39
  40#include <linux/module.h>
  41#include "../comedidev.h"
  42
  43#include "das08.h"
  44
  45static const struct das08_board_struct das08_isa_boards[] = {
  46        {
  47                /* cio-das08.pdf */
  48                .name           = "isa-das08",
  49                .ai_nbits       = 12,
  50                .ai_pg          = das08_pg_none,
  51                .ai_encoding    = das08_encode12,
  52                .di_nchan       = 3,
  53                .do_nchan       = 4,
  54                .i8255_offset   = 8,
  55                .i8254_offset   = 4,
  56                .iosize         = 16,           /* unchecked */
  57        }, {
  58                /* cio-das08pgx.pdf */
  59                .name           = "das08-pgm",
  60                .ai_nbits       = 12,
  61                .ai_pg          = das08_pgm,
  62                .ai_encoding    = das08_encode12,
  63                .di_nchan       = 3,
  64                .do_nchan       = 4,
  65                .i8255_offset   = 0,
  66                .i8254_offset   = 0x04,
  67                .iosize         = 16,           /* unchecked */
  68        }, {
  69                /* cio-das08pgx.pdf */
  70                .name           = "das08-pgh",
  71                .ai_nbits       = 12,
  72                .ai_pg          = das08_pgh,
  73                .ai_encoding    = das08_encode12,
  74                .di_nchan       = 3,
  75                .do_nchan       = 4,
  76                .i8254_offset   = 0x04,
  77                .iosize         = 16,           /* unchecked */
  78        }, {
  79                /* cio-das08pgx.pdf */
  80                .name           = "das08-pgl",
  81                .ai_nbits       = 12,
  82                .ai_pg          = das08_pgl,
  83                .ai_encoding    = das08_encode12,
  84                .di_nchan       = 3,
  85                .do_nchan       = 4,
  86                .i8254_offset   = 0x04,
  87                .iosize         = 16,           /* unchecked */
  88        }, {
  89                /* cio-das08_aox.pdf */
  90                .name           = "das08-aoh",
  91                .ai_nbits       = 12,
  92                .ai_pg          = das08_pgh,
  93                .ai_encoding    = das08_encode12,
  94                .ao_nbits       = 12,
  95                .di_nchan       = 3,
  96                .do_nchan       = 4,
  97                .i8255_offset   = 0x0c,
  98                .i8254_offset   = 0x04,
  99                .iosize         = 16,           /* unchecked */
 100        }, {
 101                /* cio-das08_aox.pdf */
 102                .name           = "das08-aol",
 103                .ai_nbits       = 12,
 104                .ai_pg          = das08_pgl,
 105                .ai_encoding    = das08_encode12,
 106                .ao_nbits       = 12,
 107                .di_nchan       = 3,
 108                .do_nchan       = 4,
 109                .i8255_offset   = 0x0c,
 110                .i8254_offset   = 0x04,
 111                .iosize         = 16,           /* unchecked */
 112        }, {
 113                /* cio-das08_aox.pdf */
 114                .name           = "das08-aom",
 115                .ai_nbits       = 12,
 116                .ai_pg          = das08_pgm,
 117                .ai_encoding    = das08_encode12,
 118                .ao_nbits       = 12,
 119                .di_nchan       = 3,
 120                .do_nchan       = 4,
 121                .i8255_offset   = 0x0c,
 122                .i8254_offset   = 0x04,
 123                .iosize         = 16,           /* unchecked */
 124        }, {
 125                /* cio-das08-jr-ao.pdf */
 126                .name           = "das08/jr-ao",
 127                .is_jr          = true,
 128                .ai_nbits       = 12,
 129                .ai_pg          = das08_pg_none,
 130                .ai_encoding    = das08_encode12,
 131                .ao_nbits       = 12,
 132                .di_nchan       = 8,
 133                .do_nchan       = 8,
 134                .iosize         = 16,           /* unchecked */
 135        }, {
 136                /* cio-das08jr-16-ao.pdf */
 137                .name           = "das08jr-16-ao",
 138                .is_jr          = true,
 139                .ai_nbits       = 16,
 140                .ai_pg          = das08_pg_none,
 141                .ai_encoding    = das08_encode16,
 142                .ao_nbits       = 16,
 143                .di_nchan       = 8,
 144                .do_nchan       = 8,
 145                .i8254_offset   = 0x04,
 146                .iosize         = 16,           /* unchecked */
 147        }, {
 148                .name           = "pc104-das08",
 149                .ai_nbits       = 12,
 150                .ai_pg          = das08_pg_none,
 151                .ai_encoding    = das08_encode12,
 152                .di_nchan       = 3,
 153                .do_nchan       = 4,
 154                .i8254_offset   = 4,
 155                .iosize         = 16,           /* unchecked */
 156        }, {
 157                .name           = "das08jr/16",
 158                .is_jr          = true,
 159                .ai_nbits       = 16,
 160                .ai_pg          = das08_pg_none,
 161                .ai_encoding    = das08_encode16,
 162                .di_nchan       = 8,
 163                .do_nchan       = 8,
 164                .iosize         = 16,           /* unchecked */
 165        },
 166};
 167
 168static int das08_isa_attach(struct comedi_device *dev,
 169                            struct comedi_devconfig *it)
 170{
 171        const struct das08_board_struct *board = dev->board_ptr;
 172        struct das08_private_struct *devpriv;
 173        int ret;
 174
 175        devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv));
 176        if (!devpriv)
 177                return -ENOMEM;
 178
 179        ret = comedi_request_region(dev, it->options[0], board->iosize);
 180        if (ret)
 181                return ret;
 182
 183        return das08_common_attach(dev, dev->iobase);
 184}
 185
 186static struct comedi_driver das08_isa_driver = {
 187        .driver_name    = "isa-das08",
 188        .module         = THIS_MODULE,
 189        .attach         = das08_isa_attach,
 190        .detach         = comedi_legacy_detach,
 191        .board_name     = &das08_isa_boards[0].name,
 192        .num_names      = ARRAY_SIZE(das08_isa_boards),
 193        .offset         = sizeof(das08_isa_boards[0]),
 194};
 195module_comedi_driver(das08_isa_driver);
 196
 197MODULE_AUTHOR("Comedi http://www.comedi.org");
 198MODULE_DESCRIPTION("Comedi low-level driver");
 199MODULE_LICENSE("GPL");
 200