[Freedreno] [PATCH v2 3/3] drm/bridge: display-connector: handle hdmi-pwr supply
Neil Armstrong
neil.armstrong at linaro.org
Mon May 22 14:11:59 UTC 2023
On 19/05/2023 20:40, Dmitry Baryshkov wrote:
> 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 at linaro.org>
> ---
> drivers/gpu/drm/bridge/display-connector.c | 55 ++++++++++++----------
> 1 file changed, 29 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c
> index 1d37e57242dd..d6a9aa589d17 100644
> --- a/drivers/gpu/drm/bridge/display-connector.c
> +++ b/drivers/gpu/drm/bridge/display-connector.c
> @@ -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, "dp-pwr");
You should use name here right ?
Neil
> +
> + 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;
> @@ -319,36 +331,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);
>
> @@ -356,6 +347,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 DP PWR regulator: %d\n", ret);
> + return ret;
> + }
> }
>
> conn->bridge.funcs = &display_connector_bridge_funcs;
More information about the Freedreno
mailing list