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

Commit 221e6dc7 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera: AV timer support for HAL3"

parents 3127c29d 9e660ab8
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -1747,7 +1747,7 @@ static int msm_vfe40_axi_halt(struct vfe_device *vfe_dev,
	msm_camera_io_w(0xFEFFFEFF, vfe_dev->vfe_base + 0x34);
	msm_camera_io_w(0xFEFFFEFF, vfe_dev->vfe_base + 0x34);
	msm_camera_io_w(0x1, vfe_dev->vfe_base + 0x24);
	msm_camera_io_w(0x1, vfe_dev->vfe_base + 0x24);


	msm_isp_get_timestamp(&ts);
	msm_isp_get_timestamp(&ts, vfe_dev);
	/* if any stream is waiting for update, signal complete */
	/* if any stream is waiting for update, signal complete */
	for (i = VFE_PIX_0; i <= VFE_RAW_2; i++) {
	for (i = VFE_PIX_0; i <= VFE_RAW_2; i++) {
		msm_isp_axi_stream_update(vfe_dev, i, &ts);
		msm_isp_axi_stream_update(vfe_dev, i, &ts);
+1 −1
Original line number Original line Diff line number Diff line
@@ -1377,7 +1377,7 @@ static int msm_vfe44_axi_halt(struct vfe_device *vfe_dev,
		msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x2C0);
		msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x2C0);
	}
	}


	msm_isp_get_timestamp(&ts);
	msm_isp_get_timestamp(&ts, vfe_dev);
	for (i = VFE_PIX_0; i <= VFE_RAW_2; i++) {
	for (i = VFE_PIX_0; i <= VFE_RAW_2; i++) {
		/* if any stream is waiting for update, signal complete */
		/* if any stream is waiting for update, signal complete */
		msm_isp_axi_stream_update(vfe_dev, i, &ts);
		msm_isp_axi_stream_update(vfe_dev, i, &ts);
+1 −1
Original line number Original line Diff line number Diff line
@@ -1464,7 +1464,7 @@ static int msm_vfe46_axi_halt(struct vfe_device *vfe_dev,
		msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x374);
		msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x374);
	}
	}


	msm_isp_get_timestamp(&ts);
	msm_isp_get_timestamp(&ts, vfe_dev);
	for (i = VFE_PIX_0; i <= VFE_RAW_2; i++) {
	for (i = VFE_PIX_0; i <= VFE_RAW_2; i++) {
		msm_isp_axi_stream_update(vfe_dev, i, &ts);
		msm_isp_axi_stream_update(vfe_dev, i, &ts);
		msm_isp_axi_stream_update(vfe_dev, i, &ts);
		msm_isp_axi_stream_update(vfe_dev, i, &ts);
+1 −1
Original line number Original line Diff line number Diff line
@@ -1798,7 +1798,7 @@ int msm_vfe47_axi_halt(struct vfe_device *vfe_dev,
		msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x400);
		msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x400);
	}
	}


	msm_isp_get_timestamp(&ts);
	msm_isp_get_timestamp(&ts, vfe_dev);
	for (i = VFE_PIX_0; i <= VFE_RAW_2; i++) {
	for (i = VFE_PIX_0; i <= VFE_RAW_2; i++) {
		/* if any stream is waiting for update, signal fake completes */
		/* if any stream is waiting for update, signal fake completes */
		msm_isp_axi_stream_update(vfe_dev, i, &ts);
		msm_isp_axi_stream_update(vfe_dev, i, &ts);
+11 −12
Original line number Original line Diff line number Diff line
@@ -1060,7 +1060,7 @@ void msm_isp_start_avtimer(void)
	avcs_core_disable_power_collapse(1);
	avcs_core_disable_power_collapse(1);
}
}


static inline void msm_isp_get_avtimer_ts(
void msm_isp_get_avtimer_ts(
		struct msm_isp_timestamp *time_stamp)
		struct msm_isp_timestamp *time_stamp)
{
{
	int rc = 0;
	int rc = 0;
@@ -1088,7 +1088,7 @@ void msm_isp_start_avtimer(void)
	pr_err("AV Timer is not supported\n");
	pr_err("AV Timer is not supported\n");
}
}


