| .. | .. |
|---|
| 51 | 51 | |
|---|
| 52 | 52 | #define NUM_ELEMENTS(a) (sizeof(a) / sizeof((a)[0])) |
|---|
| 53 | 53 | |
|---|
| 54 | | -struct dcn10_input_csc_matrix { |
|---|
| 55 | | - enum dc_color_space color_space; |
|---|
| 56 | | - uint16_t regval[12]; |
|---|
| 57 | | -}; |
|---|
| 58 | 54 | |
|---|
| 59 | 55 | enum dcn10_coef_filter_type_sel { |
|---|
| 60 | 56 | SCL_COEF_LUMA_VERT_FILTER = 0, |
|---|
| .. | .. |
|---|
| 90 | 86 | DSCL_MODE_SCALING_420_LUMA_BYPASS = 4, |
|---|
| 91 | 87 | DSCL_MODE_SCALING_420_CHROMA_BYPASS = 5, |
|---|
| 92 | 88 | DSCL_MODE_DSCL_BYPASS = 6 |
|---|
| 93 | | -}; |
|---|
| 94 | | - |
|---|
| 95 | | -enum gamut_remap_select { |
|---|
| 96 | | - GAMUT_REMAP_BYPASS = 0, |
|---|
| 97 | | - GAMUT_REMAP_COEFF, |
|---|
| 98 | | - GAMUT_REMAP_COMA_COEFF, |
|---|
| 99 | | - GAMUT_REMAP_COMB_COEFF |
|---|
| 100 | | -}; |
|---|
| 101 | | - |
|---|
| 102 | | -static const struct dcn10_input_csc_matrix dcn10_input_csc_matrix[] = { |
|---|
| 103 | | - {COLOR_SPACE_SRGB, |
|---|
| 104 | | - {0x2000, 0, 0, 0, 0, 0x2000, 0, 0, 0, 0, 0x2000, 0} }, |
|---|
| 105 | | - {COLOR_SPACE_SRGB_LIMITED, |
|---|
| 106 | | - {0x2000, 0, 0, 0, 0, 0x2000, 0, 0, 0, 0, 0x2000, 0} }, |
|---|
| 107 | | - {COLOR_SPACE_YCBCR601, |
|---|
| 108 | | - {0x2cdd, 0x2000, 0, 0xe991, 0xe926, 0x2000, 0xf4fd, 0x10ef, |
|---|
| 109 | | - 0, 0x2000, 0x38b4, 0xe3a6} }, |
|---|
| 110 | | - {COLOR_SPACE_YCBCR601_LIMITED, |
|---|
| 111 | | - {0x3353, 0x2568, 0, 0xe400, 0xe5dc, 0x2568, 0xf367, 0x1108, |
|---|
| 112 | | - 0, 0x2568, 0x40de, 0xdd3a} }, |
|---|
| 113 | | - {COLOR_SPACE_YCBCR709, |
|---|
| 114 | | - {0x3265, 0x2000, 0, 0xe6ce, 0xf105, 0x2000, 0xfa01, 0xa7d, 0, |
|---|
| 115 | | - 0x2000, 0x3b61, 0xe24f} }, |
|---|
| 116 | | - |
|---|
| 117 | | - {COLOR_SPACE_YCBCR709_LIMITED, |
|---|
| 118 | | - {0x39a6, 0x2568, 0, 0xe0d6, 0xeedd, 0x2568, 0xf925, 0x9a8, 0, |
|---|
| 119 | | - 0x2568, 0x43ee, 0xdbb2} } |
|---|
| 120 | 89 | }; |
|---|
| 121 | 90 | |
|---|
| 122 | 91 | static void program_gamut_remap( |
|---|
| .. | .. |
|---|
| 363 | 332 | uint32_t i; |
|---|
| 364 | 333 | struct dcn10_dpp *dpp = TO_DCN10_DPP(dpp_base); |
|---|
| 365 | 334 | |
|---|
| 335 | + REG_SEQ_START(); |
|---|
| 336 | + |
|---|
| 366 | 337 | for (i = 0 ; i < num; i++) { |
|---|
| 367 | 338 | REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].red_reg); |
|---|
| 368 | 339 | REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].green_reg); |
|---|
| .. | .. |
|---|
| 454 | 425 | { |
|---|
| 455 | 426 | struct dcn10_dpp *dpp = TO_DCN10_DPP(dpp_base); |
|---|
| 456 | 427 | int i; |
|---|
| 457 | | - int arr_size = sizeof(dcn10_input_csc_matrix)/sizeof(struct dcn10_input_csc_matrix); |
|---|
| 428 | + int arr_size = sizeof(dpp_input_csc_matrix)/sizeof(struct dpp_input_csc_matrix); |
|---|
| 458 | 429 | const uint16_t *regval = NULL; |
|---|
| 459 | 430 | uint32_t cur_select = 0; |
|---|
| 460 | 431 | enum dcn10_input_csc_select select; |
|---|
| .. | .. |
|---|
| 467 | 438 | |
|---|
| 468 | 439 | if (tbl_entry == NULL) { |
|---|
| 469 | 440 | for (i = 0; i < arr_size; i++) |
|---|
| 470 | | - if (dcn10_input_csc_matrix[i].color_space == color_space) { |
|---|
| 471 | | - regval = dcn10_input_csc_matrix[i].regval; |
|---|
| 441 | + if (dpp_input_csc_matrix[i].color_space == color_space) { |
|---|
| 442 | + regval = dpp_input_csc_matrix[i].regval; |
|---|
| 472 | 443 | break; |
|---|
| 473 | 444 | } |
|---|
| 474 | 445 | |
|---|
| .. | .. |
|---|
| 637 | 608 | case IPP_DEGAMMA_MODE_HW_xvYCC: |
|---|
| 638 | 609 | REG_UPDATE(CM_DGAM_CONTROL, CM_DGAM_LUT_MODE, 2); |
|---|
| 639 | 610 | break; |
|---|
| 611 | + case IPP_DEGAMMA_MODE_USER_PWL: |
|---|
| 612 | + REG_UPDATE(CM_DGAM_CONTROL, CM_DGAM_LUT_MODE, 3); |
|---|
| 613 | + break; |
|---|
| 640 | 614 | default: |
|---|
| 641 | 615 | BREAK_TO_DEBUGGER(); |
|---|
| 642 | 616 | break; |
|---|
| 643 | 617 | } |
|---|
| 618 | + |
|---|
| 619 | + REG_SEQ_SUBMIT(); |
|---|
| 620 | + REG_SEQ_WAIT_DONE(); |
|---|
| 644 | 621 | } |
|---|
| 645 | 622 | |
|---|
| 646 | 623 | void dpp1_degamma_ram_select( |
|---|
| .. | .. |
|---|
| 742 | 719 | /* COLOR_KEYER_CONTROL.COLOR_KEYER_EN = 0 this should be default */ |
|---|
| 743 | 720 | if (dpp->tf_mask->CM_BYPASS_EN) |
|---|
| 744 | 721 | REG_SET(CM_CONTROL, 0, CM_BYPASS_EN, 1); |
|---|
| 722 | + else |
|---|
| 723 | + REG_SET(CM_CONTROL, 0, CM_BYPASS, 1); |
|---|
| 745 | 724 | |
|---|
| 746 | 725 | /* Setting degamma bypass for now */ |
|---|
| 747 | 726 | REG_SET(CM_DGAM_CONTROL, 0, CM_DGAM_LUT_MODE, 0); |
|---|