2017-11-15 15:19 GMT+01:00 Noralf Trønnes <noralf@xxxxxxxxxxx>: > Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on > the fact that drm_device holds a pointer to the drm_fb_helper structure. > This means that the driver doesn't have to keep track of that. > Also use the drm_fb_helper functions directly. This v2 doesn't crash anymore so Acked-by: Benjamin Gaignard <benjamin.gaignard@xxxxxxxxxx> > > Cc: Benjamin Gaignard <benjamin.gaignard@xxxxxxxxxx> > Cc: Vincent Abriou <vincent.abriou@xxxxxx> > Signed-off-by: Noralf Trønnes <noralf@xxxxxxxxxxx> > --- > drivers/gpu/drm/sti/sti_drv.c | 27 +++++---------------------- > drivers/gpu/drm/sti/sti_drv.h | 1 - > 2 files changed, 5 insertions(+), 23 deletions(-) > > diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c > index 9e9343101738..a4553a31c59e 100644 > --- a/drivers/gpu/drm/sti/sti_drv.c > +++ b/drivers/gpu/drm/sti/sti_drv.c > @@ -17,6 +17,7 @@ > #include <drm/drm_crtc_helper.h> > #include <drm/drm_gem_cma_helper.h> > #include <drm/drm_gem_framebuffer_helper.h> > +#include <drm/drm_fb_helper.h> > #include <drm/drm_fb_cma_helper.h> > #include <drm/drm_of.h> > > @@ -138,16 +139,9 @@ static int sti_atomic_check(struct drm_device *dev, > return ret; > } > > -static void sti_output_poll_changed(struct drm_device *ddev) > -{ > - struct sti_private *private = ddev->dev_private; > - > - drm_fbdev_cma_hotplug_event(private->fbdev); > -} > - > static const struct drm_mode_config_funcs sti_mode_config_funcs = { > .fb_create = drm_gem_fb_create, > - .output_poll_changed = sti_output_poll_changed, > + .output_poll_changed = drm_fb_helper_output_poll_changed, > .atomic_check = sti_atomic_check, > .atomic_commit = drm_atomic_helper_commit, > }; > @@ -230,11 +224,7 @@ static void sti_cleanup(struct drm_device *ddev) > { > struct sti_private *private = ddev->dev_private; > > - if (private->fbdev) { > - drm_fbdev_cma_fini(private->fbdev); > - private->fbdev = NULL; > - } > - > + drm_fb_cma_fbdev_fini(ddev); > drm_kms_helper_poll_fini(ddev); > component_unbind_all(ddev->dev, ddev); > kfree(private); > @@ -244,8 +234,6 @@ static void sti_cleanup(struct drm_device *ddev) > static int sti_bind(struct device *dev) > { > struct drm_device *ddev; > - struct sti_private *private; > - struct drm_fbdev_cma *fbdev; > int ret; > > ddev = drm_dev_alloc(&sti_driver, dev); > @@ -266,15 +254,10 @@ static int sti_bind(struct device *dev) > > drm_mode_config_reset(ddev); > > - private = ddev->dev_private; > if (ddev->mode_config.num_connector) { > - fbdev = drm_fbdev_cma_init(ddev, 32, > - ddev->mode_config.num_connector); > - if (IS_ERR(fbdev)) { > + ret = drm_fb_cma_fbdev_init(ddev, 32, 0); > + if (ret) > DRM_DEBUG_DRIVER("Warning: fails to create fbdev\n"); > - fbdev = NULL; > - } > - private->fbdev = fbdev; > } > > return 0; > diff --git a/drivers/gpu/drm/sti/sti_drv.h b/drivers/gpu/drm/sti/sti_drv.h > index 6502ed2d3351..16c5c9110cb0 100644 > --- a/drivers/gpu/drm/sti/sti_drv.h > +++ b/drivers/gpu/drm/sti/sti_drv.h > @@ -24,7 +24,6 @@ struct sti_private { > struct sti_compositor *compo; > struct drm_property *plane_zorder_property; > struct drm_device *drm_dev; > - struct drm_fbdev_cma *fbdev; > }; > > extern struct platform_driver sti_tvout_driver; > -- > 2.14.2 > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel