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