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.barysh...@linaro.org>
---
 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

Reply via email to