From 3b3c3db2c05068a3b8cfdaefab14450e63fe9c97 Mon Sep 17 00:00:00 2001 From: Damon Ding Date: Thu, 19 Sep 2024 16:54:36 +0800 Subject: [PATCH] drm/rockchip: analogix_dp: add support for rockchip,data-swap config The rockchip,data-swap can help to swap left and right channel display data in dual channel mode. Change-Id: I9da870852421e12477027cb74ee01ee9a951c14f Signed-off-by: Damon Ding --- drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 5 ++++- include/drm/bridge/analogix_dp.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c index 6275aa74da85..553bf56721f6 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -501,7 +501,8 @@ rockchip_dp_drm_encoder_atomic_check(struct drm_encoder *encoder, s->output_type = DRM_MODE_CONNECTOR_eDP; if (dp->plat_data.split_mode) { s->output_flags |= ROCKCHIP_OUTPUT_DUAL_CHANNEL_LEFT_RIGHT_MODE; - s->output_flags |= dp->id ? ROCKCHIP_OUTPUT_DATA_SWAP : 0; + if (dp->id || dp->plat_data.dual_channel_swap) + s->output_flags |= ROCKCHIP_OUTPUT_DATA_SWAP; s->output_if |= VOP_OUTPUT_IF_eDP0 | VOP_OUTPUT_IF_eDP1; s->output_if_left_panel |= dp->id ? VOP_OUTPUT_IF_eDP1 : VOP_OUTPUT_IF_eDP0; } else if (dp->plat_data.dual_connector_split) { @@ -770,6 +771,8 @@ static int rockchip_dp_probe(struct platform_device *pdev) dp->plat_data.dual_channel_mode = device_property_read_bool(dev, "dual-channel") || device_property_read_bool(dev, "rockchip,dual-channel"); + dp->plat_data.dual_channel_swap = + device_property_read_bool(dev, "rockchip,data-swap"); secondary->plat_data.panel = dp->plat_data.panel; secondary->plat_data.left = dp->adp; secondary->plat_data.split_mode = true; diff --git a/include/drm/bridge/analogix_dp.h b/include/drm/bridge/analogix_dp.h index 4abaf81c2238..100558e56d17 100644 --- a/include/drm/bridge/analogix_dp.h +++ b/include/drm/bridge/analogix_dp.h @@ -46,6 +46,7 @@ struct analogix_dp_plat_data { bool split_mode; bool dual_channel_mode; + bool dual_channel_swap; /* split with other display interface */ bool dual_connector_split;