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. > > > 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. > > Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx> > --- > drivers/gpu/drm/mediatek/mtk_hdmi.c | 84 ++++++++++++++--------------- > 1 file changed, 40 insertions(+), 44 deletions(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c > index 48c37294dcbb..eb285ec394a3 100644 > --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c > +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c > @@ -1367,24 +1367,16 @@ 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 *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); > - if (ret) > - return dev_err_probe(dev, ret, "Failed to get clocks\n"); > - > /* 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"); Changing error message should be another patch. I see another patch has also ENOTSUPP modification. Maybe both should in the same patch. > > cec_pdev = of_find_device_by_node(cec_np); > if (!cec_pdev) { > @@ -1393,65 +1385,69 @@ 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(np, "mediatek,syscon-hdmi"); > - ret = of_property_read_u32_index(np, "mediatek,syscon-hdmi", 1, > - &hdmi->sys_offset); > - if (IS_ERR(regmap)) > - ret = PTR_ERR(regmap); > - if (ret) { > - dev_err_probe(dev, ret, > - "Failed to get system configuration registers\n"); > - goto put_device; > - } > - hdmi->sys_regmap = regmap; > + hdmi->sys_regmap = syscon_regmap_lookup_by_phandle(np, "mediatek,syscon-hdmi"); > + if (IS_ERR(hdmi->sys_regmap)) > + return PTR_ERR(hdmi->sys_regmap); > + > + ret = of_property_read_u32_index(np, "mediatek,syscon-hdmi", 1, &hdmi->sys_offset); > + if (ret) > + return dev_err_probe(dev, ret, > + "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; Maybe return mtk_hdmi_get_cec_dev(hdmi, dev, np); Regards, CK > -put_device: > - put_device(hdmi->cec_dev); > - return ret; > } > > /* > -- > 2.47.0 >