mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
4db7fcdf59
commit
a4f38a80f6
|
@ -91,6 +91,7 @@ struct fimd_win_data {
|
|||
unsigned int fb_width;
|
||||
unsigned int fb_height;
|
||||
unsigned int bpp;
|
||||
unsigned int pixel_format;
|
||||
dma_addr_t dma_addr;
|
||||
unsigned int buf_offsize;
|
||||
unsigned int line_size; /* bytes */
|
||||
|
@ -397,6 +398,7 @@ static void fimd_win_mode_set(struct device *dev,
|
|||
win_data->fb_height = overlay->fb_height;
|
||||
win_data->dma_addr = overlay->dma_addr[0] + offset;
|
||||
win_data->bpp = overlay->bpp;
|
||||
win_data->pixel_format = overlay->pixel_format;
|
||||
win_data->buf_offsize = (overlay->fb_width - overlay->crtc_width) *
|
||||
(overlay->bpp >> 3);
|
||||
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)
|
|||
|
||||
val = WINCONx_ENWIN;
|
||||
|
||||
switch (win_data->bpp) {
|
||||
case 1:
|
||||
val |= WINCON0_BPPMODE_1BPP;
|
||||
val |= WINCONx_BITSWP;
|
||||
val |= WINCONx_BURSTLEN_4WORD;
|
||||
break;
|
||||
case 2:
|
||||
val |= WINCON0_BPPMODE_2BPP;
|
||||
val |= WINCONx_BITSWP;
|
||||
val |= WINCONx_BURSTLEN_8WORD;
|
||||
break;
|
||||
case 4:
|
||||
val |= WINCON0_BPPMODE_4BPP;
|
||||
val |= WINCONx_BITSWP;
|
||||
val |= WINCONx_BURSTLEN_8WORD;
|
||||
break;
|
||||
case 8:
|
||||
switch (win_data->pixel_format) {
|
||||
case DRM_FORMAT_C8:
|
||||
val |= WINCON0_BPPMODE_8BPP_PALETTE;
|
||||
val |= WINCONx_BURSTLEN_8WORD;
|
||||
val |= WINCONx_BYTSWP;
|
||||
break;
|
||||
case 16:
|
||||
case DRM_FORMAT_XRGB1555:
|
||||
val |= WINCON0_BPPMODE_16BPP_1555;
|
||||
val |= WINCONx_HAWSWP;
|
||||
val |= WINCONx_BURSTLEN_16WORD;
|
||||
break;
|
||||
case DRM_FORMAT_RGB565:
|
||||
val |= WINCON0_BPPMODE_16BPP_565;
|
||||
val |= WINCONx_HAWSWP;
|
||||
val |= WINCONx_BURSTLEN_16WORD;
|
||||
break;
|
||||
case 24:
|
||||
case DRM_FORMAT_XRGB8888:
|
||||
val |= WINCON0_BPPMODE_24BPP_888;
|
||||
val |= WINCONx_WSWP;
|
||||
val |= WINCONx_BURSTLEN_16WORD;
|
||||
break;
|
||||
case 32:
|
||||
val |= WINCON1_BPPMODE_28BPP_A4888
|
||||
case DRM_FORMAT_ARGB8888:
|
||||
val |= WINCON1_BPPMODE_25BPP_A1888
|
||||
| WINCON1_BLD_PIX | WINCON1_ALPHA_SEL;
|
||||
val |= WINCONx_WSWP;
|
||||
val |= WINCONx_BURSTLEN_16WORD;
|
||||
|
|
Loading…
Reference in New Issue