@@ -554,20 +554,16 @@ static int mdp5_kms_init(struct drm_device *dev)
554554 struct platform_device * pdev ;
555555 struct mdp5_kms * mdp5_kms ;
556556 struct mdp5_cfg * config ;
557- struct msm_kms * kms ;
557+ struct msm_kms * kms = priv -> kms ;
558558 struct msm_gem_address_space * aspace ;
559- int irq , i , ret ;
559+ int i , ret ;
560560
561561 ret = mdp5_init (to_platform_device (dev -> dev ), dev );
562562 if (ret )
563563 return ret ;
564564
565- /* priv->kms would have been populated by the MDP5 driver */
566- kms = priv -> kms ;
567- if (!kms )
568- return - ENOMEM ;
569-
570565 mdp5_kms = to_mdp5_kms (to_mdp_kms (kms ));
566+
571567 pdev = mdp5_kms -> pdev ;
572568
573569 ret = mdp_kms_init (& mdp5_kms -> base , & kms_funcs );
@@ -576,15 +572,6 @@ static int mdp5_kms_init(struct drm_device *dev)
576572 goto fail ;
577573 }
578574
579- irq = irq_of_parse_and_map (pdev -> dev .of_node , 0 );
580- if (!irq ) {
581- ret = - EINVAL ;
582- DRM_DEV_ERROR (& pdev -> dev , "failed to get irq\n" );
583- goto fail ;
584- }
585-
586- kms -> irq = irq ;
587-
588575 config = mdp5_cfg_get_config (mdp5_kms -> cfg );
589576
590577 /* make sure things are off before attaching iommu (bootloader could
@@ -787,60 +774,23 @@ static int interface_init(struct mdp5_kms *mdp5_kms)
787774static int mdp5_init (struct platform_device * pdev , struct drm_device * dev )
788775{
789776 struct msm_drm_private * priv = dev -> dev_private ;
790- struct mdp5_kms * mdp5_kms ;
777+ struct mdp5_kms * mdp5_kms = to_mdp5_kms ( to_mdp_kms ( priv -> kms )) ;
791778 struct mdp5_cfg * config ;
792779 u32 major , minor ;
793780 int ret ;
794781
795- mdp5_kms = devm_kzalloc (& pdev -> dev , sizeof (* mdp5_kms ), GFP_KERNEL );
796- if (!mdp5_kms ) {
797- ret = - ENOMEM ;
798- goto fail ;
799- }
800-
801- spin_lock_init (& mdp5_kms -> resource_lock );
802-
803782 mdp5_kms -> dev = dev ;
804- mdp5_kms -> pdev = pdev ;
805783
806784 ret = mdp5_global_obj_init (mdp5_kms );
807785 if (ret )
808786 goto fail ;
809787
810- mdp5_kms -> mmio = msm_ioremap (pdev , "mdp_phys" );
811- if (IS_ERR (mdp5_kms -> mmio )) {
812- ret = PTR_ERR (mdp5_kms -> mmio );
813- goto fail ;
814- }
815-
816- /* mandatory clocks: */
817- ret = get_clk (pdev , & mdp5_kms -> axi_clk , "bus" , true);
818- if (ret )
819- goto fail ;
820- ret = get_clk (pdev , & mdp5_kms -> ahb_clk , "iface" , true);
821- if (ret )
822- goto fail ;
823- ret = get_clk (pdev , & mdp5_kms -> core_clk , "core" , true);
824- if (ret )
825- goto fail ;
826- ret = get_clk (pdev , & mdp5_kms -> vsync_clk , "vsync" , true);
827- if (ret )
828- goto fail ;
829-
830- /* optional clocks: */
831- get_clk (pdev , & mdp5_kms -> lut_clk , "lut" , false);
832- get_clk (pdev , & mdp5_kms -> tbu_clk , "tbu" , false);
833- get_clk (pdev , & mdp5_kms -> tbu_rt_clk , "tbu_rt" , false);
834-
835788 /* we need to set a default rate before enabling. Set a safe
836789 * rate first, then figure out hw revision, and then set a
837790 * more optimal rate:
838791 */
839792 clk_set_rate (mdp5_kms -> core_clk , 200000000 );
840793
841- /* set uninit-ed kms */
842- priv -> kms = & mdp5_kms -> base .base ;
843-
844794 pm_runtime_enable (& pdev -> dev );
845795 mdp5_kms -> rpm_enabled = true;
846796
@@ -931,15 +881,53 @@ static int mdp5_setup_interconnect(struct platform_device *pdev)
931881
932882static int mdp5_dev_probe (struct platform_device * pdev )
933883{
934- int ret ;
884+ struct mdp5_kms * mdp5_kms ;
885+ int ret , irq ;
935886
936887 DBG ("" );
937888
889+ mdp5_kms = devm_kzalloc (& pdev -> dev , sizeof (* mdp5_kms ), GFP_KERNEL );
890+ if (!mdp5_kms )
891+ return - ENOMEM ;
892+
938893 ret = mdp5_setup_interconnect (pdev );
939894 if (ret )
940895 return ret ;
941896
942- return msm_drv_probe (& pdev -> dev , mdp5_kms_init , NULL );
897+ mdp5_kms -> pdev = pdev ;
898+
899+ spin_lock_init (& mdp5_kms -> resource_lock );
900+
901+ mdp5_kms -> mmio = msm_ioremap (pdev , "mdp_phys" );
902+ if (IS_ERR (mdp5_kms -> mmio ))
903+ return PTR_ERR (mdp5_kms -> mmio );
904+
905+ /* mandatory clocks: */
906+ ret = get_clk (pdev , & mdp5_kms -> axi_clk , "bus" , true);
907+ if (ret )
908+ return ret ;
909+ ret = get_clk (pdev , & mdp5_kms -> ahb_clk , "iface" , true);
910+ if (ret )
911+ return ret ;
912+ ret = get_clk (pdev , & mdp5_kms -> core_clk , "core" , true);
913+ if (ret )
914+ return ret ;
915+ ret = get_clk (pdev , & mdp5_kms -> vsync_clk , "vsync" , true);
916+ if (ret )
917+ return ret ;
918+
919+ /* optional clocks: */
920+ get_clk (pdev , & mdp5_kms -> lut_clk , "lut" , false);
921+ get_clk (pdev , & mdp5_kms -> tbu_clk , "tbu" , false);
922+ get_clk (pdev , & mdp5_kms -> tbu_rt_clk , "tbu_rt" , false);
923+
924+ irq = platform_get_irq (pdev , 0 );
925+ if (irq < 0 )
926+ return dev_err_probe (& pdev -> dev , irq , "failed to get irq\n" );
927+
928+ mdp5_kms -> base .base .irq = irq ;
929+
930+ return msm_drv_probe (& pdev -> dev , mdp5_kms_init , & mdp5_kms -> base .base );
943931}
944932
945933static int mdp5_dev_remove (struct platform_device * pdev )
0 commit comments