]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/mediatek: mtk_hdmi: Move CEC device parsing in new function
authorAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tue, 15 Apr 2025 10:43:11 +0000 (12:43 +0200)
committerChun-Kuang Hu <chunkuang.hu@kernel.org>
Mon, 21 Apr 2025 13:51:27 +0000 (13:51 +0000)
Move the CEC device parsing logic to a new function called
mtk_hdmi_get_cec_dev(), and move the parsing action to the end
of mtk_hdmi_dt_parse_pdata(), allowing to remove gotos in this
function, reducing code size and improving readability.

Reviewed-by: CK Hu <ck.hu@mediatek.com>
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://patchwork.kernel.org/project/dri-devel/patch/20250415104321.51149-14-angelogioacchino.delregno@collabora.com/
Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
drivers/gpu/drm/mediatek/mtk_hdmi.c

index 6c65d256e4d399a011f2cf8f35248f0153c71c5f..cba1d3172472b08c89ce7d921de43b4593365573 100644 (file)
@@ -1357,14 +1357,10 @@ static const struct drm_bridge_funcs mtk_hdmi_bridge_funcs = {
        .edid_read = mtk_hdmi_bridge_edid_read,
 };
 
-static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
-                                  struct platform_device *pdev)
+static int mtk_hdmi_get_cec_dev(struct mtk_hdmi *hdmi, struct device *dev, struct device_node *np)
 {
-       struct device *dev = &pdev->dev;
-       struct device_node *np = dev->of_node;
-       struct device_node *cec_np, *remote, *i2c_np;
        struct platform_device *cec_pdev;
-       struct regmap *regmap;
+       struct device_node *cec_np;
        int ret;
 
        ret = mtk_hdmi_get_all_clk(hdmi, np);
@@ -1384,62 +1380,66 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
                return -EPROBE_DEFER;
        }
        of_node_put(cec_np);
-       hdmi->cec_dev = &cec_pdev->dev;
 
        /*
         * The mediatek,syscon-hdmi property contains a phandle link to the
         * MMSYS_CONFIG device and the register offset of the HDMI_SYS_CFG
         * registers it contains.
         */
-       regmap = syscon_regmap_lookup_by_phandle_args(np, "mediatek,syscon-hdmi",
-                                                     1, &hdmi->sys_offset);
-       if (IS_ERR(regmap)) {
-               ret = dev_err_probe(dev, PTR_ERR(regmap),
-                                   "Failed to get system configuration registers\n");
-               goto put_device;
-       }
-       hdmi->sys_regmap = regmap;
+       hdmi->sys_regmap = syscon_regmap_lookup_by_phandle_args(np, "mediatek,syscon-hdmi",
+                                                               1, &hdmi->sys_offset);
+       if (IS_ERR(hdmi->sys_regmap))
+               return dev_err_probe(dev, PTR_ERR(hdmi->sys_regmap),
+                                    "Failed to get system configuration registers\n");
+
+       hdmi->cec_dev = &cec_pdev->dev;
+       return 0;
+}
+
+static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
+                                  struct platform_device *pdev)
+{
+       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);
+       if (ret)
+               return dev_err_probe(dev, ret, "Failed to get clocks\n");
 
        hdmi->regs = device_node_to_regmap(dev->of_node);
-       if (IS_ERR(hdmi->regs)) {
-               ret = PTR_ERR(hdmi->regs);
-               goto put_device;
-       }
+       if (IS_ERR(hdmi->regs))
+               return PTR_ERR(hdmi->regs);
 
        remote = of_graph_get_remote_node(np, 1, 0);
-       if (!remote) {
-               ret = -EINVAL;
-               goto put_device;
-       }
+       if (!remote)
+               return -EINVAL;
 
        if (!of_device_is_compatible(remote, "hdmi-connector")) {
                hdmi->next_bridge = of_drm_find_bridge(remote);
                if (!hdmi->next_bridge) {
                        dev_err(dev, "Waiting for external bridge\n");
                        of_node_put(remote);
-                       ret = -EPROBE_DEFER;
-                       goto put_device;
+                       return -EPROBE_DEFER;
                }
        }
 
        i2c_np = of_parse_phandle(remote, "ddc-i2c-bus", 0);
        of_node_put(remote);
-       if (!i2c_np) {
-               ret = dev_err_probe(dev, -EINVAL, "No ddc-i2c-bus in connector\n");
-               goto put_device;
-       }
+       if (!i2c_np)
+               return dev_err_probe(dev, -EINVAL, "No ddc-i2c-bus in connector\n");
 
        hdmi->ddc_adpt = of_find_i2c_adapter_by_node(i2c_np);
        of_node_put(i2c_np);
-       if (!hdmi->ddc_adpt) {
-               ret = dev_err_probe(dev, -EINVAL, "Failed to get ddc i2c adapter by node\n");
-               goto put_device;
-       }
+       if (!hdmi->ddc_adpt)
+               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)
+               return ret;
 
        return 0;
-put_device:
-       put_device(hdmi->cec_dev);
-       return ret;
 }
 
 /*