rk29-ipp:add store_clip_mode in struct rk29_ipp_req
authorchenli <chenli@rockchip.com>
Thu, 4 Aug 2011 03:56:07 +0000 (11:56 +0800)
committerchenli <chenli@rockchip.com>
Thu, 4 Aug 2011 04:04:53 +0000 (12:04 +0800)
store_clip_mode: 0: when src width is not 64-bits aligned,use dummy data make it 64-bits aligned 1:packed

arch/arm/mach-rk29/include/mach/rk29-ipp.h
drivers/staging/rk29/ipp/rk29-ipp.c

index cb468d66760c3f092dda217aed2090ab1898f88d..36027c802451c1d8570ae6d74ead22595be8410e 100755 (executable)
@@ -20,12 +20,19 @@ struct rk29_ipp_image
 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
@@ -105,6 +112,7 @@ typedef enum
 #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
index b0865cd94a4e711da7d5ef5addbf83ae66689fb4..a9c12c2b0efd08c0d1f7985804980f9aa03aa5f1 100755 (executable)
@@ -249,25 +249,25 @@ int ipp_check_param(const struct rk29_ipp_req *req)
        /*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
@@ -288,7 +288,7 @@ int ipp_check_param(const struct rk29_ipp_req *req)
        //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
@@ -862,12 +862,18 @@ int ipp_blit(const struct rk29_ipp_req *req)
        /*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