diff options
| author | abeykun <abeykun@codeaurora.org> | 2016-08-24 13:51:40 -0400 |
|---|---|---|
| committer | abeykun <abeykun@codeaurora.org> | 2016-09-30 18:11:51 -0400 |
| commit | d6b392dadbe1aefce70ae4271b35fd6041b89720 (patch) | |
| tree | 051e49af40b0b3fa92eb07e6f22f03453dc40b83 /drivers/gpu | |
| parent | 77f25fa88f836c346f6a609ef3c389d4919f4e32 (diff) | |
drm/msm/sde: add const alpha support for msmskunk
Add foreground and background blend layer constant alpha
programming sequence for msmskunk. Assign correct function to
the mixer HW interface based on HW revision.
Change-Id: I5af26fa56d6434adbea438ad31a1759d43b10b6d
Signed-off-by: abeykun <abeykun@codeaurora.org>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_hw_catalog.h | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_hw_lm.c | 30 |
2 files changed, 31 insertions, 4 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_hw_catalog.h b/drivers/gpu/drm/msm/sde/sde_hw_catalog.h index 91e7b90cbc76..6bdc20507eaf 100644 --- a/drivers/gpu/drm/msm/sde/sde_hw_catalog.h +++ b/drivers/gpu/drm/msm/sde/sde_hw_catalog.h @@ -26,7 +26,7 @@ (STEP & 0xFFFF)) #define SDE_HW_MAJOR(rev) ((rev) >> 28) -#define SDE_HW_MINOR(rev) .(((rev) >> 16) & 0xFFF) +#define SDE_HW_MINOR(rev) (((rev) >> 16) & 0xFFF) #define SDE_HW_STEP(rev) ((rev) & 0xFFFF) #define SDE_HW_MAJOR_MINOR(rev) ((rev) >> 16) @@ -37,6 +37,9 @@ #define SDE_HW_VER_171 SDE_HW_VER(1, 7, 1) /* 8996 v2.0 */ #define SDE_HW_VER_172 SDE_HW_VER(1, 7, 2) /* 8996 v3.0 */ #define SDE_HW_VER_300 SDE_HW_VER(3, 0, 0) /* cobalt v1.0 */ +#define SDE_HW_VER_400 SDE_HW_VER(4, 0, 0) /* msmskunk v1.0 */ + +#define IS_MSMSKUNK_TARGET(rev) IS_SDE_MAJOR_MINOR_SAME((rev), SDE_HW_VER_400) #define MAX_IMG_WIDTH 0x3fff #define MAX_IMG_HEIGHT 0x3fff diff --git a/drivers/gpu/drm/msm/sde/sde_hw_lm.c b/drivers/gpu/drm/msm/sde/sde_hw_lm.c index 452c8783b88e..5e268f3925c8 100644 --- a/drivers/gpu/drm/msm/sde/sde_hw_lm.c +++ b/drivers/gpu/drm/msm/sde/sde_hw_lm.c @@ -22,6 +22,7 @@ /* These register are offset to mixer base + stage base */ #define LM_BLEND0_OP 0x00 +#define LM_BLEND0_CONST_ALPHA 0x04 #define LM_BLEND0_FG_ALPHA 0x04 #define LM_BLEND0_BG_ALPHA 0x08 @@ -99,6 +100,25 @@ static void sde_hw_lm_setup_border_color(struct sde_hw_mixer *ctx, } } +static void sde_hw_lm_setup_blend_config_msmskunk(struct sde_hw_mixer *ctx, + u32 stage, u32 fg_alpha, u32 bg_alpha, u32 blend_op) +{ + struct sde_hw_blk_reg_map *c = &ctx->hw; + int stage_off; + u32 const_alpha; + + if (stage == SDE_STAGE_BASE) + return; + + stage_off = _stage_offset(ctx, stage); + if (WARN_ON(stage_off < 0)) + return; + + const_alpha = (bg_alpha & 0xFF) | ((fg_alpha & 0xFF) << 16); + SDE_REG_WRITE(c, LM_BLEND0_CONST_ALPHA + stage_off, const_alpha); + SDE_REG_WRITE(c, LM_BLEND0_OP + stage_off, blend_op); +} + static void sde_hw_lm_setup_blend_config(struct sde_hw_mixer *ctx, u32 stage, u32 fg_alpha, u32 bg_alpha, u32 blend_op) { @@ -136,11 +156,15 @@ static void sde_hw_lm_gammacorrection(struct sde_hw_mixer *mixer, { } -static void _setup_mixer_ops(struct sde_hw_lm_ops *ops, +static void _setup_mixer_ops(struct sde_mdss_cfg *m, + struct sde_hw_lm_ops *ops, unsigned long cap) { ops->setup_mixer_out = sde_hw_lm_setup_out; - ops->setup_blend_config = sde_hw_lm_setup_blend_config; + if (IS_MSMSKUNK_TARGET(m->hwversion)) + ops->setup_blend_config = sde_hw_lm_setup_blend_config_msmskunk; + else + ops->setup_blend_config = sde_hw_lm_setup_blend_config; ops->setup_alpha_out = sde_hw_lm_setup_color3; ops->setup_border_color = sde_hw_lm_setup_border_color; ops->setup_gammcorrection = sde_hw_lm_gammacorrection; @@ -166,7 +190,7 @@ struct sde_hw_mixer *sde_hw_lm_init(enum sde_lm idx, /* Assign ops */ c->idx = idx; c->cap = cfg; - _setup_mixer_ops(&c->ops, c->cap->features); + _setup_mixer_ops(m, &c->ops, c->cap->features); /* * Perform any default initialization for the sspp blocks |
