|
@@ -620,6 +620,45 @@ static int skel_dio_insn_config(struct comedi_device *dev,
|
|
|
return insn->n;
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_COMEDI_PCI
|
|
|
+static int __devinit driver_skel_pci_probe(struct pci_dev *dev,
|
|
|
+ const struct pci_device_id *ent)
|
|
|
+{
|
|
|
+ return comedi_pci_auto_config(dev, driver_skel.driver_name);
|
|
|
+}
|
|
|
+
|
|
|
+static void __devexit driver_skel_pci_remove(struct pci_dev *dev)
|
|
|
+{
|
|
|
+ comedi_pci_auto_unconfig(dev);
|
|
|
+}
|
|
|
+
|
|
|
+static struct pci_driver driver_skel_pci_driver = {
|
|
|
+ .id_table = skel_pci_table,
|
|
|
+ .probe = &driver_skel_pci_probe,
|
|
|
+ .remove = __devexit_p(&driver_skel_pci_remove)
|
|
|
+};
|
|
|
+
|
|
|
+static int __init driver_skel_init_module(void)
|
|
|
+{
|
|
|
+ int retval;
|
|
|
+
|
|
|
+ retval = comedi_driver_register(&driver_skel);
|
|
|
+ if (retval < 0)
|
|
|
+ return retval;
|
|
|
+
|
|
|
+ driver_skel_pci_driver.name = (char *)driver_skel.driver_name;
|
|
|
+ return pci_register_driver(&driver_skel_pci_driver);
|
|
|
+}
|
|
|
+
|
|
|
+static void __exit driver_skel_cleanup_module(void)
|
|
|
+{
|
|
|
+ pci_unregister_driver(&driver_skel_pci_driver);
|
|
|
+ comedi_driver_unregister(&driver_skel);
|
|
|
+}
|
|
|
+
|
|
|
+module_init(driver_skel_init_module);
|
|
|
+module_exit(driver_skel_cleanup_module);
|
|
|
+#else
|
|
|
static int __init driver_skel_init_module(void)
|
|
|
{
|
|
|
return comedi_driver_register(&driver_skel);
|
|
@@ -632,10 +671,7 @@ static void __exit driver_skel_cleanup_module(void)
|
|
|
|
|
|
module_init(driver_skel_init_module);
|
|
|
module_exit(driver_skel_cleanup_module);
|
|
|
-/* If you are writing a PCI driver you should use COMEDI_PCI_INITCLEANUP
|
|
|
- * instead.
|
|
|
- */
|
|
|
-/* COMEDI_PCI_INITCLEANUP(driver_skel, skel_pci_table) */
|
|
|
+#endif
|
|
|
|
|
|
MODULE_AUTHOR("Comedi http://www.comedi.org");
|
|
|
MODULE_DESCRIPTION("Comedi low-level driver");
|