Эх сурвалжийг харах

msm: camera: isp: Add new WM port for SFE880

Add output port - HDR_STATS for SFE880 and update all mappings
associated with the port.

CRs-Fixed: 3175256
Change-Id: I1a856f3c705d651a486e0aba5a77ca73f0deb5a5
Signed-off-by: sokchetra eung <[email protected]>
sokchetra eung 3 жил өмнө
parent
commit
323d00e1c1

+ 1 - 0
drivers/cam_isp/cam_isp_context.c

@@ -1056,6 +1056,7 @@ static char *__cam_isp_ife_sfe_resource_handle_id_to_type(
 	case CAM_ISP_SFE_OUT_BAYER_RS_STATS_0:          return "SFE_RS_STATS_0";
 	case CAM_ISP_SFE_OUT_BAYER_RS_STATS_0:          return "SFE_RS_STATS_0";
 	case CAM_ISP_SFE_OUT_BAYER_RS_STATS_1:          return "SFE_RS_STATS_1";
 	case CAM_ISP_SFE_OUT_BAYER_RS_STATS_1:          return "SFE_RS_STATS_1";
 	case CAM_ISP_SFE_OUT_BAYER_RS_STATS_2:          return "SFE_RS_STATS_2";
 	case CAM_ISP_SFE_OUT_BAYER_RS_STATS_2:          return "SFE_RS_STATS_2";
+	case CAM_ISP_SFE_OUT_HDR_STATS:                 return "HDR_STATS";
 	/* SFE input ports */
 	/* SFE input ports */
 	case CAM_ISP_SFE_IN_RD_0:                       return "SFE_RD_0";
 	case CAM_ISP_SFE_IN_RD_0:                       return "SFE_RD_0";
 	case CAM_ISP_SFE_IN_RD_1:                       return "SFE_RD_1";
 	case CAM_ISP_SFE_IN_RD_1:                       return "SFE_RD_1";

+ 21 - 1
drivers/cam_isp/isp_hw_mgr/isp_hw/sfe_hw/sfe_bus/cam_sfe_bus_wr.c

@@ -241,6 +241,7 @@ static bool cam_sfe_bus_can_be_secure(uint32_t out_type)
 	case CAM_SFE_BUS_SFE_OUT_BAYER_RS_0:
 	case CAM_SFE_BUS_SFE_OUT_BAYER_RS_0:
 	case CAM_SFE_BUS_SFE_OUT_BAYER_RS_1:
 	case CAM_SFE_BUS_SFE_OUT_BAYER_RS_1:
 	case CAM_SFE_BUS_SFE_OUT_BAYER_RS_2:
 	case CAM_SFE_BUS_SFE_OUT_BAYER_RS_2:
+	case CAM_SFE_BUS_SFE_OUT_HDR_STATS:
 	default:
 	default:
 		return false;
 		return false;
 	}
 	}
@@ -284,6 +285,8 @@ static enum cam_sfe_bus_sfe_out_type
 		return CAM_SFE_BUS_SFE_OUT_BAYER_RS_1;
 		return CAM_SFE_BUS_SFE_OUT_BAYER_RS_1;
 	case CAM_ISP_SFE_OUT_BAYER_RS_STATS_2:
 	case CAM_ISP_SFE_OUT_BAYER_RS_STATS_2:
 		return CAM_SFE_BUS_SFE_OUT_BAYER_RS_2;
 		return CAM_SFE_BUS_SFE_OUT_BAYER_RS_2;
+	case CAM_ISP_SFE_OUT_HDR_STATS:
+		return CAM_SFE_BUS_SFE_OUT_HDR_STATS;
 	default:
 	default:
 		return CAM_SFE_BUS_SFE_OUT_MAX;
 		return CAM_SFE_BUS_SFE_OUT_MAX;
 	}
 	}
@@ -345,6 +348,9 @@ static int cam_sfe_bus_get_comp_sfe_out_res_id_list(
 	if (comp_mask & (BIT(CAM_SFE_BUS_SFE_OUT_BAYER_RS_2)))
 	if (comp_mask & (BIT(CAM_SFE_BUS_SFE_OUT_BAYER_RS_2)))
 		out_list[count++] = CAM_ISP_SFE_OUT_BAYER_RS_STATS_2;
 		out_list[count++] = CAM_ISP_SFE_OUT_BAYER_RS_STATS_2;
 
 
+	if (comp_mask & (BIT(CAM_SFE_BUS_SFE_OUT_HDR_STATS)))
+		out_list[count++] = CAM_ISP_SFE_OUT_HDR_STATS;
+
 	*num_out = count;
 	*num_out = count;
 	return 0;
 	return 0;
 }
 }
@@ -789,7 +795,6 @@ static int cam_sfe_bus_acquire_wm(
 		rsrc_data->height = 0;
 		rsrc_data->height = 0;
 		rsrc_data->stride = 1;
 		rsrc_data->stride = 1;
 		rsrc_data->en_cfg = (0x1 << 16) | 0x1;
 		rsrc_data->en_cfg = (0x1 << 16) | 0x1;
-
 	} else if (sfe_out_res_id == CAM_SFE_BUS_SFE_OUT_LCR) {
 	} else if (sfe_out_res_id == CAM_SFE_BUS_SFE_OUT_LCR) {
 		switch (rsrc_data->format) {
 		switch (rsrc_data->format) {
 		case CAM_FORMAT_PLAIN16_10:
 		case CAM_FORMAT_PLAIN16_10:
@@ -807,6 +812,21 @@ static int cam_sfe_bus_acquire_wm(
 				rsrc_data->format, sfe_out_res_id);
 				rsrc_data->format, sfe_out_res_id);
 			return -EINVAL;
 			return -EINVAL;
 		}
 		}
