Thread (19 messages) 19 messages, 3 authors, 2021-08-10

Re: [PATCH v4, 04/15] media: mtk-vcodec: Use component framework to manage each hardware information

From: Tzung-Bi Shih <hidden>
Date: 2021-08-10 11:13:58
Also in: linux-arm-kernel, linux-media, linux-mediatek, lkml

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].
quoted hunk ↗ jump to hunk
@@ -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].
quoted hunk ↗ jump to hunk
@@ -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].
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help