|
@@ -178,32 +178,14 @@ void dpp_reset(struct dpp *dpp_base)
|
|
|
dpp->filter_h = NULL;
|
|
|
dpp->filter_v = NULL;
|
|
|
|
|
|
- /* set boundary mode to 0 */
|
|
|
- REG_SET(DSCL_CONTROL, 0, SCL_BOUNDARY_MODE, 0);
|
|
|
+ memset(&dpp->scl_data, 0, sizeof(dpp->scl_data));
|
|
|
+ memset(&dpp->pwl_data, 0, sizeof(dpp->pwl_data));
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void dpp1_cm_set_regamma_pwl(
|
|
|
- struct dpp *dpp_base, const struct pwl_params *params)
|
|
|
-{
|
|
|
- struct dcn10_dpp *dpp = TO_DCN10_DPP(dpp_base);
|
|
|
-
|
|
|
- dpp1_cm_power_on_regamma_lut(dpp_base, true);
|
|
|
- dpp1_cm_configure_regamma_lut(dpp_base, dpp->is_write_to_ram_a_safe);
|
|
|
-
|
|
|
- if (dpp->is_write_to_ram_a_safe)
|
|
|
- dpp1_cm_program_regamma_luta_settings(dpp_base, params);
|
|
|
- else
|
|
|
- dpp1_cm_program_regamma_lutb_settings(dpp_base, params);
|
|
|
-
|
|
|
- dpp1_cm_program_regamma_lut(
|
|
|
- dpp_base, params->rgb_resulted, params->hw_points_num);
|
|
|
-}
|
|
|
-
|
|
|
-static void dpp1_cm_set_regamma_mode(
|
|
|
- struct dpp *dpp_base,
|
|
|
- enum opp_regamma mode)
|
|
|
+ struct dpp *dpp_base, const struct pwl_params *params, enum opp_regamma mode)
|
|
|
{
|
|
|
struct dcn10_dpp *dpp = TO_DCN10_DPP(dpp_base);
|
|
|
uint32_t re_mode = 0;
|
|
@@ -221,13 +203,27 @@ static void dpp1_cm_set_regamma_mode(
|
|
|
re_mode = 2;
|
|
|
break;
|
|
|
case OPP_REGAMMA_USER:
|
|
|
+ if (memcmp(&dpp->pwl_data, params, sizeof(*params)) == 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ dpp1_cm_power_on_regamma_lut(dpp_base, true);
|
|
|
+ dpp1_cm_configure_regamma_lut(dpp_base, dpp->is_write_to_ram_a_safe);
|
|
|
+
|
|
|
+ if (dpp->is_write_to_ram_a_safe)
|
|
|
+ dpp1_cm_program_regamma_luta_settings(dpp_base, params);
|
|
|
+ else
|
|
|
+ dpp1_cm_program_regamma_lutb_settings(dpp_base, params);
|
|
|
+
|
|
|
+ dpp1_cm_program_regamma_lut(
|
|
|
+ dpp_base, params->rgb_resulted, params->hw_points_num);
|
|
|
+ dpp->pwl_data = *params;
|
|
|
+
|
|
|
re_mode = dpp->is_write_to_ram_a_safe ? 3 : 4;
|
|
|
dpp->is_write_to_ram_a_safe = !dpp->is_write_to_ram_a_safe;
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
REG_SET(CM_RGAM_CONTROL, 0, CM_RGAM_LUT_MODE, re_mode);
|
|
|
REG_UPDATE_2(OBUF_CONTROL,
|
|
|
OBUF_BYPASS, obuf_bypass,
|
|
@@ -454,7 +450,6 @@ static const struct dpp_funcs dcn10_dpp_funcs = {
|
|
|
.opp_program_regamma_lutb_settings = dpp1_cm_program_regamma_lutb_settings,
|
|
|
.opp_program_regamma_luta_settings = dpp1_cm_program_regamma_luta_settings,
|
|
|
.opp_program_regamma_pwl = dpp1_cm_set_regamma_pwl,
|
|
|
- .opp_set_regamma_mode = dpp1_cm_set_regamma_mode,
|
|
|
.ipp_program_bias_and_scale = dpp1_program_bias_and_scale,
|
|
|
.ipp_set_degamma = dpp1_set_degamma,
|
|
|
.ipp_program_input_lut = dpp1_program_input_lut,
|