From 61ff18b47813c779ecbf6594e7e5027fd7a485c1 Mon Sep 17 00:00:00 2001 From: Damon Ding Date: Tue, 21 Feb 2023 20:06:25 +0800 Subject: [PATCH] drm/rockchip: vop: add rb_swap check for serial rgb format Signed-off-by: Damon Ding Change-Id: I5394e22e58eac87f9ee1a8fdee1cc576970d5a87 --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 5cf5313c4ea1..f757c206b2ec 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -663,6 +663,19 @@ static bool is_uv_swap(uint32_t bus_format, uint32_t output_mode) return false; } +static bool is_rb_swap(uint32_t bus_format, uint32_t output_mode) +{ + /* + * The default component order of serial rgb3x8 formats + * is BGR. So it is needed to enable RB swap. + */ + if (bus_format == MEDIA_BUS_FMT_RGB888_3X8 || + bus_format == MEDIA_BUS_FMT_RGB888_DUMMY_4X8) + return true; + else + return false; +} + static bool is_yc_swap(uint32_t bus_format) { switch (bus_format) { @@ -3144,7 +3157,8 @@ static void vop_update_csc(struct drm_crtc *crtc) s->output_if & VOP_OUTPUT_IF_BT656)) s->output_mode = ROCKCHIP_OUT_MODE_P888; - if (is_uv_swap(s->bus_format, s->output_mode)) + if (is_uv_swap(s->bus_format, s->output_mode) || + is_rb_swap(s->bus_format, s->output_mode)) VOP_CTRL_SET(vop, dsp_rb_swap, 1); else VOP_CTRL_SET(vop, dsp_data_swap, 0);