[PATCH v11 05/11] drm/mediatek: mtk_hdmi_common: Make CEC support optional

Louis-Alexis Eyraud posted 11 patches 1 month, 3 weeks ago
[PATCH v11 05/11] drm/mediatek: mtk_hdmi_common: Make CEC support optional
Posted by Louis-Alexis Eyraud 1 month, 3 weeks ago
From: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>

In preparation for adding a new driver for HDMIv2, for which CEC
is not strictly required, change the of_get_compatible_child()
failure error to -ENOTSUPP to be able to differentiate between
error conditions in mtk_hdmi_dt_parse_pdata().

In that case, if -ENOTSUPP is returned, this driver will print
an informative message saying that CEC support is unavailable,
as the devicetree node for that was not found, but after that,
function mtk_hdmi_dt_parse_pdata() will not return error to
the caller.

This will not change functionality of the mtk_hdmi (v1) driver
as that is still checking whether CEC is present and, if not,
will fail probing with an error saying that CEC is required
by HDMIv1.

Reviewed-by: CK Hu <ck.hu@mediatek.com>
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Louis-Alexis Eyraud <louisalexis.eyraud@collabora.com>
---
 drivers/gpu/drm/mediatek/mtk_hdmi_common.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi_common.c b/drivers/gpu/drm/mediatek/mtk_hdmi_common.c
