riscv:linux:drm:
authorshengyang.chen <shengyang.chen@starfivetech.com>
Wed, 20 Jul 2022 01:54:46 +0000 (09:54 +0800)
committershengyang.chen <shengyang.chen@starfivetech.com>
Wed, 20 Jul 2022 01:54:46 +0000 (09:54 +0800)
fix mipi shifted display problem
remove useless process in vs_dc_hw.c

Signed-off-by:shengyang.chen<shengyang.chen@starfivetech.com>

drivers/gpu/drm/verisilicon/vs_dc.c
drivers/gpu/drm/verisilicon/vs_dc_hw.c

index 8f22692..b2adc56 100755 (executable)
@@ -996,8 +996,15 @@ static void vs_dc_enable(struct device *dev, struct drm_crtc *crtc)
 
        display.v_active = mode->vdisplay;
        display.v_total = mode->vtotal;
-       display.v_sync_start = mode->vsync_start;
-       display.v_sync_end = mode->vsync_end;
+
+       if (crtc_state->encoder_type == DRM_MODE_ENCODER_DSI){
+               display.v_sync_start = mode->vsync_start + 1;
+               display.v_sync_end = mode->vsync_end - 1;
+       }else{
+               display.v_sync_start = mode->vsync_start;
+               display.v_sync_end = mode->vsync_end;
+       }
+
        if (mode->flags & DRM_MODE_FLAG_PVSYNC)
                display.v_sync_polarity = true;
        else
index 0b47e8a..fa91bc5 100755 (executable)
@@ -1891,26 +1891,6 @@ static void setup_display(struct dc_hw *hw, struct dc_hw_display *display)
                else
                        dc_set_clear(hw, DC_DISPLAY_PANEL_START, 0, BIT(1) | BIT(2));
 
-#ifdef CONFIG_STARFIVE_DSI
-               dc_write(hw, DC_DISPLAY_H + offset, hw->display[id].h_active |
-                               (hw->display[id].h_total << 16));
-
-               dc_write(hw, DC_DISPLAY_H_SYNC + offset,
-                               hw->display[id].h_sync_start |
-                               (hw->display[id].h_sync_end << 15) |
-                               BIT(31) |
-                               BIT(30));
-
-               dc_write(hw, DC_DISPLAY_V + offset, hw->display[id].v_active |
-                               (hw->display[id].v_total << 16));
-
-               dc_write(hw, DC_DISPLAY_V_SYNC + offset,
-                               hw->display[id].v_sync_start |
-                               (hw->display[id].v_sync_end << 15) |
-                               (hw->display[id].v_sync_polarity ? 0 : BIT(31)) |
-                               BIT(30));
-
-#else
                dc_write(hw, DC_DISPLAY_H + offset, hw->display[id].h_active |
                                (hw->display[id].h_total << 16));
                dc_write(hw, DC_DISPLAY_H_SYNC + offset,
@@ -1925,7 +1905,6 @@ static void setup_display(struct dc_hw *hw, struct dc_hw_display *display)
                                (hw->display[id].v_sync_end << 15) |
                                (hw->display[id].v_sync_polarity ? 0 : BIT(31)) |
                                BIT(30));
-#endif
 
                if (hw->info->pipe_sync) {
                        switch (display->sync_mode) {