| .. | .. |
|---|
| 23 | 23 | * |
|---|
| 24 | 24 | */ |
|---|
| 25 | 25 | |
|---|
| 26 | +#include <linux/delay.h> |
|---|
| 27 | + |
|---|
| 26 | 28 | #include "dm_services.h" |
|---|
| 27 | 29 | #include "core_types.h" |
|---|
| 28 | 30 | #include "timing_generator.h" |
|---|
| .. | .. |
|---|
| 45 | 47 | COLOR_SPACE_RGB_LIMITED_TYPE, |
|---|
| 46 | 48 | COLOR_SPACE_YCBCR601_TYPE, |
|---|
| 47 | 49 | COLOR_SPACE_YCBCR709_TYPE, |
|---|
| 50 | + COLOR_SPACE_YCBCR2020_TYPE, |
|---|
| 48 | 51 | COLOR_SPACE_YCBCR601_LIMITED_TYPE, |
|---|
| 49 | | - COLOR_SPACE_YCBCR709_LIMITED_TYPE |
|---|
| 52 | + COLOR_SPACE_YCBCR709_LIMITED_TYPE, |
|---|
| 53 | + COLOR_SPACE_YCBCR709_BLACK_TYPE, |
|---|
| 50 | 54 | }; |
|---|
| 51 | 55 | |
|---|
| 52 | 56 | static const struct tg_color black_color_format[] = { |
|---|
| .. | .. |
|---|
| 80 | 84 | { COLOR_SPACE_YCBCR709_TYPE, |
|---|
| 81 | 85 | { 0xE04, 0xF345, 0xFEB7, 0x1004, 0x5D3, 0x1399, 0x1FA, |
|---|
| 82 | 86 | 0x201, 0xFCCA, 0xF533, 0xE04, 0x1004} }, |
|---|
| 83 | | - |
|---|
| 84 | 87 | /* TODO: correct values below */ |
|---|
| 85 | 88 | { COLOR_SPACE_YCBCR601_LIMITED_TYPE, |
|---|
| 86 | 89 | { 0xE00, 0xF447, 0xFDB9, 0x1000, 0x991, |
|---|
| .. | .. |
|---|
| 88 | 91 | { COLOR_SPACE_YCBCR709_LIMITED_TYPE, |
|---|
| 89 | 92 | { 0xE00, 0xF349, 0xFEB7, 0x1000, 0x6CE, 0x16E3, |
|---|
| 90 | 93 | 0x24F, 0x200, 0xFCCB, 0xF535, 0xE00, 0x1000} }, |
|---|
| 94 | + { COLOR_SPACE_YCBCR2020_TYPE, |
|---|
| 95 | + { 0x1000, 0xF149, 0xFEB7, 0x1004, 0x0868, 0x15B2, |
|---|
| 96 | + 0x01E6, 0x201, 0xFB88, 0xF478, 0x1000, 0x1004} }, |
|---|
| 97 | + { COLOR_SPACE_YCBCR709_BLACK_TYPE, |
|---|
| 98 | + { 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, |
|---|
| 99 | + 0x0000, 0x0200, 0x0000, 0x0000, 0x0000, 0x1000} }, |
|---|
| 91 | 100 | }; |
|---|
| 92 | 101 | |
|---|
| 93 | 102 | static bool is_rgb_type( |
|---|
| .. | .. |
|---|
| 149 | 158 | return ret; |
|---|
| 150 | 159 | } |
|---|
| 151 | 160 | |
|---|
| 161 | +static bool is_ycbcr2020_type( |
|---|
| 162 | + enum dc_color_space color_space) |
|---|
| 163 | +{ |
|---|
| 164 | + bool ret = false; |
|---|
| 165 | + |
|---|
| 166 | + if (color_space == COLOR_SPACE_2020_YCBCR) |
|---|
| 167 | + ret = true; |
|---|
| 168 | + return ret; |
|---|
| 169 | +} |
|---|
| 170 | + |
|---|
| 152 | 171 | static bool is_ycbcr709_limited_type( |
|---|
| 153 | 172 | enum dc_color_space color_space) |
|---|
| 154 | 173 | { |
|---|
| .. | .. |
|---|
| 158 | 177 | ret = true; |
|---|
| 159 | 178 | return ret; |
|---|
| 160 | 179 | } |
|---|
| 161 | | -enum dc_color_space_type get_color_space_type(enum dc_color_space color_space) |
|---|
| 180 | +static enum dc_color_space_type get_color_space_type(enum dc_color_space color_space) |
|---|
| 162 | 181 | { |
|---|
| 163 | 182 | enum dc_color_space_type type = COLOR_SPACE_RGB_TYPE; |
|---|
| 164 | 183 | |
|---|
| .. | .. |
|---|
| 174 | 193 | type = COLOR_SPACE_YCBCR601_LIMITED_TYPE; |
|---|
| 175 | 194 | else if (is_ycbcr709_limited_type(color_space)) |
|---|
| 176 | 195 | type = COLOR_SPACE_YCBCR709_LIMITED_TYPE; |
|---|
| 177 | | - |
|---|
| 196 | + else if (is_ycbcr2020_type(color_space)) |
|---|
| 197 | + type = COLOR_SPACE_YCBCR2020_TYPE; |
|---|
| 198 | + else if (color_space == COLOR_SPACE_YCBCR709) |
|---|
| 199 | + type = COLOR_SPACE_YCBCR709_BLACK_TYPE; |
|---|
| 200 | + else if (color_space == COLOR_SPACE_YCBCR709_BLACK) |
|---|
| 201 | + type = COLOR_SPACE_YCBCR709_BLACK_TYPE; |
|---|
| 178 | 202 | return type; |
|---|
| 179 | 203 | } |
|---|
| 180 | 204 | |
|---|
| .. | .. |
|---|
| 206 | 230 | switch (colorspace) { |
|---|
| 207 | 231 | case COLOR_SPACE_YCBCR601: |
|---|
| 208 | 232 | case COLOR_SPACE_YCBCR709: |
|---|
| 233 | + case COLOR_SPACE_YCBCR709_BLACK: |
|---|
| 209 | 234 | case COLOR_SPACE_YCBCR601_LIMITED: |
|---|
| 210 | 235 | case COLOR_SPACE_YCBCR709_LIMITED: |
|---|
| 211 | 236 | case COLOR_SPACE_2020_YCBCR: |
|---|