@ -136,21 +136,24 @@ static int rockchip_drm_bind(struct device *dev)
INIT_LIST_HEAD ( & private - > psr_list ) ;
spin_lock_init ( & private - > psr_list_lock ) ;
ret = rockchip_drm_init_iommu ( drm_dev ) ;
if ( ret )
goto err_free ;
drm_mode_config_init ( drm_dev ) ;
rockchip_drm_mode_config_init ( drm_dev ) ;
ret = rockchip_drm_init_iommu ( drm_dev ) ;
if ( ret )
goto err_config_cleanup ;
/* Try to bind all sub drivers. */
ret = component_bind_all ( dev , drm_dev ) ;
if ( ret )
goto err_iommu _cleanup ;
goto err_mode_config_cleanup ;
/* init kms poll for handling hpd */
drm_kms_helper_poll_init ( drm_dev ) ;
ret = drm_vblank_init ( drm_dev , drm_dev - > mode_config . num_crtc ) ;
if ( ret )
goto err_unbind_all ;
drm_mode_config_reset ( drm_dev ) ;
/*
* enable drm irq mode .
@ -158,15 +161,12 @@ static int rockchip_drm_bind(struct device *dev)
*/
drm_dev - > irq_enabled = true ;
ret = drm_vblank_init ( drm_dev , ROCKCHIP_MAX_CRTC ) ;
if ( ret )
goto err_kms_helper_poll_fini ;
drm_mode_config_reset ( drm_dev ) ;
/* init kms poll for handling hpd */
drm_kms_helper_poll_init ( drm_dev ) ;
ret = rockchip_drm_fbdev_init ( drm_dev ) ;
if ( ret )
goto err_vblank_cleanup ;
goto err_kms_helper_poll_fini ;
ret = drm_dev_register ( drm_dev , 0 ) ;
if ( ret )
@ -175,17 +175,17 @@ static int rockchip_drm_bind(struct device *dev)
return 0 ;
err_fbdev_fini :
rockchip_drm_fbdev_fini ( drm_dev ) ;
err_vblank_cleanup :
drm_vblank_cleanup ( drm_dev ) ;
err_kms_helper_poll_fini :
drm_kms_helper_poll_fini ( drm_dev ) ;
drm_vblank_cleanup ( drm_dev ) ;
err_unbind_all :
component_unbind_all ( dev , drm_dev ) ;
err_iommu_cleanup :
rockchip_iommu_cleanup ( drm_dev ) ;
err_config_cleanup :
err_mode_config_cleanup :
drm_mode_config_cleanup ( drm_dev ) ;
drm_dev - > dev_private = NULL ;
rockchip_iommu_cleanup ( drm_dev ) ;
err_free :
drm_dev - > dev_private = NULL ;
dev_set_drvdata ( dev , NULL ) ;
drm_dev_unref ( drm_dev ) ;
return ret ;
}
@ -194,16 +194,19 @@ static void rockchip_drm_unbind(struct device *dev)
{
struct drm_device * drm_dev = dev_get_drvdata ( dev ) ;
drm_dev_unregister ( drm_dev ) ;
rockchip_drm_fbdev_fini ( drm_dev ) ;
drm_vblank_cleanup ( drm_dev ) ;
drm_kms_helper_poll_fini ( drm_dev ) ;
drm_vblank_cleanup ( drm_dev ) ;
component_unbind_all ( dev , drm_dev ) ;
rockchip_iommu_cleanup ( drm_dev ) ;
drm_mode_config_cleanup ( drm_dev ) ;
rockchip_iommu_cleanup ( drm_dev ) ;
drm_dev - > dev_private = NULL ;
drm_dev_unregister ( drm_dev ) ;
drm_dev_unref ( drm_dev ) ;
dev_set_drvdata ( dev , NULL ) ;
drm_dev_unref ( drm_dev ) ;
}
static void rockchip_drm_lastclose ( struct drm_device * dev )