This way we do not need the legacy handcrafted probe mechanism
anymore and can remove it.

Signed-off-by: Sascha Hauer <s.ha...@pengutronix.de>
---
 drivers/gpu/drm/drm_pci.c           |   41 +---------------------------------
 drivers/gpu/drm/i810/i810_drv.c     |   16 +++++++++++++
 drivers/gpu/drm/mga/mga_drv.c       |   16 +++++++++++++
 drivers/gpu/drm/r128/r128_drv.c     |   16 +++++++++++++
 drivers/gpu/drm/savage/savage_drv.c |   16 +++++++++++++
 drivers/gpu/drm/sis/sis_drv.c       |   16 +++++++++++++
 drivers/gpu/drm/tdfx/tdfx_drv.c     |   16 +++++++++++++
 7 files changed, 98 insertions(+), 39 deletions(-)

diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c
index f2e8019..b53427e 100644
--- a/drivers/gpu/drm/drm_pci.c
+++ b/drivers/gpu/drm/drm_pci.c
@@ -363,8 +363,6 @@ int drm_get_pci_dev(struct pci_dev *pdev, const struct 
pci_device_id *ent,
                        goto err_g4;
        }
 
-       list_add_tail(&dev->driver_item, &driver->device_list);
-
        DRM_INFO("Initialized %s %d.%d.%d %s for %s on minor %d\n",
                 driver->name, driver->major, driver->minor, driver->patchlevel,
                 driver->date, pci_name(pdev), dev->primary->index);
@@ -399,41 +397,12 @@ EXPORT_SYMBOL(drm_get_pci_dev);
  */
 int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver)
 {
-       struct pci_dev *pdev = NULL;
-       const struct pci_device_id *pid;
-       int i;
-
        DRM_DEBUG("\n");
 
        INIT_LIST_HEAD(&driver->device_list);
        driver->bus = &drm_pci_bus;
 
-       if (driver->driver_features & DRIVER_MODESET)
-               return pci_register_driver(pdriver);
-
-       /* If not using KMS, fall back to stealth mode manual scanning. */
-       for (i = 0; pdriver->id_table[i].vendor != 0; i++) {
-               pid = &pdriver->id_table[i];
-
-               /* Loop around setting up a DRM device for each PCI device
-                * matching our ID and device class.  If we had the internal
-                * function that pci_get_subsys and pci_get_class used, we'd
-                * be able to just pass pid in instead of doing a two-stage
-                * thing.
-                */
-               pdev = NULL;
-               while ((pdev =
-                       pci_get_subsys(pid->vendor, pid->device, pid->subvendor,
-                                      pid->subdevice, pdev)) != NULL) {
-                       if ((pdev->class & pid->class_mask) != pid->class)
-                               continue;
-
-                       /* stealth mode requires a manual probe */
-                       pci_dev_get(pdev);
-                       drm_get_pci_dev(pdev, pid, driver);
-               }
-       }
-       return 0;
+       return pci_register_driver(pdriver);
 }
 
 #else
@@ -450,15 +419,9 @@ EXPORT_SYMBOL(drm_pci_init);
 /*@}*/
 void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver)
 {
-       struct drm_device *dev, *tmp;
        DRM_DEBUG("\n");
 
-       if (driver->driver_features & DRIVER_MODESET) {
-               pci_unregister_driver(pdriver);
-       } else {
-               list_for_each_entry_safe(dev, tmp, &driver->device_list, 
driver_item)
-                       drm_put_dev(dev);
-       }
+       pci_unregister_driver(pdriver);
        DRM_INFO("Module unloaded\n");
 }
 EXPORT_SYMBOL(drm_pci_exit);
diff --git a/drivers/gpu/drm/i810/i810_drv.c b/drivers/gpu/drm/i810/i810_drv.c
index ec12f7d..94f0660 100644
--- a/drivers/gpu/drm/i810/i810_drv.c
+++ b/drivers/gpu/drm/i810/i810_drv.c
@@ -75,7 +75,23 @@ static struct drm_driver driver = {
        .patchlevel = DRIVER_PATCHLEVEL,
 };
 
+static int __devinit
+i810_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+{
+       return drm_get_pci_dev(pdev, ent, &driver);
+}
+
+static void
+i810_pci_remove(struct pci_dev *pdev)
+{
+       struct drm_device *dev = pci_get_drvdata(pdev);
+
+       drm_put_dev(dev);
+}
+
 static struct pci_driver i810_pci_driver = {
+       .probe = i810_pci_probe,
+       .remove = i810_pci_remove,
        .name = DRIVER_NAME,
        .id_table = pciidlist,
 };
