{\r
x_flag = 1;\r
#if SCALE_DOWN_LARGE\r
- param_x = ((dw) << 16) / (sw);\r
+ param_x = ((dw) << 16) / (sw) + 1;\r
#else\r
param_x = ((dw) << 16) / (sw);\r
#endif\r
{\r
y_flag = 1;\r
#if SCALE_DOWN_LARGE\r
- param_y = ((dh) << 16) / (sh);\r
+ param_y = ((dh) << 16) / (sh) + 1;\r
#else\r
param_y = ((dh) << 16) / (sh);\r
#endif\r
RK_U32 uv_stride = 0;\r
RK_U32 mask_stride = 0;\r
RK_U32 ydiv = 1, xdiv = 2;\r
+ RK_U8 yuv10 = 0;\r
\r
RK_U32 sw, sh;\r
RK_U32 dw, dh;\r
bRGA_SRC_TR_COLOR0 = (RK_U32 *)(base + RGA2_SRC_TR_COLOR0_OFFSET);\r
bRGA_SRC_TR_COLOR1 = (RK_U32 *)(base + RGA2_SRC_TR_COLOR1_OFFSET);\r
\r
+ if (msg->src.format == RGA2_FORMAT_YCbCr_420_SP_10B ||\r
+ msg->src.format == RGA2_FORMAT_YCrCb_420_SP_10B) {\r
+ if ((msg->src.act_w == msg->dst.act_w) &&\r
+ (msg->src.act_h == msg->dst.act_h) &&\r
+ (msg->rotate_mode == 0))\r
+ msg->rotate_mode = 1 << 6;\r
+ }\r
+\r
{\r
rotate_mode = msg->rotate_mode & 0x3;\r
\r
case RGA2_FORMAT_YCrCb_422_P : src0_format = 0x9; xdiv = 2; ydiv = 1; src0_cbcr_swp = 1; break;\r
case RGA2_FORMAT_YCrCb_420_SP : src0_format = 0xa; xdiv = 1; ydiv = 2; src0_cbcr_swp = 1; break;\r
case RGA2_FORMAT_YCrCb_420_P : src0_format = 0xb; xdiv = 2; ydiv = 2; src0_cbcr_swp = 1; break;\r
+ case RGA2_FORMAT_YCbCr_420_SP_10B : src0_format = 0xa; xdiv = 1; ydiv = 2; yuv10 = 1; break;\r
+ case RGA2_FORMAT_YCrCb_420_SP_10B : src0_format = 0xa; xdiv = 1; ydiv = 2; src0_cbcr_swp = 1; yuv10 = 1; break;\r
};\r
\r
reg = ((reg & (~m_RGA2_SRC_INFO_SW_SRC_FMT)) | (s_RGA2_SRC_INFO_SW_SRC_FMT(src0_format)));\r
reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_SRC_TRANS_E)) | (s_RGA2_SRC_INFO_SW_SW_SRC_TRANS_E(msg->src_trans_mode >> 1)));\r
reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_SRC_DITHER_UP_E)) | (s_RGA2_SRC_INFO_SW_SW_SRC_DITHER_UP_E((msg->alpha_rop_flag >> 4) & 0x1)));\r
reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_VSP_MODE_SEL)) | (s_RGA2_SRC_INFO_SW_SW_VSP_MODE_SEL((msg->scale_bicu_mode>>4))));\r
+ reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_YUV10_E)) | (s_RGA2_SRC_INFO_SW_SW_YUV10_E((yuv10))));\r
+ reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_YUV10_ROUND_E)) | (s_RGA2_SRC_INFO_SW_SW_YUV10_ROUND_E((yuv10))));\r
RGA2_reg_get_param(base, msg);\r
\r
stride = (((msg->src.vir_w * pixel_width) + 3) & ~3) >> 2;\r
-\r
uv_stride = ((msg->src.vir_w / xdiv + 3) & ~3);\r
\r
*bRGA_SRC_BASE0 = (RK_U32)(msg->src.yrgb_addr + msg->src.y_offset * (stride<<2) + msg->src.x_offset * pixel_width);\r
\r
src_stride = (byte_num + 3) & (~3);\r
\r
- p = (RK_U32 *)msg->src.yrgb_addr;\r
+ p = (RK_U32 *)((unsigned long)msg->src.yrgb_addr);\r
\r
#if 0\r
if(endian_mode)\r
case 0xd: *df = RGA2_FORMAT_YCrCb_422_P; break;\r
case 0xe: *df = RGA2_FORMAT_YCrCb_420_SP; break;\r
case 0xf: *df = RGA2_FORMAT_YCrCb_420_P; break;\r
+\r
+ case 0x20:*df = RGA2_FORMAT_YCbCr_420_SP_10B; break;\r
+ case 0x21:*df = RGA2_FORMAT_YCrCb_420_SP_10B; break;\r
}\r
}\r
\r
void RGA_MSG_2_RGA2_MSG(struct rga_req *req_rga, struct rga2_req *req)\r
-{\r
- u16 alpha_mode_0, alpha_mode_1;\r
-\r
+{
+ u16 alpha_mode_0, alpha_mode_1;
+
+ if (req_rga->render_mode & RGA_BUF_GEM_TYPE_MASK)
+ req->buf_type = RGA_BUF_GEM_TYPE_MASK & RGA_BUF_GEM_TYPE_DMA;
+
+ req_rga->render_mode &= (~RGA_BUF_GEM_TYPE_MASK);
+
if (req_rga->render_mode == 6)\r
req->render_mode = update_palette_table_mode;\r
else if (req_rga->render_mode == 7)\r
else if (req_rga->rotate_mode == 2)\r
{\r
//x_mirror\r
- req->rotate_mode = (1 << 4);\r
+ req->rotate_mode |= (1 << 4);\r
}\r
else if (req_rga->rotate_mode == 3)\r
{\r
//y_mirror\r
- req->rotate_mode = (2 << 4);\r
+ req->rotate_mode |= (2 << 4);\r
}\r
else {\r
req->rotate_mode = 0;\r
req->bitblt_mode = req_rga->bsfilter_flag;\r
\r
req->src_a_global_val = req_rga->alpha_global_value;\r
- req->dst_a_global_val = 0;\r
+ req->dst_a_global_val = req_rga->alpha_global_value;\r
req->rop_code = req_rga->rop_code;\r
req->rop_mode = 0;\r
\r
req->alpha_rop_flag |= (((req_rga->alpha_rop_flag >> 5) & 1) << 6); // dst_dither_down\r
req->alpha_rop_flag |= (((req_rga->alpha_rop_flag >> 6) & 1) << 7); // gradient fill mode sel\r
\r
- if(((req_rga->alpha_rop_flag) & 1)) {\r
- if((req_rga->alpha_rop_flag >> 3) & 1) {\r
+ if (((req_rga->alpha_rop_flag) & 1)) {\r
+ if ((req_rga->alpha_rop_flag >> 3) & 1) {\r
/* porter duff alpha enable */\r
- switch(req_rga->PD_mode)\r
+ switch (req_rga->PD_mode)\r
{\r
case 0: //dst = 0\r
break;\r
break;\r
case 11://dst = ((256-da)*sc + (256-sa)*dc) >> 8;\r
break;\r
+ case 12:\r
+ req->alpha_mode_0 = 0x0010;\r
+ req->alpha_mode_1 = 0x0820;\r
+ break;\r
default:\r
break;\r
}\r
dst->alpha_swap = src->alpha_swap;\r
}\r
void RGA_MSG_2_RGA2_MSG_32(struct rga_req_32 *req_rga, struct rga2_req *req)\r
-{\r
- u16 alpha_mode_0, alpha_mode_1;\r
+{
+ u16 alpha_mode_0, alpha_mode_1;
+
+ if (req_rga->render_mode & RGA_BUF_GEM_TYPE_MASK)
+ req->buf_type = RGA_BUF_GEM_TYPE_MASK & RGA_BUF_GEM_TYPE_DMA;
+
+ req_rga->render_mode &= (~RGA_BUF_GEM_TYPE_MASK);
+
if (req_rga->render_mode == 6)\r
req->render_mode = update_palette_table_mode;\r
else if (req_rga->render_mode == 7)\r
req->rop_mask_addr = req_rga->rop_mask_addr;\r
req->bitblt_mode = req_rga->bsfilter_flag;\r
req->src_a_global_val = req_rga->alpha_global_value;\r
- req->dst_a_global_val = 0;\r
+ req->dst_a_global_val = req_rga->alpha_global_value;\r
req->rop_code = req_rga->rop_code;\r
req->rop_mode = 0;\r
req->color_fill_mode = req_rga->color_fill_mode;\r
break;\r
case 11://dst = ((256-da)*sc + (256-sa)*dc) >> 8;\r
break;\r
+ case 12:\r
+ req->alpha_mode_0 = 0x0010;\r
+ req->alpha_mode_1 = 0x0820;\r
+ break;\r
default:\r
break;\r
}\r