static inline void msm_isp_get_avtimer_ts(
void msm_isp_get_avtimer_ts(
		struct msm_isp_timestamp *time_stamp)
		struct msm_isp_timestamp *time_stamp)
{
{
	pr_err_ratelimited("%s: Error: AVTimer driver not available\n",
	pr_err_ratelimited("%s: Error: AVTimer driver not available\n",
@@ -2282,7 +2282,7 @@ int msm_isp_axi_reset(struct vfe_device *vfe_dev,
		update_vfes[vfe_dev->pdev->id] = vfe_dev;
		update_vfes[vfe_dev->pdev->id] = vfe_dev;
	}
	}


	msm_isp_get_timestamp(&timestamp);
	msm_isp_get_timestamp(&timestamp, vfe_dev);


	for (k = 0; k < MAX_VFE; k++) {
	for (k = 0; k < MAX_VFE; k++) {
		vfe_dev = update_vfes[k];
		vfe_dev = update_vfes[k];
@@ -2700,8 +2700,8 @@ static int __msm_isp_check_stream_state(struct msm_vfe_axi_stream *stream_info,
}
}




static void __msm_isp_stop_axi_streams(struct msm_vfe_axi_stream **streams,
static void __msm_isp_stop_axi_streams(struct vfe_device *vfe_dev,
				int num_streams, int cmd_type)
	struct msm_vfe_axi_stream **streams, int num_streams, int cmd_type)
{
{
	int i;
	int i;
	struct msm_vfe_axi_shared_data *axi_data;
	struct msm_vfe_axi_shared_data *axi_data;
@@ -2712,11 +2712,10 @@ static void __msm_isp_stop_axi_streams(struct msm_vfe_axi_stream **streams,
	unsigned long flags;
	unsigned long flags;
	uint32_t intf;
	uint32_t intf;
	int rc;
	int rc;
	struct vfe_device *vfe_dev;
	struct vfe_device *update_vfes[MAX_VFE] = {0, 0};
	struct vfe_device *update_vfes[MAX_VFE] = {0, 0};
	int k;
	int k;


	msm_isp_get_timestamp(&timestamp);
	msm_isp_get_timestamp(&timestamp, vfe_dev);


	for (i = 0; i < num_streams; i++) {
	for (i = 0; i < num_streams; i++) {
		stream_info = streams[i];
		stream_info = streams[i];
@@ -2881,7 +2880,7 @@ static int msm_isp_start_axi_stream(struct vfe_device *vfe_dev_ioctl,
	if (stream_cfg_cmd->num_streams > MAX_NUM_STREAM)
	if (stream_cfg_cmd->num_streams > MAX_NUM_STREAM)
		return -EINVAL;
		return -EINVAL;


	msm_isp_get_timestamp(&timestamp);
	msm_isp_get_timestamp(&timestamp, vfe_dev_ioctl);


	for (i = 0; i < stream_cfg_cmd->num_streams; i++) {
	for (i = 0; i < stream_cfg_cmd->num_streams; i++) {
		if (stream_cfg_cmd->stream_handle[i] == 0)
		if (stream_cfg_cmd->stream_handle[i] == 0)
@@ -3005,7 +3004,7 @@ static int msm_isp_start_axi_stream(struct vfe_device *vfe_dev_ioctl,


	return 0;
	return 0;
error:
error:
	__msm_isp_stop_axi_streams(streams, num_streams,
	__msm_isp_stop_axi_streams(vfe_dev_ioctl, streams, num_streams,
				STOP_STREAM);
				STOP_STREAM);


	return rc;
	return rc;
@@ -3043,7 +3042,7 @@ static int msm_isp_stop_axi_stream(struct vfe_device *vfe_dev_ioctl,
		}
		}
		streams[num_streams++] = stream_info;
		streams[num_streams++] = stream_info;
	}
	}
	__msm_isp_stop_axi_streams(streams, num_streams,
	__msm_isp_stop_axi_streams(vfe_dev_ioctl, streams, num_streams,
				stream_cfg_cmd->cmd);
				stream_cfg_cmd->cmd);


	return rc;
	return rc;
@@ -3172,7 +3171,7 @@ static int msm_isp_return_empty_buffer(struct vfe_device *vfe_dev,
		return rc;
		return rc;
	}
	}


	msm_isp_get_timestamp(&timestamp);
	msm_isp_get_timestamp(&timestamp, vfe_dev);
	buf->buf_debug.put_state[buf->buf_debug.put_state_last] =
	buf->buf_debug.put_state[buf->buf_debug.put_state_last] =
		MSM_ISP_BUFFER_STATE_DROP_REG;
		MSM_ISP_BUFFER_STATE_DROP_REG;
	buf->buf_debug.put_state_last ^= 1;
	buf->buf_debug.put_state_last ^= 1;
@@ -3576,7 +3575,7 @@ int msm_isp_update_axi_stream(struct vfe_device *vfe_dev, void *arg)
			stream_info = msm_isp_get_stream_common_data(vfe_dev,
			stream_info = msm_isp_get_stream_common_data(vfe_dev,
				HANDLE_TO_IDX(update_info->stream_handle));
				HANDLE_TO_IDX(update_info->stream_handle));
			stream_info->buf_divert = 0;
			stream_info->buf_divert = 0;
			msm_isp_get_timestamp(&timestamp);
			msm_isp_get_timestamp(&timestamp, vfe_dev);
			frame_id = vfe_dev->axi_data.src_info[
			frame_id = vfe_dev->axi_data.src_info[
				SRC_TO_INTF(stream_info->stream_src)].frame_id;
				SRC_TO_INTF(stream_info->stream_src)].frame_id;
			/* set ping pong address to scratch before flush */
			/* set ping pong address to scratch before flush */
Loading