drm/rockchip: vop2: add support 10bit yuv and srgb output

Signed-off-by: Sandy Huang <hjc@rock-chips.com>
Change-Id: Iee5aad90edff69c00884bc25cc7dc2169d3103d2
This commit is contained in:
Sandy Huang
2021-08-26 10:24:06 +08:00
parent 8b5885eee1
commit 5579c96182

View File

@@ -619,6 +619,8 @@ static const struct drm_bus_format_enum_list drm_bus_format_enum_list[] = {
{ MEDIA_BUS_FMT_UYYVYY8_0_5X24, "UYYVYY8_0_5X24" },
{ MEDIA_BUS_FMT_YUV10_1X30, "YUV10_1X30" },
{ MEDIA_BUS_FMT_UYYVYY10_0_5X30, "UYYVYY10_0_5X30" },
{ MEDIA_BUS_FMT_RGB888_3X8, "RGB888_3X8" },
{ MEDIA_BUS_FMT_RGB888_DUMMY_4X8, "RGB888_DUMMY_4X8" },
{ MEDIA_BUS_FMT_RGB888_1X24, "RGB888_1X24" },
{ MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, "RGB888_1X7X4_SPWG" },
{ MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA, "RGB888_1X7X4_JEIDA" },
@@ -1166,10 +1168,16 @@ static enum vop2_data_format vop2_convert_format(uint32_t format)
return VOP2_FMT_RGB565;
case DRM_FORMAT_NV12:
return VOP2_FMT_YUV420SP;
case DRM_FORMAT_NV15:
return VOP2_FMT_YUV420SP_10;
case DRM_FORMAT_NV16:
return VOP2_FMT_YUV422SP;
case DRM_FORMAT_NV20:
return VOP2_FMT_YUV422SP_10;
case DRM_FORMAT_NV24:
return VOP2_FMT_YUV444SP;
case DRM_FORMAT_NV30:
return VOP2_FMT_YUV444SP_10;
case DRM_FORMAT_YUYV:
case DRM_FORMAT_YVYU:
return VOP2_FMT_VYUY422;
@@ -1198,8 +1206,12 @@ static enum vop2_afbc_format vop2_convert_afbc_format(uint32_t format)
return VOP2_AFBC_FMT_RGB565;
case DRM_FORMAT_NV12:
return VOP2_AFBC_FMT_YUV420;
case DRM_FORMAT_NV15:
return VOP2_AFBC_FMT_YUV420_10BIT;
case DRM_FORMAT_NV16:
return VOP2_AFBC_FMT_YUV422;
case DRM_FORMAT_NV20:
return VOP2_AFBC_FMT_YUV422_10BIT;
/* either of the below should not be reachable */
default:
@@ -1252,6 +1264,7 @@ static bool vop2_afbc_rb_swap(uint32_t format)
{
switch (format) {
case DRM_FORMAT_NV24:
case DRM_FORMAT_NV30:
return true;
default:
return false;
@@ -1263,6 +1276,8 @@ static bool vop2_afbc_uv_swap(uint32_t format)
switch (format) {
case DRM_FORMAT_NV12:
case DRM_FORMAT_NV16:
case DRM_FORMAT_NV15:
case DRM_FORMAT_NV20:
return true;
default:
return false;
@@ -1275,6 +1290,9 @@ static bool vop2_win_uv_swap(uint32_t format)
case DRM_FORMAT_NV12:
case DRM_FORMAT_NV16:
case DRM_FORMAT_NV24:
case DRM_FORMAT_NV15:
case DRM_FORMAT_NV20:
case DRM_FORMAT_NV30:
return true;
default:
return false;
@@ -1322,8 +1340,11 @@ static bool is_yuv_support(uint32_t format)
{
switch (format) {
case DRM_FORMAT_NV12:
case DRM_FORMAT_NV15:
case DRM_FORMAT_NV16:
case DRM_FORMAT_NV20:
case DRM_FORMAT_NV24:
case DRM_FORMAT_NV30:
case DRM_FORMAT_YUYV:
case DRM_FORMAT_YVYU:
case DRM_FORMAT_UYVY:
@@ -4141,6 +4162,8 @@ static void vop2_dither_setup(struct drm_crtc *crtc)
VOP_MODULE_SET(vop2, vp, dither_down_en, 0);
VOP_MODULE_SET(vop2, vp, pre_dither_down_en, 0);
break;
case MEDIA_BUS_FMT_RGB888_3X8:
case MEDIA_BUS_FMT_RGB888_DUMMY_4X8:
case MEDIA_BUS_FMT_RGB888_1X24:
case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:
case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA: