On some devices the 5V pin of the HDMI connector and/or the ESD protection logic is powered on by a separate regulator. Instead of declaring this regulator as always-on, make hdmi-connector support the additional hdmi-pwr supply. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx> --- drivers/gpu/drm/bridge/display-connector.c | 37 +++++++++++++++++----- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c index 0d94e6edea50..037ba2eb5a2f 100644 --- a/drivers/gpu/drm/bridge/display-connector.c +++ b/drivers/gpu/drm/bridge/display-connector.c @@ -337,18 +337,12 @@ static int display_connector_probe(struct platform_device *pdev) return ret; } } - - if (conn->connector_pwr) { - ret = regulator_enable(conn->connector_pwr); - if (ret) { - dev_err(&pdev->dev, "failed to enable DP PWR regulator: %d\n", ret); - return ret; - } - } } /* enable DDC */ if (type == DRM_MODE_CONNECTOR_HDMIA) { + int ret; + conn->ddc_en = devm_gpiod_get_optional(&pdev->dev, "ddc-en", GPIOD_OUT_HIGH); @@ -356,6 +350,33 @@ static int display_connector_probe(struct platform_device *pdev) dev_err(&pdev->dev, "Couldn't get ddc-en gpio\n"); return PTR_ERR(conn->ddc_en); } + + conn->connector_pwr = devm_regulator_get_optional(&pdev->dev, "hdmi-pwr"); + + if (IS_ERR(conn->connector_pwr)) { + ret = PTR_ERR(conn->connector_pwr); + + switch (ret) { + case -ENODEV: + conn->connector_pwr = NULL; + break; + + case -EPROBE_DEFER: + return -EPROBE_DEFER; + + default: + dev_err(&pdev->dev, "failed to get HDMI PWR regulator: %d\n", ret); + return ret; + } + } + } + + if (conn->connector_pwr) { + ret = regulator_enable(conn->connector_pwr); + if (ret) { + dev_err(&pdev->dev, "failed to enable DP PWR regulator: %d\n", ret); + return ret; + } } conn->bridge.funcs = &display_connector_bridge_funcs; -- 2.39.2