Hi, Angelo: AngeloGioacchino Del Regno <angelogioacchino.delre...@collabora.com> 於 2025年4月15日 週二 下午6:44寫道: > > In preparation for splitting common bits of this driver and for > introducing a new version of the MediaTek HDMI Encoder IP, improve > the flexibility of function mtk_hdmi_get_all_clk() by adding a > pointer to the clock names array and size of it to its parameters. > > Also change the array of struct clock pointers in the mtk_hdmi > structure to be dynamically allocated, and allocate it in probe.
Build error happen, ../drivers/gpu/drm/mediatek/mtk_hdmi.c: In function \u2018mtk_hdmi_get_cec_dev\u2019: ../drivers/gpu/drm/mediatek/mtk_hdmi.c:1353:15: error: too few arguments to function \u2018mtk_hdmi_get_all_clk\u2019 1353 | ret = mtk_hdmi_get_all_clk(hdmi, np); | ^~~~~~~~~~~~~~~~~~~~ ../drivers/gpu/drm/mediatek/mtk_hdmi.c:1075:12: note: declared here 1075 | static int mtk_hdmi_get_all_clk(struct mtk_hdmi *hdmi, struct device_node *np, | ^~~~~~~~~~~~~~~~~~~~ I've apply some patches of this series to mediatek-drm-next [1], and I've already fixed some build error. I wonder how many error would happen in rest patches, so please fix the build error in rest patches and resend patches. [1] https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux.git/log/?h=mediatek-drm-next Regards, Chun-Kuang. > > Reviewed-by: CK Hu <ck...@mediatek.com> > Signed-off-by: AngeloGioacchino Del Regno > <angelogioacchino.delre...@collabora.com> > --- > drivers/gpu/drm/mediatek/mtk_hdmi.c | 26 ++++++++++++++++---------- > 1 file changed, 16 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c > b/drivers/gpu/drm/mediatek/mtk_hdmi.c > index b4fbd2e60089..b17f8df145eb 100644 > --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c > +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c > @@ -159,7 +159,7 @@ struct mtk_hdmi { > struct phy *phy; > struct device *cec_dev; > struct i2c_adapter *ddc_adpt; > - struct clk *clk[MTK_HDMI_CLK_COUNT]; > + struct clk **clk; > struct drm_display_mode mode; > bool dvi_mode; > struct regmap *sys_regmap; > @@ -1072,17 +1072,18 @@ static const char * const > mtk_hdmi_clk_names[MTK_HDMI_CLK_COUNT] = { > [MTK_HDMI_CLK_AUD_SPDIF] = "spdif", > }; > > -static int mtk_hdmi_get_all_clk(struct mtk_hdmi *hdmi, > - struct device_node *np) > +static int mtk_hdmi_get_all_clk(struct mtk_hdmi *hdmi, struct device_node > *np, > + const char * const *clock_names, size_t > num_clocks) > { > int i; > > - for (i = 0; i < ARRAY_SIZE(mtk_hdmi_clk_names); i++) { > - hdmi->clk[i] = of_clk_get_by_name(np, > - mtk_hdmi_clk_names[i]); > + for (i = 0; i < num_clocks; i++) { > + hdmi->clk[i] = of_clk_get_by_name(np, clock_names[i]); > + > if (IS_ERR(hdmi->clk[i])) > return PTR_ERR(hdmi->clk[i]); > } > + > return 0; > } > > @@ -1377,15 +1378,15 @@ static int mtk_hdmi_get_cec_dev(struct mtk_hdmi > *hdmi, struct device *dev, struc > return 0; > } > > -static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi, > - struct platform_device *pdev) > +static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi, struct > platform_device *pdev, > + const char * const *clk_names, size_t > num_clocks) > { > struct device *dev = &pdev->dev; > struct device_node *np = dev->of_node; > struct device_node *remote, *i2c_np; > int ret; > > - ret = mtk_hdmi_get_all_clk(hdmi, np); > + ret = mtk_hdmi_get_all_clk(hdmi, np, clk_names, num_clocks); > if (ret) > return dev_err_probe(dev, ret, "Failed to get clocks\n"); > > @@ -1634,6 +1635,7 @@ static int mtk_hdmi_probe(struct platform_device *pdev) > { > struct mtk_hdmi *hdmi; > struct device *dev = &pdev->dev; > + const int num_clocks = MTK_HDMI_CLK_COUNT; > int ret; > > hdmi = devm_kzalloc(dev, sizeof(*hdmi), GFP_KERNEL); > @@ -1643,7 +1645,11 @@ static int mtk_hdmi_probe(struct platform_device *pdev) > hdmi->dev = dev; > hdmi->conf = of_device_get_match_data(dev); > > - ret = mtk_hdmi_dt_parse_pdata(hdmi, pdev); > + hdmi->clk = devm_kcalloc(dev, num_clocks, sizeof(*hdmi->clk), > GFP_KERNEL); > + if (!hdmi->clk) > + return -ENOMEM; > + > + ret = mtk_hdmi_dt_parse_pdata(hdmi, pdev, mtk_hdmi_clk_names, > num_clocks); > if (ret) > return ret; > > -- > 2.49.0 >