@@ -198,6 +198,13 @@ static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane)
}
}
+ /* Convert the colorkey from 16 bits to 8 bits per component. */
+ cfg.colorkey.enabled = state->state.colorkey.mode;
+ cfg.colorkey.alpha = state->state.colorkey.value >> 56;
+ cfg.colorkey.key = ((state->state.colorkey.min >> 24) & 0x00ff0000)
+ | ((state->state.colorkey.min >> 16) & 0x0000ff00)
+ | ((state->state.colorkey.min >> 8) & 0x000000ff);
+
vsp1_du_atomic_update(plane->vsp->vsp, crtc->vsp_pipe,
plane->index, &cfg);
}
@@ -383,6 +390,11 @@ static const struct drm_plane_funcs rcar_du_vsp_plane_funcs = {
.atomic_get_property = rcar_du_vsp_plane_atomic_get_property,
};
+static const struct drm_prop_enum_list colorkey_modes[] = {
+ { 0, "disabled" },
+ { 1, "source" },
+};
+
int rcar_du_vsp_init(struct rcar_du_vsp *vsp, struct device_node *np,
unsigned int crtcs)
{
@@ -441,6 +453,10 @@ int rcar_du_vsp_init(struct rcar_du_vsp *vsp, struct device_node *np,
rcdu->props.alpha, 255);
drm_plane_create_zpos_property(&plane->plane, 1, 1,
vsp->num_planes - 1);
+ drm_plane_create_colorkey_properties(&plane->plane,
+ colorkey_modes,
+ ARRAY_SIZE(colorkey_modes),
+ true);
}
return 0;
Gen3 hardware supports color keying with replacement of the pixel value. Implement it using the standard KMS colorkey properties. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> --- drivers/gpu/drm/rcar-du/rcar_du_vsp.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)