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.baryshkov@xxxxxxxxxx> --- 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