|
@@ -110,6 +110,23 @@ static int rockchip_dp_powerdown(struct analogix_dp_plat_data *plat_data)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int rockchip_dp_get_modes(struct analogix_dp_plat_data *plat_data,
|
|
|
+ struct drm_connector *connector)
|
|
|
+{
|
|
|
+ struct drm_display_info *di = &connector->display_info;
|
|
|
+ /* VOP couldn't output YUV video format for eDP rightly */
|
|
|
+ u32 mask = DRM_COLOR_FORMAT_YCRCB444 | DRM_COLOR_FORMAT_YCRCB422;
|
|
|
+
|
|
|
+ if ((di->color_formats & mask)) {
|
|
|
+ DRM_DEBUG_KMS("Swapping display color format from YUV to RGB\n");
|
|
|
+ di->color_formats &= ~mask;
|
|
|
+ di->color_formats |= DRM_COLOR_FORMAT_RGB444;
|
|
|
+ di->bpc = 8;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static bool
|
|
|
rockchip_dp_drm_encoder_mode_fixup(struct drm_encoder *encoder,
|
|
|
const struct drm_display_mode *mode,
|
|
@@ -310,6 +327,7 @@ static int rockchip_dp_bind(struct device *dev, struct device *master,
|
|
|
dp->plat_data.dev_type = dp->data->chip_type;
|
|
|
dp->plat_data.power_on = rockchip_dp_poweron;
|
|
|
dp->plat_data.power_off = rockchip_dp_powerdown;
|
|
|
+ dp->plat_data.get_modes = rockchip_dp_get_modes;
|
|
|
|
|
|
return analogix_dp_bind(dev, dp->drm_dev, &dp->plat_data);
|
|
|
}
|