.. | .. |
---|
50 | 50 | |
---|
51 | 51 | #define RK3588_GRF_VO1_CON3 0x000c |
---|
52 | 52 | #define RK3588_COLOR_FORMAT_MASK 0xf |
---|
| 53 | +#define RK3588_YUV422 0x1 |
---|
53 | 54 | #define RK3588_YUV444 0x2 |
---|
54 | 55 | #define RK3588_YUV420 0x3 |
---|
55 | 56 | #define RK3588_COMPRESSED_DATA 0xb |
---|
.. | .. |
---|
348 | 349 | case MEDIA_BUS_FMT_UYVY8_1X16: |
---|
349 | 350 | case MEDIA_BUS_FMT_UYVY10_1X20: |
---|
350 | 351 | case MEDIA_BUS_FMT_UYVY12_1X24: |
---|
| 352 | + case MEDIA_BUS_FMT_YUYV8_1X16: |
---|
| 353 | + case MEDIA_BUS_FMT_YUYV10_1X20: |
---|
| 354 | + case MEDIA_BUS_FMT_YUYV12_1X24: |
---|
351 | 355 | return true; |
---|
352 | 356 | |
---|
353 | 357 | default: |
---|
.. | .. |
---|
375 | 379 | case MEDIA_BUS_FMT_RGB888_1X24: |
---|
376 | 380 | case MEDIA_BUS_FMT_YUV8_1X24: |
---|
377 | 381 | case MEDIA_BUS_FMT_UYVY8_1X16: |
---|
| 382 | + case MEDIA_BUS_FMT_YUYV8_1X16: |
---|
378 | 383 | case MEDIA_BUS_FMT_UYYVYY8_0_5X24: |
---|
379 | 384 | return 8; |
---|
380 | 385 | |
---|
381 | 386 | case MEDIA_BUS_FMT_RGB101010_1X30: |
---|
382 | 387 | case MEDIA_BUS_FMT_YUV10_1X30: |
---|
383 | 388 | case MEDIA_BUS_FMT_UYVY10_1X20: |
---|
| 389 | + case MEDIA_BUS_FMT_YUYV10_1X20: |
---|
384 | 390 | case MEDIA_BUS_FMT_UYYVYY10_0_5X30: |
---|
385 | 391 | return 10; |
---|
386 | 392 | |
---|
387 | 393 | case MEDIA_BUS_FMT_RGB121212_1X36: |
---|
388 | 394 | case MEDIA_BUS_FMT_YUV12_1X36: |
---|
389 | 395 | case MEDIA_BUS_FMT_UYVY12_1X24: |
---|
| 396 | + case MEDIA_BUS_FMT_YUYV12_1X24: |
---|
390 | 397 | case MEDIA_BUS_FMT_UYYVYY12_0_5X36: |
---|
391 | 398 | return 12; |
---|
392 | 399 | |
---|
.. | .. |
---|
834 | 841 | if (screen_info && screen_info->depth == 10) |
---|
835 | 842 | color_depth = screen_info->depth; |
---|
836 | 843 | |
---|
837 | | - if (mode->clock >= 600000) { |
---|
| 844 | + if (mode->clock >= 600000) |
---|
838 | 845 | color_format = DRM_HDMI_OUTPUT_YCBCR420; |
---|
839 | | - } else if (mode->clock >= 340000) { |
---|
840 | | - if (drm_mode_is_420(info, mode)) |
---|
841 | | - color_format = DRM_HDMI_OUTPUT_YCBCR420; |
---|
842 | | - } |
---|
843 | 846 | |
---|
844 | 847 | if (color_format == DRM_HDMI_OUTPUT_YCBCR422 || color_depth == 8) |
---|
845 | 848 | tmdsclock = pixclock; |
---|
.. | .. |
---|
876 | 879 | case DRM_HDMI_OUTPUT_YCBCR444: |
---|
877 | 880 | return MEDIA_BUS_FMT_YUV10_1X30; |
---|
878 | 881 | case DRM_HDMI_OUTPUT_YCBCR422: |
---|
879 | | - return MEDIA_BUS_FMT_UYVY10_1X20; |
---|
| 882 | + return MEDIA_BUS_FMT_YUYV10_1X20; |
---|
880 | 883 | case DRM_HDMI_OUTPUT_YCBCR420: |
---|
881 | 884 | return MEDIA_BUS_FMT_UYYVYY10_0_5X30; |
---|
882 | 885 | default: |
---|
.. | .. |
---|
887 | 890 | case DRM_HDMI_OUTPUT_YCBCR444: |
---|
888 | 891 | return MEDIA_BUS_FMT_YUV8_1X24; |
---|
889 | 892 | case DRM_HDMI_OUTPUT_YCBCR422: |
---|
890 | | - return MEDIA_BUS_FMT_UYVY8_1X16; |
---|
| 893 | + return MEDIA_BUS_FMT_YUYV8_1X16; |
---|
891 | 894 | case DRM_HDMI_OUTPUT_YCBCR420: |
---|
892 | 895 | return MEDIA_BUS_FMT_UYYVYY8_0_5X24; |
---|
893 | 896 | default: |
---|
.. | .. |
---|
1081 | 1084 | if (hdmi_bus_fmt_is_yuv420(*bus_format)) |
---|
1082 | 1085 | hdmi->bus_width /= 2; |
---|
1083 | 1086 | |
---|
1084 | | - if (color_depth == 10) |
---|
| 1087 | + if (color_depth == 10 && !hdmi_bus_fmt_is_yuv422(*bus_format)) |
---|
1085 | 1088 | hdmi->bus_width |= COLOR_DEPTH_10BIT; |
---|
1086 | 1089 | } |
---|
1087 | 1090 | |
---|
.. | .. |
---|
1154 | 1157 | case MEDIA_BUS_FMT_YUV10_1X30: |
---|
1155 | 1158 | val = HIWORD_UPDATE(RK3588_YUV444, RK3588_COLOR_FORMAT_MASK); |
---|
1156 | 1159 | break; |
---|
| 1160 | + case MEDIA_BUS_FMT_YUYV10_1X20: |
---|
| 1161 | + case MEDIA_BUS_FMT_YUYV8_1X16: |
---|
| 1162 | + val = HIWORD_UPDATE(RK3588_YUV422, RK3588_COLOR_FORMAT_MASK); |
---|
| 1163 | + break; |
---|
1157 | 1164 | default: |
---|
1158 | 1165 | dev_err(hdmi->dev, "can't set correct color format\n"); |
---|
1159 | 1166 | return; |
---|
.. | .. |
---|
1162 | 1169 | if (hdmi->link_cfg.dsc_mode) |
---|
1163 | 1170 | val = HIWORD_UPDATE(RK3588_COMPRESSED_DATA, RK3588_COLOR_FORMAT_MASK); |
---|
1164 | 1171 | |
---|
1165 | | - if (depth == 8) |
---|
| 1172 | + if (depth == 8 || bus_format == MEDIA_BUS_FMT_YUYV10_1X20) |
---|
1166 | 1173 | val |= HIWORD_UPDATE(RK3588_8BPC, RK3588_COLOR_DEPTH_MASK); |
---|
1167 | 1174 | else |
---|
1168 | 1175 | val |= HIWORD_UPDATE(RK3588_10BPC, RK3588_COLOR_DEPTH_MASK); |
---|