Loading drivers/media/platform/msm/camera_v2/isp/msm_isp.c +5 −4 Original line number Diff line number Diff line Loading @@ -542,12 +542,13 @@ int vfe_hw_probe(struct platform_device *pdev) ISP_DBG("%s: device id = %d\n", __func__, pdev->id); vfe_dev->pdev = pdev; vfe_dev->dual_vfe_res = &dualvfe; vfe_dev->dual_vfe_res->axi_data[vfe_dev->pdev->id] = vfe_dev->common_data->dual_vfe_res = &dualvfe; vfe_dev->common_data->dual_vfe_res->axi_data[vfe_dev->pdev->id] = &vfe_dev->axi_data; vfe_dev->dual_vfe_res->stats_data[vfe_dev->pdev->id] = vfe_dev->common_data->dual_vfe_res->stats_data[vfe_dev->pdev->id] = &vfe_dev->stats_data; vfe_dev->dual_vfe_res->vfe_dev[vfe_dev->pdev->id] = vfe_dev; vfe_dev->common_data->dual_vfe_res->vfe_dev[vfe_dev->pdev->id] = vfe_dev; rc = vfe_dev->hw_info->vfe_ops.core_ops.get_platform_data(vfe_dev); if (rc < 0) { Loading drivers/media/platform/msm/camera_v2/isp/msm_isp.h +39 −24 Original line number Diff line number Diff line Loading @@ -67,15 +67,22 @@ struct msm_vfe_stats_stream; #define VFE_SD_HW_MAX VFE_SD_COMMON /* This struct is used to save/track SOF info for some INTF. * e.g. used in Master-Slave mode */ struct msm_vfe_sof_info { uint32_t timestamp_ms; uint32_t mono_timestamp_ms; uint32_t frame_id; }; /* Each INTF in Master-Slave mode uses this struct. */ struct msm_vfe_dual_hw_ms_info { /* type is Master/Slave */ enum msm_vfe_dual_hw_ms_type dual_hw_ms_type; /* sof_info is resource from common_data. If NULL, then this INTF * sof does not need to be saved */ struct msm_vfe_sof_info *sof_info; /* slave_id is index in common_data sof_info array for slaves */ uint8_t slave_id; }; Loading Loading @@ -598,8 +605,7 @@ struct dual_vfe_resource { uint32_t wm_reload_mask[MAX_VFE]; }; struct msm_vfe_common_dev_data { spinlock_t common_dev_data_lock; struct master_slave_resource_info { enum msm_vfe_dual_hw_type dual_hw_type; struct msm_vfe_sof_info master_sof_info; uint8_t master_active; Loading @@ -610,6 +616,12 @@ struct msm_vfe_common_dev_data { struct msm_vfe_sof_info slave_sof_info[MS_NUM_SLAVE_MAX]; }; struct msm_vfe_common_dev_data { spinlock_t common_dev_data_lock; struct dual_vfe_resource *dual_vfe_res; struct master_slave_resource_info ms_resource; }; struct msm_vfe_common_subdev { /* parent reference */ struct vfe_parent_device *parent; Loading @@ -625,9 +637,13 @@ struct msm_vfe_common_subdev { }; struct vfe_device { /* Driver private data */ struct platform_device *pdev; struct msm_vfe_common_dev_data *common_data; struct msm_sd_subdev subdev; struct msm_isp_buf_mgr *buf_mgr; /* Resource info */ struct resource *vfe_irq; struct resource *vfe_mem; struct resource *vfe_vbif_mem; Loading @@ -635,19 +651,14 @@ struct vfe_device { struct resource *vfe_vbif_io; void __iomem *vfe_base; void __iomem *vfe_vbif_base; struct device *iommu_ctx[MAX_IOMMU_CTX]; /*Add secure context banks*/ struct device *iommu_secure_ctx[MAX_IOMMU_CTX]; struct regulator *fs_vfe; struct regulator *fs_camss; struct regulator *fs_mmagic_camss; struct clk **vfe_clk; uint32_t num_clk; uint32_t bus_perf_client; /* Sync variables*/ struct completion reset_complete; struct completion halt_complete; struct completion stream_config_complete; Loading @@ -655,47 +666,51 @@ struct vfe_device { struct mutex realtime_mutex; struct mutex core_mutex; struct mutex buf_mgr_mutex; spinlock_t shared_data_lock; spinlock_t reg_update_lock; spinlock_t tasklet_lock; /* Tasklet info */ atomic_t irq_cnt; uint8_t taskletq_idx; spinlock_t tasklet_lock; spinlock_t shared_data_lock; spinlock_t reg_update_lock; struct list_head tasklet_q; struct tasklet_struct vfe_tasklet; struct msm_vfe_tasklet_queue_cmd tasklet_queue_cmd[MSM_VFE_TASKLETQ_SIZE]; uint32_t vfe_hw_version; uint32_t dual_vfe_enable; /* Data structures */ struct msm_vfe_hardware_info *hw_info; struct msm_vfe_axi_shared_data axi_data; struct msm_vfe_stats_shared_data stats_data; struct msm_vfe_error_info error_info; struct msm_isp_buf_mgr *buf_mgr; int dump_reg; struct msm_vfe_fetch_engine_info fetch_engine_info; enum msm_vfe_hvx_streaming_cmd hvx_cmd; /* State variables */ uint32_t vfe_hw_version; int vfe_clk_idx; uint32_t vfe_open_cnt; uint8_t vt_enable; uint8_t ignore_error; uint32_t vfe_ub_policy; uint8_t reset_pending; uint8_t reg_update_requested; uint8_t reg_updated; uint32_t is_split; uint32_t dual_vfe_enable; unsigned long page_fault_addr; /* Debug variables */ int dump_reg; struct msm_isp_statistics *stats; struct msm_vfe_fetch_engine_info fetch_engine_info; uint64_t msm_isp_last_overflow_ab; uint64_t msm_isp_last_overflow_ib; uint64_t msm_isp_vfe_clk_rate; struct msm_isp_ub_info *ub_info; uint32_t vfe_ub_policy; uint32_t isp_sof_debug; uint32_t isp_raw0_debug; uint32_t isp_raw1_debug; uint32_t isp_raw2_debug; uint8_t reset_pending; enum msm_vfe_hvx_streaming_cmd hvx_cmd; uint8_t reg_update_requested; uint8_t reg_updated; struct dual_vfe_resource *dual_vfe_res; uint32_t is_split; unsigned long page_fault_addr; }; struct vfe_parent_device { Loading drivers/media/platform/msm/camera_v2/isp/msm_isp32.c +5 −3 Original line number Diff line number Diff line Loading @@ -280,7 +280,8 @@ static int msm_vfe32_init_hardware(struct vfe_device *vfe_dev) pr_err("%s: vfe ioremap failed\n", __func__); goto vfe_remap_failed; } vfe_dev->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = vfe_dev->vfe_base; vfe_dev->common_data->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = vfe_dev->vfe_base; vfe_dev->vfe_vbif_base = ioremap(vfe_dev->vfe_vbif_mem->start, resource_size(vfe_dev->vfe_vbif_mem)); Loading Loading @@ -341,7 +342,7 @@ static void msm_vfe32_release_hardware(struct vfe_device *vfe_dev) msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe32_2_clk_info, vfe_dev->vfe_clk, ARRAY_SIZE(msm_vfe32_2_clk_info), 0); vfe_dev->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = NULL; vfe_dev->common_data->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = NULL; iounmap(vfe_dev->vfe_base); vfe_dev->vfe_base = NULL; kfree(vfe_dev->vfe_clk); Loading Loading @@ -646,7 +647,8 @@ static void msm_vfe32_reg_update(struct vfe_device *vfe_dev, { if (vfe_dev->is_split && vfe_dev->pdev->id == ISP_VFE1) { msm_camera_io_w_mb(0xF, vfe_dev->dual_vfe_res->vfe_base[ISP_VFE0] + 0x260); vfe_dev->common_data->dual_vfe_res->vfe_base[ISP_VFE0] + 0x260); msm_camera_io_w_mb(0xF, vfe_dev->vfe_base + 0x260); } else if (!vfe_dev->is_split) { msm_camera_io_w_mb(0xF, vfe_dev->vfe_base + 0x260); Loading drivers/media/platform/msm/camera_v2/isp/msm_isp40.c +6 −4 Original line number Diff line number Diff line Loading @@ -306,7 +306,8 @@ static int msm_vfe40_init_hardware(struct vfe_device *vfe_dev) pr_err("%s: vfe ioremap failed\n", __func__); goto vfe_remap_failed; } vfe_dev->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = vfe_dev->vfe_base; vfe_dev->common_data->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = vfe_dev->vfe_base; vfe_dev->vfe_vbif_base = ioremap(vfe_dev->vfe_vbif_mem->start, resource_size(vfe_dev->vfe_vbif_mem)); Loading Loading @@ -356,7 +357,7 @@ static void msm_vfe40_release_hardware(struct vfe_device *vfe_dev) vfe_dev->vfe_vbif_base = NULL; msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe40_clk_info, vfe_dev->vfe_clk, vfe_dev->num_clk, 0); vfe_dev->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = NULL; vfe_dev->common_data->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = NULL; iounmap(vfe_dev->vfe_base); vfe_dev->vfe_base = NULL; kfree(vfe_dev->vfe_clk); Loading Loading @@ -746,12 +747,13 @@ static void msm_vfe40_reg_update(struct vfe_device *vfe_dev, vfe_dev->axi_data.src_info[VFE_PIX_0].reg_update_frame_id = vfe_dev->axi_data.src_info[VFE_PIX_0].frame_id; vfe_dev->reg_update_requested |= update_mask; vfe_dev->dual_vfe_res->reg_update_mask[vfe_dev->pdev->id] = vfe_dev->common_data->dual_vfe_res->reg_update_mask[vfe_dev->pdev->id] = vfe_dev->reg_update_requested; if ((vfe_dev->is_split && vfe_dev->pdev->id == ISP_VFE1) && ((frame_src == VFE_PIX_0) || (frame_src == VFE_SRC_MAX))) { msm_camera_io_w_mb(update_mask, vfe_dev->dual_vfe_res->vfe_base[ISP_VFE0] + 0x378); vfe_dev->common_data->dual_vfe_res->vfe_base[ISP_VFE0] + 0x378); msm_camera_io_w_mb(update_mask, vfe_dev->vfe_base + 0x378); } else if (!vfe_dev->is_split || Loading drivers/media/platform/msm/camera_v2/isp/msm_isp44.c +6 −4 Original line number Diff line number Diff line Loading @@ -174,7 +174,8 @@ static int msm_vfe44_init_hardware(struct vfe_device *vfe_dev) pr_err("%s: vfe ioremap failed\n", __func__); goto vfe_remap_failed; } vfe_dev->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = vfe_dev->vfe_base; vfe_dev->common_data->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = vfe_dev->vfe_base; vfe_dev->vfe_vbif_base = ioremap(vfe_dev->vfe_vbif_mem->start, resource_size(vfe_dev->vfe_vbif_mem)); Loading Loading @@ -222,7 +223,7 @@ static void msm_vfe44_release_hardware(struct vfe_device *vfe_dev) vfe_dev->vfe_vbif_base = NULL; msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe44_clk_info, vfe_dev->vfe_clk, vfe_dev->num_clk, 0); vfe_dev->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = NULL; vfe_dev->common_data->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = NULL; iounmap(vfe_dev->vfe_base); vfe_dev->vfe_base = NULL; kfree(vfe_dev->vfe_clk); Loading Loading @@ -615,12 +616,13 @@ static void msm_vfe44_reg_update(struct vfe_device *vfe_dev, vfe_dev->axi_data.src_info[VFE_PIX_0].reg_update_frame_id = vfe_dev->axi_data.src_info[VFE_PIX_0].frame_id; vfe_dev->reg_update_requested |= update_mask; vfe_dev->dual_vfe_res->reg_update_mask[vfe_dev->pdev->id] = vfe_dev->common_data->dual_vfe_res->reg_update_mask[vfe_dev->pdev->id] = vfe_dev->reg_update_requested; if ((vfe_dev->is_split && vfe_dev->pdev->id == ISP_VFE1) && ((frame_src == VFE_PIX_0) || (frame_src == VFE_SRC_MAX))) { msm_camera_io_w_mb(update_mask, vfe_dev->dual_vfe_res->vfe_base[ISP_VFE0] + 0x378); vfe_dev->common_data->dual_vfe_res->vfe_base[ISP_VFE0] + 0x378); msm_camera_io_w_mb(update_mask, vfe_dev->vfe_base + 0x378); } else if (!vfe_dev->is_split || Loading Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp.c +5 −4 Original line number Diff line number Diff line Loading @@ -542,12 +542,13 @@ int vfe_hw_probe(struct platform_device *pdev) ISP_DBG("%s: device id = %d\n", __func__, pdev->id); vfe_dev->pdev = pdev; vfe_dev->dual_vfe_res = &dualvfe; vfe_dev->dual_vfe_res->axi_data[vfe_dev->pdev->id] = vfe_dev->common_data->dual_vfe_res = &dualvfe; vfe_dev->common_data->dual_vfe_res->axi_data[vfe_dev->pdev->id] = &vfe_dev->axi_data; vfe_dev->dual_vfe_res->stats_data[vfe_dev->pdev->id] = vfe_dev->common_data->dual_vfe_res->stats_data[vfe_dev->pdev->id] = &vfe_dev->stats_data; vfe_dev->dual_vfe_res->vfe_dev[vfe_dev->pdev->id] = vfe_dev; vfe_dev->common_data->dual_vfe_res->vfe_dev[vfe_dev->pdev->id] = vfe_dev; rc = vfe_dev->hw_info->vfe_ops.core_ops.get_platform_data(vfe_dev); if (rc < 0) { Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp.h +39 −24 Original line number Diff line number Diff line Loading @@ -67,15 +67,22 @@ struct msm_vfe_stats_stream; #define VFE_SD_HW_MAX VFE_SD_COMMON /* This struct is used to save/track SOF info for some INTF. * e.g. used in Master-Slave mode */ struct msm_vfe_sof_info { uint32_t timestamp_ms; uint32_t mono_timestamp_ms; uint32_t frame_id; }; /* Each INTF in Master-Slave mode uses this struct. */ struct msm_vfe_dual_hw_ms_info { /* type is Master/Slave */ enum msm_vfe_dual_hw_ms_type dual_hw_ms_type; /* sof_info is resource from common_data. If NULL, then this INTF * sof does not need to be saved */ struct msm_vfe_sof_info *sof_info; /* slave_id is index in common_data sof_info array for slaves */ uint8_t slave_id; }; Loading Loading @@ -598,8 +605,7 @@ struct dual_vfe_resource { uint32_t wm_reload_mask[MAX_VFE]; }; struct msm_vfe_common_dev_data { spinlock_t common_dev_data_lock; struct master_slave_resource_info { enum msm_vfe_dual_hw_type dual_hw_type; struct msm_vfe_sof_info master_sof_info; uint8_t master_active; Loading @@ -610,6 +616,12 @@ struct msm_vfe_common_dev_data { struct msm_vfe_sof_info slave_sof_info[MS_NUM_SLAVE_MAX]; }; struct msm_vfe_common_dev_data { spinlock_t common_dev_data_lock; struct dual_vfe_resource *dual_vfe_res; struct master_slave_resource_info ms_resource; }; struct msm_vfe_common_subdev { /* parent reference */ struct vfe_parent_device *parent; Loading @@ -625,9 +637,13 @@ struct msm_vfe_common_subdev { }; struct vfe_device { /* Driver private data */ struct platform_device *pdev; struct msm_vfe_common_dev_data *common_data; struct msm_sd_subdev subdev; struct msm_isp_buf_mgr *buf_mgr; /* Resource info */ struct resource *vfe_irq; struct resource *vfe_mem; struct resource *vfe_vbif_mem; Loading @@ -635,19 +651,14 @@ struct vfe_device { struct resource *vfe_vbif_io; void __iomem *vfe_base; void __iomem *vfe_vbif_base; struct device *iommu_ctx[MAX_IOMMU_CTX]; /*Add secure context banks*/ struct device *iommu_secure_ctx[MAX_IOMMU_CTX]; struct regulator *fs_vfe; struct regulator *fs_camss; struct regulator *fs_mmagic_camss; struct clk **vfe_clk; uint32_t num_clk; uint32_t bus_perf_client; /* Sync variables*/ struct completion reset_complete; struct completion halt_complete; struct completion stream_config_complete; Loading @@ -655,47 +666,51 @@ struct vfe_device { struct mutex realtime_mutex; struct mutex core_mutex; struct mutex buf_mgr_mutex; spinlock_t shared_data_lock; spinlock_t reg_update_lock; spinlock_t tasklet_lock; /* Tasklet info */ atomic_t irq_cnt; uint8_t taskletq_idx; spinlock_t tasklet_lock; spinlock_t shared_data_lock; spinlock_t reg_update_lock; struct list_head tasklet_q; struct tasklet_struct vfe_tasklet; struct msm_vfe_tasklet_queue_cmd tasklet_queue_cmd[MSM_VFE_TASKLETQ_SIZE]; uint32_t vfe_hw_version; uint32_t dual_vfe_enable; /* Data structures */ struct msm_vfe_hardware_info *hw_info; struct msm_vfe_axi_shared_data axi_data; struct msm_vfe_stats_shared_data stats_data; struct msm_vfe_error_info error_info; struct msm_isp_buf_mgr *buf_mgr; int dump_reg; struct msm_vfe_fetch_engine_info fetch_engine_info; enum msm_vfe_hvx_streaming_cmd hvx_cmd; /* State variables */ uint32_t vfe_hw_version; int vfe_clk_idx; uint32_t vfe_open_cnt; uint8_t vt_enable; uint8_t ignore_error; uint32_t vfe_ub_policy; uint8_t reset_pending; uint8_t reg_update_requested; uint8_t reg_updated; uint32_t is_split; uint32_t dual_vfe_enable; unsigned long page_fault_addr; /* Debug variables */ int dump_reg; struct msm_isp_statistics *stats; struct msm_vfe_fetch_engine_info fetch_engine_info; uint64_t msm_isp_last_overflow_ab; uint64_t msm_isp_last_overflow_ib; uint64_t msm_isp_vfe_clk_rate; struct msm_isp_ub_info *ub_info; uint32_t vfe_ub_policy; uint32_t isp_sof_debug; uint32_t isp_raw0_debug; uint32_t isp_raw1_debug; uint32_t isp_raw2_debug; uint8_t reset_pending; enum msm_vfe_hvx_streaming_cmd hvx_cmd; uint8_t reg_update_requested; uint8_t reg_updated; struct dual_vfe_resource *dual_vfe_res; uint32_t is_split; unsigned long page_fault_addr; }; struct vfe_parent_device { Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp32.c +5 −3 Original line number Diff line number Diff line Loading @@ -280,7 +280,8 @@ static int msm_vfe32_init_hardware(struct vfe_device *vfe_dev) pr_err("%s: vfe ioremap failed\n", __func__); goto vfe_remap_failed; } vfe_dev->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = vfe_dev->vfe_base; vfe_dev->common_data->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = vfe_dev->vfe_base; vfe_dev->vfe_vbif_base = ioremap(vfe_dev->vfe_vbif_mem->start, resource_size(vfe_dev->vfe_vbif_mem)); Loading Loading @@ -341,7 +342,7 @@ static void msm_vfe32_release_hardware(struct vfe_device *vfe_dev) msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe32_2_clk_info, vfe_dev->vfe_clk, ARRAY_SIZE(msm_vfe32_2_clk_info), 0); vfe_dev->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = NULL; vfe_dev->common_data->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = NULL; iounmap(vfe_dev->vfe_base); vfe_dev->vfe_base = NULL; kfree(vfe_dev->vfe_clk); Loading Loading @@ -646,7 +647,8 @@ static void msm_vfe32_reg_update(struct vfe_device *vfe_dev, { if (vfe_dev->is_split && vfe_dev->pdev->id == ISP_VFE1) { msm_camera_io_w_mb(0xF, vfe_dev->dual_vfe_res->vfe_base[ISP_VFE0] + 0x260); vfe_dev->common_data->dual_vfe_res->vfe_base[ISP_VFE0] + 0x260); msm_camera_io_w_mb(0xF, vfe_dev->vfe_base + 0x260); } else if (!vfe_dev->is_split) { msm_camera_io_w_mb(0xF, vfe_dev->vfe_base + 0x260); Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp40.c +6 −4 Original line number Diff line number Diff line Loading @@ -306,7 +306,8 @@ static int msm_vfe40_init_hardware(struct vfe_device *vfe_dev) pr_err("%s: vfe ioremap failed\n", __func__); goto vfe_remap_failed; } vfe_dev->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = vfe_dev->vfe_base; vfe_dev->common_data->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = vfe_dev->vfe_base; vfe_dev->vfe_vbif_base = ioremap(vfe_dev->vfe_vbif_mem->start, resource_size(vfe_dev->vfe_vbif_mem)); Loading Loading @@ -356,7 +357,7 @@ static void msm_vfe40_release_hardware(struct vfe_device *vfe_dev) vfe_dev->vfe_vbif_base = NULL; msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe40_clk_info, vfe_dev->vfe_clk, vfe_dev->num_clk, 0); vfe_dev->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = NULL; vfe_dev->common_data->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = NULL; iounmap(vfe_dev->vfe_base); vfe_dev->vfe_base = NULL; kfree(vfe_dev->vfe_clk); Loading Loading @@ -746,12 +747,13 @@ static void msm_vfe40_reg_update(struct vfe_device *vfe_dev, vfe_dev->axi_data.src_info[VFE_PIX_0].reg_update_frame_id = vfe_dev->axi_data.src_info[VFE_PIX_0].frame_id; vfe_dev->reg_update_requested |= update_mask; vfe_dev->dual_vfe_res->reg_update_mask[vfe_dev->pdev->id] = vfe_dev->common_data->dual_vfe_res->reg_update_mask[vfe_dev->pdev->id] = vfe_dev->reg_update_requested; if ((vfe_dev->is_split && vfe_dev->pdev->id == ISP_VFE1) && ((frame_src == VFE_PIX_0) || (frame_src == VFE_SRC_MAX))) { msm_camera_io_w_mb(update_mask, vfe_dev->dual_vfe_res->vfe_base[ISP_VFE0] + 0x378); vfe_dev->common_data->dual_vfe_res->vfe_base[ISP_VFE0] + 0x378); msm_camera_io_w_mb(update_mask, vfe_dev->vfe_base + 0x378); } else if (!vfe_dev->is_split || Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp44.c +6 −4 Original line number Diff line number Diff line Loading @@ -174,7 +174,8 @@ static int msm_vfe44_init_hardware(struct vfe_device *vfe_dev) pr_err("%s: vfe ioremap failed\n", __func__); goto vfe_remap_failed; } vfe_dev->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = vfe_dev->vfe_base; vfe_dev->common_data->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = vfe_dev->vfe_base; vfe_dev->vfe_vbif_base = ioremap(vfe_dev->vfe_vbif_mem->start, resource_size(vfe_dev->vfe_vbif_mem)); Loading Loading @@ -222,7 +223,7 @@ static void msm_vfe44_release_hardware(struct vfe_device *vfe_dev) vfe_dev->vfe_vbif_base = NULL; msm_cam_clk_enable(&vfe_dev->pdev->dev, msm_vfe44_clk_info, vfe_dev->vfe_clk, vfe_dev->num_clk, 0); vfe_dev->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = NULL; vfe_dev->common_data->dual_vfe_res->vfe_base[vfe_dev->pdev->id] = NULL; iounmap(vfe_dev->vfe_base); vfe_dev->vfe_base = NULL; kfree(vfe_dev->vfe_clk); Loading Loading @@ -615,12 +616,13 @@ static void msm_vfe44_reg_update(struct vfe_device *vfe_dev, vfe_dev->axi_data.src_info[VFE_PIX_0].reg_update_frame_id = vfe_dev->axi_data.src_info[VFE_PIX_0].frame_id; vfe_dev->reg_update_requested |= update_mask; vfe_dev->dual_vfe_res->reg_update_mask[vfe_dev->pdev->id] = vfe_dev->common_data->dual_vfe_res->reg_update_mask[vfe_dev->pdev->id] = vfe_dev->reg_update_requested; if ((vfe_dev->is_split && vfe_dev->pdev->id == ISP_VFE1) && ((frame_src == VFE_PIX_0) || (frame_src == VFE_SRC_MAX))) { msm_camera_io_w_mb(update_mask, vfe_dev->dual_vfe_res->vfe_base[ISP_VFE0] + 0x378); vfe_dev->common_data->dual_vfe_res->vfe_base[ISP_VFE0] + 0x378); msm_camera_io_w_mb(update_mask, vfe_dev->vfe_base + 0x378); } else if (!vfe_dev->is_split || Loading