[PATCH] drm/mgag200: Call mgag200_driver_{load,unload}() before registering device
Daniel Vetter
daniel at ffwll.ch
Thu Dec 5 11:26:24 UTC 2019
On Thu, Dec 5, 2019 at 10:02 AM Thomas Zimmermann <tzimmermann at 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 at suse.de>
Acked-by: Daniel Vetter <daniel.vetter at 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
>
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
More information about the dri-devel
mailing list