| .. | .. |
|---|
| 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); |
|---|