Hi Noralf, On Sat, Nov 04, 2017 at 02:03:58PM +0100, Noralf Trønnes wrote: > 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. > > Cc: Liviu Dudau <liviu.dudau@xxxxxxx> > Cc: Brian Starkey <brian.starkey@xxxxxxx> > Signed-off-by: Noralf Trønnes <noralf@xxxxxxxxxxx> Looks good! Thanks for the cleanup! Acked-by: Liviu Dudau <liviu.dudau@xxxxxxx> Let me know if you want me to pull this patch into the HDLCD tree or if you are OK to carry the whole series through the drm-misc tree. Best regards, Liviu > --- > drivers/gpu/drm/arm/hdlcd_drv.c | 37 ++++++------------------------------- > drivers/gpu/drm/arm/hdlcd_drv.h | 1 - > 2 files changed, 6 insertions(+), 32 deletions(-) > > diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c > index 764d0c83710c..fe963072b6f5 100644 > --- a/drivers/gpu/drm/arm/hdlcd_drv.c > +++ b/drivers/gpu/drm/arm/hdlcd_drv.c > @@ -99,16 +99,9 @@ static int hdlcd_load(struct drm_device *drm, unsigned long flags) > return ret; > } > > -static void hdlcd_fb_output_poll_changed(struct drm_device *drm) > -{ > - struct hdlcd_drm_private *hdlcd = drm->dev_private; > - > - drm_fbdev_cma_hotplug_event(hdlcd->fbdev); > -} > - > static const struct drm_mode_config_funcs hdlcd_mode_config_funcs = { > .fb_create = drm_gem_fb_create, > - .output_poll_changed = hdlcd_fb_output_poll_changed, > + .output_poll_changed = drm_fb_helper_output_poll_changed, > .atomic_check = drm_atomic_helper_check, > .atomic_commit = drm_atomic_helper_commit, > }; > @@ -123,13 +116,6 @@ static void hdlcd_setup_mode_config(struct drm_device *drm) > drm->mode_config.funcs = &hdlcd_mode_config_funcs; > } > > -static void hdlcd_lastclose(struct drm_device *drm) > -{ > - struct hdlcd_drm_private *hdlcd = drm->dev_private; > - > - drm_fbdev_cma_restore_mode(hdlcd->fbdev); > -} > - > static irqreturn_t hdlcd_irq(int irq, void *arg) > { > struct drm_device *drm = arg; > @@ -246,7 +232,7 @@ static struct drm_driver hdlcd_driver = { > .driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM | > DRIVER_MODESET | DRIVER_PRIME | > DRIVER_ATOMIC, > - .lastclose = hdlcd_lastclose, > + .lastclose = drm_fb_helper_lastclose, > .irq_handler = hdlcd_irq, > .irq_preinstall = hdlcd_irq_preinstall, > .irq_postinstall = hdlcd_irq_postinstall, > @@ -320,14 +306,9 @@ static int hdlcd_drm_bind(struct device *dev) > drm_mode_config_reset(drm); > drm_kms_helper_poll_init(drm); > > - hdlcd->fbdev = drm_fbdev_cma_init(drm, 32, > - drm->mode_config.num_connector); > - > - if (IS_ERR(hdlcd->fbdev)) { > - ret = PTR_ERR(hdlcd->fbdev); > - hdlcd->fbdev = NULL; > + ret = drm_fb_cma_fbdev_init(drm, 32, 0); > + if (ret) > goto err_fbdev; > - } > > ret = drm_dev_register(drm, 0); > if (ret) > @@ -336,10 +317,7 @@ static int hdlcd_drm_bind(struct device *dev) > return 0; > > err_register: > - if (hdlcd->fbdev) { > - drm_fbdev_cma_fini(hdlcd->fbdev); > - hdlcd->fbdev = NULL; > - } > + drm_fb_cma_fbdev_fini(drm); > err_fbdev: > drm_kms_helper_poll_fini(drm); > err_vblank: > @@ -365,10 +343,7 @@ static void hdlcd_drm_unbind(struct device *dev) > struct hdlcd_drm_private *hdlcd = drm->dev_private; > > drm_dev_unregister(drm); > - if (hdlcd->fbdev) { > - drm_fbdev_cma_fini(hdlcd->fbdev); > - hdlcd->fbdev = NULL; > - } > + drm_fb_cma_fbdev_fini(drm); > drm_kms_helper_poll_fini(drm); > component_unbind_all(dev, drm); > of_node_put(hdlcd->crtc.port); > diff --git a/drivers/gpu/drm/arm/hdlcd_drv.h b/drivers/gpu/drm/arm/hdlcd_drv.h > index e3950a071152..a9f0b4350d95 100644 > --- a/drivers/gpu/drm/arm/hdlcd_drv.h > +++ b/drivers/gpu/drm/arm/hdlcd_drv.h > @@ -8,7 +8,6 @@ > struct hdlcd_drm_private { > void __iomem *mmio; > struct clk *clk; > - struct drm_fbdev_cma *fbdev; > struct drm_crtc crtc; > struct drm_plane *plane; > struct drm_atomic_state *state; > -- > 2.14.2 > -- ==================== | I would like to | | fix the world, | | but they're not | | giving me the | \ source code! / --------------- ¯\_(ツ)_/¯ _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel