Commit d378859a authored by Russell King's avatar Russell King

drm/armada: fix colorkey mode property

The colorkey mode property was not correctly disabling the colorkeying
when "disabled" mode was selected.  Arrange for this to work as one
would expect.
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
parent 29dcea88
...@@ -160,6 +160,7 @@ enum { ...@@ -160,6 +160,7 @@ enum {
CFG_ALPHAM_GRA = 0x1 << 16, CFG_ALPHAM_GRA = 0x1 << 16,
CFG_ALPHAM_CFG = 0x2 << 16, CFG_ALPHAM_CFG = 0x2 << 16,
CFG_ALPHA_MASK = 0xff << 8, CFG_ALPHA_MASK = 0xff << 8,
#define CFG_ALPHA(x) ((x) << 8)
CFG_PIXCMD_MASK = 0xff, CFG_PIXCMD_MASK = 0xff,
}; };
......
...@@ -28,6 +28,7 @@ struct armada_ovl_plane_properties { ...@@ -28,6 +28,7 @@ struct armada_ovl_plane_properties {
uint16_t contrast; uint16_t contrast;
uint16_t saturation; uint16_t saturation;
uint32_t colorkey_mode; uint32_t colorkey_mode;
uint32_t colorkey_enable;
}; };
struct armada_ovl_plane { struct armada_ovl_plane {
...@@ -54,11 +55,13 @@ armada_ovl_update_attr(struct armada_ovl_plane_properties *prop, ...@@ -54,11 +55,13 @@ armada_ovl_update_attr(struct armada_ovl_plane_properties *prop,
writel_relaxed(0x00002000, dcrtc->base + LCD_SPU_CBSH_HUE); writel_relaxed(0x00002000, dcrtc->base + LCD_SPU_CBSH_HUE);
spin_lock_irq(&dcrtc->irq_lock); spin_lock_irq(&dcrtc->irq_lock);
armada_updatel(prop->colorkey_mode | CFG_ALPHAM_GRA, armada_updatel(prop->colorkey_mode,
CFG_CKMODE_MASK | CFG_ALPHAM_MASK | CFG_ALPHA_MASK, CFG_CKMODE_MASK | CFG_ALPHAM_MASK | CFG_ALPHA_MASK,
dcrtc->base + LCD_SPU_DMA_CTRL1); dcrtc->base + LCD_SPU_DMA_CTRL1);
if (dcrtc->variant->has_spu_adv_reg)
armada_updatel(ADV_GRACOLORKEY, 0, dcrtc->base + LCD_SPU_ADV_REG); armada_updatel(prop->colorkey_enable,
ADV_GRACOLORKEY | ADV_VIDCOLORKEY,
dcrtc->base + LCD_SPU_ADV_REG);
spin_unlock_irq(&dcrtc->irq_lock); spin_unlock_irq(&dcrtc->irq_lock);
} }
...@@ -321,8 +324,17 @@ static int armada_ovl_plane_set_property(struct drm_plane *plane, ...@@ -321,8 +324,17 @@ static int armada_ovl_plane_set_property(struct drm_plane *plane,
dplane->prop.colorkey_vb |= K2B(val); dplane->prop.colorkey_vb |= K2B(val);
update_attr = true; update_attr = true;
} else if (property == priv->colorkey_mode_prop) { } else if (property == priv->colorkey_mode_prop) {
dplane->prop.colorkey_mode &= ~CFG_CKMODE_MASK; if (val == CKMODE_DISABLE) {
dplane->prop.colorkey_mode |= CFG_CKMODE(val); dplane->prop.colorkey_mode =
CFG_CKMODE(CKMODE_DISABLE) |
CFG_ALPHAM_CFG | CFG_ALPHA(255);
dplane->prop.colorkey_enable = 0;
} else {
dplane->prop.colorkey_mode =
CFG_CKMODE(val) |
CFG_ALPHAM_GRA | CFG_ALPHA(0);
dplane->prop.colorkey_enable = ADV_GRACOLORKEY;
}
update_attr = true; update_attr = true;
} else if (property == priv->brightness_prop) { } else if (property == priv->brightness_prop) {
dplane->prop.brightness = val - 256; dplane->prop.brightness = val - 256;
...@@ -453,7 +465,9 @@ int armada_overlay_plane_create(struct drm_device *dev, unsigned long crtcs) ...@@ -453,7 +465,9 @@ int armada_overlay_plane_create(struct drm_device *dev, unsigned long crtcs)
dplane->prop.colorkey_yr = 0xfefefe00; dplane->prop.colorkey_yr = 0xfefefe00;
dplane->prop.colorkey_ug = 0x01010100; dplane->prop.colorkey_ug = 0x01010100;
dplane->prop.colorkey_vb = 0x01010100; dplane->prop.colorkey_vb = 0x01010100;
dplane->prop.colorkey_mode = CFG_CKMODE(CKMODE_RGB); dplane->prop.colorkey_mode = CFG_CKMODE(CKMODE_RGB) |
CFG_ALPHAM_GRA | CFG_ALPHA(0);
dplane->prop.colorkey_enable = ADV_GRACOLORKEY;
dplane->prop.brightness = 0; dplane->prop.brightness = 0;
dplane->prop.contrast = 0x4000; dplane->prop.contrast = 0x4000;
dplane->prop.saturation = 0x4000; dplane->prop.saturation = 0x4000;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment