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: Russell King <rmk+kernel@armlinux.org.uk>
This commit is contained in:
@@ -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 {
|
|||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user