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]
  26 *          (ComputerBoards) DAS08-PGM [das08-pgm]
  27 *          (ComputerBoards) DAS08-PGH [das08-pgh]
  28 *          (ComputerBoards) DAS08-PGL [das08-pgl]
  29 *          (ComputerBoards) DAS08-AOH [das08-aoh]
  30 *          (ComputerBoards) DAS08-AOL [das08-aol]
  31 *          (ComputerBoards) DAS08-AOM [das08-aom]
  32 *          (ComputerBoards) DAS08/JR-AO [das08/jr-ao]
  33 *          (ComputerBoards) DAS08/JR-16-AO [das08jr-16-ao]
  34 *          (ComputerBoards) PC104-DAS08 [pc104-das08]
  35 *          (ComputerBoards) DAS08/JR/16 [das08jr/16]
  36 * Author: Warren Jasper, ds, Frank Hess
  37 * Updated: Fri, 31 Aug 2012 19:19:06 +0100
  38 * Status: works
  39 *
  40 * This is the ISA/PC-104-specific support split off from the das08 driver.
  41 *
  42 * Configuration Options:
  43 *      [0] - base io address
  44 */
  45
  46#include <linux/module.h>
  47#include "../comedidev.h"
  48
  49#include "das08.h"
  50
  51static const struct das08_board_struct das08_isa_boards[] = {
  52        {
  53                /* cio-das08.pdf */
  54                .name           = "isa-das08",
  55                .ai_nbits       = 12,
  56                .ai_pg          = das08_pg_none,
  57                .ai_encoding    = das08_encode12,
  58                .di_nchan       = 3,
  59                .do_nchan       = 4,
  60                .i8255_offset   = 8,
  61                .i8254_offset   = 4,
  62                .iosize         = 16,           /* unchecked */
  63        }, {
  64                /* cio-das08pgx.pdf */
  65                .name           = "das08-pgm",
  66                .ai_nbits       = 12,
  67                .ai_pg          = das08_pgm,
  68                .ai_encoding    = das08_encode12,
  69                .di_nchan       = 3,
  70                .do_nchan       = 4,
  71                .i8255_offset   = 0,
  72                .i8254_offset   = 0x04,
  73                .iosize         = 16,           /* unchecked */
  74        }, {
  75                /* cio-das08pgx.pdf */
  76                .name           = "das08-pgh",
  77                .ai_nbits       = 12,
  78                .ai_pg          = das08_pgh,
  79                .ai_encoding    = das08_encode12,
  80                .di_nchan       = 3,
  81                .do_nchan       = 4,
  82                .i8254_offset   = 0x04,
  83                .iosize         = 16,           /* unchecked */
  84        }, {
  85                /* cio-das08pgx.pdf */
  86                .name           = "das08-pgl",
  87                .ai_nbits       = 12,
  88                .ai_pg          = das08_pgl,
  89                .ai_encoding    = das08_encode12,
  90                .di_nchan       = 3,
  91                .do_nchan       = 4,
  92                .i8254_offset   = 0x04,
  93                .iosize         = 16,           /* unchecked */
  94        }, {
  95                /* cio-das08_aox.pdf */
  96                .name           = "das08-aoh",
  97                .ai_nbits       = 12,
  98                .ai_pg          = das08_pgh,
  99                .ai_encoding    = das08_encode12,
 100                .ao_nbits       = 12,
 101                .di_nchan       = 3,
 102                .do_nchan       = 4,
 103                .i8255_offset   = 0x0c,
 104                .i8254_offset   = 0x04,
 105                .iosize         = 16,           /* unchecked */
 106        }, {
 107                /* cio-das08_aox.pdf */
 108                .name           = "das08-aol",
 109                .ai_nbits       = 12,
 110                .ai_pg          = das08_pgl,
 111                .ai_encoding    = das08_encode12,
 112                .ao_nbits       = 12,
 113                .di_nchan       = 3,
 114                .do_nchan       = 4,
 115                .i8255_offset   = 0x0c,
 116                .i8254_offset   = 0x04,
 117                .iosize         = 16,           /* unchecked */
 118        }, {
 119                /* cio-das08_aox.pdf */
 120                .name           = "das08-aom",
 121                .ai_nbits       = 12,
 122                .ai_pg          = das08_pgm,
 123                .ai_encoding    = das08_encode12,
 124                .ao_nbits       = 12,
 125                .di_nchan       = 3,
 126                .do_nchan       = 4,
 127                .i8255_offset   = 0x0c,
 128                .i8254_offset   = 0x04,
 129                .iosize         = 16,           /* unchecked */
 130        }, {
 131                /* cio-das08-jr-ao.pdf */
 132                .name           = "das08/jr-ao",
 133                .is_jr          = true,
 134                .ai_nbits       = 12,
 135                .ai_pg          = das08_pg_none,
 136                .ai_encoding    = das08_encode12,
 137                .ao_nbits       = 12,
 138                .di_nchan       = 8,
 139                .do_nchan       = 8,
 140                .iosize         = 16,           /* unchecked */
 141        }, {
 142                /* cio-das08jr-16-ao.pdf */
 143                .name           = "das08jr-16-ao",
 144                .is_jr          = true,
 145                .ai_nbits       = 16,
 146                .ai_pg          = das08_pg_none,
 147                .ai_encoding    = das08_encode16,
 148                .ao_nbits       = 16,
 149                .di_nchan       = 8,
 150                .do_nchan       = 8,
 151                .i8254_offset   = 0x04,
 152                .iosize         = 16,           /* unchecked */
 153        }, {
 154                .name           = "pc104-das08",
 155                .ai_nbits       = 12,
 156                .ai_pg          = das08_pg_none,
 157                .ai_encoding    = das08_encode12,
 158                .di_nchan       = 3,
 159                .do_nchan       = 4,
 160                .i8254_offset   = 4,
 161                .iosize         = 16,           /* unchecked */
 162        }, {
 163                .name           = "das08jr/16",
 164                .is_jr          = true,
 165                .ai_nbits       = 16,
 166                .ai_pg          = das08_pg_none,
 167                .ai_encoding    = das08_encode16,
 168                .di_nchan       = 8,
 169                .do_nchan       = 8,
 170                .iosize         = 16,           /* unchecked */
 171        },
 172};
 173
 174static int das08_isa_attach(struct comedi_device *dev,
 175                            struct comedi_devconfig *it)
 176{
 177        const struct das08_board_struct *thisboard = dev->board_ptr;
 178        struct das08_private_struct *devpriv;
 179        int ret;
 180
 181        devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv));
 182        if (!devpriv)
 183                return -ENOMEM;
 184
 185        ret = comedi_request_region(dev, it->options[0], thisboard->iosize);
 186        if (ret)
 187                return ret;
 188
 189        return das08_common_attach(dev, dev->iobase);
 190}
 191
 192static struct comedi_driver das08_isa_driver = {
 193        .driver_name    = "isa-das08",
 194        .module         = THIS_MODULE,
 195        .attach         = das08_isa_attach,
 196        .detach         = comedi_legacy_detach,
 197        .board_name     = &das08_isa_boards[0].name,
 198        .num_names      = ARRAY_SIZE(das08_isa_boards),
 199        .offset         = sizeof(das08_isa_boards[0]),
 200};
 201module_comedi_driver(das08_isa_driver);
 202
 203MODULE_AUTHOR("Comedi http://www.comedi.org");
 204MODULE_DESCRIPTION("Comedi low-level driver");
 205MODULE_LICENSE("GPL");
 206