vidc: 720p: Add IDR Frame type support for H264 format

Read IDR frame type from 720p core register set and
propagate it to user space using new IDR frame type
enumeration added in api header file. The IDR frame
type info is used in SYNCFRAME logic for H264 format
in userspace.

CRs-Fixed: 296738
Signed-off-by: Maheshwar Ajja <majja@codeaurora.org>
diff --git a/drivers/video/msm/vidc/720p/ddl/vcd_ddl_interrupt_handler.c b/drivers/video/msm/vidc/720p/ddl/vcd_ddl_interrupt_handler.c
index ef5b717..ece4c30 100644
--- a/drivers/video/msm/vidc/720p/ddl/vcd_ddl_interrupt_handler.c
+++ b/drivers/video/msm/vidc/720p/ddl/vcd_ddl_interrupt_handler.c
@@ -847,6 +847,12 @@
 			frame->data_len = 0;
 			break;
 		}
+	case VIDC_720P_IDRFRAME:
+		{
+			frame->flags |= VCD_FRAME_FLAG_SYNCFRAME;
+			frame->frame = VCD_FRAME_IDR;
+			break;
+		}
 	default:
 		{
 			VIDC_LOG_STRING("CRITICAL-FRAMETYPE");
diff --git a/drivers/video/msm/vidc/720p/ddl/vidc.c b/drivers/video/msm/vidc/720p/ddl/vidc.c
index 8e7abc4..0f5932a 100644
--- a/drivers/video/msm/vidc/720p/ddl/vidc.c
+++ b/drivers/video/msm/vidc/720p/ddl/vidc.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
+/* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -762,7 +762,10 @@
 	disp_info->input_is_interlace =
 	    ((disp_info->input_frame & 0x4) >> 2);
 
-	disp_info->input_frame &= 0x3;
+	if (disp_info->input_frame & 0x10)
+		disp_info->input_frame = VIDC_720P_IDRFRAME;
+	else
+		disp_info->input_frame &= 0x3;
 }
 
 void vidc_720p_decode_skip_frm_details(u32 *free_luma_dpb)
diff --git a/drivers/video/msm/vidc/720p/ddl/vidc.h b/drivers/video/msm/vidc/720p/ddl/vidc.h
index 685b7cc..509482b 100644
--- a/drivers/video/msm/vidc/720p/ddl/vidc.h
+++ b/drivers/video/msm/vidc/720p/ddl/vidc.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
+/* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -1974,7 +1974,7 @@
 	(VIDC_720P_WRAPPER_REG_BASE      + 0x00000ebc)
 #define VIDC_REG_441270_PHYS                    \
 	(VIDC_720P_WRAPPER_REG_BASE_PHYS + 0x00000ebc)
-#define VIDC_REG_441270_RMSK                           0xf
+#define VIDC_REG_441270_RMSK                          0x1f
 #define VIDC_REG_441270_SHFT                             0
 #define VIDC_REG_441270_IN                      \
 	in_dword_masked(VIDC_REG_441270_ADDR,  \
@@ -1984,7 +1984,7 @@
 #define VIDC_REG_441270_DATA_PARTITIONED_BMSK 0x8
 #define VIDC_REG_441270_DATA_PARTITIONED_SHFT 0x3
 
-#define VIDC_REG_441270_FRAME_TYPE_BMSK                0x7
+#define VIDC_REG_441270_FRAME_TYPE_BMSK               0x17
 #define VIDC_REG_441270_FRAME_TYPE_SHFT                  0
 
 #define VIDC_REG_724381_ADDR        \
@@ -2284,7 +2284,8 @@
 	VIDC_720P_NOTCODED = 0,
 	VIDC_720P_IFRAME = 1,
 	VIDC_720P_PFRAME = 2,
-	VIDC_720P_BFRAME = 3
+	VIDC_720P_BFRAME = 3,
+	VIDC_720P_IDRFRAME = 4
 };
 
 enum vidc_720p_entropy_sel {
diff --git a/drivers/video/msm/vidc/common/dec/vdec.c b/drivers/video/msm/vidc/common/dec/vdec.c
index 3dc74f1..5d2fe63 100644
--- a/drivers/video/msm/vidc/common/dec/vdec.c
+++ b/drivers/video/msm/vidc/common/dec/vdec.c
@@ -316,6 +316,9 @@
 		case VCD_FRAME_NOTCODED:
 			pic_type = PICTURE_TYPE_SKIP;
 			break;
+		case VCD_FRAME_IDR:
+			pic_type = PICTURE_TYPE_IDR;
+			break;
 		default:
 			pic_type = PICTURE_TYPE_UNKNOWN;
 		}
diff --git a/drivers/video/msm/vidc/common/vcd/vcd_api.h b/drivers/video/msm/vidc/common/vcd/vcd_api.h
index 38ea202..b482fdd 100644
--- a/drivers/video/msm/vidc/common/vcd/vcd_api.h
+++ b/drivers/video/msm/vidc/common/vcd/vcd_api.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
+/* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -42,6 +42,7 @@
 	VCD_FRAME_P,
 	VCD_FRAME_B,
 	VCD_FRAME_NOTCODED,
+	VCD_FRAME_IDR,
 	VCD_FRAME_32BIT = 0x7fffffff
 };
 
diff --git a/include/linux/msm_vidc_dec.h b/include/linux/msm_vidc_dec.h
index 748c590..768fb3b 100644
--- a/include/linux/msm_vidc_dec.h
+++ b/include/linux/msm_vidc_dec.h
@@ -204,6 +204,7 @@
 	PICTURE_TYPE_B,
 	PICTURE_TYPE_BI,
 	PICTURE_TYPE_SKIP,
+	PICTURE_TYPE_IDR,
 	PICTURE_TYPE_UNKNOWN
 };