Start migrating tc358762 bridge to new manual DSI power control API. If
the tight power control is not available, default to the existing
pre_enable_prev_first flag.

Signed-off-by: Dmitry Baryshkov <dmitry.barysh...@linaro.org>
---
 drivers/gpu/drm/bridge/tc358762.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/bridge/tc358762.c 
b/drivers/gpu/drm/bridge/tc358762.c
index 7b9f05f95fd1..efb1da4487c9 100644
--- a/drivers/gpu/drm/bridge/tc358762.c
+++ b/drivers/gpu/drm/bridge/tc358762.c
@@ -72,6 +72,7 @@ struct tc358762 {
        struct device *dev;
        struct drm_bridge bridge;
        struct regulator *regulator;
+       struct mipi_dsi_host *dsi_host;
        struct drm_bridge *panel_bridge;
        struct gpio_desc *reset_gpio;
        struct drm_display_mode mode;
@@ -163,6 +164,8 @@ static void tc358762_post_disable(struct drm_bridge 
*bridge, struct drm_bridge_s
 
        ctx->pre_enabled = false;
 
+       mipi_dsi_host_power_down(ctx->dsi_host);
+
        if (ctx->reset_gpio)
                gpiod_set_value_cansleep(ctx->reset_gpio, 0);
 
@@ -185,6 +188,10 @@ static void tc358762_pre_enable(struct drm_bridge *bridge, 
struct drm_bridge_sta
                usleep_range(5000, 10000);
        }
 
+       ret = mipi_dsi_host_power_up(ctx->dsi_host);
+       if (ret < 0)
+               dev_err(ctx->dev, "error powering up the DSI host (%d)\n", ret);
+
        ret = tc358762_init(ctx);
        if (ret < 0)
                dev_err(ctx->dev, "error initializing bridge (%d)\n", ret);
@@ -277,10 +284,16 @@ static int tc358762_probe(struct mipi_dsi_device *dsi)
        if (ret < 0)
                return ret;
 
+       ctx->dsi_host = dsi->host;
+
        ctx->bridge.funcs = &tc358762_bridge_funcs;
        ctx->bridge.type = DRM_MODE_CONNECTOR_DPI;
        ctx->bridge.of_node = dev->of_node;
-       ctx->bridge.pre_enable_prev_first = true;
+
+       if (mipi_dsi_host_power_control_available(dsi->host))
+               dsi->mode_flags |= MIPI_DSI_MANUAL_POWERUP;
+       else
+               ctx->bridge.pre_enable_prev_first = true;
 
        drm_bridge_add(&ctx->bridge);
 
-- 
2.42.0

Reply via email to