Przeglądaj źródła

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 <[email protected]>
Yashwanth 4 lat temu
rodzic
commit
2683324973
4 zmienionych plików z 16 dodań i 14 usunięć
  1. 4 2
      msm/msm_drv.c
  2. 8 8
      msm/msm_drv.h
  3. 2 2
      rotator/sde_rotator_dev.c
  4. 2 2
      rotator/sde_rotator_smmu.c

+ 4 - 2
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();

+ 8 - 8
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 */

+ 2 - 2
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);
 }

+ 2 - 2
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);
 }