index f28e63716d7c2e2c6bdf5b28d24789bc926d2beb..989479fdfe40952762a1b63797bf602b520dcac5 100644
--- a/drivers/gpu/drm/mediatek/mtk_hdmi_common.c
+++ b/drivers/gpu/drm/mediatek/mtk_hdmi_common.c
@@ -253,12 +253,11 @@ static int mtk_hdmi_get_cec_dev(struct mtk_hdmi *hdmi, struct device *dev, struc
 	/* The CEC module handles HDMI hotplug detection */
 	cec_np = of_get_compatible_child(np->parent, "mediatek,mt8173-cec");
 	if (!cec_np)
-		return dev_err_probe(dev, -EINVAL, "Failed to find CEC node\n");
+		return dev_err_probe(dev, -ENOTSUPP, "Failed to find CEC node\n");
 
 	cec_pdev = of_find_device_by_node(cec_np);
 	if (!cec_pdev) {
-		dev_err(hdmi->dev, "Waiting for CEC device %pOF\n",
-			cec_np);
+		dev_err(hdmi->dev, "Waiting for CEC device %pOF\n", cec_np);
 		of_node_put(cec_np);
 		return -EPROBE_DEFER;
 	}
@@ -319,7 +318,9 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi, struct platform_device
 		return dev_err_probe(dev, -EINVAL, "Failed to get ddc i2c adapter by node\n");
 
 	ret = mtk_hdmi_get_cec_dev(hdmi, dev, np);
-	if (ret)
+	if (ret == -ENOTSUPP)
+		dev_info(dev, "CEC support unavailable: node not found\n");
+	else if (ret)
 		return ret;
 
 	return 0;

-- 
2.51.0
Re: [PATCH v11 05/11] drm/mediatek: mtk_hdmi_common: Make CEC support optional
Posted by Chun-Kuang Hu 1 month, 3 weeks ago
Hi, Louis:

Louis-Alexis Eyraud <louisalexis.eyraud@collabora.com> 於 2025年10月23日
週四 上午10:32寫道:
>
> From: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
>
> In preparation for adding a new driver for HDMIv2, for which CEC
> is not strictly required, change the of_get_compatible_child()
> failure error to -ENOTSUPP to be able to differentiate between
> error conditions in mtk_hdmi_dt_parse_pdata().
>
> In that case, if -ENOTSUPP is returned, this driver will print
> an informative message saying that CEC support is unavailable,
> as the devicetree node for that was not found, but after that,
> function mtk_hdmi_dt_parse_pdata() will not return error to
> the caller.
>
> This will not change functionality of the mtk_hdmi (v1) driver
> as that is still checking whether CEC is present and, if not,
> will fail probing with an error saying that CEC is required
> by HDMIv1.
>
> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
> Signed-off-by: Louis-Alexis Eyraud <louisalexis.eyraud@collabora.com>
> ---
>  drivers/gpu/drm/mediatek/mtk_hdmi_common.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi_common.c b/drivers/gpu/drm/mediatek/mtk_hdmi_common.c
> index f28e63716d7c2e2c6bdf5b28d24789bc926d2beb..989479fdfe40952762a1b63797bf602b520dcac5 100644
> --- a/drivers/gpu/drm/mediatek/mtk_hdmi_common.c
> +++ b/drivers/gpu/drm/mediatek/mtk_hdmi_common.c
> @@ -253,12 +253,11 @@ static int mtk_hdmi_get_cec_dev(struct mtk_hdmi *hdmi, struct device *dev, struc
>         /* The CEC module handles HDMI hotplug detection */
>         cec_np = of_get_compatible_child(np->parent, "mediatek,mt8173-cec");
>         if (!cec_np)
> -               return dev_err_probe(dev, -EINVAL, "Failed to find CEC node\n");
> +               return dev_err_probe(dev, -ENOTSUPP, "Failed to find CEC node\n");

The checkpatch show the warning:

WARNING: ENOTSUPP is not a SUSV4 error code, prefer EOPNOTSUPP
#40: FILE: drivers/gpu/drm/mediatek/mtk_hdmi_common.c:256:
+        return dev_err_probe(dev, -ENOTSUPP, "Failed to find CEC node\n");

I find many driver use ENOTSUPP, so I'm not sure which one is better.
I really don't understand the description about these two error code [1].
If you choose ENOTSUPP, please give me some explain.

[1] https://man7.org/linux/man-pages/man3/errno.3.html

Regards,
Chun-Kuang.

>
>         cec_pdev = of_find_device_by_node(cec_np);
>         if (!cec_pdev) {
> -               dev_err(hdmi->dev, "Waiting for CEC device %pOF\n",
> -                       cec_np);
> +               dev_err(hdmi->dev, "Waiting for CEC device %pOF\n", cec_np);
>                 of_node_put(cec_np);
>                 return -EPROBE_DEFER;
>         }
> @@ -319,7 +318,9 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi, struct platform_device
>                 return dev_err_probe(dev, -EINVAL, "Failed to get ddc i2c adapter by node\n");
>
>         ret = mtk_hdmi_get_cec_dev(hdmi, dev, np);
> -       if (ret)
> +       if (ret == -ENOTSUPP)
> +               dev_info(dev, "CEC support unavailable: node not found\n");
> +       else if (ret)
>                 return ret;
>
>         return 0;
>
> --
> 2.51.0
>
Re: [PATCH v11 05/11] drm/mediatek: mtk_hdmi_common: Make CEC support optional
Posted by Louis-Alexis Eyraud 1 month, 3 weeks ago
Hi,

On Thu, 2025-10-23 at 15:59 +0000, Chun-Kuang Hu wrote:
> Hi, Louis:
> 
> Louis-Alexis Eyraud <louisalexis.eyraud@collabora.com> 於 2025年10月23日
> 週四 上午10:32寫道:
> > 
> > From: AngeloGioacchino Del Regno
> > <angelogioacchino.delregno@collabora.com>
> > 
> > In preparation for adding a new driver for HDMIv2, for which CEC
> > is not strictly required, change the of_get_compatible_child()
> > failure error to -ENOTSUPP to be able to differentiate between
> > error conditions in mtk_hdmi_dt_parse_pdata().
> > 
> > In that case, if -ENOTSUPP is returned, this driver will print
> > an informative message saying that CEC support is unavailable,
> > as the devicetree node for that was not found, but after that,
> > function mtk_hdmi_dt_parse_pdata() will not return error to
> > the caller.
> > 
> > This will not change functionality of the mtk_hdmi (v1) driver
> > as that is still checking whether CEC is present and, if not,
> > will fail probing with an error saying that CEC is required
> > by HDMIv1.
> > 
> > Reviewed-by: CK Hu <ck.hu@mediatek.com>
> > Signed-off-by: AngeloGioacchino Del Regno
> > <angelogioacchino.delregno@collabora.com>
> > Signed-off-by: Louis-Alexis Eyraud
> > <louisalexis.eyraud@collabora.com>
> > ---
> >  drivers/gpu/drm/mediatek/mtk_hdmi_common.c | 9 +++++----
> >  1 file changed, 5 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi_common.c
> > b/drivers/gpu/drm/mediatek/mtk_hdmi_common.c
> > index
> > f28e63716d7c2e2c6bdf5b28d24789bc926d2beb..989479fdfe40952762a1b6379
> > 7bf602b520dcac5 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_hdmi_common.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_hdmi_common.c
> > @@ -253,12 +253,11 @@ static int mtk_hdmi_get_cec_dev(struct
> > mtk_hdmi *hdmi, struct device *dev, struc
> >         /* The CEC module handles HDMI hotplug detection */
> >         cec_np = of_get_compatible_child(np->parent,
> > "mediatek,mt8173-cec");
> >         if (!cec_np)
> > -               return dev_err_probe(dev, -EINVAL, "Failed to find
> > CEC node\n");
> > +               return dev_err_probe(dev, -ENOTSUPP, "Failed to
> > find CEC node\n");
> 
> The checkpatch show the warning:
> 
> WARNING: ENOTSUPP is not a SUSV4 error code, prefer EOPNOTSUPP
> #40: FILE: drivers/gpu/drm/mediatek/mtk_hdmi_common.c:256:
> +        return dev_err_probe(dev, -ENOTSUPP, "Failed to find CEC
> node\n");
> 
> I find many driver use ENOTSUPP, so I'm not sure which one is better.
> I really don't understand the description about these two error code
> [1].
> If you choose ENOTSUPP, please give me some explain.
> 
> [1] https://man7.org/linux/man-pages/man3/errno.3.html
> 
> Regards,
> Chun-Kuang.
> 
> 
I think ENOTSUPP can be replaced by EOPNOTSUPP in this patch safely.

There is only a single call of the mtk_hdmi_get_cec_dev function in the
driver and the code that checks this particular return code value in
mtk_hdmi_dt_parse_pdata function is also added by this patch.

I also don't see no other occurrence of ENOTSUPP code in mediatek-drm
and since checkpatch recommends to prefer EOPNOTSUPP over ENOTSUPP,
let's replace it in this patch (both code and commit message).

Do you want me to send a new version of the series for this change?

Regards,
Louis-Alexis 

> >         cec_pdev = of_find_device_by_node(cec_np);
> >         if (!cec_pdev) {
> > -               dev_err(hdmi->dev, "Waiting for CEC device %pOF\n",
> > -                       cec_np);
> > +               dev_err(hdmi->dev, "Waiting for CEC device %pOF\n",
> > cec_np);
> >                 of_node_put(cec_np);
> >                 return -EPROBE_DEFER;
> >         }
> > @@ -319,7 +318,9 @@ static int mtk_hdmi_dt_parse_pdata(struct
> > mtk_hdmi *hdmi, struct platform_device
> >                 return dev_err_probe(dev, -EINVAL, "Failed to get
> > ddc i2c adapter by node\n");
> > 
> >         ret = mtk_hdmi_get_cec_dev(hdmi, dev, np);
> > -       if (ret)
> > +       if (ret == -ENOTSUPP)
> > +               dev_info(dev, "CEC support unavailable: node not
> > found\n");
> > +       else if (ret)
> >                 return ret;
> > 
> >         return 0;
> > 
> > --
> > 2.51.0
> >