diff mbox series

drm/mgag200: Call mgag200_driver_{load, unload}() before registering device

Message ID 20191205090252.5711-1-tzimmermann@suse.de (mailing list archive)
State New, archived
Headers show
Series drm/mgag200: Call mgag200_driver_{load, unload}() before registering device | expand

Commit Message

Thomas Zimmermann Dec. 5, 2019, 9:02 a.m. UTC
The load/unload callbacks in struct drm_driver are deprecated. Remove
them and call functions explicitly.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/mgag200/mgag200_drv.c | 44 +++++++++++++++++++++++----
 1 file changed, 38 insertions(+), 6 deletions(-)

--
2.23.0

Comments

Daniel Vetter Dec. 5, 2019, 11:26 a.m. UTC | #1
On Thu, Dec 5, 2019 at 10:02 AM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
> The load/unload callbacks in struct drm_driver are deprecated. Remove
> them and call functions explicitly.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>

Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>

The even fancier version of this would be to embed the drm_device and
switch over to drm_dev_init().
-Daniel

> ---
>  drivers/gpu/drm/mgag200/mgag200_drv.c | 44 +++++++++++++++++++++++----
>  1 file changed, 38 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c
> index d43951caeea0..30b3b827adf8 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_drv.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
> @@ -6,13 +6,13 @@
>   *          Dave Airlie
>   */
>
> -#include <linux/module.h>
>  #include <linux/console.h>
> +#include <linux/module.h>
> +#include <linux/pci.h>
>
>  #include <drm/drm_drv.h>
>  #include <drm/drm_file.h>
>  #include <drm/drm_ioctl.h>
> -#include <drm/drm_pci.h>
>  #include <drm/drm_pciids.h>
>
>  #include "mgag200_drv.h"
> @@ -48,16 +48,50 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
>
>  static int mga_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>  {
> +       struct drm_device *dev;
> +       int ret;
> +
>         drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, "mgag200drmfb");
>
> -       return drm_get_pci_dev(pdev, ent, &driver);
> +       ret = pci_enable_device(pdev);
> +       if (ret)
> +               return ret;
> +
> +       dev = drm_dev_alloc(&driver, &pdev->dev);
> +       if (IS_ERR(dev)) {
> +               ret = PTR_ERR(dev);
> +               goto err_pci_disable_device;
> +       }
> +
> +       dev->pdev = pdev;
> +       pci_set_drvdata(pdev, dev);
> +
> +       ret = mgag200_driver_load(dev, ent->driver_data);
> +       if (ret)
> +               goto err_drm_dev_put;
> +
> +       ret = drm_dev_register(dev, ent->driver_data);
> +       if (ret)
> +               goto err_mgag200_driver_unload;
> +
> +       return 0;
> +
> +err_mgag200_driver_unload:
> +       mgag200_driver_unload(dev);
> +err_drm_dev_put:
> +       drm_dev_put(dev);
> +err_pci_disable_device:
> +       pci_disable_device(pdev);
> +       return ret;
>  }
>
>  static void mga_pci_remove(struct pci_dev *pdev)
>  {
>         struct drm_device *dev = pci_get_drvdata(pdev);
>
> -       drm_put_dev(dev);
> +       drm_dev_unregister(dev);
> +       mgag200_driver_unload(dev);
> +       drm_dev_put(dev);
>  }
>
>  DEFINE_DRM_GEM_FOPS(mgag200_driver_fops);
> @@ -93,8 +127,6 @@ int mgag200_driver_dumb_create(struct drm_file *file,
>
>  static struct drm_driver driver = {
>         .driver_features = DRIVER_GEM | DRIVER_MODESET,
> -       .load = mgag200_driver_load,
> -       .unload = mgag200_driver_unload,
>         .fops = &mgag200_driver_fops,
>         .name = DRIVER_NAME,
>         .desc = DRIVER_DESC,
> --
> 2.23.0
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c
index d43951caeea0..30b3b827adf8 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.c
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
@@ -6,13 +6,13 @@ 
  *          Dave Airlie
  */

-#include <linux/module.h>
 #include <linux/console.h>
+#include <linux/module.h>
+#include <linux/pci.h>

 #include <drm/drm_drv.h>
 #include <drm/drm_file.h>
 #include <drm/drm_ioctl.h>
-#include <drm/drm_pci.h>
 #include <drm/drm_pciids.h>

 #include "mgag200_drv.h"
@@ -48,16 +48,50 @@  MODULE_DEVICE_TABLE(pci, pciidlist);

 static int mga_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
+	struct drm_device *dev;
+	int ret;
+
 	drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, "mgag200drmfb");

-	return drm_get_pci_dev(pdev, ent, &driver);
+	ret = pci_enable_device(pdev);
+	if (ret)
+		return ret;
+
+	dev = drm_dev_alloc(&driver, &pdev->dev);
+	if (IS_ERR(dev)) {
+		ret = PTR_ERR(dev);
+		goto err_pci_disable_device;
+	}
+
+	dev->pdev = pdev;
+	pci_set_drvdata(pdev, dev);
+
+	ret = mgag200_driver_load(dev, ent->driver_data);
+	if (ret)
+		goto err_drm_dev_put;
+
+	ret = drm_dev_register(dev, ent->driver_data);
+	if (ret)
+		goto err_mgag200_driver_unload;
+
+	return 0;
+
+err_mgag200_driver_unload:
+	mgag200_driver_unload(dev);
+err_drm_dev_put:
+	drm_dev_put(dev);
+err_pci_disable_device:
+	pci_disable_device(pdev);
+	return ret;
 }

 static void mga_pci_remove(struct pci_dev *pdev)
 {
 	struct drm_device *dev = pci_get_drvdata(pdev);

-	drm_put_dev(dev);
+	drm_dev_unregister(dev);
+	mgag200_driver_unload(dev);
+	drm_dev_put(dev);
 }

 DEFINE_DRM_GEM_FOPS(mgag200_driver_fops);
@@ -93,8 +127,6 @@  int mgag200_driver_dumb_create(struct drm_file *file,

 static struct drm_driver driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET,
-	.load = mgag200_driver_load,
-	.unload = mgag200_driver_unload,
 	.fops = &mgag200_driver_fops,
 	.name = DRIVER_NAME,
 	.desc = DRIVER_DESC,