Skip to content

Commit ce0ec8d

Browse files
sandy-huangrkhuangtao
authored andcommitted
drm/rockchip: vop: alpha_pre_mul mode depend on user space
Change-Id: Iaada438902ddddbbd00890c53a58cc49af3c3d3e Signed-off-by: Sandy Huang <hjc@rock-chips.com>
1 parent 424a08f commit ce0ec8d

3 files changed

Lines changed: 22 additions & 1 deletion

File tree

drivers/gpu/drm/rockchip/rockchip_drm_drv.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1138,6 +1138,12 @@ static int rockchip_drm_create_properties(struct drm_device *dev)
11381138
return -ENOMEM;
11391139
private->global_alpha_prop = prop;
11401140

1141+
prop = drm_property_create_range(dev, DRM_MODE_PROP_ATOMIC,
1142+
"BLEND_MODE", 0, 1);
1143+
if (!prop)
1144+
return -ENOMEM;
1145+
private->blend_mode_prop = prop;
1146+
11411147
return drm_mode_create_tv_properties(dev, 0, NULL);
11421148
}
11431149

drivers/gpu/drm/rockchip/rockchip_drm_drv.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ struct rockchip_drm_private {
176176
struct drm_property *eotf_prop;
177177
struct drm_property *color_space_prop;
178178
struct drm_property *global_alpha_prop;
179+
struct drm_property *blend_mode_prop;
179180
void *backlight;
180181
struct drm_fb_helper *fbdev_helper;
181182
struct drm_gem_object *fbdev_bo;

drivers/gpu/drm/rockchip/rockchip_drm_vop.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ struct vop_plane_state {
168168
unsigned int csc_mode;
169169
bool enable;
170170
int global_alpha;
171+
int blend_mode;
171172
};
172173

173174
struct vop_win {
@@ -1659,7 +1660,8 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
16591660
SRC_FACTOR_M0(global_alpha_en ?
16601661
ALPHA_SRC_GLOBAL : ALPHA_ONE);
16611662
VOP_WIN_SET(vop, win, src_alpha_ctl, val);
1662-
VOP_WIN_SET(vop, win, alpha_pre_mul, 1);
1663+
VOP_WIN_SET(vop, win, alpha_pre_mul,
1664+
vop_plane_state->blend_mode);
16631665
VOP_WIN_SET(vop, win, alpha_mode, 1);
16641666
VOP_WIN_SET(vop, win, alpha_en, 1);
16651667
} else {
@@ -1782,6 +1784,11 @@ static int vop_atomic_plane_set_property(struct drm_plane *plane,
17821784
return 0;
17831785
}
17841786

1787+
if (property == private->blend_mode_prop) {
1788+
plane_state->blend_mode = val;
1789+
return 0;
1790+
}
1791+
17851792
DRM_ERROR("failed to set vop plane property\n");
17861793
return -EINVAL;
17871794
}
@@ -1820,6 +1827,11 @@ static int vop_atomic_plane_get_property(struct drm_plane *plane,
18201827
return 0;
18211828
}
18221829

1830+
if (property == private->blend_mode_prop) {
1831+
*val = plane_state->blend_mode;
1832+
return 0;
1833+
}
1834+
18231835
DRM_ERROR("failed to get vop plane property\n");
18241836
return -EINVAL;
18251837
}
@@ -3653,6 +3665,8 @@ static int vop_plane_init(struct vop *vop, struct vop_win *win,
36533665
if (VOP_WIN_SUPPORT(vop, win, global_alpha_val))
36543666
drm_object_attach_property(&win->base.base,
36553667
private->global_alpha_prop, 0xff);
3668+
drm_object_attach_property(&win->base.base,
3669+
private->blend_mode_prop, 0);
36563670

36573671
return 0;
36583672
}

0 commit comments

Comments
 (0)