@@ -621,15 +621,27 @@ int mtk_find_possible_crtcs(struct drm_device *drm, struct device *dev)
621621 return ret ;
622622}
623623
624- int mtk_ddp_comp_init (struct device_node * node , struct mtk_ddp_comp * comp ,
624+ static void mtk_ddp_comp_put_device (void * _dev )
625+ {
626+ struct device * dev = _dev ;
627+
628+ put_device (dev );
629+ }
630+
631+ static void mtk_ddp_comp_clk_put (void * _clk )
632+ {
633+ struct clk * clk = _clk ;
634+
635+ clk_put (clk );
636+ }
637+
638+ int mtk_ddp_comp_init (struct device * dev , struct device_node * node , struct mtk_ddp_comp * comp ,
625639 unsigned int comp_id )
626640{
627641 struct platform_device * comp_pdev ;
628642 enum mtk_ddp_comp_type type ;
629643 struct mtk_ddp_comp_dev * priv ;
630- #if IS_REACHABLE (CONFIG_MTK_CMDQ )
631644 int ret ;
632- #endif
633645
634646 if (comp_id >= DDP_COMPONENT_DRM_ID_MAX )
635647 return - EINVAL ;
@@ -651,6 +663,10 @@ int mtk_ddp_comp_init(struct device_node *node, struct mtk_ddp_comp *comp,
651663 }
652664 comp -> dev = & comp_pdev -> dev ;
653665
666+ ret = devm_add_action_or_reset (dev , mtk_ddp_comp_put_device , comp -> dev );
667+ if (ret )
668+ return ret ;
669+
654670 if (type == MTK_DISP_AAL ||
655671 type == MTK_DISP_BLS ||
656672 type == MTK_DISP_CCORR ||
@@ -666,15 +682,22 @@ int mtk_ddp_comp_init(struct device_node *node, struct mtk_ddp_comp *comp,
666682 type == MTK_DSI )
667683 return 0 ;
668684
669- priv = devm_kzalloc (comp -> dev , sizeof (* priv ), GFP_KERNEL );
685+ priv = devm_kzalloc (dev , sizeof (* priv ), GFP_KERNEL );
670686 if (!priv )
671687 return - ENOMEM ;
672688
673- priv -> regs = of_iomap (node , 0 );
689+ priv -> regs = devm_of_iomap (dev , node , 0 , NULL );
690+ if (IS_ERR (priv -> regs ))
691+ return PTR_ERR (priv -> regs );
692+
674693 priv -> clk = of_clk_get (node , 0 );
675694 if (IS_ERR (priv -> clk ))
676695 return PTR_ERR (priv -> clk );
677696
697+ ret = devm_add_action_or_reset (dev , mtk_ddp_comp_clk_put , priv -> clk );
698+ if (ret )
699+ return ret ;
700+
678701#if IS_REACHABLE (CONFIG_MTK_CMDQ )
679702 ret = cmdq_dev_get_client_reg (comp -> dev , & priv -> cmdq_reg , 0 );
680703 if (ret )
0 commit comments