53
53
#include "plx9080.h"
54
54
#include "comedi_fc.h"
56
static int hpdi_attach(struct comedi_device *dev, struct comedi_devconfig *it);
57
static int hpdi_detach(struct comedi_device *dev);
58
56
static void abort_dma(struct comedi_device *dev, unsigned int channel);
59
57
static int hpdi_cmd(struct comedi_device *dev, struct comedi_subdevice *s);
60
58
static int hpdi_cmd_test(struct comedi_device *dev, struct comedi_subdevice *s,
290
static DEFINE_PCI_DEVICE_TABLE(hpdi_pci_table) = {
292
PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9080, PCI_VENDOR_ID_PLX,
297
MODULE_DEVICE_TABLE(pci, hpdi_pci_table);
299
288
static inline struct hpdi_board *board(const struct comedi_device *dev)
301
290
return (struct hpdi_board *)dev->board_ptr;
338
327
return dev->private;
341
static struct comedi_driver driver_hpdi = {
342
.driver_name = "gsc_hpdi",
343
.module = THIS_MODULE,
344
.attach = hpdi_attach,
345
.detach = hpdi_detach,
348
static int __devinit driver_hpdi_pci_probe(struct pci_dev *dev,
349
const struct pci_device_id *ent)
351
return comedi_pci_auto_config(dev, driver_hpdi.driver_name);
354
static void __devexit driver_hpdi_pci_remove(struct pci_dev *dev)
356
comedi_pci_auto_unconfig(dev);
359
static struct pci_driver driver_hpdi_pci_driver = {
360
.id_table = hpdi_pci_table,
361
.probe = &driver_hpdi_pci_probe,
362
.remove = __devexit_p(&driver_hpdi_pci_remove)
365
static int __init driver_hpdi_init_module(void)
369
retval = comedi_driver_register(&driver_hpdi);
373
driver_hpdi_pci_driver.name = (char *)driver_hpdi.driver_name;
374
return pci_register_driver(&driver_hpdi_pci_driver);
377
static void __exit driver_hpdi_cleanup_module(void)
379
pci_unregister_driver(&driver_hpdi_pci_driver);
380
comedi_driver_unregister(&driver_hpdi);
383
module_init(driver_hpdi_init_module);
384
module_exit(driver_hpdi_cleanup_module);
386
330
static int dio_config_insn(struct comedi_device *dev,
387
331
struct comedi_subdevice *s, struct comedi_insn *insn,
388
332
unsigned int *data)
645
589
"gsc_hpdi: found %s on bus %i, slot %i\n", board(dev)->name,
646
590
pcidev->bus->number, PCI_SLOT(pcidev->devfn));
648
if (comedi_pci_enable(pcidev, driver_hpdi.driver_name)) {
592
if (comedi_pci_enable(pcidev, dev->driver->driver_name)) {
649
593
printk(KERN_WARNING
650
594
" failed enable PCI device and request regions\n");
681
625
if (request_irq(pcidev->irq, handle_interrupt, IRQF_SHARED,
682
driver_hpdi.driver_name, dev)) {
626
dev->driver->driver_name, dev)) {
683
627
printk(KERN_WARNING
684
628
" unable to allocate irq %u\n", pcidev->irq);
720
664
return init_hpdi(dev);
723
static int hpdi_detach(struct comedi_device *dev)
667
static void hpdi_detach(struct comedi_device *dev)
727
printk(KERN_WARNING "comedi%d: gsc_hpdi: remove\n", dev->minor);
730
672
free_irq(dev->irq, dev);
731
673
if ((priv(dev)) && (priv(dev)->hw_dev)) {
1057
static struct comedi_driver gsc_hpdi_driver = {
1058
.driver_name = "gsc_hpdi",
1059
.module = THIS_MODULE,
1060
.attach = hpdi_attach,
1061
.detach = hpdi_detach,
1064
static int __devinit gsc_hpdi_pci_probe(struct pci_dev *dev,
1065
const struct pci_device_id *ent)
1067
return comedi_pci_auto_config(dev, &gsc_hpdi_driver);
1070
static void __devexit gsc_hpdi_pci_remove(struct pci_dev *dev)
1072
comedi_pci_auto_unconfig(dev);
1075
static DEFINE_PCI_DEVICE_TABLE(gsc_hpdi_pci_table) = {
1076
{ PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9080, PCI_VENDOR_ID_PLX,
1080
MODULE_DEVICE_TABLE(pci, gsc_hpdi_pci_table);
1082
static struct pci_driver gsc_hpdi_pci_driver = {
1084
.id_table = gsc_hpdi_pci_table,
1085
.probe = gsc_hpdi_pci_probe,
1086
.remove = __devexit_p(gsc_hpdi_pci_remove)
1088
module_comedi_pci_driver(gsc_hpdi_driver, gsc_hpdi_pci_driver);
1116
1090
MODULE_AUTHOR("Comedi http://www.comedi.org");
1117
1091
MODULE_DESCRIPTION("Comedi low-level driver");
1118
1092
MODULE_LICENSE("GPL");