From 5adaa6976672ee02c91bd51255521fdcd15295a7 Mon Sep 17 00:00:00 2001 From: Shubhraprakash Das Date: Tue, 31 May 2016 15:42:30 -0700 Subject: [PATCH] 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 --- .../media/platform/msm/camera_v2/isp/msm_isp47.c | 13 +++++++++++-- .../media/platform/msm/camera_v2/isp/msm_isp48.h | 10 ++++++++++ .../media/platform/msm/camera_v2/isp/msm_isp_util.c | 4 ++-- 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);