Commit 05fdf987 authored by Marek Szyprowski's avatar Marek Szyprowski Committed by Inki Dae

drm/exynos: hdmi: make 'hdmi-en' regulator optional and keep it enabled

HDMI_EN regulator is additional regulator for providing voltage source
for DCC lines available on HDMI connector. When there is no power
provided for DDC epprom, some TV-sets do not pulls up HPD (hot plug
detect) line, what causes HDMI block to stay turned off. This patch
enables HDMI_EN regulator (if available) on driver probe and keep it
enabled all the time to let TV-set correctly signal HPD event.
Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
parent 8f589bba
...@@ -84,6 +84,7 @@ struct hdmi_resources { ...@@ -84,6 +84,7 @@ struct hdmi_resources {
struct clk *sclk_hdmiphy; struct clk *sclk_hdmiphy;
struct clk *mout_hdmi; struct clk *mout_hdmi;
struct regulator_bulk_data *regul_bulk; struct regulator_bulk_data *regul_bulk;
struct regulator *reg_hdmi_en;
int regul_count; int regul_count;
}; };
...@@ -2167,7 +2168,6 @@ static int hdmi_resources_init(struct hdmi_context *hdata) ...@@ -2167,7 +2168,6 @@ static int hdmi_resources_init(struct hdmi_context *hdata)
struct device *dev = hdata->dev; struct device *dev = hdata->dev;
struct hdmi_resources *res = &hdata->res; struct hdmi_resources *res = &hdata->res;
static char *supply[] = { static char *supply[] = {
"hdmi-en",
"vdd", "vdd",
"vdd_osc", "vdd_osc",
"vdd_pll", "vdd_pll",
...@@ -2227,6 +2227,20 @@ static int hdmi_resources_init(struct hdmi_context *hdata) ...@@ -2227,6 +2227,20 @@ static int hdmi_resources_init(struct hdmi_context *hdata)
} }
res->regul_count = ARRAY_SIZE(supply); res->regul_count = ARRAY_SIZE(supply);
res->reg_hdmi_en = devm_regulator_get(dev, "hdmi-en");
if (IS_ERR(res->reg_hdmi_en) && PTR_ERR(res->reg_hdmi_en) != -ENOENT) {
DRM_ERROR("failed to get hdmi-en regulator\n");
return PTR_ERR(res->reg_hdmi_en);
}
if (!IS_ERR(res->reg_hdmi_en)) {
ret = regulator_enable(res->reg_hdmi_en);
if (ret) {
DRM_ERROR("failed to enable hdmi-en regulator\n");
return ret;
}
} else
res->reg_hdmi_en = NULL;
return ret; return ret;
fail: fail:
DRM_ERROR("HDMI resource init - failed\n"); DRM_ERROR("HDMI resource init - failed\n");
...@@ -2493,6 +2507,9 @@ static int hdmi_remove(struct platform_device *pdev) ...@@ -2493,6 +2507,9 @@ static int hdmi_remove(struct platform_device *pdev)
cancel_delayed_work_sync(&hdata->hotplug_work); cancel_delayed_work_sync(&hdata->hotplug_work);
if (hdata->res.reg_hdmi_en)
regulator_disable(hdata->res.reg_hdmi_en);
put_device(&hdata->hdmiphy_port->dev); put_device(&hdata->hdmiphy_port->dev);
put_device(&hdata->ddc_adpt->dev); put_device(&hdata->ddc_adpt->dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment