diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index 938ca72fc9c3..fed632d849f2 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -1906,6 +1906,7 @@ static int rockchip_drm_bind(struct device *dev) goto err_drm_fbdev_fini; rockchip_drm_error_event_init(drm_dev); + rockchip_clocks_loader_unprotect(); return 0; err_drm_fbdev_fini: diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_logo.c b/drivers/gpu/drm/rockchip/rockchip_drm_logo.c index 1be914c14841..2b7076fac108 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_logo.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_logo.c @@ -1316,7 +1316,7 @@ static const char *const loader_protect_clocks[] __initconst = { "dclk_vp3", }; -static struct clk **loader_clocks __initdata; +static struct clk **loader_clocks; static int __init rockchip_clocks_loader_protect(void) { int nclocks = ARRAY_SIZE(loader_protect_clocks); @@ -1340,7 +1340,7 @@ static int __init rockchip_clocks_loader_protect(void) } arch_initcall_sync(rockchip_clocks_loader_protect); -static int __init rockchip_clocks_loader_unprotect(void) +int rockchip_clocks_loader_unprotect(void) { int i; @@ -1354,8 +1354,8 @@ static int __init rockchip_clocks_loader_unprotect(void) clk_disable_unprepare(clk); } kfree(loader_clocks); + loader_clocks = NULL; return 0; } -late_initcall_sync(rockchip_clocks_loader_unprotect); #endif diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_logo.h b/drivers/gpu/drm/rockchip/rockchip_drm_logo.h index 7e1b1d2dfdf4..ab3fe550713c 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_logo.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_logo.h @@ -42,5 +42,13 @@ struct rockchip_drm_mode_set { void rockchip_drm_show_logo(struct drm_device *drm_dev); void rockchip_free_loader_memory(struct drm_device *drm); +#ifndef MODULE +int rockchip_clocks_loader_unprotect(void); +#else +static inline int rockchip_clocks_loader_unprotect(void) +{ + return 0; +} +#endif #endif