From a1360ddefb6ecf456c1baaef32948abd3759194f Mon Sep 17 00:00:00 2001 From: Archit Taneja Date: Mon, 7 Sep 2015 11:20:28 +0530 Subject: [PATCH] drm/i2c: adv7511: Change DSI lanes dynamically Lower modes on ADV7511 require lower number of lanes for correct operation. Switch lanes to 3 when the target mode's pixel clock is less than 80 Mhz. Based on patch by Andy Green Signed-off-by: Archit Taneja --- drivers/gpu/drm/i2c/adv7511.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/gpu/drm/i2c/adv7511.c b/drivers/gpu/drm/i2c/adv7511.c index eec5885d6e9e..46c1d7d427e7 100644 --- a/drivers/gpu/drm/i2c/adv7511.c +++ b/drivers/gpu/drm/i2c/adv7511.c @@ -856,6 +856,26 @@ static void adv7511_mode_set(struct adv7511 *adv7511, regmap_update_bits(adv7511->regmap, 0x17, 0x60, (vsync_polarity << 6) | (hsync_polarity << 5)); + if (adv7511->type == ADV7533 && adv7511->num_dsi_lanes == 4) { + struct mipi_dsi_device *dsi = adv7511->dsi; + int lanes, ret; + + if (adj_mode->clock > 80000) + lanes = 4; + else + lanes = 3; + + if (lanes != dsi->lanes) { + mipi_dsi_detach(dsi); + dsi->lanes = lanes; + ret = mipi_dsi_attach(dsi); + if (ret) { + DRM_ERROR("Failed to change host lanes\n"); + return; + } + } + } + drm_mode_copy(&adv7511->curr_mode, adj_mode); /* -- 2.39.5