|
@@ -690,31 +690,32 @@ static bool update_scaling_factors(struct intel_overlay *overlay,
|
|
static void update_colorkey(struct intel_overlay *overlay,
|
|
static void update_colorkey(struct intel_overlay *overlay,
|
|
struct overlay_registers __iomem *regs)
|
|
struct overlay_registers __iomem *regs)
|
|
{
|
|
{
|
|
|
|
+ const struct intel_plane_state *state =
|
|
|
|
+ to_intel_plane_state(overlay->crtc->base.primary->state);
|
|
u32 key = overlay->color_key;
|
|
u32 key = overlay->color_key;
|
|
- u32 flags;
|
|
|
|
|
|
+ u32 format = 0;
|
|
|
|
+ u32 flags = 0;
|
|
|
|
|
|
- flags = 0;
|
|
|
|
if (overlay->color_key_enabled)
|
|
if (overlay->color_key_enabled)
|
|
flags |= DST_KEY_ENABLE;
|
|
flags |= DST_KEY_ENABLE;
|
|
|
|
|
|
- switch (overlay->crtc->base.primary->fb->bits_per_pixel) {
|
|
|
|
- case 8:
|
|
|
|
|
|
+ if (state->base.visible)
|
|
|
|
+ format = state->base.fb->pixel_format;
|
|
|
|
+
|
|
|
|
+ switch (format) {
|
|
|
|
+ case DRM_FORMAT_C8:
|
|
key = 0;
|
|
key = 0;
|
|
flags |= CLK_RGB8I_MASK;
|
|
flags |= CLK_RGB8I_MASK;
|
|
break;
|
|
break;
|
|
-
|
|
|
|
- case 16:
|
|
|
|
- if (overlay->crtc->base.primary->fb->depth == 15) {
|
|
|
|
- key = RGB15_TO_COLORKEY(key);
|
|
|
|
- flags |= CLK_RGB15_MASK;
|
|
|
|
- } else {
|
|
|
|
- key = RGB16_TO_COLORKEY(key);
|
|
|
|
- flags |= CLK_RGB16_MASK;
|
|
|
|
- }
|
|
|
|
|
|
+ case DRM_FORMAT_XRGB1555:
|
|
|
|
+ key = RGB15_TO_COLORKEY(key);
|
|
|
|
+ flags |= CLK_RGB15_MASK;
|
|
break;
|
|
break;
|
|
-
|
|
|
|
- case 24:
|
|
|
|
- case 32:
|
|
|
|
|
|
+ case DRM_FORMAT_RGB565:
|
|
|
|
+ key = RGB16_TO_COLORKEY(key);
|
|
|
|
+ flags |= CLK_RGB16_MASK;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
flags |= CLK_RGB24_MASK;
|
|
flags |= CLK_RGB24_MASK;
|
|
break;
|
|
break;
|
|
}
|
|
}
|