drm/armada: Use devm_drm_dev_alloc
Also remove the now no longer needed build bug on since that's already not needed anymore with drmm_add_final_kfree. Conversion to managed drm_device cleanup is easy, the final drm_dev_put() is already the last thing in both the bind unbind as in the unbind flow. Also, this relies on component.c correctly wrapping bind&unbind in separate devres groups, which it does. Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Reviewed-by: Dave Airlie <airlied@redhat.com> Cc: Russell King <linux@armlinux.org.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20200904143941.110665-2-daniel.vetter@ffwll.ch
This commit is contained in:
parent
8c3c818c23
commit
90ad200b4c
@ -87,24 +87,13 @@ static int armada_drm_bind(struct device *dev)
|
||||
"armada-drm"))
|
||||
return -EBUSY;
|
||||
|
||||
priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
|
||||
/*
|
||||
* The drm_device structure must be at the start of
|
||||
* armada_private for drm_dev_put() to work correctly.
|
||||
*/
|
||||
BUILD_BUG_ON(offsetof(struct armada_private, drm) != 0);
|
||||
|
||||
ret = drm_dev_init(&priv->drm, &armada_drm_driver, dev);
|
||||
if (ret) {
|
||||
dev_err(dev, "[" DRM_NAME ":%s] drm_dev_init failed: %d\n",
|
||||
__func__, ret);
|
||||
kfree(priv);
|
||||
return ret;
|
||||
priv = devm_drm_dev_alloc(dev, &armada_drm_driver,
|
||||
struct armada_private, drm);
|
||||
if (IS_ERR(priv)) {
|
||||
dev_err(dev, "[" DRM_NAME ":%s] devm_drm_dev_alloc failed: %li\n",
|
||||
__func__, PTR_ERR(priv));
|
||||
return PTR_ERR(priv);
|
||||
}
|
||||
drmm_add_final_kfree(&priv->drm, priv);
|
||||
|
||||
/* Remove early framebuffers */
|
||||
ret = drm_fb_helper_remove_conflicting_framebuffers(NULL,
|
||||
@ -174,7 +163,6 @@ static int armada_drm_bind(struct device *dev)
|
||||
err_kms:
|
||||
drm_mode_config_cleanup(&priv->drm);
|
||||
drm_mm_takedown(&priv->linear);
|
||||
drm_dev_put(&priv->drm);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -194,8 +182,6 @@ static void armada_drm_unbind(struct device *dev)
|
||||
|
||||
drm_mode_config_cleanup(&priv->drm);
|
||||
drm_mm_takedown(&priv->linear);
|
||||
|
||||
drm_dev_put(&priv->drm);
|
||||
}
|
||||
|
||||
static int compare_of(struct device *dev, void *data)
|
||||
|
Loading…
Reference in New Issue
Block a user