On Tue, Aug 10, 2021 at 04:30:36PM +0800, Yunfei Dong wrote: > > Looking up "mediatek,mtk-vcodec-core" to determine if it uses component framwork sounds like... > Add prameter in pdata, for all platform will use compoent after mt8183 > > >> + if (dev->is_comp_supported) { > >> + ret = mtk_vcodec_init_master(dev); > >> + if (ret < 0) > >> + goto err_component_match; > >> + } else { > >> + platform_set_drvdata(pdev, dev); > >> + } > > + Has asked the same question in [1]. Why it removes the > > +platform_set_drvdata() above? mtk_vcodec_init_master() also calls platform_set_drvdata(). > Must call component_master_add_with_match after platform_set_drvdata for component architecture. I am confused. The condition "call component_master_add_with_match after platform_set_drvdata" is already true even if without the change. See below. > +static int mtk_vcodec_init_master(struct mtk_vcodec_dev *dev) > +{ > + struct platform_device *pdev = dev->plat_dev; > + struct component_match *match; > + int ret; > + > + match = mtk_vcodec_match_add(dev); > + if (IS_ERR_OR_NULL(match)) > + return -EINVAL; > + > + platform_set_drvdata(pdev, dev); > + ret = component_master_add_with_match(&pdev->dev, &mtk_vdec_ops, match); Point [1]. > @@ -311,7 +413,6 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > MTK_VCODEC_DEC_NAME); > video_set_drvdata(vfd_dec, dev); > dev->vfd_dec = vfd_dec; > - platform_set_drvdata(pdev, dev); Point [2]. > @@ -362,8 +463,16 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > mtk_v4l2_debug(0, "decoder registered as /dev/video%d", > vfd_dec->num); > > - return 0; > + if (dev->vdec_pdata->is_comp_supported) { > + ret = mtk_vcodec_init_master(dev); Point [3]. The calling sequence is: [2] -> component_master_add_with_match() -> [1] -> [3]. Don't understand why it removes the platform_set_drvdata() at point [2].