From: Huang Jiachai Date: Mon, 14 Mar 2016 12:58:26 +0000 (+0800) Subject: video: rockchip: fb: add BGR data format support X-Git-Tag: firefly_0821_release~3111 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=a581b38e7d6d16abe014e276c3355f35fb68a1ec;p=firefly-linux-kernel-4.4.55.git video: rockchip: fb: add BGR data format support Change-Id: Ia97a20b5ed1e3ab92e31136e0cb60a785b570a65 Signed-off-by: Huang Jiachai --- diff --git a/drivers/video/rockchip/rk_fb.c b/drivers/video/rockchip/rk_fb.c index 443201a1a3d9..0e0a3d2b25a9 100644 --- a/drivers/video/rockchip/rk_fb.c +++ b/drivers/video/rockchip/rk_fb.c @@ -164,6 +164,7 @@ int rk_fb_pixel_width(int data_format) switch (data_format) { case XBGR888: + case XRGB888: case ABGR888: case ARGB888: case FBDC_ARGB_888: @@ -172,9 +173,11 @@ int rk_fb_pixel_width(int data_format) pixel_width = 4 * 8; break; case RGB888: + case BGR888: pixel_width = 3 * 8; break; case RGB565: + case BGR565: case FBDC_RGB_565: pixel_width = 2 * 8; break; @@ -206,6 +209,9 @@ static int rk_fb_data_fmt(int data_format, int bits_per_pixel) case HAL_PIXEL_FORMAT_RGBX_8888: fb_data_fmt = XBGR888; break; + case HAL_PIXEL_FORMAT_BGRX_8888: + fb_data_fmt = XRGB888; + break; case HAL_PIXEL_FORMAT_RGBA_8888: fb_data_fmt = ABGR888; break; @@ -215,9 +221,15 @@ static int rk_fb_data_fmt(int data_format, int bits_per_pixel) case HAL_PIXEL_FORMAT_RGB_888: fb_data_fmt = RGB888; break; + case HAL_PIXEL_FORMAT_BGR_888: + fb_data_fmt = BGR888; + break; case HAL_PIXEL_FORMAT_RGB_565: fb_data_fmt = RGB565; break; + case HAL_PIXEL_FORMAT_BGR_565: + fb_data_fmt = BGR565; + break; case HAL_PIXEL_FORMAT_YCbCr_422_SP: /* yuv422 */ fb_data_fmt = YUV422; break; @@ -543,9 +555,15 @@ char *get_format_string(enum data_format format, char *fmt) case RGB888: strcpy(fmt, "RGB888"); break; + case BGR888: + strcpy(fmt, "BGR888"); + break; case RGB565: strcpy(fmt, "RGB565"); break; + case BGR565: + strcpy(fmt, "BGR565"); + break; case YUV420: case YUV420_NV21: strcpy(fmt, "YUV420"); @@ -935,12 +953,15 @@ static int get_ipp_format(int fmt) switch (fmt) { case HAL_PIXEL_FORMAT_RGBX_8888: + case HAL_PIXEL_FORMAT_BGRX_8888: case HAL_PIXEL_FORMAT_RGBA_8888: case HAL_PIXEL_FORMAT_BGRA_8888: case HAL_PIXEL_FORMAT_RGB_888: + case HAL_PIXEL_FORMAT_BGR_888: ipp_fmt = IPP_XRGB_8888; break; case HAL_PIXEL_FORMAT_RGB_565: + case HAL_PIXEL_FORMAT_BGR_565: ipp_fmt = IPP_RGB_565; break; case HAL_PIXEL_FORMAT_YCbCr_422_SP: @@ -2121,6 +2142,7 @@ static int rk_fb_set_wb_buffer(struct fb_info *info, wb_cfg->xsize * wb_cfg->ysize; wb_data->xsize = wb_cfg->xsize; wb_data->ysize = wb_cfg->ysize; + wb_data->data_format = fb_data_fmt; wb_data->state = 1; return 0; diff --git a/include/linux/rk_fb.h b/include/linux/rk_fb.h index a466c6bfd980..d01f38b98188 100755 --- a/include/linux/rk_fb.h +++ b/include/linux/rk_fb.h @@ -188,6 +188,9 @@ enum { HAL_PIXEL_FORMAT_FBDC_U8U8U8U8 = 0x27, /*ARGB888*/ HAL_PIXEL_FORMAT_FBDC_U8U8U8 = 0x28, /*RGBP888*/ HAL_PIXEL_FORMAT_FBDC_RGBA888 = 0x29, /*ABGR888*/ + HAL_PIXEL_FORMAT_BGRX_8888 = 0x30, + HAL_PIXEL_FORMAT_BGR_888 = 0x31, + HAL_PIXEL_FORMAT_BGR_565 = 0x32, HAL_PIXEL_FORMAT_YCrCb_NV12_BT709 = BT709(HAL_PIXEL_FORMAT_YCrCb_NV12), @@ -222,6 +225,7 @@ enum data_format { XRGB888, XBGR888, ABGR888, + BGR565, FBDC_RGB_565, FBDC_ARGB_888, FBDC_RGBX_888,