@@ -203,7 +203,7 @@ static int mdp5_set_split_display(struct msm_kms *kms,
203203 slave_encoder );
204204}
205205
206- static void mdp5_destroy (struct platform_device * pdev );
206+ static void mdp5_destroy (struct mdp5_kms * mdp5_kms );
207207
208208static void mdp5_kms_destroy (struct msm_kms * kms )
209209{
@@ -223,7 +223,7 @@ static void mdp5_kms_destroy(struct msm_kms *kms)
223223 }
224224
225225 mdp_kms_destroy (& mdp5_kms -> base );
226- mdp5_destroy (mdp5_kms -> pdev );
226+ mdp5_destroy (mdp5_kms );
227227}
228228
229229#ifdef CONFIG_DEBUG_FS
@@ -519,9 +519,10 @@ static void read_mdp_hw_revision(struct mdp5_kms *mdp5_kms,
519519 struct device * dev = & mdp5_kms -> pdev -> dev ;
520520 u32 version ;
521521
522- pm_runtime_get_sync (dev );
522+ /* Manually enable the MDP5, as pm runtime isn't usable yet. */
523+ mdp5_enable (mdp5_kms );
523524 version = mdp5_read (mdp5_kms , REG_MDP5_HW_VERSION );
524- pm_runtime_put_sync ( dev );
525+ mdp5_disable ( mdp5_kms );
525526
526527 * major = FIELD (version , MDP5_HW_VERSION_MAJOR );
527528 * minor = FIELD (version , MDP5_HW_VERSION_MINOR );
@@ -559,6 +560,8 @@ static int mdp5_kms_init(struct drm_device *dev)
559560 int irq , i , ret ;
560561
561562 ret = mdp5_init (to_platform_device (dev -> dev ), dev );
563+ if (ret )
564+ return ret ;
562565
563566 /* priv->kms would have been populated by the MDP5 driver */
564567 kms = priv -> kms ;
@@ -632,9 +635,8 @@ static int mdp5_kms_init(struct drm_device *dev)
632635 return ret ;
633636}
634637
635- static void mdp5_destroy (struct platform_device * pdev )
638+ static void mdp5_destroy (struct mdp5_kms * mdp5_kms )
636639{
637- struct mdp5_kms * mdp5_kms = platform_get_drvdata (pdev );
638640 int i ;
639641
640642 if (mdp5_kms -> ctlm )
@@ -648,7 +650,7 @@ static void mdp5_destroy(struct platform_device *pdev)
648650 kfree (mdp5_kms -> intfs [i ]);
649651
650652 if (mdp5_kms -> rpm_enabled )
651- pm_runtime_disable (& pdev -> dev );
653+ pm_runtime_disable (& mdp5_kms -> pdev -> dev );
652654
653655 drm_atomic_private_obj_fini (& mdp5_kms -> glob_state );
654656 drm_modeset_lock_fini (& mdp5_kms -> glob_state_lock );
@@ -797,8 +799,6 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev)
797799 goto fail ;
798800 }
799801
800- platform_set_drvdata (pdev , mdp5_kms );
801-
802802 spin_lock_init (& mdp5_kms -> resource_lock );
803803
804804 mdp5_kms -> dev = dev ;
@@ -839,9 +839,6 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev)
839839 */
840840 clk_set_rate (mdp5_kms -> core_clk , 200000000 );
841841
842- pm_runtime_enable (& pdev -> dev );
843- mdp5_kms -> rpm_enabled = true;
844-
845842 read_mdp_hw_revision (mdp5_kms , & major , & minor );
846843
847844 mdp5_kms -> cfg = mdp5_cfg_init (mdp5_kms , major , minor );
@@ -893,10 +890,13 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev)
893890 /* set uninit-ed kms */
894891 priv -> kms = & mdp5_kms -> base .base ;
895892
893+ pm_runtime_enable (& pdev -> dev );
894+ mdp5_kms -> rpm_enabled = true;
895+
896896 return 0 ;
897897fail :
898898 if (mdp5_kms )
899- mdp5_destroy (pdev );
899+ mdp5_destroy (mdp5_kms );
900900 return ret ;
901901}
902902
@@ -953,7 +953,8 @@ static int mdp5_dev_remove(struct platform_device *pdev)
953953static __maybe_unused int mdp5_runtime_suspend (struct device * dev )
954954{
955955 struct platform_device * pdev = to_platform_device (dev );
956- struct mdp5_kms * mdp5_kms = platform_get_drvdata (pdev );
956+ struct msm_drm_private * priv = platform_get_drvdata (pdev );
957+ struct mdp5_kms * mdp5_kms = to_mdp5_kms (to_mdp_kms (priv -> kms ));
957958
958959 DBG ("" );
959960
@@ -963,7 +964,8 @@ static __maybe_unused int mdp5_runtime_suspend(struct device *dev)
963964static __maybe_unused int mdp5_runtime_resume (struct device * dev )
964965{
965966 struct platform_device * pdev = to_platform_device (dev );
966- struct mdp5_kms * mdp5_kms = platform_get_drvdata (pdev );
967+ struct msm_drm_private * priv = platform_get_drvdata (pdev );
968+ struct mdp5_kms * mdp5_kms = to_mdp5_kms (to_mdp_kms (priv -> kms ));
967969
968970 DBG ("" );
969971
0 commit comments