diff options
author | Russell King <rmk+kernel@armlinux.org.uk> | 2018-06-24 09:35:10 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@armlinux.org.uk> | 2018-07-09 06:32:56 -0400 |
commit | d378859a667edc99e3473704847698cae97ca2b1 (patch) | |
tree | 6c1f6d0fcd09d76c95aeaa606e8d15adec76a219 /drivers | |
parent | 29dcea88779c856c7dc92040a0c01233263101d4 (diff) |
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/armada/armada_hw.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/armada/armada_overlay.c | 30 |
2 files changed, 23 insertions, 8 deletions
diff --git a/drivers/gpu/drm/armada/armada_hw.h b/drivers/gpu/drm/armada/armada_hw.h index 27319a8335e2..345dc4d0851e 100644 --- a/drivers/gpu/drm/armada/armada_hw.h +++ b/drivers/gpu/drm/armada/armada_hw.h | |||
@@ -160,6 +160,7 @@ enum { | |||
160 | CFG_ALPHAM_GRA = 0x1 << 16, | 160 | CFG_ALPHAM_GRA = 0x1 << 16, |
161 | CFG_ALPHAM_CFG = 0x2 << 16, | 161 | CFG_ALPHAM_CFG = 0x2 << 16, |
162 | CFG_ALPHA_MASK = 0xff << 8, | 162 | CFG_ALPHA_MASK = 0xff << 8, |
163 | #define CFG_ALPHA(x) ((x) << 8) | ||
163 | CFG_PIXCMD_MASK = 0xff, | 164 | CFG_PIXCMD_MASK = 0xff, |
164 | }; | 165 | }; |
165 | 166 | ||
diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c index c391955009d6..afa7ded3ae31 100644 --- a/drivers/gpu/drm/armada/armada_overlay.c +++ b/drivers/gpu/drm/armada/armada_overlay.c | |||
@@ -28,6 +28,7 @@ struct armada_ovl_plane_properties { | |||
28 | uint16_t contrast; | 28 | uint16_t contrast; |
29 | uint16_t saturation; | 29 | uint16_t saturation; |
30 | uint32_t colorkey_mode; | 30 | uint32_t colorkey_mode; |
31 | uint32_t colorkey_enable; | ||
31 | }; | 32 | }; |
32 | 33 | ||
33 | struct armada_ovl_plane { | 34 | struct armada_ovl_plane { |
@@ -54,11 +55,13 @@ armada_ovl_update_attr(struct armada_ovl_plane_properties *prop, | |||
54 | writel_relaxed(0x00002000, dcrtc->base + LCD_SPU_CBSH_HUE); | 55 | writel_relaxed(0x00002000, dcrtc->base + LCD_SPU_CBSH_HUE); |
55 | 56 | ||
56 | spin_lock_irq(&dcrtc->irq_lock); | 57 | spin_lock_irq(&dcrtc->irq_lock); |
57 | armada_updatel(prop->colorkey_mode | CFG_ALPHAM_GRA, | 58 | armada_updatel(prop->colorkey_mode, |
58 | CFG_CKMODE_MASK | CFG_ALPHAM_MASK | CFG_ALPHA_MASK, | 59 | CFG_CKMODE_MASK | CFG_ALPHAM_MASK | CFG_ALPHA_MASK, |
59 | dcrtc->base + LCD_SPU_DMA_CTRL1); | 60 | dcrtc->base + LCD_SPU_DMA_CTRL1); |
60 | 61 | if (dcrtc->variant->has_spu_adv_reg) | |
61 | armada_updatel(ADV_GRACOLORKEY, 0, dcrtc->base + LCD_SPU_ADV_REG); | 62 | armada_updatel(prop->colorkey_enable, |
63 | ADV_GRACOLORKEY | ADV_VIDCOLORKEY, | ||
64 | dcrtc->base + LCD_SPU_ADV_REG); | ||
62 | spin_unlock_irq(&dcrtc->irq_lock); | 65 | spin_unlock_irq(&dcrtc->irq_lock); |
63 | } | 66 | } |
64 | 67 | ||
@@ -321,8 +324,17 @@ static int armada_ovl_plane_set_property(struct drm_plane *plane, | |||
321 | dplane->prop.colorkey_vb |= K2B(val); | 324 | dplane->prop.colorkey_vb |= K2B(val); |
322 | update_attr = true; | 325 | update_attr = true; |
323 | } else if (property == priv->colorkey_mode_prop) { | 326 | } else if (property == priv->colorkey_mode_prop) { |
324 | dplane->prop.colorkey_mode &= ~CFG_CKMODE_MASK; | 327 | if (val == CKMODE_DISABLE) { |
325 | dplane->prop.colorkey_mode |= CFG_CKMODE(val); | 328 | dplane->prop.colorkey_mode = |
329 | CFG_CKMODE(CKMODE_DISABLE) | | ||
330 | CFG_ALPHAM_CFG | CFG_ALPHA(255); | ||
331 | dplane->prop.colorkey_enable = 0; | ||
332 | } else { | ||
333 | dplane->prop.colorkey_mode = | ||
334 | CFG_CKMODE(val) | | ||
335 | CFG_ALPHAM_GRA | CFG_ALPHA(0); | ||
336 | dplane->prop.colorkey_enable = ADV_GRACOLORKEY; | ||
337 | } | ||
326 | update_attr = true; | 338 | update_attr = true; |
327 | } else if (property == priv->brightness_prop) { | 339 | } else if (property == priv->brightness_prop) { |
328 | dplane->prop.brightness = val - 256; | 340 | dplane->prop.brightness = val - 256; |
@@ -453,7 +465,9 @@ int armada_overlay_plane_create(struct drm_device *dev, unsigned long crtcs) | |||
453 | dplane->prop.colorkey_yr = 0xfefefe00; | 465 | dplane->prop.colorkey_yr = 0xfefefe00; |
454 | dplane->prop.colorkey_ug = 0x01010100; | 466 | dplane->prop.colorkey_ug = 0x01010100; |
455 | dplane->prop.colorkey_vb = 0x01010100; | 467 | dplane->prop.colorkey_vb = 0x01010100; |
456 | dplane->prop.colorkey_mode = CFG_CKMODE(CKMODE_RGB); | 468 | dplane->prop.colorkey_mode = CFG_CKMODE(CKMODE_RGB) | |
469 | CFG_ALPHAM_GRA | CFG_ALPHA(0); | ||
470 | dplane->prop.colorkey_enable = ADV_GRACOLORKEY; | ||
457 | dplane->prop.brightness = 0; | 471 | dplane->prop.brightness = 0; |
458 | dplane->prop.contrast = 0x4000; | 472 | dplane->prop.contrast = 0x4000; |
459 | dplane->prop.saturation = 0x4000; | 473 | dplane->prop.saturation = 0x4000; |