Commit 7ef17aa5 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

media: atomisp: atomisp_compat_css20.c: detect ISP at runtime



Remove ifdefs that check ISP version from the code, switching
to specific ISP-dependent code at runtime.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 78e2888c
Loading
Loading
Loading
Loading
+36 −37
Original line number Diff line number Diff line
@@ -647,18 +647,15 @@ static void __apply_additional_pipe_config(
		if (stream_env->pipe_configs[pipe_id].
		    default_capture_config.mode == CSS_CAPTURE_MODE_RAW)
			stream_env->pipe_configs[pipe_id].enable_dz = false;
#ifdef ISP2401

		if (atomisp_hw_is_isp2401) {
			/* the isp default to use ISP2.2 and the camera hal will
			* control whether use isp2.7 */
		if (asd->select_isp_version->val ==
		    ATOMISP_CSS_ISP_PIPE_VERSION_2_7)
			stream_env->pipe_configs[pipe_id].isp_pipe_version =
			    SH_CSS_ISP_PIPE_VERSION_2_7;
			if (asd->select_isp_version->val == ATOMISP_CSS_ISP_PIPE_VERSION_2_7)
				stream_env->pipe_configs[pipe_id].isp_pipe_version =  SH_CSS_ISP_PIPE_VERSION_2_7;
			else
			stream_env->pipe_configs[pipe_id].isp_pipe_version =
			    SH_CSS_ISP_PIPE_VERSION_2_2;
#endif
				stream_env->pipe_configs[pipe_id].isp_pipe_version = SH_CSS_ISP_PIPE_VERSION_2_2;
		}
		break;
	case IA_CSS_PIPE_ID_VIDEO:
		/* enable reduced pipe to have binary
@@ -3300,10 +3297,9 @@ int atomisp_css_offline_capture_configure(struct atomisp_sub_device *asd,
{
	enum ia_css_err ret;

#ifdef ISP2401
	dev_dbg(asd->isp->dev, "%s num_capture:%d skip:%d offset:%d\n",
		__func__, num_captures, skip, offset);
#endif

	ret = ia_css_stream_capture(
		  asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].stream,
		  num_captures, skip, offset);
@@ -4478,9 +4474,7 @@ int atomisp_css_isr_thread(struct atomisp_device *isp,
	enum atomisp_input_stream_id stream_id = 0;
	struct atomisp_css_event current_event;
	struct atomisp_sub_device *asd;
#ifndef ISP2401
	bool reset_wdt_timer[MAX_STREAM_NUM] = {false};
#endif
	int i;

	while (!atomisp_css_dequeue_event(&current_event)) {
@@ -4497,11 +4491,12 @@ int atomisp_css_isr_thread(struct atomisp_device *isp,
				current_event.event.fw_assert_line_no);
			for (i = 0; i < isp->num_of_streams; i++)
				atomisp_wdt_stop(&isp->asd[i], 0);
#ifndef ISP2401

			if (!atomisp_hw_is_isp2401)
				atomisp_wdt(&isp->asd[0].wdt);
#else
			else
				queue_work(isp->wdt_work_queue, &isp->wdt_work);
#endif

			return -EINVAL;
		} else if (current_event.event.type == IA_CSS_EVENT_TYPE_FW_WARNING) {
			dev_warn(isp->dev, "%s: ISP reports warning, code is %d, exp_id %d\n",
@@ -4529,17 +4524,19 @@ int atomisp_css_isr_thread(struct atomisp_device *isp,
			frame_done_found[asd->index] = true;
			atomisp_buf_done(asd, 0, CSS_BUFFER_TYPE_OUTPUT_FRAME,
					 current_event.pipe, true, stream_id);
#ifndef ISP2401

			if (!atomisp_hw_is_isp2401)
				reset_wdt_timer[asd->index] = true; /* ISP running */
#endif

			break;
		case CSS_EVENT_SEC_OUTPUT_FRAME_DONE:
			frame_done_found[asd->index] = true;
			atomisp_buf_done(asd, 0, CSS_BUFFER_TYPE_SEC_OUTPUT_FRAME,
					 current_event.pipe, true, stream_id);
#ifndef ISP2401

			if (!atomisp_hw_is_isp2401)
				reset_wdt_timer[asd->index] = true; /* ISP running */
#endif

			break;
		case CSS_EVENT_3A_STATISTICS_DONE:
			atomisp_buf_done(asd, 0,
@@ -4557,17 +4554,18 @@ int atomisp_css_isr_thread(struct atomisp_device *isp,
			atomisp_buf_done(asd, 0,
					 CSS_BUFFER_TYPE_VF_OUTPUT_FRAME,
					 current_event.pipe, true, stream_id);
#ifndef ISP2401

			if (!atomisp_hw_is_isp2401)
				reset_wdt_timer[asd->index] = true; /* ISP running */
#endif

			break;
		case CSS_EVENT_SEC_VF_OUTPUT_FRAME_DONE:
			atomisp_buf_done(asd, 0,
					 CSS_BUFFER_TYPE_SEC_VF_OUTPUT_FRAME,
					 current_event.pipe, true, stream_id);
#ifndef ISP2401
			if (!atomisp_hw_is_isp2401)
				reset_wdt_timer[asd->index] = true; /* ISP running */
#endif

			break;
		case CSS_EVENT_DIS_STATISTICS_DONE:
			atomisp_buf_done(asd, 0,
@@ -4587,9 +4585,11 @@ int atomisp_css_isr_thread(struct atomisp_device *isp,
			break;
		}
	}
#ifndef ISP2401
	/* If there are no buffers queued then
	 * delete wdt timer. */

	if (!atomisp_hw_is_isp2401)
		return 0;

	/* ISP2401: If there are no buffers queued then delete wdt timer. */
	for (i = 0; i < isp->num_of_streams; i++) {
		asd = &isp->asd[i];
		if (!asd)
@@ -4603,7 +4603,6 @@ int atomisp_css_isr_thread(struct atomisp_device *isp,
			atomisp_wdt_refresh(asd,
					    ATOMISP_WDT_KEEP_CURRENT_DELAY);
	}
#endif

	return 0;
}