[PATCH v3 2/5] drm/mxsfb: Use drm_fbdev_generic_setup()

Noralf Trønnes noralf at tronnes.org
Mon Jan 14 11:37:45 UTC 2019



Den 28.11.2018 22.27, skrev Noralf Trønnes:
> The CMA helper is already using the drm_fb_helper_generic_probe part of
> the generic fbdev emulation. This patch makes full use of the generic
> fbdev emulation by using its drm_client callbacks. This means that
> drm_mode_config_funcs->output_poll_changed and drm_driver->lastclose are
> now handled by the emulation code. Additionally fbdev unregister happens
> automatically on drm_dev_unregister().
> 
> The drm_fbdev_generic_setup() call is put after drm_dev_register() in the
> driver. This is done to highlight the fact that fbdev emulation is an
> internal client that makes use of the driver, it is not part of the
> driver as such. If fbdev setup fails, an error is printed, but the driver
> succeeds probing.
> 
> Cc: Marek Vasut <marex at denx.de>
> Signed-off-by: Noralf Trønnes <noralf at tronnes.org>
> Acked-by: Sam Ravnborg <sam at ravnborg.org>
> ---

Applied to drm-misc-next.

Noralf.

>  drivers/gpu/drm/mxsfb/mxsfb_drv.c | 26 ++------------------------
>  drivers/gpu/drm/mxsfb/mxsfb_drv.h |  1 -
>  2 files changed, 2 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> index 88ba003979e6..13e778825098 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> @@ -263,23 +263,12 @@ static int mxsfb_load(struct drm_device *drm, unsigned long flags)
>  
>  	drm_kms_helper_poll_init(drm);
>  
> -	mxsfb->fbdev = drm_fbdev_cma_init(drm, 32,
> -					  drm->mode_config.num_connector);
> -	if (IS_ERR(mxsfb->fbdev)) {
> -		ret = PTR_ERR(mxsfb->fbdev);
> -		mxsfb->fbdev = NULL;
> -		dev_err(drm->dev, "Failed to init FB CMA area\n");
> -		goto err_cma;
> -	}
> -
>  	platform_set_drvdata(pdev, drm);
>  
>  	drm_helper_hpd_irq_event(drm);
>  
>  	return 0;
>  
> -err_cma:
> -	drm_irq_uninstall(drm);
>  err_irq:
>  	drm_panel_detach(mxsfb->panel);
>  err_vblank:
> @@ -290,11 +279,6 @@ static int mxsfb_load(struct drm_device *drm, unsigned long flags)
>  
>  static void mxsfb_unload(struct drm_device *drm)
>  {
> -	struct mxsfb_drm_private *mxsfb = drm->dev_private;
> -
> -	if (mxsfb->fbdev)
> -		drm_fbdev_cma_fini(mxsfb->fbdev);
> -
>  	drm_kms_helper_poll_fini(drm);
>  	drm_mode_config_cleanup(drm);
>  
> @@ -307,13 +291,6 @@ static void mxsfb_unload(struct drm_device *drm)
>  	pm_runtime_disable(drm->dev);
>  }
>  
> -static void mxsfb_lastclose(struct drm_device *drm)
> -{
> -	struct mxsfb_drm_private *mxsfb = drm->dev_private;
> -
> -	drm_fbdev_cma_restore_mode(mxsfb->fbdev);
> -}
> -
>  static void mxsfb_irq_preinstall(struct drm_device *drm)
>  {
>  	struct mxsfb_drm_private *mxsfb = drm->dev_private;
> @@ -347,7 +324,6 @@ static struct drm_driver mxsfb_driver = {
>  	.driver_features	= DRIVER_GEM | DRIVER_MODESET |
>  				  DRIVER_PRIME | DRIVER_ATOMIC |
>  				  DRIVER_HAVE_IRQ,
> -	.lastclose		= mxsfb_lastclose,
>  	.irq_handler		= mxsfb_irq_handler,
>  	.irq_preinstall		= mxsfb_irq_preinstall,
>  	.irq_uninstall		= mxsfb_irq_preinstall,
> @@ -412,6 +388,8 @@ static int mxsfb_probe(struct platform_device *pdev)
>  	if (ret)
>  		goto err_unload;
>  
> +	drm_fbdev_generic_setup(drm, 32);
> +
>  	return 0;
>  
>  err_unload:
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.h b/drivers/gpu/drm/mxsfb/mxsfb_drv.h
> index 5d0883fc805b..bedd6801edca 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.h
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.h
> @@ -37,7 +37,6 @@ struct mxsfb_drm_private {
>  	struct drm_simple_display_pipe	pipe;
>  	struct drm_connector		connector;
>  	struct drm_panel		*panel;
> -	struct drm_fbdev_cma		*fbdev;
>  };
>  
>  int mxsfb_setup_crtc(struct drm_device *dev);
> 


More information about the dri-devel mailing list