diff options
author | Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> | 2019-11-19 17:41:44 +0300 |
---|---|---|
committer | Alexey Brodkin <abrodkin@synopsys.com> | 2019-12-16 13:53:05 +0300 |
commit | 4c5b36ee73359b92355394adbd722823bf66806f (patch) | |
tree | 02d8042940180be50670f04c03fbec6cbb0cd9f7 | |
parent | d1eef1c619749b2a57e514a3fa67d9a516ffa919 (diff) | |
download | linux-4c5b36ee73359b92355394adbd722823bf66806f.tar.bz2 |
DRM: ARC: PGU: fix framebuffer format switching
Current implementation don't switch to RGB565 format if BGR888 was
previously used. Fix that.
Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
-rw-r--r-- | drivers/gpu/drm/arc/arcpgu_crtc.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c index dfaddbb7da0d..31d9824c46cc 100644 --- a/drivers/gpu/drm/arc/arcpgu_crtc.c +++ b/drivers/gpu/drm/arc/arcpgu_crtc.c @@ -32,6 +32,7 @@ static void arc_pgu_set_pxl_fmt(struct drm_crtc *crtc) uint32_t pixel_format = fb->format->format; struct simplefb_format *format = NULL; int i; + u32 reg_ctrl; for (i = 0; i < ARRAY_SIZE(supported_formats); i++) { if (supported_formats[i].fourcc == pixel_format) @@ -41,11 +42,12 @@ static void arc_pgu_set_pxl_fmt(struct drm_crtc *crtc) if (WARN_ON(!format)) return; - if (format->fourcc == DRM_FORMAT_RGB888) - arc_pgu_write(arcpgu, ARCPGU_REG_CTRL, - arc_pgu_read(arcpgu, ARCPGU_REG_CTRL) | - ARCPGU_MODE_RGB888_MASK); - + reg_ctrl = arc_pgu_read(arcpgu, ARCPGU_REG_CTRL); + if (format->fourcc == DRM_FORMAT_RGB565) + reg_ctrl &= ~ARCPGU_MODE_RGB888_MASK; + else + reg_ctrl |= ARCPGU_MODE_RGB888_MASK; + arc_pgu_write(arcpgu, ARCPGU_REG_CTRL, reg_ctrl); } static const struct drm_crtc_funcs arc_pgu_crtc_funcs = { |