From d1644a2fe6d9b76bae83d830861d23670186c6a8 Mon Sep 17 00:00:00 2001 From: Venu Raidu Date: Fri, 22 Feb 2019 11:56:55 +0530 Subject: [PATCH] msm: camera_v2: Reset CPP AXI at camera close CPP AXI need to be reset during camera close to overcome stale data. Change-Id: I4af43bbf67a84eaa5fc2a722854117a5936ab896 Signed-off-by: Venu Raidu Signed-off-by: Sumalatha Malothu Signed-off-by: Shadul Shaikh --- .../msm/camera_v2/pproc/cpp/msm_cpp.c | 22 +++++++++++++++++++ .../msm/camera_v2/pproc/cpp/msm_cpp.h | 1 + 2 files changed, 23 insertions(+) diff --git a/drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.c b/drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.c index 6339555bdf76..80e1558e686a 100644 --- a/drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.c +++ b/drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.c @@ -1499,6 +1499,8 @@ static int cpp_close_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) { uint32_t i; int rc = -1; + int counter = 0; + u32 result = 0; struct cpp_device *cpp_dev = NULL; struct msm_device_queue *processing_q = NULL; struct msm_device_queue *eventData_q = NULL; @@ -1579,6 +1581,26 @@ static int cpp_close_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) msm_camera_io_r(cpp_dev->cpp_hw_base + 0x88)); pr_debug("DEBUG_R1: 0x%x\n", msm_camera_io_r(cpp_dev->cpp_hw_base + 0x8C)); + /* mask IRQ status */ + msm_camera_io_w(0xB, cpp_dev->cpp_hw_base + 0xC); + + while (counter < MSM_CPP_AXI_RESET_RETRIES) { + /* MMSS_A_CPP_AXI_CMD = 0x16C, reset 0x1*/ + msm_camera_io_w(0x1, cpp_dev->cpp_hw_base + 0x16C); + usleep_range(100, 200); + result = msm_camera_io_r(cpp_dev->cpp_hw_base + 0x16C); + if (result & 0x1) { + pr_debug("CPP AXI reset successful result %d", + result); + break; + } + counter++; + } + + if (!(result & 0x1)) + pr_err("CPP AXI reset un-successful result %d", + result); + msm_camera_io_w(0x0, cpp_dev->base + MSM_CPP_MICRO_CLKEN_CTL); msm_cpp_clear_timer(cpp_dev); cpp_release_hardware(cpp_dev); diff --git a/drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.h b/drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.h index 0f5d6759acd3..8e2334b0ee5f 100644 --- a/drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.h +++ b/drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.h @@ -92,6 +92,7 @@ #define MSM_CPP_START_ADDRESS 0x0 #define MSM_CPP_END_ADDRESS 0x3F00 +#define MSM_CPP_AXI_RESET_RETRIES 5 #define MSM_CPP_POLL_RETRIES 200 #define MSM_CPP_TASKLETQ_SIZE 16 #define MSM_CPP_TX_FIFO_LEVEL 16