Commit 0680a622 authored by Yu Kuai's avatar Yu Kuai Committed by Chun-Kuang Hu
Browse files

drm/mediatek: Add missing put_device() call in mtk_hdmi_dt_parse_pdata()



if of_find_device_by_node() succeed, mtk_drm_kms_init() doesn't have
a corresponding put_device(). Thus add jump target to fix the exception
handling for this function implementation.

Fixes: 8f83f268 ("drm/mediatek: Add HDMI support")
Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
Signed-off-by: default avatarChun-Kuang Hu <chunkuang.hu@kernel.org>
parent 2132940f
Loading
Loading
Loading
Loading
+18 −8
Original line number Diff line number Diff line
@@ -1507,25 +1507,30 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
		dev_err(dev,
			"Failed to get system configuration registers: %d\n",
			ret);
		return ret;
		goto put_device;
	}
	hdmi->sys_regmap = regmap;

	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	hdmi->regs = devm_ioremap_resource(dev, mem);
	if (IS_ERR(hdmi->regs))
		return PTR_ERR(hdmi->regs);
	if (IS_ERR(hdmi->regs)) {
		ret = PTR_ERR(hdmi->regs);
		goto put_device;
	}

	remote = of_graph_get_remote_node(np, 1, 0);
	if (!remote)
		return -EINVAL;
	if (!remote) {
		ret = -EINVAL;
		goto put_device;
	}

	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);
			return -EPROBE_DEFER;
			ret = -EPROBE_DEFER;
			goto put_device;
		}
	}

@@ -1534,7 +1539,8 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
		dev_err(dev, "Failed to find ddc-i2c-bus node in %pOF\n",
			remote);
		of_node_put(remote);
		return -EINVAL;
		ret = -EINVAL;
		goto put_device;
	}
	of_node_put(remote);

@@ -1542,10 +1548,14 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
	of_node_put(i2c_np);
	if (!hdmi->ddc_adpt) {
		dev_err(dev, "Failed to get ddc i2c adapter by node\n");
		return -EINVAL;
		ret = -EINVAL;
		goto put_device;
	}

	return 0;
put_device:
	put_device(hdmi->cec_dev);
	return ret;
}

/*