drm/bridge: display-connector: handle hdmi-pwr supply
On some devices the +5V Power 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@linaro.org> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20230531000259.3758235-4-dmitry.baryshkov@linaro.org
This commit is contained in:
parent
99304fd005
commit
6eb6b6f0a0
|
@ -191,6 +191,18 @@ static irqreturn_t display_connector_hpd_irq(int irq, void *arg)
|
|||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int display_connector_get_supply(struct platform_device *pdev,
|
||||
struct display_connector *conn,
|
||||
const char *name)
|
||||
{
|
||||
conn->supply = devm_regulator_get_optional(&pdev->dev, name);
|
||||
|
||||
if (conn->supply == ERR_PTR(-ENODEV))
|
||||
conn->supply = NULL;
|
||||
|
||||
return PTR_ERR_OR_ZERO(conn->supply);
|
||||
}
|
||||
|
||||
static int display_connector_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct display_connector *conn;
|
||||
|
@ -316,36 +328,15 @@ static int display_connector_probe(struct platform_device *pdev)
|
|||
if (type == DRM_MODE_CONNECTOR_DisplayPort) {
|
||||
int ret;
|
||||
|
||||
conn->supply = devm_regulator_get_optional(&pdev->dev, "dp-pwr");
|
||||
|
||||
if (IS_ERR(conn->supply)) {
|
||||
ret = PTR_ERR(conn->supply);
|
||||
|
||||
switch (ret) {
|
||||
case -ENODEV:
|
||||
conn->supply = NULL;
|
||||
break;
|
||||
|
||||
case -EPROBE_DEFER:
|
||||
return -EPROBE_DEFER;
|
||||
|
||||
default:
|
||||
dev_err(&pdev->dev, "failed to get DP PWR regulator: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (conn->supply) {
|
||||
ret = regulator_enable(conn->supply);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to enable DP PWR regulator: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
ret = display_connector_get_supply(pdev, conn, "dp-pwr");
|
||||
if (ret < 0)
|
||||
return dev_err_probe(&pdev->dev, ret, "failed to get DP PWR regulator\n");
|
||||
}
|
||||
|
||||
/* enable DDC */
|
||||
if (type == DRM_MODE_CONNECTOR_HDMIA) {
|
||||
int ret;
|
||||
|
||||
conn->ddc_en = devm_gpiod_get_optional(&pdev->dev, "ddc-en",
|
||||
GPIOD_OUT_HIGH);
|
||||
|
||||
|
@ -353,6 +344,18 @@ 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);
|
||||
}
|
||||
|
||||
ret = display_connector_get_supply(pdev, conn, "hdmi-pwr");
|
||||
if (ret < 0)
|
||||
return dev_err_probe(&pdev->dev, ret, "failed to get HDMI +5V Power regulator\n");
|
||||
}
|
||||
|
||||
if (conn->supply) {
|
||||
ret = regulator_enable(conn->supply);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to enable PWR regulator: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
conn->bridge.funcs = &display_connector_bridge_funcs;
|
||||
|
|
Loading…
Reference in New Issue