@@ -203,7 +203,7 @@ static int mdp5_set_split_display(struct msm_kms *kms,
203
203
slave_encoder );
204
204
}
205
205
206
- static void mdp5_destroy (struct platform_device * pdev );
206
+ static void mdp5_destroy (struct mdp5_kms * mdp5_kms );
207
207
208
208
static void mdp5_kms_destroy (struct msm_kms * kms )
209
209
{
@@ -223,7 +223,7 @@ static void mdp5_kms_destroy(struct msm_kms *kms)
223
223
}
224
224
225
225
mdp_kms_destroy (& mdp5_kms -> base );
226
- mdp5_destroy (mdp5_kms -> pdev );
226
+ mdp5_destroy (mdp5_kms );
227
227
}
228
228
229
229
#ifdef CONFIG_DEBUG_FS
@@ -519,9 +519,10 @@ static void read_mdp_hw_revision(struct mdp5_kms *mdp5_kms,
519
519
struct device * dev = & mdp5_kms -> pdev -> dev ;
520
520
u32 version ;
521
521
522
- pm_runtime_get_sync (dev );
522
+ /* Manually enable the MDP5, as pm runtime isn't usable yet. */
523
+ mdp5_enable (mdp5_kms );
523
524
version = mdp5_read (mdp5_kms , REG_MDP5_HW_VERSION );
524
- pm_runtime_put_sync ( dev );
525
+ mdp5_disable ( mdp5_kms );
525
526
526
527
* major = FIELD (version , MDP5_HW_VERSION_MAJOR );
527
528
* minor = FIELD (version , MDP5_HW_VERSION_MINOR );
@@ -559,6 +560,8 @@ static int mdp5_kms_init(struct drm_device *dev)
559
560
int irq , i , ret ;
560
561
561
562
ret = mdp5_init (to_platform_device (dev -> dev ), dev );
563
+ if (ret )
564
+ return ret ;
562
565
563
566
/* priv->kms would have been populated by the MDP5 driver */
564
567
kms = priv -> kms ;
@@ -632,9 +635,8 @@ static int mdp5_kms_init(struct drm_device *dev)
632
635
return ret ;
633
636
}
634
637
635
- static void mdp5_destroy (struct platform_device * pdev )
638
+ static void mdp5_destroy (struct mdp5_kms * mdp5_kms )
636
639
{
637
- struct mdp5_kms * mdp5_kms = platform_get_drvdata (pdev );
638
640
int i ;
639
641
640
642
if (mdp5_kms -> ctlm )
@@ -648,7 +650,7 @@ static void mdp5_destroy(struct platform_device *pdev)
648
650
kfree (mdp5_kms -> intfs [i ]);
649
651
650
652
if (mdp5_kms -> rpm_enabled )
651
- pm_runtime_disable (& pdev -> dev );
653
+ pm_runtime_disable (& mdp5_kms -> pdev -> dev );
652
654
653
655
drm_atomic_private_obj_fini (& mdp5_kms -> glob_state );
654
656
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)
797
799
goto fail ;
798
800
}
799
801
800
- platform_set_drvdata (pdev , mdp5_kms );
801
-
802
802
spin_lock_init (& mdp5_kms -> resource_lock );
803
803
804
804
mdp5_kms -> dev = dev ;
@@ -839,9 +839,6 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev)
839
839
*/
840
840
clk_set_rate (mdp5_kms -> core_clk , 200000000 );
841
841
842
- pm_runtime_enable (& pdev -> dev );
843
- mdp5_kms -> rpm_enabled = true;
844
-
845
842
read_mdp_hw_revision (mdp5_kms , & major , & minor );
846
843
847
844
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)
893
890
/* set uninit-ed kms */
894
891
priv -> kms = & mdp5_kms -> base .base ;
895
892
893
+ pm_runtime_enable (& pdev -> dev );
894
+ mdp5_kms -> rpm_enabled = true;
895
+
896
896
return 0 ;
897
897
fail :
898
898
if (mdp5_kms )
899
- mdp5_destroy (pdev );
899
+ mdp5_destroy (mdp5_kms );
900
900
return ret ;
901
901
}
902
902
@@ -953,7 +953,8 @@ static int mdp5_dev_remove(struct platform_device *pdev)
953
953
static __maybe_unused int mdp5_runtime_suspend (struct device * dev )
954
954
{
955
955
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 ));
957
958
958
959
DBG ("" );
959
960
@@ -963,7 +964,8 @@ static __maybe_unused int mdp5_runtime_suspend(struct device *dev)
963
964
static __maybe_unused int mdp5_runtime_resume (struct device * dev )
964
965
{
965
966
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 ));
967
969
968
970
DBG ("" );
969
971
0 commit comments