Commit efd1f06b authored by Tomi Valkeinen's avatar Tomi Valkeinen

drm/omap: cleanup fbdev init/free

omap_fbdev_init() and omap_fbdev_free() use priv->fbdev directly.
However, omap_fbdev_init() returns the fbdev, and omap_drv.c also
assigns the return value to priv->fbdev. This is slightly confusing.

Clean this up by removing the omap_fbdev_init() return value, as we
don't care whether fbdev init succeeded or not. Also change omap_drv.c
to call omap_fbdev_free() always, and omap_fbdev_free() does the check
if fbdev was initialized.

While at it, rename omap_fbdev_free() to omap_fbdev_fini() to better
match the "init" counterpart.
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
parent e6204a58
...@@ -570,7 +570,7 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev) ...@@ -570,7 +570,7 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
for (i = 0; i < priv->num_crtcs; i++) for (i = 0; i < priv->num_crtcs; i++)
drm_crtc_vblank_off(priv->crtcs[i]); drm_crtc_vblank_off(priv->crtcs[i]);
priv->fbdev = omap_fbdev_init(ddev); omap_fbdev_init(ddev);
drm_kms_helper_poll_init(ddev); drm_kms_helper_poll_init(ddev);
omap_modeset_enable_external_hpd(); omap_modeset_enable_external_hpd();
...@@ -588,8 +588,8 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev) ...@@ -588,8 +588,8 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
err_cleanup_helpers: err_cleanup_helpers:
omap_modeset_disable_external_hpd(); omap_modeset_disable_external_hpd();
drm_kms_helper_poll_fini(ddev); drm_kms_helper_poll_fini(ddev);
if (priv->fbdev)
omap_fbdev_free(ddev); omap_fbdev_fini(ddev);
err_cleanup_modeset: err_cleanup_modeset:
drm_mode_config_cleanup(ddev); drm_mode_config_cleanup(ddev);
omap_drm_irq_uninstall(ddev); omap_drm_irq_uninstall(ddev);
...@@ -615,8 +615,7 @@ static void omapdrm_cleanup(struct omap_drm_private *priv) ...@@ -615,8 +615,7 @@ static void omapdrm_cleanup(struct omap_drm_private *priv)
omap_modeset_disable_external_hpd(); omap_modeset_disable_external_hpd();
drm_kms_helper_poll_fini(ddev); drm_kms_helper_poll_fini(ddev);
if (priv->fbdev) omap_fbdev_fini(ddev);
omap_fbdev_free(ddev);
drm_atomic_helper_shutdown(ddev); drm_atomic_helper_shutdown(ddev);
......
...@@ -242,7 +242,7 @@ static struct drm_fb_helper *get_fb(struct fb_info *fbi) ...@@ -242,7 +242,7 @@ static struct drm_fb_helper *get_fb(struct fb_info *fbi)
} }
/* initialize fbdev helper */ /* initialize fbdev helper */
struct drm_fb_helper *omap_fbdev_init(struct drm_device *dev) void omap_fbdev_init(struct drm_device *dev)
{ {
struct omap_drm_private *priv = dev->dev_private; struct omap_drm_private *priv = dev->dev_private;
struct omap_fbdev *fbdev = NULL; struct omap_fbdev *fbdev = NULL;
...@@ -260,10 +260,8 @@ struct drm_fb_helper *omap_fbdev_init(struct drm_device *dev) ...@@ -260,10 +260,8 @@ struct drm_fb_helper *omap_fbdev_init(struct drm_device *dev)
drm_fb_helper_prepare(dev, helper, &omap_fb_helper_funcs); drm_fb_helper_prepare(dev, helper, &omap_fb_helper_funcs);
ret = drm_fb_helper_init(dev, helper, priv->num_connectors); ret = drm_fb_helper_init(dev, helper, priv->num_connectors);
if (ret) { if (ret)
dev_err(dev->dev, "could not init fbdev: ret=%d\n", ret);
goto fail; goto fail;
}
ret = drm_fb_helper_single_add_all_connectors(helper); ret = drm_fb_helper_single_add_all_connectors(helper);
if (ret) if (ret)
...@@ -275,7 +273,7 @@ struct drm_fb_helper *omap_fbdev_init(struct drm_device *dev) ...@@ -275,7 +273,7 @@ struct drm_fb_helper *omap_fbdev_init(struct drm_device *dev)
priv->fbdev = helper; priv->fbdev = helper;
return helper; return;
fini: fini:
drm_fb_helper_fini(helper); drm_fb_helper_fini(helper);
...@@ -283,12 +281,9 @@ struct drm_fb_helper *omap_fbdev_init(struct drm_device *dev) ...@@ -283,12 +281,9 @@ struct drm_fb_helper *omap_fbdev_init(struct drm_device *dev)
kfree(fbdev); kfree(fbdev);
dev_warn(dev->dev, "omap_fbdev_init failed\n"); dev_warn(dev->dev, "omap_fbdev_init failed\n");
/* well, limp along without an fbdev.. maybe X11 will work? */
return NULL;
} }
void omap_fbdev_free(struct drm_device *dev) void omap_fbdev_fini(struct drm_device *dev)
{ {
struct omap_drm_private *priv = dev->dev_private; struct omap_drm_private *priv = dev->dev_private;
struct drm_fb_helper *helper = priv->fbdev; struct drm_fb_helper *helper = priv->fbdev;
...@@ -296,11 +291,14 @@ void omap_fbdev_free(struct drm_device *dev) ...@@ -296,11 +291,14 @@ void omap_fbdev_free(struct drm_device *dev)
DBG(); DBG();
if (!helper)
return;
drm_fb_helper_unregister_fbi(helper); drm_fb_helper_unregister_fbi(helper);
drm_fb_helper_fini(helper); drm_fb_helper_fini(helper);
fbdev = to_omap_fbdev(priv->fbdev); fbdev = to_omap_fbdev(helper);
/* unpin the GEM object pinned in omap_fbdev_create() */ /* unpin the GEM object pinned in omap_fbdev_create() */
if (fbdev->bo) if (fbdev->bo)
......
...@@ -24,14 +24,13 @@ struct drm_device; ...@@ -24,14 +24,13 @@ struct drm_device;
struct drm_fb_helper; struct drm_fb_helper;
#ifdef CONFIG_DRM_FBDEV_EMULATION #ifdef CONFIG_DRM_FBDEV_EMULATION
struct drm_fb_helper *omap_fbdev_init(struct drm_device *dev); void omap_fbdev_init(struct drm_device *dev);
void omap_fbdev_free(struct drm_device *dev); void omap_fbdev_fini(struct drm_device *dev);
#else #else
static inline struct drm_fb_helper *omap_fbdev_init(struct drm_device *dev) static inline void omap_fbdev_init(struct drm_device *dev)
{ {
return NULL;
} }
static inline void omap_fbdev_free(struct drm_device *dev) static inline void omap_fbdev_fini(struct drm_device *dev)
{ {
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment