video: rockchip: fb: add support data format YUYV and UYVY
authorHuang Jiachai <hjc@rock-chips.com>
Thu, 31 Mar 2016 02:00:07 +0000 (10:00 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Tue, 5 Apr 2016 06:00:32 +0000 (14:00 +0800)
Change-Id: Iaef1a0e6f80e4246cfe6b2692bdb6085ea5355b0
Signed-off-by: Huang Jiachai <hjc@rock-chips.com>
drivers/video/rockchip/rk_fb.c
include/linux/rk_fb.h

index ab794068038955ddc694f2e47dacdad192a0b6c1..94d9f3ac3b2ffe1e2d0633b70f1e7d209211fc61 100644 (file)
@@ -192,6 +192,12 @@ int rk_fb_pixel_width(int data_format)
        case YUV444_A:
                pixel_width = 8;
                break;
+       case YUYV422:
+       case UYVY422:
+       case YUYV420:
+       case UYVY420:
+               pixel_width = 16;
+               break;
        default:
                pr_warn("%s: unsupported format: 0x%x\n",
                        __func__, data_format);
@@ -263,6 +269,18 @@ static int rk_fb_data_fmt(int data_format, int bits_per_pixel)
                case HAL_PIXEL_FORMAT_FBDC_U8U8U8:      /* fbdc rgb888 */
                        fb_data_fmt = FBDC_RGBX_888;
                        break;
+               case HAL_PIXEL_FORMAT_YUYV422:          /* yuyv422 */
+                       fb_data_fmt = YUYV422;
+                       break;
+               case HAL_PIXEL_FORMAT_YUYV420:          /* yuyv420 */
+                       fb_data_fmt = YUYV420;
+                       break;
+               case HAL_PIXEL_FORMAT_UYVY422:          /* uyvy422 */
+                       fb_data_fmt = UYVY422;
+                       break;
+               case HAL_PIXEL_FORMAT_UYVY420:          /* uyvy420 */
+                       fb_data_fmt = UYVY420;
+                       break;
                default:
                        pr_warn("%s: unsupported format: 0x%x\n",
                                __func__, data_format);
@@ -602,6 +620,18 @@ char *get_format_string(enum data_format format, char *fmt)
        case FBDC_RGBX_888:
                strcpy(fmt, "FBDC_RGBX_888");
                break;
+       case YUYV422:
+               strcpy(fmt, "YUYV422");
+               break;
+       case YUYV420:
+               strcpy(fmt, "YUYV420");
+               break;
+       case UYVY422:
+               strcpy(fmt, "UYVY422");
+               break;
+       case UYVY420:
+               strcpy(fmt, "UYVY420");
+               break;
        default:
                strcpy(fmt, "invalid");
                break;
index d01f38b9818842924458ff2112e345d7b0ee59f2..dc28bfd922512d4fce0f90dafb315d72a6480f8c 100755 (executable)
@@ -192,6 +192,11 @@ enum {
        HAL_PIXEL_FORMAT_BGR_888 = 0x31,
        HAL_PIXEL_FORMAT_BGR_565 = 0x32,
 
+       HAL_PIXEL_FORMAT_YUYV422 = 0x33,
+       HAL_PIXEL_FORMAT_YUYV420 = 0x34,
+       HAL_PIXEL_FORMAT_UYVY422 = 0x35,
+       HAL_PIXEL_FORMAT_UYVY420 = 0x36,
+
        HAL_PIXEL_FORMAT_YCrCb_NV12_BT709 =
                        BT709(HAL_PIXEL_FORMAT_YCrCb_NV12),
        HAL_PIXEL_FORMAT_YCrCb_NV12_VIDEO_BT709 =
@@ -237,6 +242,10 @@ enum data_format {
        YUV422_A,
        YUV444_A,
        YUV420_NV21,
+       YUYV422,
+       YUYV420,
+       UYVY422,
+       UYVY420
 };
 #define IS_YUV_FMT(fmt) ((fmt >= YUV420) ? 1 : 0)
 #define IS_RGB_FMT(fmt) ((fmt < YUV420) ? 1 : 0)
@@ -386,6 +395,7 @@ struct rk_lcdc_win_area {
        bool state;
        enum data_format format;
        u8 fmt_cfg;
+       u8 yuyv_fmt;
        u8 swap_rb;
        u8 swap_uv;
        u32 y_offset;           /*yuv/rgb offset  -->LCDC_WINx_YRGB_MSTx*/