1/* 2 * das08_pci.c 3 * comedi driver for DAS08 PCI 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_pci 23 * Description: DAS-08 PCI compatible boards 24 * Devices: (ComputerBoards) PCI-DAS08 [pci-das08] 25 * Author: Warren Jasper, ds, Frank Hess 26 * Updated: Fri, 31 Aug 2012 19:19:06 +0100 27 * Status: works 28 * 29 * This is the PCI-specific support split off from the das08 driver. 30 * 31 * Configuration Options: not applicable, uses PCI auto config 32 */ 33 34#include <linux/module.h> 35#include <linux/pci.h> 36 37#include "../comedidev.h" 38 39#include "das08.h" 40 41static const struct das08_board_struct das08_pci_boards[] = { 42 { 43 .name = "pci-das08", 44 .ai_nbits = 12, 45 .ai_pg = das08_bipolar5, 46 .ai_encoding = das08_encode12, 47 .di_nchan = 3, 48 .do_nchan = 4, 49 .i8254_offset = 4, 50 .iosize = 8, 51 }, 52}; 53 54static int das08_pci_auto_attach(struct comedi_device *dev, 55 unsigned long context_unused) 56{ 57 struct pci_dev *pdev = comedi_to_pci_dev(dev); 58 struct das08_private_struct *devpriv; 59 int ret; 60 61 devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); 62 if (!devpriv) 63 return -ENOMEM; 64 65 /* The das08 driver needs the board_ptr */ 66 dev->board_ptr = &das08_pci_boards[0]; 67 68 ret = comedi_pci_enable(dev); 69 if (ret) 70 return ret; 71 dev->iobase = pci_resource_start(pdev, 2); 72 73 return das08_common_attach(dev, dev->iobase); 74} 75 76static struct comedi_driver das08_pci_comedi_driver = { 77 .driver_name = "pci-das08", 78 .module = THIS_MODULE, 79 .auto_attach = das08_pci_auto_attach, 80 .detach = comedi_pci_detach, 81}; 82 83static int das08_pci_probe(struct pci_dev *dev, 84 const struct pci_device_id *id) 85{ 86 return comedi_pci_auto_config(dev, &das08_pci_comedi_driver, 87 id->driver_data); 88} 89 90static const struct pci_device_id das08_pci_table[] = { 91 { PCI_DEVICE(PCI_VENDOR_ID_CB, 0x0029) }, 92 { 0 } 93}; 94MODULE_DEVICE_TABLE(pci, das08_pci_table); 95 96static struct pci_driver das08_pci_driver = { 97 .name = "pci-das08", 98 .id_table = das08_pci_table, 99 .probe = das08_pci_probe, 100 .remove = comedi_pci_auto_unconfig, 101}; 102module_comedi_pci_driver(das08_pci_comedi_driver, das08_pci_driver); 103 104MODULE_AUTHOR("Comedi http://www.comedi.org"); 105MODULE_DESCRIPTION("Comedi low-level driver"); 106MODULE_LICENSE("GPL"); 107