aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/rockchip/analogix_dp-rockchip.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
index 0755573151af..0a0fb3a777ca 100644
--- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
+++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
@@ -110,6 +110,23 @@ static int rockchip_dp_powerdown(struct analogix_dp_plat_data *plat_data)
110 return 0; 110 return 0;
111} 111}
112 112
113static int rockchip_dp_get_modes(struct analogix_dp_plat_data *plat_data,
114 struct drm_connector *connector)
115{
116 struct drm_display_info *di = &connector->display_info;
117 /* VOP couldn't output YUV video format for eDP rightly */
118 u32 mask = DRM_COLOR_FORMAT_YCRCB444 | DRM_COLOR_FORMAT_YCRCB422;
119
120 if ((di->color_formats & mask)) {
121 DRM_DEBUG_KMS("Swapping display color format from YUV to RGB\n");
122 di->color_formats &= ~mask;
123 di->color_formats |= DRM_COLOR_FORMAT_RGB444;
124 di->bpc = 8;
125 }
126
127 return 0;
128}
129
113static bool 130static bool
114rockchip_dp_drm_encoder_mode_fixup(struct drm_encoder *encoder, 131rockchip_dp_drm_encoder_mode_fixup(struct drm_encoder *encoder,
115 const struct drm_display_mode *mode, 132 const struct drm_display_mode *mode,
@@ -310,6 +327,7 @@ static int rockchip_dp_bind(struct device *dev, struct device *master,
310 dp->plat_data.dev_type = dp->data->chip_type; 327 dp->plat_data.dev_type = dp->data->chip_type;
311 dp->plat_data.power_on = rockchip_dp_poweron; 328 dp->plat_data.power_on = rockchip_dp_poweron;
312 dp->plat_data.power_off = rockchip_dp_powerdown; 329 dp->plat_data.power_off = rockchip_dp_powerdown;
330 dp->plat_data.get_modes = rockchip_dp_get_modes;
313 331
314 return analogix_dp_bind(dev, dp->drm_dev, &dp->plat_data); 332 return analogix_dp_bind(dev, dp->drm_dev, &dp->plat_data);
315} 333}