summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajesh Bondugula <rajeshb@codeaurora.org>2016-05-11 16:08:30 -0700
committerKyle Yan <kyan@codeaurora.org>2016-05-31 15:27:01 -0700
commita851b0a3c8b41c0eea4bc6bd7587feada670a267 (patch)
tree340ef6cd0576b8405528ce26d55609c145de932d
parent9345b8f94bfd0df479fafdbe3f1c30a3b43aeee3 (diff)
msm: camera: sensor: Disable IRQ in csid after few frames
IRQ of CSID is enabled when MSM_SD_NOTIFY_FREEZE is called. It must be disabled in MSM_SD_UNNOTIFY_FREEZE and also after few IRQs we disbale the debug IRQ. This prevents excess logs. Crs-Fixed: 1011965 Signed-off-by: Rajesh Bondugula <rajeshb@codeaurora.org> Change-Id: I10bf7ed20e7d5d29c6e5fff0ed7a8474c96acea5
-rw-r--r--drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c30
-rw-r--r--drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.h3
2 files changed, 30 insertions, 3 deletions
diff --git a/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c b/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c
index 980f37461655..a4d6b34a0eea 100644
--- a/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c
+++ b/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c
@@ -191,10 +191,21 @@ static void msm_csid_set_debug_reg(struct csid_device *csid_dev,
struct msm_camera_csid_params *csid_params) {}
#endif
-static void msm_csid_set_sof_freeze_debug_reg(struct csid_device *csid_dev)
+static void msm_csid_set_sof_freeze_debug_reg(
+ struct csid_device *csid_dev, uint8_t irq_enable)
{
uint32_t val = 0;
+ if (!irq_enable) {
+ val = msm_camera_io_r(csid_dev->base +
+ csid_dev->ctrl_reg->csid_reg.csid_irq_status_addr);
+ msm_camera_io_w(val, csid_dev->base +
+ csid_dev->ctrl_reg->csid_reg.csid_irq_clear_cmd_addr);
+ msm_camera_io_w(0, csid_dev->base +
+ csid_dev->ctrl_reg->csid_reg.csid_irq_mask_addr);
+ return;
+ }
+
if (csid_dev->csid_3p_enabled == 1) {
val = ((1 << csid_dev->current_csid_params.lane_cnt) - 1) <<
csid_dev->ctrl_reg->
@@ -443,6 +454,16 @@ static irqreturn_t msm_csid_irq(int irq_num, void *data)
pr_err("%s:%d csid_dev NULL\n", __func__, __LINE__);
return IRQ_HANDLED;
}
+
+ if (csid_dev->csid_sof_debug == SOF_DEBUG_ENABLE) {
+ if (csid_dev->csid_sof_debug_count < CSID_SOF_DEBUG_COUNT)
+ csid_dev->csid_sof_debug_count++;
+ else {
+ msm_csid_set_sof_freeze_debug_reg(csid_dev, false);
+ return IRQ_HANDLED;
+ }
+ }
+
irq = msm_camera_io_r(csid_dev->base +
csid_dev->ctrl_reg->csid_reg.csid_irq_status_addr);
pr_err_ratelimited("%s CSID%d_IRQ_STATUS_ADDR = 0x%x\n",
@@ -477,6 +498,7 @@ static int msm_csid_init(struct csid_device *csid_dev, uint32_t *csid_version)
return rc;
}
+ csid_dev->csid_sof_debug_count = 0;
csid_dev->reg_ptr = NULL;
if (csid_dev->csid_state == CSID_POWER_UP) {
@@ -757,13 +779,14 @@ static long msm_csid_subdev_ioctl(struct v4l2_subdev *sd,
break;
if (csid_dev->csid_sof_debug == SOF_DEBUG_DISABLE) {
csid_dev->csid_sof_debug = SOF_DEBUG_ENABLE;
- msm_csid_set_sof_freeze_debug_reg(csid_dev);
+ msm_csid_set_sof_freeze_debug_reg(csid_dev, true);
}
break;
case MSM_SD_UNNOTIFY_FREEZE:
if (csid_dev->csid_state != CSID_POWER_UP)
break;
csid_dev->csid_sof_debug = SOF_DEBUG_DISABLE;
+ msm_csid_set_sof_freeze_debug_reg(csid_dev, false);
break;
case VIDIOC_MSM_CSID_RELEASE:
case MSM_SD_SHUTDOWN:
@@ -913,13 +936,14 @@ static long msm_csid_subdev_ioctl32(struct v4l2_subdev *sd,
break;
if (csid_dev->csid_sof_debug == SOF_DEBUG_DISABLE) {
csid_dev->csid_sof_debug = SOF_DEBUG_ENABLE;
- msm_csid_set_sof_freeze_debug_reg(csid_dev);
+ msm_csid_set_sof_freeze_debug_reg(csid_dev, true);
}
break;
case MSM_SD_UNNOTIFY_FREEZE:
if (csid_dev->csid_state != CSID_POWER_UP)
break;
csid_dev->csid_sof_debug = SOF_DEBUG_DISABLE;
+ msm_csid_set_sof_freeze_debug_reg(csid_dev, false);
break;
case VIDIOC_MSM_CSID_RELEASE:
case MSM_SD_SHUTDOWN:
diff --git a/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.h b/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.h
index 906cec6e2fdd..8a720c8089c5 100644
--- a/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.h
+++ b/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.h
@@ -21,6 +21,8 @@
#include "msm_sd.h"
#include "cam_soc_api.h"
+#define CSID_SOF_DEBUG_COUNT 3
+
enum csiphy_lane_assign {
PHY_LANE_D0,
PHY_LANE_CLK,
@@ -112,6 +114,7 @@ struct csid_device {
struct msm_camera_csid_params current_csid_params;
uint32_t csid_sof_debug;
uint32_t csid_lane_cnt;
+ uint32_t csid_sof_debug_count;
};
#define VIDIOC_MSM_CSID_RELEASE \