diff options
author | Archit Taneja <architt@codeaurora.org> | 2016-06-17 09:45:52 +0300 |
---|---|---|
committer | Archit Taneja <architt@codeaurora.org> | 2016-07-13 11:54:37 +0300 |
commit | 62b2f026cd8e42df53dc8a6ed76594e51ab41735 (patch) | |
tree | c381b4e82c07d6c24ede5f891a377ac69035e955 /drivers/gpu/drm/bridge/adv7511/adv7533.c | |
parent | 78fa479d703c4d473746e961331aff568dc0c24f (diff) | |
download | linux-62b2f026cd8e42df53dc8a6ed76594e51ab41735.tar.xz |
drm/bridge: adv7533: Change number of DSI lanes dynamically
Lower modes on ADV7533 require lower number of DSI lanes for correct
operation. If ADV7533 is being used with 4 DSI lanes, then switch the
lanes to 3 when the target mode's pixel clock is less than 80 Mhz.
Based on patch by Andy Green <andy.green@linaro.org>
Signed-off-by: Archit Taneja <architt@codeaurora.org>
Diffstat (limited to 'drivers/gpu/drm/bridge/adv7511/adv7533.c')
-rw-r--r-- | drivers/gpu/drm/bridge/adv7511/adv7533.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c index d002ac4cefcc..5eebd15899b1 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c @@ -115,6 +115,28 @@ void adv7533_dsi_power_off(struct adv7511 *adv) regmap_write(adv->regmap_cec, 0x27, 0x0b); } +void adv7533_mode_set(struct adv7511 *adv, struct drm_display_mode *mode) +{ + struct mipi_dsi_device *dsi = adv->dsi; + int lanes, ret; + + if (adv->num_dsi_lanes != 4) + return; + + if (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) + dev_err(&dsi->dev, "failed to change host lanes\n"); + } +} + int adv7533_patch_registers(struct adv7511 *adv) { return regmap_register_patch(adv->regmap, |