drm: xlnx: zynqmp_dpsub: Fix graphics layer blending
To display the graphics layer, the global alpha needs to be enabled. Enable it when the graphics plane is enabled (with full opacity), and disable it otherwise. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
b7f4753d7b
commit
e06926ecc3
@ -415,6 +415,11 @@ static void zynqmp_disp_avbuf_write(struct zynqmp_disp *disp, int reg, u32 val)
|
||||
writel(val, disp->avbuf.base + reg);
|
||||
}
|
||||
|
||||
static bool zynqmp_disp_layer_is_gfx(const struct zynqmp_disp_layer *layer)
|
||||
{
|
||||
return layer->id == ZYNQMP_DISP_LAYER_GFX;
|
||||
}
|
||||
|
||||
static bool zynqmp_disp_layer_is_video(const struct zynqmp_disp_layer *layer)
|
||||
{
|
||||
return layer->id == ZYNQMP_DISP_LAYER_VID;
|
||||
@ -1157,6 +1162,9 @@ zynqmp_disp_plane_atomic_disable(struct drm_plane *plane,
|
||||
return;
|
||||
|
||||
zynqmp_disp_layer_disable(layer);
|
||||
|
||||
if (zynqmp_disp_layer_is_gfx(layer))
|
||||
zynqmp_disp_blend_set_global_alpha(layer->disp, false, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1186,6 +1194,9 @@ zynqmp_disp_plane_atomic_update(struct drm_plane *plane,
|
||||
|
||||
zynqmp_disp_layer_update(layer, new_state);
|
||||
|
||||
if (zynqmp_disp_layer_is_gfx(layer))
|
||||
zynqmp_disp_blend_set_global_alpha(layer->disp, true, 255);
|
||||
|
||||
/* Enable or re-enable the plane is the format has changed. */
|
||||
if (format_changed)
|
||||
zynqmp_disp_layer_enable(layer);
|
||||
@ -1447,7 +1458,6 @@ zynqmp_disp_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||
|
||||
zynqmp_disp_blend_set_output_format(disp, ZYNQMP_DPSUB_FORMAT_RGB);
|
||||
zynqmp_disp_blend_set_bg_color(disp, 0, 0, 0);
|
||||
zynqmp_disp_blend_set_global_alpha(disp, false, 0);
|
||||
|
||||
zynqmp_disp_enable(disp);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user