diff options
| author | Rajesh Bondugula <rajeshb@codeaurora.org> | 2016-05-11 16:08:30 -0700 |
|---|---|---|
| committer | Kyle Yan <kyan@codeaurora.org> | 2016-05-31 15:27:01 -0700 |
| commit | a851b0a3c8b41c0eea4bc6bd7587feada670a267 (patch) | |
| tree | 340ef6cd0576b8405528ce26d55609c145de932d | |
| parent | 9345b8f94bfd0df479fafdbe3f1c30a3b43aeee3 (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.c | 30 | ||||
| -rw-r--r-- | drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.h | 3 |
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 \ |
