]> Pileus Git - ~andy/linux/blob - drivers/staging/comedi/drivers/addi_apci_1500.c
staging: comedi: conditionally build in PCI driver support
[~andy/linux] / drivers / staging / comedi / drivers / addi_apci_1500.c
1 #include <linux/pci.h>
2
3 #include "../comedidev.h"
4 #include "comedi_fc.h"
5 #include "amcc_s5933.h"
6
7 #include "addi-data/addi_common.h"
8
9 #include "addi-data/addi_eeprom.c"
10 #include "addi-data/hwdrv_apci1500.c"
11 #include "addi-data/addi_common.c"
12
13 static const struct addi_board apci1500_boardtypes[] = {
14         {
15                 .pc_DriverName          = "apci1500",
16                 .i_VendorId             = PCI_VENDOR_ID_ADDIDATA_OLD,
17                 .i_DeviceId             = 0x80fc,
18                 .i_IorangeBase0         = 128,
19                 .i_IorangeBase1         = APCI1500_ADDRESS_RANGE,
20                 .i_IorangeBase2         = 4,
21                 .i_PCIEeprom            = ADDIDATA_NO_EEPROM,
22                 .i_NbrDiChannel         = 16,
23                 .i_NbrDoChannel         = 16,
24                 .i_DoMaxdata            = 0xffff,
25                 .i_Timer                = 1,
26                 .interrupt              = v_APCI1500_Interrupt,
27                 .reset                  = i_APCI1500_Reset,
28                 .di_config              = i_APCI1500_ConfigDigitalInputEvent,
29                 .di_read                = i_APCI1500_Initialisation,
30                 .di_write               = i_APCI1500_StartStopInputEvent,
31                 .di_bits                = apci1500_di_insn_bits,
32                 .do_config              = i_APCI1500_ConfigDigitalOutputErrorInterrupt,
33                 .do_write               = i_APCI1500_WriteDigitalOutput,
34                 .do_bits                = i_APCI1500_ConfigureInterrupt,
35                 .timer_config           = i_APCI1500_ConfigCounterTimerWatchdog,
36                 .timer_write            = i_APCI1500_StartStopTriggerTimerCounterWatchdog,
37                 .timer_read             = i_APCI1500_ReadInterruptMask,
38                 .timer_bits             = i_APCI1500_ReadCounterTimerWatchdog,
39         },
40 };
41
42 static struct comedi_driver apci1500_driver = {
43         .driver_name    = "addi_apci_1500",
44         .module         = THIS_MODULE,
45         .auto_attach    = addi_auto_attach,
46         .detach         = i_ADDI_Detach,
47         .num_names      = ARRAY_SIZE(apci1500_boardtypes),
48         .board_name     = &apci1500_boardtypes[0].pc_DriverName,
49         .offset         = sizeof(struct addi_board),
50 };
51
52 static int apci1500_pci_probe(struct pci_dev *dev,
53                                         const struct pci_device_id *ent)
54 {
55         return comedi_pci_auto_config(dev, &apci1500_driver);
56 }
57
58 static DEFINE_PCI_DEVICE_TABLE(apci1500_pci_table) = {
59         { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA_OLD, 0x80fc) },
60         { 0 }
61 };
62 MODULE_DEVICE_TABLE(pci, apci1500_pci_table);
63
64 static struct pci_driver apci1500_pci_driver = {
65         .name           = "addi_apci_1500",
66         .id_table       = apci1500_pci_table,
67         .probe          = apci1500_pci_probe,
68         .remove         = comedi_pci_auto_unconfig,
69 };
70 module_comedi_pci_driver(apci1500_driver, apci1500_pci_driver);
71
72 MODULE_AUTHOR("Comedi http://www.comedi.org");
73 MODULE_DESCRIPTION("Comedi low-level driver");
74 MODULE_LICENSE("GPL");