rk3288: fix encoding bug
authorljf <ljf@rock-chips.com>
Thu, 27 Mar 2014 07:30:21 +0000 (15:30 +0800)
committerljf <ljf@rock-chips.com>
Thu, 27 Mar 2014 07:30:21 +0000 (15:30 +0800)
arch/arm/mach-rockchip/vcodec_service.c

index ba109dbfe5f3b45bbd1bce82fb7664aac7c17e31..005ad7359c9c8500484f2ef21ae1cf6c86eb2281 100755 (executable)
@@ -184,6 +184,18 @@ static VPU_HW_INFO_E vpu_hw_set[] = {
 #define VPU_REG_DEC_PP_GATE                    61\r
 #define VPU_REG_DEC_PP_GATE_BIT                (1<<8)\r
 \r
+static u8 addr_tbl_vpu_dec[] = {\r
+       12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 41\r
+};\r
+\r
+static u8 addr_tbl_vpu_enc[] = {\r
+       5, 6, 7, 8, 9, 10, 11, 12, 13, 51\r
+};\r
+\r
+static u8 addr_tbl_hevc_dec[] = {\r
+    4, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 42, 43\r
+};\r
+\r
 /**\r
  * struct for process session which connect to vpu\r
  *\r
@@ -631,18 +643,6 @@ err_buf_map_attach:
        return 0;\r
 }\r
 \r
-static u8 table_vpu_dec[] = {\r
-       12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 41\r
-};\r
-\r
-static u8 table_vpu_enc[] = {\r
-       5, 6, 7, 8, 9, 10, 11, 12, 13, 51\r
-};\r
-\r
-static u8 table_hevc_dec[1] = {\r
-\r
-};\r
-\r
 static int vcodec_reg_address_translate(struct vpu_service_info *pservice, vpu_reg *reg)\r
 {\r
        VPU_HW_ID hw_id;\r
@@ -654,7 +654,7 @@ static int vcodec_reg_address_translate(struct vpu_service_info *pservice, vpu_r
 \r
     } else {\r
         if (reg->type == VPU_DEC) {\r
-            for (i=0; i<sizeof(table_vpu_dec); i++) {\r
+            for (i=0; i<sizeof(addr_tbl_vpu_dec); i++) {\r
                                int usr_fd;\r
                                struct ion_handle *hdl;\r
                                //ion_phys_addr_t phy_addr;\r
@@ -663,11 +663,11 @@ static int vcodec_reg_address_translate(struct vpu_service_info *pservice, vpu_r
                                int offset;\r
 \r
 #if 0\r
-                               if (copy_from_user(&usr_fd, &reg->reg[table_vpu_dec[i]], sizeof(usr_fd)))\r
+                               if (copy_from_user(&usr_fd, &reg->reg[addr_tbl_vpu_dec[i]], sizeof(usr_fd)))\r
                                        return -EFAULT;\r
 #else\r
-                               usr_fd = reg->reg[table_vpu_dec[i]] & 0xFF;\r
-                               offset = reg->reg[table_vpu_dec[i]] >> 8;\r
+                               usr_fd = reg->reg[addr_tbl_vpu_dec[i]] & 0xFF;\r
+                               offset = reg->reg[addr_tbl_vpu_dec[i]] >> 8;\r
 #endif\r
                 if (usr_fd != 0) {\r
 \r
@@ -680,7 +680,7 @@ static int vcodec_reg_address_translate(struct vpu_service_info *pservice, vpu_r
 #if 0\r
                                        ion_phys(pservice->ion_client, hdl, &phy_addr, &len);\r
 \r
-                                       reg->reg[table_vpu_dec[i]] = phy_addr + offset;\r
+                                       reg->reg[addr_tbl_vpu_dec[i]] = phy_addr + offset;\r
                     \r
                     ion_free(pservice->ion_client, hdl);\r
 #else \r
@@ -691,7 +691,7 @@ static int vcodec_reg_address_translate(struct vpu_service_info *pservice, vpu_r
                         return PTR_ERR(buf);\r
                     }\r
                     \r
-                    reg->reg[table_vpu_dec[i]] = vcodec_map_ion_handle(pservice, reg, hdl, buf, offset);\r
+                    reg->reg[addr_tbl_vpu_dec[i]] = vcodec_map_ion_handle(pservice, reg, hdl, buf, offset);\r
 #endif\r
                                        \r
                 }\r
@@ -818,7 +818,7 @@ static void reg_copy_from_hw(vpu_reg *reg, volatile u32 *src, u32 count)
        int i;\r
        u32 *dst = (u32 *)&reg->reg[0];\r
        for (i = 0; i < count; i++)\r
-               *dst++ = *src++;\r
+        *dst++ = *src++;\r
 }\r
 \r
 static void reg_from_run_to_done(struct vpu_service_info *pservice, vpu_reg *reg)\r
@@ -983,6 +983,7 @@ static void reg_copy_to_hw(struct vpu_service_info *pservice, vpu_reg *reg)
                } else {\r
                        dst[VPU_REG_EN_DEC] = src[VPU_REG_EN_DEC];\r
                }\r
+\r
         dsb();\r
         dmb();\r
 \r
@@ -1933,12 +1934,14 @@ static irqreturn_t vepu_irq(int irq, void *dev_id)
                (enc_end.tv_sec  - enc_start.tv_sec)  * 1000 +\r
                (enc_end.tv_usec - enc_start.tv_usec) / 1000);\r
 #endif\r
-\r
+    \r
        if (likely(irq_status & ENC_INTERRUPT_BIT)) {\r
                /* clear enc IRQ */\r
                writel(irq_status & (~ENC_INTERRUPT_BIT), dev->hwregs + ENC_INTERRUPT_REGISTER);\r
                atomic_add(1, &dev->irq_count_codec);\r
        }\r
+    \r
+    pservice->irq_status = irq_status;\r
 \r
        return IRQ_WAKE_THREAD;\r
 }\r