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: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
This commit is contained in:
parent
8f589bba25
commit
05fdf98742
1 changed files with 18 additions and 1 deletions
|
@ -84,6 +84,7 @@ struct hdmi_resources {
|
|||
struct clk *sclk_hdmiphy;
|
||||
struct clk *mout_hdmi;
|
||||
struct regulator_bulk_data *regul_bulk;
|
||||
struct regulator *reg_hdmi_en;
|
||||
int regul_count;
|
||||
};
|
||||
|
||||
|
@ -2167,7 +2168,6 @@ static int hdmi_resources_init(struct hdmi_context *hdata)
|
|||
struct device *dev = hdata->dev;
|
||||
struct hdmi_resources *res = &hdata->res;
|
||||
static char *supply[] = {
|
||||
"hdmi-en",
|
||||
"vdd",
|
||||
"vdd_osc",
|
||||
"vdd_pll",
|
||||
|
@ -2227,6 +2227,20 @@ static int hdmi_resources_init(struct hdmi_context *hdata)
|
|||
}
|
||||
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;
|
||||
fail:
|
||||
DRM_ERROR("HDMI resource init - failed\n");
|
||||
|
@ -2493,6 +2507,9 @@ static int hdmi_remove(struct platform_device *pdev)
|
|||
|
||||
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->ddc_adpt->dev);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue