summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp40.c2
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp44.c2
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp46.c2
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp47.c2
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c23
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.h1
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c6
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c19
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp_util.h3
9 files changed, 35 insertions, 25 deletions
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp40.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp40.c
index a2aa2983b056..d76de3fbb3ed 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp40.c
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp40.c
@@ -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(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 */
for (i = VFE_PIX_0; i <= VFE_RAW_2; i++) {
msm_isp_axi_stream_update(vfe_dev, i, &ts);
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp44.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp44.c
index c77eff66ccca..87eaa983087a 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp44.c
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp44.c
@@ -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_isp_get_timestamp(&ts);
+ msm_isp_get_timestamp(&ts, vfe_dev);
for (i = VFE_PIX_0; i <= VFE_RAW_2; i++) {
/* if any stream is waiting for update, signal complete */
msm_isp_axi_stream_update(vfe_dev, i, &ts);
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp46.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp46.c
index 6336892b1b4e..ee0c5609c261 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp46.c
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp46.c
@@ -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_isp_get_timestamp(&ts);
+ msm_isp_get_timestamp(&ts, vfe_dev);
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);
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp47.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp47.c
index 9a469abc56ca..303fc9bac8c2 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp47.c
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp47.c
@@ -1791,7 +1791,7 @@ int msm_vfe47_axi_halt(struct vfe_device *vfe_dev,
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++) {
/* if any stream is waiting for update, signal fake completes */
msm_isp_axi_stream_update(vfe_dev, i, &ts);
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c
index 7488f371545b..fbc2fee5a51d 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c
@@ -1060,7 +1060,7 @@ void msm_isp_start_avtimer(void)
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)
{
int rc = 0;
@@ -1088,7 +1088,7 @@ void msm_isp_start_avtimer(void)
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)
{
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;
}
- msm_isp_get_timestamp(&timestamp);
+ msm_isp_get_timestamp(&timestamp, vfe_dev);
for (k = 0; k < MAX_VFE; 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,
- int num_streams, int cmd_type)
+static void __msm_isp_stop_axi_streams(struct vfe_device *vfe_dev,
+ struct msm_vfe_axi_stream **streams, int num_streams, int cmd_type)
{
int i;
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;
uint32_t intf;
int rc;
- struct vfe_device *vfe_dev;
struct vfe_device *update_vfes[MAX_VFE] = {0, 0};
int k;
- msm_isp_get_timestamp(&timestamp);
+ msm_isp_get_timestamp(&timestamp, vfe_dev);
for (i = 0; i < num_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)
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++) {
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;
error:
- __msm_isp_stop_axi_streams(streams, num_streams,
+ __msm_isp_stop_axi_streams(vfe_dev_ioctl, streams, num_streams,
STOP_STREAM);
return rc;
@@ -3043,7 +3042,7 @@ static int msm_isp_stop_axi_stream(struct vfe_device *vfe_dev_ioctl,
}
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);
return rc;
@@ -3172,7 +3171,7 @@ static int msm_isp_return_empty_buffer(struct vfe_device *vfe_dev,
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] =
MSM_ISP_BUFFER_STATE_DROP_REG;
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,
HANDLE_TO_IDX(update_info->stream_handle));
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[
SRC_TO_INTF(stream_info->stream_src)].frame_id;
/* set ping pong address to scratch before flush */
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.h b/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.h
index 84720f3d8625..9c642370b1a1 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.h
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.h
@@ -27,6 +27,7 @@ void msm_isp_reset_framedrop(struct vfe_device *vfe_dev,
struct msm_vfe_axi_stream *stream_info);
int msm_isp_request_axi_stream(struct vfe_device *vfe_dev, void *arg);
+void msm_isp_get_avtimer_ts(struct msm_isp_timestamp *time_stamp);
int msm_isp_cfg_axi_stream(struct vfe_device *vfe_dev, void *arg);
int msm_isp_release_axi_stream(struct vfe_device *vfe_dev, void *arg);
int msm_isp_update_axi_stream(struct vfe_device *vfe_dev, void *arg);
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c
index e226f7e40a07..dfa91bafc776 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c
@@ -852,7 +852,7 @@ int msm_isp_stats_reset(struct vfe_device *vfe_dev)
unsigned long flags;
int k;
- msm_isp_get_timestamp(&timestamp);
+ msm_isp_get_timestamp(&timestamp, vfe_dev);
if (vfe_dev->is_split) {
for (i = 0; i < MAX_VFE; i++)
@@ -1077,7 +1077,7 @@ static int msm_isp_start_stats_stream(struct vfe_device *vfe_dev_ioctl,
uint32_t num_active_streams[MAX_VFE] = {0, 0};
struct vfe_device *vfe_dev;
- msm_isp_get_timestamp(&timestamp);
+ msm_isp_get_timestamp(&timestamp, vfe_dev_ioctl);
num_stats_comp_mask =
vfe_dev_ioctl->hw_info->stats_hw_info->num_stats_comp_mask;
@@ -1164,7 +1164,7 @@ static int msm_isp_stop_stats_stream(struct vfe_device *vfe_dev,
struct msm_vfe_stats_stream *streams[MSM_ISP_STATS_MAX];
unsigned long flags;
- msm_isp_get_timestamp(&timestamp);
+ msm_isp_get_timestamp(&timestamp, vfe_dev);
num_stats_comp_mask =
vfe_dev->hw_info->stats_hw_info->num_stats_comp_mask;
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c
index 71c907f2b381..b0789ce4a71c 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c
@@ -198,13 +198,21 @@ uint32_t msm_isp_get_framedrop_period(
return 1;
}
-void msm_isp_get_timestamp(struct msm_isp_timestamp *time_stamp)
+void msm_isp_get_timestamp(struct msm_isp_timestamp *time_stamp,
+ struct vfe_device *vfe_dev)
{
struct timespec ts;
- get_monotonic_boottime(&ts);
- time_stamp->buf_time.tv_sec = ts.tv_sec;
- time_stamp->buf_time.tv_usec = ts.tv_nsec/1000;
do_gettimeofday(&(time_stamp->event_time));
+ if (vfe_dev->vt_enable) {
+ msm_isp_get_avtimer_ts(time_stamp);
+ time_stamp->buf_time.tv_sec = time_stamp->vt_time.tv_sec;
+ time_stamp->buf_time.tv_usec = time_stamp->vt_time.tv_usec;
+ } else {
+ get_monotonic_boottime(&ts);
+ time_stamp->buf_time.tv_sec = ts.tv_sec;
+ time_stamp->buf_time.tv_usec = ts.tv_nsec/1000;
+ }
+
}
static inline u32 msm_isp_evt_mask_to_isp_event(u32 evt_mask)
@@ -1820,7 +1828,8 @@ static void msm_isp_enqueue_tasklet_cmd(struct vfe_device *vfe_dev,
}
queue_cmd->vfeInterruptStatus0 = irq_status0;
queue_cmd->vfeInterruptStatus1 = irq_status1;
- msm_isp_get_timestamp(&queue_cmd->ts);
+ msm_isp_get_timestamp(&queue_cmd->ts, vfe_dev);
+
queue_cmd->cmd_used = 1;
vfe_dev->taskletq_idx = (vfe_dev->taskletq_idx + 1) %
MSM_VFE_TASKLETQ_SIZE;
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.h b/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.h
index 16e3198f35b7..f4280581a730 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.h
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.h
@@ -70,5 +70,6 @@ void msm_isp_fetch_engine_done_notify(struct vfe_device *vfe_dev,
struct msm_vfe_fetch_engine_info *fetch_engine_info);
void msm_isp_print_fourcc_error(const char *origin, uint32_t fourcc_format);
void msm_isp_flush_tasklet(struct vfe_device *vfe_dev);
-void msm_isp_get_timestamp(struct msm_isp_timestamp *time_stamp);
+void msm_isp_get_timestamp(struct msm_isp_timestamp *time_stamp,
+ struct vfe_device *vfe_dev);
#endif /* __MSM_ISP_UTIL_H__ */