Răsfoiți Sursa

disp: msm: sde: add support for 45deg dir & corner detection

Pineapple target adds support for 45deg Directional & Corner
Detection features for Qseed6. This change adds support for
enabling these features through ahb & lutdma programming,
and updates the UAPI as well.

Change-Id: I7910d840cc4e5d1a7ce9444a41e189171487dbca
Signed-off-by: Shamika Joshi <[email protected]>
Shamika Joshi 2 ani în urmă
părinte
comite
33dcc003f6

+ 5 - 0
include/uapi/display/drm/sde_drm.h

@@ -268,6 +268,7 @@ struct sde_drm_de_v1 {
 #define SDE_DRM_QSEED3LITE
 #define SDE_DRM_QSEED4
 #define SDE_DRM_INLINE_PREDOWNSCALE
+#define SDE_DRM_QSEED6
 
 /**
  * struct sde_drm_scaler_v2 - version 2 of struct sde_drm_scaler
@@ -309,6 +310,8 @@ struct sde_drm_de_v1 {
  * @de_lpf_h:          Detail enhancer lpf blend high
  * @de_lpf_l:          Detail enhancer lpf blend low
  * @de_lpf_m:          Detail enhancer lpf blend medium
+ * @dir45_en:          45/-45 degree direction filtering enable
+ * @cor_en:            corner enhancer enable
  */
 struct sde_drm_scaler_v2 {
 	/*
@@ -379,6 +382,8 @@ struct sde_drm_scaler_v2 {
 	__u32 de_lpf_h;
 	__u32 de_lpf_l;
 	__u32 de_lpf_m;
+	__u32 dir45_en;
+	__u32 cor_en;
 };
 
 /* Number of dest scalers supported */

+ 2 - 0
msm/sde/sde_hw_reg_dma_v1_color_proc.c

@@ -3392,6 +3392,8 @@ void reg_dmav1_setup_vig_qseed3(struct sde_hw_pipe *ctx,
 
 	op_mode |= (scaler3_cfg->blend_cfg & 1) << 31;
 	op_mode |= (scaler3_cfg->dir_en) ? BIT(4) : 0;
+	op_mode |= (scaler3_cfg->dir_en && scaler3_cfg->cor_en) ? BIT(5) : 0;
+	op_mode |= (scaler3_cfg->dir_en && scaler3_cfg->dir45_en) ? BIT(6) : 0;
 	op_mode |= (scaler3_cfg->dyn_exp_disabled) ? BIT(13) : 0;
 
 	preload =

+ 4 - 0
msm/sde/sde_hw_util.c

@@ -115,6 +115,8 @@ void sde_set_scaler_v2(struct sde_hw_scaler3_cfg *cfg,
 
 	cfg->enable = scale_v2->enable;
 	cfg->dir_en = scale_v2->dir_en;
+	cfg->dir45_en = scale_v2->dir45_en;
+	cfg->cor_en = scale_v2->cor_en;
 
 	for (i = 0; i < SDE_MAX_PLANES; i++) {
 		cfg->init_phase_x[i] = scale_v2->init_phase_x[i];
@@ -376,6 +378,8 @@ void sde_hw_setup_scaler3(struct sde_hw_blk_reg_map *c,
 
 	op_mode |= (scaler3_cfg->blend_cfg & 1) << 31;
 	op_mode |= (scaler3_cfg->dir_en) ? BIT(4) : 0;
+	op_mode |= (scaler3_cfg->dir_en && scaler3_cfg->cor_en) ? BIT(5) : 0;
+	op_mode |= (scaler3_cfg->dir_en && scaler3_cfg->dir45_en) ? BIT(6) : 0;
 	op_mode |= (scaler3_cfg->dyn_exp_disabled) ? BIT(13) : 0;
 
 	preload =

+ 4 - 0
msm/sde/sde_hw_util.h

@@ -78,6 +78,8 @@ struct sde_hw_scaler3_de_cfg {
  * struct sde_hw_scaler3_cfg : QSEEDv3 configuration
  * @enable:        scaler enable
  * @dir_en:        direction detection block enable
+ * @dir45_en:      45/-45 degree direction filtering block enable
+ * @cor_en:        corner detection block enable
  * @ init_phase_x: horizontal initial phase
  * @ phase_step_x: horizontal phase step
  * @ init_phase_y: vertical initial phase
@@ -118,6 +120,8 @@ struct sde_hw_scaler3_de_cfg {
 struct sde_hw_scaler3_cfg {
 	u32 enable;
 	u32 dir_en;
+	u32 dir45_en;
+	u32 cor_en;
 	int32_t init_phase_x[SDE_MAX_PLANES];
 	int32_t phase_step_x[SDE_MAX_PLANES];
 	int32_t init_phase_y[SDE_MAX_PLANES];