Hi, Angelo: On Mon, 2025-01-13 at 15:52 +0100, AngeloGioacchino Del Regno wrote: > External email : Please do not click links or open attachments until you have verified the sender or the content. > > > 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. Reviewed-by: CK Hu <ck.hu@xxxxxxxxxxxx> > > Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx> > --- > 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 c5431f160fe4..138c6283c038 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; > } > > @@ -1381,15 +1382,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"); > > @@ -1638,6 +1639,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); > @@ -1647,7 +1649,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.47.0 >