On Thu, Dec 5, 2019 at 10:02 AM Thomas Zimmermann <tzimmermann@xxxxxxx> wrote: > > The load/unload callbacks in struct drm_driver are deprecated. Remove > them and call functions explicitly. > > Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx> Acked-by: Daniel Vetter <daniel.vetter@xxxxxxxx> 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 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel