From 26833249733d9a859ff41b0d41d9a30fc153fa16 Mon Sep 17 00:00:00 2001 From: Yashwanth Date: Fri, 25 Sep 2020 14:43:49 +0530 Subject: [PATCH] disp: msm: register rotator platform driver after genpd init Due to power-domain, if rotator driver is registered early, probe might get deferred several times and get stuck indefinitely. So, this change adds driver registration after genpd init to handle such cases. Change-Id: I8dcb640d0ab0cdf0818cbce1b1fb460c28d8b9e7 Signed-off-by: Yashwanth --- msm/msm_drv.c | 6 ++++-- msm/msm_drv.h | 16 ++++++++-------- rotator/sde_rotator_dev.c | 4 ++-- rotator/sde_rotator_smmu.c | 4 ++-- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/msm/msm_drv.c b/msm/msm_drv.c index d7bc641fed..65dd98fd5e 100644 --- a/msm/msm_drv.c +++ b/msm/msm_drv.c @@ -860,6 +860,10 @@ static int msm_drm_component_init(struct device *dev) goto fail; } + /* Register rotator platform driver only after genpd init */ + sde_rotator_register(); + sde_rotator_smmu_driver_register(); + ret = msm_drm_display_thread_create(param, priv, ddev, dev); if (ret) { dev_err(dev, "msm_drm_display_thread_create failed\n"); @@ -2198,8 +2202,6 @@ static int __init msm_drm_register(void) msm_hdcp_register(); dp_display_register(); msm_smmu_driver_init(); - sde_rotator_register(); - sde_rotator_smmu_driver_register(); msm_dsi_register(); msm_edp_register(); msm_hdmi_register(); diff --git a/msm/msm_drv.h b/msm/msm_drv.h index a16da105e7..abb02fcc6d 100644 --- a/msm/msm_drv.h +++ b/msm/msm_drv.h @@ -1294,25 +1294,25 @@ static inline void __exit sde_wb_unregister(void) #endif /* CONFIG_DRM_SDE_WB */ #if IS_ENABLED(CONFIG_MSM_SDE_ROTATOR) -void __init sde_rotator_register(void); -void __exit sde_rotator_unregister(void); +void sde_rotator_register(void); +void sde_rotator_unregister(void); #else -static inline void __init sde_rotator_register(void) +static inline void sde_rotator_register(void) { } -static inline void __exit sde_rotator_unregister(void) +static inline void sde_rotator_unregister(void) { } #endif /* CONFIG_MSM_SDE_ROTATOR */ #if IS_ENABLED(CONFIG_MSM_SDE_ROTATOR) -void __init sde_rotator_smmu_driver_register(void); -void __exit sde_rotator_smmu_driver_unregister(void); +void sde_rotator_smmu_driver_register(void); +void sde_rotator_smmu_driver_unregister(void); #else -static inline void __init sde_rotator_smmu_driver_register(void) +static inline void sde_rotator_smmu_driver_register(void) { } -static inline void __exit sde_rotator_smmu_driver_unregister(void) +static inline void sde_rotator_smmu_driver_unregister(void) { } #endif /* CONFIG_MSM_SDE_ROTATOR */ diff --git a/rotator/sde_rotator_dev.c b/rotator/sde_rotator_dev.c index f8ddb8d41a..d54f47f2a4 100644 --- a/rotator/sde_rotator_dev.c +++ b/rotator/sde_rotator_dev.c @@ -3611,12 +3611,12 @@ static struct platform_driver rotator_driver = { }; #endif -void __init sde_rotator_register(void) +void sde_rotator_register(void) { platform_driver_register(&rotator_driver); } -void __exit sde_rotator_unregister(void) +void sde_rotator_unregister(void) { platform_driver_unregister(&rotator_driver); } diff --git a/rotator/sde_rotator_smmu.c b/rotator/sde_rotator_smmu.c index 6a623bb684..cf37bd92cc 100644 --- a/rotator/sde_rotator_smmu.c +++ b/rotator/sde_rotator_smmu.c @@ -671,12 +671,12 @@ static struct platform_driver sde_smmu_driver = { }, }; -void __init sde_rotator_smmu_driver_register(void) +void sde_rotator_smmu_driver_register(void) { platform_driver_register(&sde_smmu_driver); } -void __exit sde_rotator_smmu_driver_unregister(void) +void sde_rotator_smmu_driver_unregister(void) { platform_driver_unregister(&sde_smmu_driver); }