Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e2a562dc authored by Inki Dae's avatar Inki Dae Committed by Inki Dae
Browse files

drm/exynos: hdmi: consider legacy dt binding



This patch considers legacy dt binding, and resolves
the issue that the use of existing dtb is broken.

To resove the dt broken issue, this path tries to get
legacy dt nodes from existing dtb directly prior to
getting new dt nodes.

Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
Acked-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
parent 9a8e1cb0
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -2242,6 +2242,25 @@ static const struct component_ops hdmi_component_ops = {
	.unbind = hdmi_unbind,
};

static struct device_node *hdmi_legacy_ddc_dt_binding(struct device *dev)
{
	const char *compatible_str = "samsung,exynos4210-hdmiddc";
	struct device_node *np;

	np = of_find_compatible_node(NULL, NULL, compatible_str);
	if (np)
		return of_get_next_parent(np);

	return NULL;
}

static struct device_node *hdmi_legacy_phy_dt_binding(struct device *dev)
{
	const char *compatible_str = "samsung,exynos4212-hdmiphy";

	return of_find_compatible_node(NULL, NULL, compatible_str);
}

static int hdmi_probe(struct platform_device *pdev)
{
	struct device_node *ddc_node, *phy_node;
@@ -2297,18 +2316,28 @@ static int hdmi_probe(struct platform_device *pdev)
		return ret;
	}

	ddc_node = hdmi_legacy_ddc_dt_binding(dev);
	if (ddc_node)
		goto out_get_ddc_adpt;

	/* DDC i2c driver */
	ddc_node = of_parse_phandle(dev->of_node, "ddc", 0);
	if (!ddc_node) {
		DRM_ERROR("Failed to find ddc node in device tree\n");
		return -ENODEV;
	}

out_get_ddc_adpt:
	hdata->ddc_adpt = of_find_i2c_adapter_by_node(ddc_node);
	if (!hdata->ddc_adpt) {
		DRM_ERROR("Failed to get ddc i2c adapter by node\n");
		return -ENODEV;
	}

	phy_node = hdmi_legacy_phy_dt_binding(dev);
	if (phy_node)
		goto out_get_phy_port;

	/* hdmiphy i2c driver */
	phy_node = of_parse_phandle(dev->of_node, "phy", 0);
	if (!phy_node) {
@@ -2317,6 +2346,7 @@ static int hdmi_probe(struct platform_device *pdev)
		goto err_ddc;
	}

out_get_phy_port:
	if (drv_data->is_apb_phy) {
		hdata->regs_hdmiphy = of_iomap(phy_node, 0);
		if (!hdata->regs_hdmiphy) {