diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp32.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp32.c index 044f6f141b3..eb05015ac17 100644 --- a/drivers/media/platform/msm/camera_v2/isp/msm_isp32.c +++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp32.c @@ -176,15 +176,15 @@ static void msm_vfe32_process_camif_irq(struct vfe_device *vfe_dev, uint32_t irq_status0, uint32_t irq_status1, struct msm_isp_timestamp *ts) { + uint32_t cnt; if (!(irq_status0 & 0x1F)) return; if (irq_status0 & BIT(0)) { ISP_DBG("%s: SOF IRQ\n", __func__); - if (vfe_dev->axi_data.src_info[VFE_PIX_0].raw_stream_count > 0 - && vfe_dev->axi_data.src_info[VFE_PIX_0]. - pix_stream_count == 0) { - msm_isp_sof_notify(vfe_dev, VFE_PIX_0, ts); + cnt = vfe_dev->axi_data.src_info[VFE_PIX_0].raw_stream_count; + if (cnt > 0) { + msm_isp_sof_notify(vfe_dev, VFE_RAW_0, ts); if (vfe_dev->axi_data.stream_update) msm_isp_axi_stream_update(vfe_dev); msm_isp_update_framedrop_reg(vfe_dev); 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 d53d7f6a471..e443e9ae13e 100644 --- a/drivers/media/platform/msm/camera_v2/isp/msm_isp40.c +++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp40.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, The Linux Foundation. All rights reserved. +/* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -370,15 +370,16 @@ static void msm_vfe40_process_camif_irq(struct vfe_device *vfe_dev, uint32_t irq_status0, uint32_t irq_status1, struct msm_isp_timestamp *ts) { + int cnt; + if (!(irq_status0 & 0xF)) return; if (irq_status0 & (1 << 0)) { ISP_DBG("%s: SOF IRQ\n", __func__); - if (vfe_dev->axi_data.src_info[VFE_PIX_0].raw_stream_count > 0 - && vfe_dev->axi_data.src_info[VFE_PIX_0]. - pix_stream_count == 0) { - msm_isp_sof_notify(vfe_dev, VFE_PIX_0, ts); + cnt = vfe_dev->axi_data.src_info[VFE_PIX_0].raw_stream_count; + if (cnt > 0) { + msm_isp_sof_notify(vfe_dev, VFE_RAW_0, ts); if (vfe_dev->axi_data.stream_update) msm_isp_axi_stream_update(vfe_dev); msm_isp_update_framedrop_reg(vfe_dev); 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 f9088627a50..75adcae87b2 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 @@ -452,7 +452,7 @@ void msm_isp_sof_notify(struct vfe_device *vfe_dev, sof_event.frame_id = vfe_dev->axi_data.src_info[frame_src].frame_id; sof_event.timestamp = ts->event_time; sof_event.mono_timestamp = ts->buf_time; - msm_isp_send_event(vfe_dev, ISP_EVENT_SOF, &sof_event); + msm_isp_send_event(vfe_dev, ISP_EVENT_SOF + frame_src, &sof_event); } void msm_isp_calculate_framedrop( diff --git a/include/media/msmb_isp.h b/include/media/msmb_isp.h index 3ba0abed971..3828221d476 100644 --- a/include/media/msmb_isp.h +++ b/include/media/msmb_isp.h @@ -1,3 +1,14 @@ +/* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ #ifndef __MSMB_ISP__ #define __MSMB_ISP__ @@ -302,15 +313,16 @@ enum msm_isp_event_idx { ISP_WM_BUS_OVERFLOW = 4, ISP_STATS_OVERFLOW = 5, ISP_CAMIF_ERROR = 6, - ISP_SOF = 7, - ISP_EOF = 8, - ISP_EVENT_MAX = 9 + ISP_BUF_DONE = 9, + ISP_EVENT_MAX = 10 }; #define ISP_EVENT_OFFSET 8 #define ISP_EVENT_BASE (V4L2_EVENT_PRIVATE_START) #define ISP_BUF_EVENT_BASE (ISP_EVENT_BASE + (1 << ISP_EVENT_OFFSET)) #define ISP_STATS_EVENT_BASE (ISP_EVENT_BASE + (2 << ISP_EVENT_OFFSET)) +#define ISP_SOF_EVENT_BASE (ISP_EVENT_BASE + (3 << ISP_EVENT_OFFSET)) +#define ISP_EOF_EVENT_BASE (ISP_EVENT_BASE + (4 << ISP_EVENT_OFFSET)) #define ISP_EVENT_REG_UPDATE (ISP_EVENT_BASE + ISP_REG_UPDATE) #define ISP_EVENT_START_ACK (ISP_EVENT_BASE + ISP_START_ACK) #define ISP_EVENT_STOP_ACK (ISP_EVENT_BASE + ISP_STOP_ACK) @@ -318,8 +330,9 @@ enum msm_isp_event_idx { #define ISP_EVENT_WM_BUS_OVERFLOW (ISP_EVENT_BASE + ISP_WM_BUS_OVERFLOW) #define ISP_EVENT_STATS_OVERFLOW (ISP_EVENT_BASE + ISP_STATS_OVERFLOW) #define ISP_EVENT_CAMIF_ERROR (ISP_EVENT_BASE + ISP_CAMIF_ERROR) -#define ISP_EVENT_SOF (ISP_EVENT_BASE + ISP_SOF) -#define ISP_EVENT_EOF (ISP_EVENT_BASE + ISP_EOF) +#define ISP_EVENT_SOF (ISP_SOF_EVENT_BASE) +#define ISP_EVENT_EOF (ISP_EOF_EVENT_BASE) +#define ISP_EVENT_BUF_DONE (ISP_EVENT_BASE + ISP_BUF_DONE) #define ISP_EVENT_BUF_DIVERT (ISP_BUF_EVENT_BASE) #define ISP_EVENT_STATS_NOTIFY (ISP_STATS_EVENT_BASE) #define ISP_EVENT_COMP_STATS_NOTIFY (ISP_EVENT_STATS_NOTIFY + MSM_ISP_STATS_MAX)