tristate
        depends on SCSI
 
+config SCSI_FDOMAIN_PCI
+       tristate "Future Domain TMC-3260/AHA-2920A PCI SCSI support"
+       depends on PCI && SCSI
+       select SCSI_FDOMAIN
+       help
+         This is support for Future Domain's PCI SCSI host adapters (TMC-3260)
+         and other adapters with PCI bus based on the Future Domain chipsets
+         (Adaptec AHA-2920A).
+
+         NOTE: Newer Adaptec AHA-2920C boards use the Adaptec AIC-7850 chip
+         and should use the aic7xxx driver ("Adaptec AIC7xxx chipset SCSI
+         controller support"). This Future Domain driver works with the older
+         Adaptec AHA-2920A boards with a Future Domain chip on them.
+
+         To compile this driver as a module, choose M here: the
+         module will be called fdomain_pci.
+
 config SCSI_GDTH
        tristate "Intel/ICP (former GDT SCSI Disk Array) RAID Controller support"
        depends on PCI && SCSI
 
 obj-$(CONFIG_SCSI_ISCI)                += isci/
 obj-$(CONFIG_SCSI_IPS)         += ips.o
 obj-$(CONFIG_SCSI_FDOMAIN)     += fdomain.o
+obj-$(CONFIG_SCSI_FDOMAIN_PCI) += fdomain_pci.o
 obj-$(CONFIG_SCSI_GENERIC_NCR5380) += g_NCR5380.o
 obj-$(CONFIG_SCSI_QLOGIC_FAS)  += qlogicfas408.o       qlogicfas.o
 obj-$(CONFIG_PCMCIA_QLOGIC)    += qlogicfas408.o
 
--- /dev/null
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/module.h>
+#include <linux/pci.h>
+#include "fdomain.h"
+
+static int fdomain_pci_probe(struct pci_dev *pdev,
+                            const struct pci_device_id *d)
+{
+       int err;
+       struct Scsi_Host *sh;
+
+       err = pci_enable_device(pdev);
+       if (err)
+               goto fail;
+
+       err = pci_request_regions(pdev, "fdomain_pci");
+       if (err)
+               goto disable_device;
+
+       err = -ENODEV;
+       if (pci_resource_len(pdev, 0) == 0)
+               goto release_region;
+
+       sh = fdomain_create(pci_resource_start(pdev, 0), pdev->irq, 7,
+                           &pdev->dev);
+       if (!sh)
+               goto release_region;
+
+       pci_set_drvdata(pdev, sh);
+       return 0;
+
+release_region:
+       pci_release_regions(pdev);
+disable_device:
+       pci_disable_device(pdev);
+fail:
+       return err;
+}
+
+static void fdomain_pci_remove(struct pci_dev *pdev)
+{
+       struct Scsi_Host *sh = pci_get_drvdata(pdev);
+
+       fdomain_destroy(sh);
+       pci_release_regions(pdev);
+       pci_disable_device(pdev);
+}
+
+static struct pci_device_id fdomain_pci_table[] = {
+       { PCI_DEVICE(PCI_VENDOR_ID_FD, PCI_DEVICE_ID_FD_36C70) },
+       {}
+};
+MODULE_DEVICE_TABLE(pci, fdomain_pci_table);
+
+static struct pci_driver fdomain_pci_driver = {
+       .name           = "fdomain_pci",
+       .id_table       = fdomain_pci_table,
+       .probe          = fdomain_pci_probe,
+       .remove         = fdomain_pci_remove,
+       .driver.pm      = FDOMAIN_PM_OPS,
+};
+
+module_pci_driver(fdomain_pci_driver);
+
+MODULE_AUTHOR("Ondrej Zary, Rickard E. Faith");
+MODULE_DESCRIPTION("Future Domain TMC-3260 PCI SCSI driver");
+MODULE_LICENSE("GPL");