diff --git a/drivers/gpu/drm/mga/mga_drv.c b/drivers/gpu/drm/mga/mga_drv.c
index f9a925d..45d848a 100644
--- a/drivers/gpu/drm/mga/mga_drv.c
+++ b/drivers/gpu/drm/mga/mga_drv.c
@@ -87,7 +87,23 @@ static struct drm_driver driver = {
        .patchlevel = DRIVER_PATCHLEVEL,
 };
 
+static int __devinit
+mga_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+{
+       return drm_get_pci_dev(pdev, ent, &driver);
+}
+
+static void
+mga_pci_remove(struct pci_dev *pdev)
+{
+       struct drm_device *dev = pci_get_drvdata(pdev);
+
+       drm_put_dev(dev);
+}
+
 static struct pci_driver mga_pci_driver = {
+       .probe = mga_pci_probe,
+       .remove = mga_pci_remove,
        .name = DRIVER_NAME,
        .id_table = pciidlist,
 };
diff --git a/drivers/gpu/drm/r128/r128_drv.c b/drivers/gpu/drm/r128/r128_drv.c
index 6a5f439..257f8eb 100644
--- a/drivers/gpu/drm/r128/r128_drv.c
+++ b/drivers/gpu/drm/r128/r128_drv.c
@@ -88,7 +88,23 @@ int r128_driver_load(struct drm_device *dev, unsigned long 
flags)
        return drm_vblank_init(dev, 1);
 }
 
+static int __devinit
+r128_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+{
+       return drm_get_pci_dev(pdev, ent, &driver);
+}
+
+static void
+r128_pci_remove(struct pci_dev *pdev)
+{
+       struct drm_device *dev = pci_get_drvdata(pdev);
+
+       drm_put_dev(dev);
+}
+
 static struct pci_driver r128_pci_driver = {
+       .probe = r128_pci_probe,
+       .remove = r128_pci_remove,
        .name = DRIVER_NAME,
        .id_table = pciidlist,
 };
diff --git a/drivers/gpu/drm/savage/savage_drv.c 
b/drivers/gpu/drm/savage/savage_drv.c
index 89afe0b..780270c 100644
--- a/drivers/gpu/drm/savage/savage_drv.c
+++ b/drivers/gpu/drm/savage/savage_drv.c
@@ -66,7 +66,23 @@ static struct drm_driver driver = {
        .patchlevel = DRIVER_PATCHLEVEL,
 };
 
+static int __devinit
+savage_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+{
+       return drm_get_pci_dev(pdev, ent, &driver);
+}
+
+static void
+savage_pci_remove(struct pci_dev *pdev)
+{
+       struct drm_device *dev = pci_get_drvdata(pdev);
+
+       drm_put_dev(dev);
+}
+
 static struct pci_driver savage_pci_driver = {
+       .probe = savage_pci_probe,
+       .remove = savage_pci_remove,
        .name = DRIVER_NAME,
        .id_table = pciidlist,
 };
diff --git a/drivers/gpu/drm/sis/sis_drv.c b/drivers/gpu/drm/sis/sis_drv.c
index 573220c..8e3d39a 100644
--- a/drivers/gpu/drm/sis/sis_drv.c
+++ b/drivers/gpu/drm/sis/sis_drv.c
@@ -118,7 +118,23 @@ static struct drm_driver driver = {
        .patchlevel = DRIVER_PATCHLEVEL,
 };
 
+static int __devinit
+sis_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+{
+       return drm_get_pci_dev(pdev, ent, &driver);
+}
+
+static void
+sis_pci_remove(struct pci_dev *pdev)
+{
+       struct drm_device *dev = pci_get_drvdata(pdev);
+
+       drm_put_dev(dev);
+}
+
 static struct pci_driver sis_pci_driver = {
+       .probe = sis_pci_probe,
+       .remove = sis_pci_remove,
        .name = DRIVER_NAME,
        .id_table = pciidlist,
 };
diff --git a/drivers/gpu/drm/tdfx/tdfx_drv.c b/drivers/gpu/drm/tdfx/tdfx_drv.c
index 1613c78..a863fdc 100644
--- a/drivers/gpu/drm/tdfx/tdfx_drv.c
+++ b/drivers/gpu/drm/tdfx/tdfx_drv.c
@@ -64,7 +64,23 @@ static struct drm_driver driver = {
        .patchlevel = DRIVER_PATCHLEVEL,
 };
 
+static int __devinit
+tdfx_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+{
+       return drm_get_pci_dev(pdev, ent, &driver);
+}
+
+static void
+tdfx_pci_remove(struct pci_dev *pdev)
+{
+       struct drm_device *dev = pci_get_drvdata(pdev);
+
+       drm_put_dev(dev);
+}
+
 static struct pci_driver tdfx_pci_driver = {
+       .probe = tdfx_pci_probe,
+       .remove = tdfx_pci_remove,
        .name = DRIVER_NAME,
        .id_table = pciidlist,
 };
-- 
1.7.8.3

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to