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

Commit d591ef22 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera_v2: isp: update the frame drop during error case"

parents e5d3f822 dd54bab0
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -762,7 +762,6 @@ struct msm_vfe_common_dev_data {
	/* Irq debug Info */
	struct msm_vfe_irq_dump vfe_irq_dump;
	struct msm_vfe_tasklet tasklets[MAX_VFE + 1];
	uint32_t drop_reconfig;
};

struct msm_vfe_common_subdev {
+19 −12
Original line number Diff line number Diff line
@@ -635,7 +635,8 @@ static void msm_isp_update_framedrop_reg(struct msm_vfe_axi_stream *stream_info,
		drop_reconfig != 1)
		stream_info->current_framedrop_period =
			MSM_VFE_STREAM_STOP_PERIOD;

	if (stream_info->controllable_output && drop_reconfig == 1)
		stream_info->current_framedrop_period = 1;
	/*
	 * re-configure the period pattern, only if it's not already
	 * set to what we want
@@ -691,9 +692,20 @@ void msm_isp_process_reg_upd_epoch_irq(struct vfe_device *vfe_dev,
			break;
		case MSM_ISP_COMP_IRQ_EPOCH:
			if (stream_info->state == ACTIVE) {
				struct vfe_device *temp = NULL;
				struct msm_vfe_common_dev_data *c_data;
				uint32_t drop_reconfig =
					vfe_dev->isp_page->drop_reconfig;
				if (stream_info->num_isp > 1 &&
					vfe_dev->pdev->id == ISP_VFE0) {
					c_data = vfe_dev->common_data;
					temp = c_data->dual_vfe_res->vfe_dev[
						ISP_VFE1];
					drop_reconfig =
						temp->isp_page->drop_reconfig;
				}
				msm_isp_update_framedrop_reg(stream_info,
					vfe_dev->common_data->drop_reconfig);
				vfe_dev->common_data->drop_reconfig = 0;
					drop_reconfig);
			}
			break;
		default:
@@ -2516,6 +2528,7 @@ static void msm_isp_input_enable(struct vfe_device *vfe_dev,
			continue;
		/* activate the input since it is deactivated */
		axi_data->src_info[i].frame_id = 0;
		vfe_dev->irq_sof_id = 0;
		if (axi_data->src_info[i].input_mux != EXTERNAL_READ)
			axi_data->src_info[i].active = 1;
		if (i >= VFE_RAW_0 && sync_frame_id_src) {
@@ -3131,7 +3144,6 @@ static void __msm_isp_stop_axi_streams(struct vfe_device *vfe_dev,
		msm_isp_cfg_stream_scratch(stream_info, VFE_PING_FLAG);
		msm_isp_cfg_stream_scratch(stream_info, VFE_PONG_FLAG);
		stream_info->undelivered_request_cnt = 0;
		vfe_dev->irq_sof_id = 0;
		if (stream_info->controllable_output &&
			stream_info->pending_buf_info.is_buf_done_pending) {
			msm_isp_free_pending_buffer(vfe_dev, stream_info,
@@ -3653,10 +3665,6 @@ static int msm_isp_request_frame(struct vfe_device *vfe_dev,
		pr_debug("%s:%d invalid time to request frame %d\n",
			__func__, __LINE__, frame_id);
		vfe_dev->isp_page->drop_reconfig = 1;
		/*keep it in vfe_dev variable also to avoid skip pattern
		 * programming the variable in page can be overwritten by MCT
		 */
		vfe_dev->common_data->drop_reconfig = 1;
	} else if ((vfe_dev->axi_data.src_info[frame_src].active) &&
			((frame_id ==
			vfe_dev->axi_data.src_info[frame_src].frame_id) ||
@@ -3664,7 +3672,6 @@ static int msm_isp_request_frame(struct vfe_device *vfe_dev,
			(stream_info->undelivered_request_cnt <=
				MAX_BUFFERS_IN_HW)) {
		vfe_dev->isp_page->drop_reconfig = 1;
		vfe_dev->common_data->drop_reconfig = 1;
		pr_debug("%s: vfe_%d request_frame %d cur frame id %d pix %d\n",
			__func__, vfe_dev->pdev->id, frame_id,
			vfe_dev->axi_data.src_info[VFE_PIX_0].frame_id,
@@ -4472,7 +4479,7 @@ void msm_isp_process_axi_irq_stream(struct vfe_device *vfe_dev,
	 */
		done_buf->is_drop_reconfig = 0;
		if (!stream_info->buf[pingpong_bit]) {
			/*samebuffer is not re-programeed so program scratch*/
			/* samebuffer is not re-programeed so write scratch */
			msm_isp_cfg_stream_scratch(stream_info,
				pingpong_status);
		}
+0 −1
Original line number Diff line number Diff line
@@ -2357,7 +2357,6 @@ int msm_isp_open_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
	vfe_dev->isp_raw1_debug = 0;
	vfe_dev->isp_raw2_debug = 0;
	vfe_dev->irq_sof_id = 0;
	vfe_dev->common_data->drop_reconfig = 0;
	if (vfe_dev->hw_info->vfe_ops.core_ops.init_hw(vfe_dev) < 0) {
		pr_err("%s: init hardware failed\n", __func__);
		vfe_dev->vfe_open_cnt--;