Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 193d78cd authored by Junzhe Zou's avatar Junzhe Zou Committed by Gerrit - the friendly Code Review server
Browse files

msm: cam: isp: add kernel HFR support



Update the VFE Bus to take HFR config from UMD IO buffer
configuration and calculate buffer address increment for
each frame in batch then parse to CDM.

CRs-fixed: 2049206
Change-Id: Ifd0142b1585dddb83979346a62954663234f040a
Signed-off-by: default avatarJunzhe Zou <jnzhezou@codeaurora.org>
parent 263a87d0
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -28,7 +28,8 @@

#define FRAME_BASED_EN 0

#define MAX_BUF_UPDATE_REG_NUM   20
#define MAX_BUF_UPDATE_REG_NUM   \
	(sizeof(struct cam_vfe_bus_ver2_reg_offset_bus_client)/4)
#define MAX_REG_VAL_PAIR_SIZE    \
		(MAX_BUF_UPDATE_REG_NUM * 2 * CAM_PACKET_MAX_PLANES)

@@ -1643,6 +1644,7 @@ static int cam_vfe_bus_update_buf(void *priv, void *cmd_args,
	struct cam_vfe_bus_ver2_wm_resource_data *wm_data = NULL;
	uint32_t *reg_val_pair;
	uint32_t  i, j, size = 0;
	uint32_t  frame_inc = 0;

	/*
	 * Need the entire buf io config so we can get the stride info
@@ -1663,13 +1665,19 @@ static int cam_vfe_bus_update_buf(void *priv, void *cmd_args,
	if (update_buf->num_buf != vfe_out_data->num_wm) {
		pr_err("Failed! Invalid number buffers:%d required:%d\n",
			update_buf->num_buf, vfe_out_data->num_wm);
		return -ENOMEM;
		return -EINVAL;
	}

	reg_val_pair = &vfe_out_data->common_data->io_buf_update[0];
	io_cfg = update_buf->io_cfg;

	for (i = 0, j = 0; i < vfe_out_data->num_wm; i++) {
		if (j >= (MAX_REG_VAL_PAIR_SIZE - MAX_BUF_UPDATE_REG_NUM * 2)) {
			pr_err("reg_val_pair %d exceeds the array limit %lu\n",
				j, MAX_REG_VAL_PAIR_SIZE);
			return -ENOMEM;
		}

		wm_data = vfe_out_data->wm_res[i]->res_priv;

		/* For initial configuration program all bus registers */
@@ -1824,6 +1832,11 @@ static int cam_vfe_bus_update_buf(void *priv, void *cmd_args,

		CDBG("image address 0x%x\n", reg_val_pair[j-1]);

		frame_inc = io_cfg->planes[i].plane_stride *
			io_cfg->planes[i].slice_height;
		CAM_VFE_ADD_REG_VAL_PAIR(reg_val_pair, j,
			wm_data->hw_regs->frame_inc, frame_inc);

		/* enable the WM */
		CAM_VFE_ADD_REG_VAL_PAIR(reg_val_pair, j,
			wm_data->hw_regs->cfg,
+0 −4
Original line number Diff line number Diff line
@@ -119,10 +119,6 @@ static int cam_vfe_camif_resource_start(
			rsrc_data->camif_reg->line_skip_pattern);
	cam_io_w_mb(0x1, rsrc_data->mem_base +
			rsrc_data->camif_reg->pixel_skip_pattern);
	cam_io_w_mb(0x0, rsrc_data->mem_base +
			rsrc_data->camif_reg->skip_period);
	cam_io_w_mb(0x1, rsrc_data->mem_base +
			rsrc_data->camif_reg->irq_subsample_pattern);

	/* epoch config with 20 line */
	cam_io_w_mb(0x00140014,