summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShubhraprakash Das <sadas@codeaurora.org>2016-05-31 15:42:30 -0700
committerKyle Yan <kyan@codeaurora.org>2016-06-02 16:15:00 -0700
commit5adaa6976672ee02c91bd51255521fdcd15295a7 (patch)
tree836fe277337e94bcfb2f6c433ece45ab2c6b446c
parent3eea6009d363e22c84f4b88215d13b3b258c3e3e (diff)
msm: camera: isp: For vfe version 4.8 do not reset vbif
Do not reset vbif for vfe version 4.8 based on recommendation from h/w team. Change-Id: Ia31c3f10c24380d9670cd0ca83834844435e593d CRs-Fixed: 999619 Signed-off-by: Shubhraprakash Das <sadas@codeaurora.org>
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp47.c13
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp48.h10
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c4
3 files changed, 23 insertions, 4 deletions
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 d0ad44c7a276..299476cab3e0 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp47.c
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp47.c
@@ -669,6 +669,7 @@ long msm_vfe47_reset_hardware(struct vfe_device *vfe_dev,
uint32_t first_start, uint32_t blocking_call)
{
long rc = 0;
+ uint32_t reset;
init_completion(&vfe_dev->reset_complete);
@@ -676,9 +677,17 @@ long msm_vfe47_reset_hardware(struct vfe_device *vfe_dev,
vfe_dev->reset_pending = 1;
if (first_start) {
- msm_camera_io_w_mb(0x3FF, vfe_dev->vfe_base + 0x18);
+ if (msm_vfe_is_vfe48(vfe_dev))
+ reset = 0x3F7;
+ else
+ reset = 0x3FF;
+ msm_camera_io_w_mb(reset, vfe_dev->vfe_base + 0x18);
} else {
- msm_camera_io_w_mb(0x3EF, vfe_dev->vfe_base + 0x18);
+ if (msm_vfe_is_vfe48(vfe_dev))
+ reset = 0x3E7;
+ else
+ reset = 0x3EF;
+ msm_camera_io_w_mb(reset, vfe_dev->vfe_base + 0x18);
msm_camera_io_w(0x7FFFFFFF, vfe_dev->vfe_base + 0x64);
msm_camera_io_w(0xFFFFFEFF, vfe_dev->vfe_base + 0x68);
msm_camera_io_w(0x1, vfe_dev->vfe_base + 0x58);
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp48.h b/drivers/media/platform/msm/camera_v2/isp/msm_isp48.h
index a0f1c564dbbb..ccca2010105f 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp48.h
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp48.h
@@ -22,4 +22,14 @@ enum msm_vfe_clk_rates {
MSM_VFE_MAX_CLK_RATES = 3,
};
+#define MSM_VFE48_HW_VERSION 0x8
+#define MSM_VFE48_HW_VERSION_SHIFT 28
+#define MSM_VFE48_HW_VERSION_MASK 0xF
+
+static inline int msm_vfe_is_vfe48(struct vfe_device *vfe_dev)
+{
+ return (((vfe_dev->vfe_hw_version >> MSM_VFE48_HW_VERSION_SHIFT) &
+ MSM_VFE48_HW_VERSION_MASK) == MSM_VFE48_HW_VERSION);
+}
+
#endif /* __MSM_ISP48_H__ */
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 8164aec27315..286ecaca129c 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
@@ -1940,6 +1940,8 @@ int msm_isp_open_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
vfe_dev->hw_info->vfe_ops.core_ops.clear_status_reg(vfe_dev);
+ vfe_dev->vfe_hw_version = msm_camera_io_r(vfe_dev->vfe_base);
+ ISP_DBG("%s: HW Version: 0x%x\n", __func__, vfe_dev->vfe_hw_version);
rc = vfe_dev->hw_info->vfe_ops.core_ops.reset_hw(vfe_dev, 1, 1);
if (rc <= 0) {
pr_err("%s: reset timeout\n", __func__);
@@ -1949,8 +1951,6 @@ int msm_isp_open_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
mutex_unlock(&vfe_dev->realtime_mutex);
return -EINVAL;
}
- vfe_dev->vfe_hw_version = msm_camera_io_r(vfe_dev->vfe_base);
- ISP_DBG("%s: HW Version: 0x%x\n", __func__, vfe_dev->vfe_hw_version);
vfe_dev->hw_info->vfe_ops.core_ops.init_hw_reg(vfe_dev);