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/gpu | |
| 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/gpu')
| -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; |
