diff options
author | Inki Dae <inki.dae@samsung.com> | 2013-08-20 00:51:02 -0400 |
---|---|---|
committer | Inki Dae <inki.dae@samsung.com> | 2013-09-05 00:43:43 -0400 |
commit | a4f38a80f62bb613525563860cbca87f583081b5 (patch) | |
tree | 11362a4ae12a6980748d8986059c896ffff3cc09 | |
parent | 4db7fcdf59551d9d0a9fe59bd919a32feae925b2 (diff) |
drm/exynos: fix fimd pixel format setting
This patch fixes wrong pixel format setting.
A pixel format is decided according to bpp and depth, or user-requested
format but fimd driver considered only bpp value to decide a proper pixel
format. So this patch makes a proper pixel format to be set according
to drm_framebuffer's pixel_format which is set by addfb with bpp and
depth, or addfb2 with user-requested format.
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_fimd.c | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index b8aa8fee8201..13d5afbc0dfd 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c | |||
@@ -91,6 +91,7 @@ struct fimd_win_data { | |||
91 | unsigned int fb_width; | 91 | unsigned int fb_width; |
92 | unsigned int fb_height; | 92 | unsigned int fb_height; |
93 | unsigned int bpp; | 93 | unsigned int bpp; |
94 | unsigned int pixel_format; | ||
94 | dma_addr_t dma_addr; | 95 | dma_addr_t dma_addr; |
95 | unsigned int buf_offsize; | 96 | unsigned int buf_offsize; |
96 | unsigned int line_size; /* bytes */ | 97 | unsigned int line_size; /* bytes */ |
@@ -397,6 +398,7 @@ static void fimd_win_mode_set(struct device *dev, | |||
397 | win_data->fb_height = overlay->fb_height; | 398 | win_data->fb_height = overlay->fb_height; |
398 | win_data->dma_addr = overlay->dma_addr[0] + offset; | 399 | win_data->dma_addr = overlay->dma_addr[0] + offset; |
399 | win_data->bpp = overlay->bpp; | 400 | win_data->bpp = overlay->bpp; |
401 | win_data->pixel_format = overlay->pixel_format; | ||
400 | win_data->buf_offsize = (overlay->fb_width - overlay->crtc_width) * | 402 | win_data->buf_offsize = (overlay->fb_width - overlay->crtc_width) * |
401 | (overlay->bpp >> 3); | 403 | (overlay->bpp >> 3); |
402 | win_data->line_size = overlay->crtc_width * (overlay->bpp >> 3); | 404 | win_data->line_size = overlay->crtc_width * (overlay->bpp >> 3); |
@@ -418,39 +420,29 @@ static void fimd_win_set_pixfmt(struct device *dev, unsigned int win) | |||
418 | 420 | ||
419 | val = WINCONx_ENWIN; | 421 | val = WINCONx_ENWIN; |
420 | 422 | ||
421 | switch (win_data->bpp) { | 423 | switch (win_data->pixel_format) { |
422 | case 1: | 424 | case DRM_FORMAT_C8: |
423 | val |= WINCON0_BPPMODE_1BPP; | ||
424 | val |= WINCONx_BITSWP; | ||
425 | val |= WINCONx_BURSTLEN_4WORD; | ||
426 | break; | ||
427 | case 2: | ||
428 | val |= WINCON0_BPPMODE_2BPP; | ||
429 | val |= WINCONx_BITSWP; | ||
430 | val |= WINCONx_BURSTLEN_8WORD; | ||
431 | break; | ||
432 | case 4: | ||
433 | val |= WINCON0_BPPMODE_4BPP; | ||
434 | val |= WINCONx_BITSWP; | ||
435 | val |= WINCONx_BURSTLEN_8WORD; | ||
436 | break; | ||
437 | case 8: | ||
438 | val |= WINCON0_BPPMODE_8BPP_PALETTE; | 425 | val |= WINCON0_BPPMODE_8BPP_PALETTE; |
439 | val |= WINCONx_BURSTLEN_8WORD; | 426 | val |= WINCONx_BURSTLEN_8WORD; |
440 | val |= WINCONx_BYTSWP; | 427 | val |= WINCONx_BYTSWP; |
441 | break; | 428 | break; |
442 | case 16: | 429 | case DRM_FORMAT_XRGB1555: |
430 | val |= WINCON0_BPPMODE_16BPP_1555; | ||
431 | val |= WINCONx_HAWSWP; | ||
432 | val |= WINCONx_BURSTLEN_16WORD; | ||
433 | break; | ||
434 | case DRM_FORMAT_RGB565: | ||
443 | val |= WINCON0_BPPMODE_16BPP_565; | 435 | val |= WINCON0_BPPMODE_16BPP_565; |
444 | val |= WINCONx_HAWSWP; | 436 | val |= WINCONx_HAWSWP; |
445 | val |= WINCONx_BURSTLEN_16WORD; | 437 | val |= WINCONx_BURSTLEN_16WORD; |
446 | break; | 438 | break; |
447 | case 24: | 439 | case DRM_FORMAT_XRGB8888: |
448 | val |= WINCON0_BPPMODE_24BPP_888; | 440 | val |= WINCON0_BPPMODE_24BPP_888; |
449 | val |= WINCONx_WSWP; | 441 | val |= WINCONx_WSWP; |
450 | val |= WINCONx_BURSTLEN_16WORD; | 442 | val |= WINCONx_BURSTLEN_16WORD; |
451 | break; | 443 | break; |
452 | case 32: | 444 | case DRM_FORMAT_ARGB8888: |
453 | val |= WINCON1_BPPMODE_28BPP_A4888 | 445 | val |= WINCON1_BPPMODE_25BPP_A1888 |
454 | | WINCON1_BLD_PIX | WINCON1_ALPHA_SEL; | 446 | | WINCON1_BLD_PIX | WINCON1_ALPHA_SEL; |
455 | val |= WINCONx_WSWP; | 447 | val |= WINCONx_WSWP; |
456 | val |= WINCONx_BURSTLEN_16WORD; | 448 | val |= WINCONx_BURSTLEN_16WORD; |