Procházet zdrojové kódy

msm: camera: isp: Add support of PDAF parsed outport

Add support of new PDAF Parsed data outport for VFE 780.

CRs-Fixed: 2948116
Change-Id: Icd88e3947f6c1461c49ef6912985836931a1c62b
Signed-off-by: Chandan Kumar Jha <[email protected]>
Chandan Kumar Jha před 3 roky
rodič
revize
738df632cc

+ 1 - 0
drivers/cam_isp/cam_isp_context.c

@@ -740,6 +740,7 @@ static char *__cam_isp_ife_sfe_resource_handle_id_to_type(
 	case CAM_ISP_IFE_OUT_RES_SPARSE_PD:             return "IFE_SPARSE_PD";
 	case CAM_ISP_IFE_OUT_RES_STATS_CAF:             return "IFE_STATS_CAF";
 	case CAM_ISP_IFE_OUT_RES_STATS_BAYER_RS:        return "IFE_STATS_BAYER_RS";
+	case CAM_ISP_IFE_OUT_RES_PDAF_PARSED_DATA:      return "IFE_PDAF_PARSED_DATA";
 	/* SFE output ports */
 	case CAM_ISP_SFE_OUT_RES_RDI_0:                 return "SFE_RDI_0";
 	case CAM_ISP_SFE_OUT_RES_RDI_1:                 return "SFE_RDI_1";

+ 6 - 6
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe17x/cam_vfe780.h

@@ -375,7 +375,7 @@ static struct cam_vfe_top_ver4_wr_client_desc vfe780_wr_client_desc[] = {
 	},
 	{
 		.wm_id = 22,
-		.desc = "PDAF_2_LCR",
+		.desc = "PDAF_2_PARSED_DATA",
 	},
 	{
 		.wm_id = 23,
@@ -811,7 +811,7 @@ static struct cam_vfe_top_ver4_hw_info vfe780_top_hw_info = {
 	.path_port_map = {
 		{CAM_ISP_HW_VFE_IN_PDLIB, CAM_ISP_IFE_OUT_RES_2PD},
 		{CAM_ISP_HW_VFE_IN_PDLIB, CAM_ISP_IFE_OUT_RES_PREPROCESS_2PD},
-		{CAM_ISP_HW_VFE_IN_PDLIB, CAM_ISP_IFE_OUT_RES_LCR}
+		{CAM_ISP_HW_VFE_IN_PDLIB, CAM_ISP_IFE_OUT_RES_PDAF_PARSED_DATA},
 	},
 	.num_top_errors                  = ARRAY_SIZE(vfe780_top_irq_err_desc),
 	.top_err_desc                    = vfe780_top_irq_err_desc,
@@ -1563,7 +1563,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe780_bus_hw_info = {
 			.comp_group               = CAM_VFE_BUS_VER3_COMP_GRP_11,
 			.ubwc_regs                = NULL,
 		},
-		/* BUS Client 22 PDAF V2.0 PDAF_2_LCR */
+		/* BUS Client 22 PDAF V2.0 PDAF_2_PARSED_DATA */
 		{
 			.cfg                      = 0x00002400,
 			.image_addr               = 0x00002404,
@@ -2024,7 +2024,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe780_bus_hw_info = {
 			},
 		},
 		{
-			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_LCR,
+			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_PDAF_PARSED,
 			.max_width     = -1,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_1,
@@ -2035,7 +2035,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe780_bus_hw_info = {
 				22,
 			},
 			.name          = {
-				"PDAF_2_LCR",
+				"PDAF_2_PARSED_DATA",
 			},
 		},
 		{
@@ -2207,7 +2207,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe780_bus_hw_info = {
 	.support_consumed_addr = true,
 	.comp_done_shift = 0,
 	.top_irq_shift   = 0,
-	.max_out_res = CAM_ISP_IFE_OUT_RES_BASE + 35,
+	.max_out_res = CAM_ISP_IFE_OUT_RES_BASE + 36,
 	.pack_align_shift = 5,
 };
 

+ 22 - 0
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe_bus/cam_vfe_bus_ver3.c

@@ -431,6 +431,9 @@ static enum cam_vfe_bus_ver3_vfe_out_type
 	case CAM_ISP_IFE_OUT_RES_STATS_BAYER_RS:
 		vfe_out_type = CAM_VFE_BUS_VER3_VFE_OUT_STATS_BAYER_RS;
 		break;
+	case CAM_ISP_IFE_OUT_RES_PDAF_PARSED_DATA:
+		vfe_out_type = CAM_VFE_BUS_VER3_VFE_OUT_PDAF_PARSED;
+		break;
 	default:
 		CAM_WARN(CAM_ISP, "Invalid isp res id: %d , assigning max",
 			res_type);
@@ -550,6 +553,9 @@ static int cam_vfe_bus_ver3_get_comp_vfe_out_res_id_list(
 	if (comp_mask & (BIT_ULL(CAM_VFE_BUS_VER3_VFE_OUT_STATS_BAYER_RS)))
 		out_list[count++] = CAM_ISP_IFE_OUT_RES_STATS_BAYER_RS;
 
+	if (comp_mask & (BIT_ULL(CAM_VFE_BUS_VER3_VFE_OUT_PDAF_PARSED)))
+		out_list[count++] = CAM_VFE_BUS_VER3_VFE_OUT_PDAF_PARSED;
+
 	*num_out = count;
 	return 0;
 }
@@ -1267,6 +1273,22 @@ static int cam_vfe_bus_ver3_acquire_wm(
 			return -EINVAL;
 		}
 
+	} else if (vfe_out_res_id == CAM_VFE_BUS_VER3_VFE_OUT_PDAF_PARSED) {
+		switch (rsrc_data->format) {
+		case CAM_FORMAT_PLAIN16_16:
+			rsrc_data->stride = ALIGNUP(rsrc_data->width * 2, 8);
+			rsrc_data->en_cfg = 0x1;
+			/* LSB aligned */
+			rsrc_data->pack_fmt |= (1 <<
+				ver3_bus_priv->common_data.pack_align_shift);
+
+			break;
+		default:
+			CAM_ERR(CAM_ISP, "Invalid format %d out_type:%d",
+				rsrc_data->format, vfe_out_res_id);
+			return -EINVAL;
+		}
+
 	} else {
 		CAM_ERR(CAM_ISP, "Invalid out_type:%d requested",
 			vfe_out_res_id);

+ 1 - 0
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe_bus/cam_vfe_bus_ver3.h

@@ -87,6 +87,7 @@ enum cam_vfe_bus_ver3_vfe_out_type {
 	CAM_VFE_BUS_VER3_VFE_OUT_PREPROCESS_RAW,
 	CAM_VFE_BUS_VER3_VFE_OUT_STATS_CAF,
 	CAM_VFE_BUS_VER3_VFE_OUT_STATS_BAYER_RS,
+	CAM_VFE_BUS_VER3_VFE_OUT_PDAF_PARSED,
 	CAM_VFE_BUS_VER3_VFE_OUT_MAX,
 };
 

+ 1 - 0
include/uapi/camera/media/cam_isp_ife.h

@@ -44,6 +44,7 @@
 #define CAM_ISP_IFE_LITE_OUT_RES_PREPROCESS_RAW  (CAM_ISP_IFE_OUT_RES_BASE + 32)
 #define CAM_ISP_IFE_OUT_RES_STATS_CAF            (CAM_ISP_IFE_OUT_RES_BASE + 33)
 #define CAM_ISP_IFE_OUT_RES_STATS_BAYER_RS       (CAM_ISP_IFE_OUT_RES_BASE + 34)
+#define CAM_ISP_IFE_OUT_RES_PDAF_PARSED_DATA     (CAM_ISP_IFE_OUT_RES_BASE + 35)
 
 /* IFE input port resource type (global unique) */
 #define CAM_ISP_IFE_IN_RES_BASE                 0x4000