<html><body><p>
<pre>
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@mediatek.com>
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@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 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
>
</pre>
</p></body></html><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice
********************
The information contained in this e-mail message (including any
attachments) may be confidential, proprietary, privileged, or otherwise
exempt from disclosure under applicable laws. It is intended to be
conveyed only to the designated recipient(s). Any use, dissemination,
distribution, printing, retaining or copying of this e-mail (including its
attachments) by unintended recipient(s) is strictly prohibited and may
be unlawful. If you are not an intended recipient of this e-mail, or believe
that you have received this e-mail in error, please notify the sender
immediately (by replying to this e-mail), delete any and all copies of
this e-mail (including any attachments) from your system, and do not
disclose the content of this e-mail to any other person. Thank you!
</pre><!--}-->