+	} else if (sfe_out_res_id == CAM_SFE_BUS_SFE_OUT_HDR_STATS) {
+		rsrc_data->en_cfg = 0x1;
+		rsrc_data->stride = rsrc_data->width;
+		switch (rsrc_data->format) {
+		case CAM_FORMAT_PLAIN16_10:
+		case CAM_FORMAT_PLAIN16_12:
+		case CAM_FORMAT_PLAIN16_14:
+		case CAM_FORMAT_PLAIN16_16:
+			/* LSB aligned */
+			rsrc_data->pack_fmt |=
+				(1 << bus_priv->common_data.pack_align_shift);
+			break;
+		default:
+			break;
+		}
 	} else {
 	} else {
 		CAM_ERR(CAM_SFE, "Invalid out_type:%d requested",
 		CAM_ERR(CAM_SFE, "Invalid out_type:%d requested",
 			sfe_out_res_id);
 			sfe_out_res_id);

+ 5 - 3
drivers/cam_isp/isp_hw_mgr/isp_hw/sfe_hw/sfe_bus/cam_sfe_bus_wr.h

@@ -10,9 +10,9 @@
 
 
 #include "cam_sfe_bus.h"
 #include "cam_sfe_bus.h"
 
 
-#define CAM_SFE_BUS_WR_MAX_CLIENTS     16
-#define CAM_SFE_BUS_WR_MAX_SUB_GRPS    6
-#define CAM_SFE_BUS_CONS_ERR_MAX       32
+#define CAM_SFE_BUS_WR_MAX_CLIENTS        17
+#define CAM_SFE_BUS_WR_MAX_SUB_GRPS       6
+#define CAM_SFE_BUS_CONS_ERR_MAX          32
 
 
 enum cam_sfe_bus_wr_src_grp {
 enum cam_sfe_bus_wr_src_grp {
 	CAM_SFE_BUS_WR_SRC_GRP_0,
 	CAM_SFE_BUS_WR_SRC_GRP_0,
@@ -35,6 +35,7 @@ enum cam_sfe_bus_wr_comp_grp_type {
 	CAM_SFE_BUS_WR_COMP_GRP_7,
 	CAM_SFE_BUS_WR_COMP_GRP_7,
 	CAM_SFE_BUS_WR_COMP_GRP_8,
 	CAM_SFE_BUS_WR_COMP_GRP_8,
 	CAM_SFE_BUS_WR_COMP_GRP_9,
 	CAM_SFE_BUS_WR_COMP_GRP_9,
+	CAM_SFE_BUS_WR_COMP_GRP_10,
 	CAM_SFE_BUS_WR_COMP_GRP_MAX,
 	CAM_SFE_BUS_WR_COMP_GRP_MAX,
 };
 };
 
 
@@ -56,6 +57,7 @@ enum cam_sfe_bus_sfe_out_type {
 	CAM_SFE_BUS_SFE_OUT_BAYER_RS_1,
 	CAM_SFE_BUS_SFE_OUT_BAYER_RS_1,
 	CAM_SFE_BUS_SFE_OUT_BAYER_RS_2,
 	CAM_SFE_BUS_SFE_OUT_BAYER_RS_2,
 	CAM_SFE_BUS_SFE_OUT_IR,
 	CAM_SFE_BUS_SFE_OUT_IR,
+	CAM_SFE_BUS_SFE_OUT_HDR_STATS,
 	CAM_SFE_BUS_SFE_OUT_MAX,
 	CAM_SFE_BUS_SFE_OUT_MAX,
 };
 };
 
 

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

@@ -27,6 +27,7 @@
 #define CAM_ISP_SFE_OUT_BAYER_RS_STATS_0      (CAM_ISP_SFE_OUT_RES_BASE + 14)
 #define CAM_ISP_SFE_OUT_BAYER_RS_STATS_0      (CAM_ISP_SFE_OUT_RES_BASE + 14)
 #define CAM_ISP_SFE_OUT_BAYER_RS_STATS_1      (CAM_ISP_SFE_OUT_RES_BASE + 15)
 #define CAM_ISP_SFE_OUT_BAYER_RS_STATS_1      (CAM_ISP_SFE_OUT_RES_BASE + 15)
 #define CAM_ISP_SFE_OUT_BAYER_RS_STATS_2      (CAM_ISP_SFE_OUT_RES_BASE + 16)
 #define CAM_ISP_SFE_OUT_BAYER_RS_STATS_2      (CAM_ISP_SFE_OUT_RES_BASE + 16)
+#define CAM_ISP_SFE_OUT_HDR_STATS             (CAM_ISP_SFE_OUT_RES_BASE + 17)
 
 
 /* This Macro is deprecated and shall not be used */
 /* This Macro is deprecated and shall not be used */
 #define CAM_ISP_SFE_OUT_RES_MAX               (CAM_ISP_SFE_OUT_RES_BASE + 17)
 #define CAM_ISP_SFE_OUT_RES_MAX               (CAM_ISP_SFE_OUT_RES_BASE + 17)