ge2d: add support for nv16 [1/1]
authorJian Cao <jian.cao@amlogic.com>
Thu, 3 Jan 2019 12:36:22 +0000 (20:36 +0800)
committerJianxin Pan <jianxin.pan@amlogic.com>
Tue, 15 Jan 2019 10:41:59 +0000 (02:41 -0800)
PD#SWPL-3876

Problem:
add support for nv16

Solution:
add support for nv16

Verify:
verified on g12a-u200

Change-Id: I34c9179ed4fde43b9bd00caa9505ea4c8ee78eb0
Signed-off-by: Jian Cao <jian.cao@amlogic.com>
drivers/amlogic/media/common/ge2d/ge2dgen.c
include/linux/amlogic/media/ge2d/ge2d.h

index 687b2a6..2fa47aa 100644 (file)
@@ -87,6 +87,8 @@ static inline void _set_dst_format(
                unsigned int format_src,
                unsigned int format_dst)
 {
+       unsigned int y_yc_ratio;
+
        src2_dst_data_cfg->dst_format_all = format_dst;
        src2_dst_data_cfg->dst_format = (format_dst >> 8) & 3;
        src2_dst_data_cfg->dst_endian = (format_dst & GE2D_ENDIAN_MASK) >>
@@ -112,6 +114,8 @@ static inline void _set_dst_format(
        } else
                dp_gen_cfg->conv_matrix_en = 0;
 
+       y_yc_ratio = (format_dst >> 0) & 1;
+
        /* #if MESON_CPU_TYPE >= MESON_CPU_TYPE_MESON6 */
        /* for dest is nv21 or nv12 in m6. */
        if ((format_dst & GE2D_FORMAT_YUV) &&
@@ -119,7 +123,10 @@ static inline void _set_dst_format(
                src2_dst_data_cfg->dst_format = 0;
                src2_dst_data_cfg->dst_mode_8b_sel = 0;
                src2_dst_data_cfg->dst2_pixel_byte_width = 1;
-               src2_dst_data_cfg->dst2_discard_mode = 0xf;
+               if (y_yc_ratio == 0)
+                       src2_dst_data_cfg->dst2_discard_mode = 0xc;
+               else
+                       src2_dst_data_cfg->dst2_discard_mode = 0xf;
                src2_dst_data_cfg->dst2_enable = 1;
                src2_dst_data_cfg->dst2_color_map =
                        src2_dst_data_cfg->dst_color_map - 5;
index dbd935a..f0f6d31 100644 (file)
 #define GE2D_FMT_M24_YUV420B   0x2001f /* 00_00_0_11_1_11 */
 
 #define GE2D_FMT_M24_YUV420SP          0x20207
+#define GE2D_FMT_M24_YUV422SP           0x20206
 /* 01_00_0_00_1_11 nv12 &nv21, only works on m6. */
 #define GE2D_FMT_M24_YUV420SPT         0x20217
 /* 01_00_0_00_1_11 nv12 &nv21, only works on m6. */
 #define GE2D_FORMAT_M24_RGB         GE2D_FMT_M24_RGB
 #define GE2D_FORMAT_M24_YUV420T     GE2D_FMT_M24_YUV420T
 #define GE2D_FORMAT_M24_YUV420B     GE2D_FMT_M24_YUV420B
+#define GE2D_FORMAT_M24_YUV422SP (GE2D_FMT_M24_YUV422SP | GE2D_COLOR_MAP_NV12)
 #define GE2D_FORMAT_S16_YUV422T (GE2D_FMT_S16_YUV422T | GE2D_COLOR_MAP_YUV422)
 #define GE2D_FORMAT_S16_YUV422B (GE2D_FMT_S16_YUV422B | GE2D_COLOR_MAP_YUV422)
 #define GE2D_FORMAT_S24_YUV444T (GE2D_FMT_S24_YUV444T | GE2D_COLOR_MAP_YUV444)