struct rk29_ipp_req {\r
struct rk29_ipp_image src0; // source0 image\r
struct rk29_ipp_image dst0; // destination0 image\r
- struct rk29_ipp_image src1; // source1 image\r
- struct rk29_ipp_image dst1; // destination1 image\r
+ //struct rk29_ipp_image src1; // source1 image\r
+ //struct rk29_ipp_image dst1; // destination1 image\r
uint32_t src_vir_w;\r
uint32_t dst_vir_w;\r
uint32_t timeout;\r
+ \r
uint32_t flag; //rotate\r
+\r
+ /*store_clip_mode \r
+ 0:when src width is not 64-bits aligned,use dummy data make it 64-bits aligned 1:packed\r
+ we usually set to 0\r
+ */\r
+ uint8_t store_clip_mode;\r
\r
//deinterlace_enable 1:enable 0:disable\r
uint8_t deinterlace_enable;\r
#define IPP_PROCESS_ST (0x50)\r
\r
/*ipp config*/\r
+#define STORE_CLIP_MODE (1<<26)\r
#define DEINTERLACE_ENABLE (1<<24)\r
#define ROT_ENABLE (1<<8)\r
#define PRE_SCALE (1<<4)\r
/*IPP can support up to 8191*8191 resolution in RGB format,but we limit the image size to 8190*8190 here*/\r
//check src width and height\r
if (unlikely((req->src0.w <16) || (req->src0.w > 8190) || (req->src0.h < 16) || (req->src0.h > 8190))) {\r
- ERR("invalid source resolution\n");\r
+ printk("ipp invalid source resolution\n");\r
return -EINVAL;\r
}\r
\r
//check dst width and height\r
if (unlikely((req->dst0.w <16) || (req->dst0.w > 2047) || (req->dst0.h < 16) || (req->dst0.h > 2047))) {\r
- ERR("invalid destination resolution\n");\r
+ printk("ipp invalid destination resolution\n");\r
return -EINVAL;\r
}\r
\r
//check src_vir_w\r
if(unlikely(req->src_vir_w < req->src0.w)){\r
- ERR("invalid src_vir_w\n");\r
+ printk("ipp invalid src_vir_w\n");\r
return -EINVAL;\r
}\r
\r
//check dst_vir_w\r
if(unlikely(req->dst_vir_w < req->dst0.w)){\r
- ERR("invalid dst_vir_w\n");\r
+ printk("ipp invalid dst_vir_w\n");\r
return -EINVAL;\r
}\r
\r
//check rotate degree\r
if(req->flag >= IPP_ROT_LIMIT)\r
{\r
- ERR("rk29_ipp is not surpport rot degree!!!!\n");\r
+ printk("rk29_ipp does not surpport rot degree!!!!\n");\r
return -EINVAL;\r
}\r
return 0;\r
/*Configure other*/\r
ipp_write((req->dst_vir_w<<16)|req->src_vir_w, IPP_IMG_VIR);\r
\r
- //store clip mode always set to 1 now\r
- ipp_write(ipp_read(IPP_CONFIG)|(1<<26), IPP_CONFIG);//store clip mode\r
- \r
+ //store clip mode \r
+ if(req->store_clip_mode == 1)\r
+ {\r
+ ipp_write(ipp_read(IPP_CONFIG)|STORE_CLIP_MODE, IPP_CONFIG);\r
+ }\r
+ else\r
+ {\r
+ ipp_write(ipp_read(IPP_CONFIG)&(~STORE_CLIP_MODE), IPP_CONFIG);\r
+ }\r
+ \r
/* Start the operation */\r
- ipp_write(8, IPP_INT);//\r
- \r
+ ipp_write(8, IPP_INT);// \r
dsb();\r
ipp_write(1, IPP_PROCESS_ST);\r
\r