Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 58687d66 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera: isp: Support dual vfe sync"

parents e48eafaf 6ba8b099
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -617,6 +617,7 @@ int vfe_hw_probe(struct platform_device *pdev)
	/*struct msm_cam_subdev_info sd_info;*/
	const struct of_device_id *match_dev;
	int rc = 0;
	struct msm_vfe_hardware_info *hw_info;

	vfe_dev = kzalloc(sizeof(struct vfe_device), GFP_KERNEL);
	if (!vfe_dev) {
@@ -667,6 +668,7 @@ int vfe_hw_probe(struct platform_device *pdev)
	ISP_DBG("%s: device id = %d\n", __func__, pdev->id);

	vfe_dev->pdev = pdev;
	hw_info = &vfe_dev->hw_info;

	rc = vfe_dev->hw_info->vfe_ops.platform_ops.get_platform_data(vfe_dev);
	if (rc < 0) {
@@ -675,6 +677,15 @@ int vfe_hw_probe(struct platform_device *pdev)
		goto probe_fail3;
	}

	if (
	hw_info->vfe_ops.platform_ops.get_dual_sync_platform_data) {
		rc =
		hw_info->vfe_ops.platform_ops.get_dual_sync_platform_data(
			vfe_dev);
			if (rc < 0)
				pr_err("%s:fail get dual_sync\n", __func__);
	}

	v4l2_subdev_init(&vfe_dev->subdev.sd, &msm_vfe_v4l2_subdev_ops);
	vfe_dev->subdev.sd.internal_ops =
		&msm_vfe_subdev_internal_ops;
+19 −0
Original line number Diff line number Diff line
@@ -153,10 +153,12 @@ struct msm_vfe_irq_ops {
		struct msm_isp_timestamp *ts);
	void (*process_axi_irq)(struct vfe_device *vfe_dev,
		uint32_t irq_status0, uint32_t irq_status1,
		uint32_t dual_irq_status,
		uint32_t pingpong_status,
		struct msm_isp_timestamp *ts);
	void (*process_stats_irq)(struct vfe_device *vfe_dev,
		uint32_t irq_status0, uint32_t irq_status1,
		uint32_t dual_irq_status,
		uint32_t pingpong_status,
		struct msm_isp_timestamp *ts);
	void (*config_irq)(struct vfe_device *vfe_dev,
@@ -164,6 +166,11 @@ struct msm_vfe_irq_ops {
		enum msm_isp_irq_operation);
	void (*preprocess_camif_irq)(struct vfe_device *vfe_dev,
		uint32_t irq_status0);
	void (*dual_config_irq)(struct vfe_device *vfe_dev,
		uint32_t irq_status0, uint32_t irq_status1,
		enum msm_isp_irq_operation);
	void (*read_and_clear_dual_irq_status)(struct vfe_device *vfe_dev,
		uint32_t *dual_irq_status0);
};

struct msm_vfe_axi_ops {
@@ -335,6 +342,9 @@ struct msm_vfe_platform_ops {
		struct msm_isp_bandwidth_mgr *isp_bandwidth_mgr);
	int (*update_bw)(struct msm_isp_bandwidth_mgr *isp_bandwidth_mgr);
	void (*deinit_bw_mgr)(struct msm_isp_bandwidth_mgr *isp_bandwidth_mgr);
	void (*set_dual_vfe_mode)(struct vfe_device *vfe_dev);
	void (*clear_dual_vfe_mode)(struct vfe_device *vfe_dev);
	int (*get_dual_sync_platform_data)(struct vfe_device *vfe_dev);
};

struct msm_vfe_ops {
@@ -597,6 +607,7 @@ struct msm_vfe_tasklet_queue_cmd {
	uint32_t vfeInterruptStatus0;
	uint32_t vfeInterruptStatus1;
	uint32_t vfe_pingpong_status;
	uint32_t dualvfeInterruptstatus;
	struct msm_isp_timestamp ts;
	uint8_t cmd_used;
	struct vfe_device *vfe_dev;
@@ -828,6 +839,8 @@ struct vfe_device {
	uint32_t dual_vfe_enable;
	unsigned long page_fault_addr;
	uint32_t vfe_hw_limit;
	uint32_t dual_vfe_sync_mode;
	uint32_t dual_vfe_sync_enable;

	/* Debug variables */
	int dump_reg;
@@ -849,6 +862,12 @@ struct vfe_device {
	/* total bandwidth per vfe */
	uint64_t total_bandwidth;
	struct isp_proc *isp_page;

	/* Dual VFE IRQ CAMSS Info*/
	void __iomem *camss_base;
	struct resource *dual_vfe_irq;
	/* irq info */
	uint32_t dual_irq_mask;
};

struct vfe_parent_device {
+6 −0
Original line number Diff line number Diff line
@@ -2252,6 +2252,9 @@ struct msm_vfe_hardware_info vfe40_hw_info = {
			.process_epoch_irq = msm_vfe40_process_epoch_irq,
			.config_irq = msm_vfe40_config_irq,
			.preprocess_camif_irq = msm_isp47_preprocess_camif_irq,
			.dual_config_irq = NULL,
			.read_and_clear_dual_irq_status =
				NULL,
		},
		.axi_ops = {
			.reload_wm = msm_vfe40_axi_reload_wm,
@@ -2344,6 +2347,9 @@ struct msm_vfe_hardware_info vfe40_hw_info = {
			.init_bw_mgr = msm_vfe47_init_bandwidth_mgr,
			.deinit_bw_mgr = msm_vfe47_deinit_bandwidth_mgr,
			.update_bw = msm_vfe47_update_bandwidth,
			.set_dual_vfe_mode = NULL,
			.clear_dual_vfe_mode = NULL,
			.get_dual_sync_platform_data = NULL,
		}
	},
	.dmi_reg_offset = 0x918,
+6 −0
Original line number Diff line number Diff line
@@ -1835,6 +1835,9 @@ struct msm_vfe_hardware_info vfe44_hw_info = {
			.process_epoch_irq = msm_vfe44_process_epoch_irq,
			.config_irq = msm_vfe44_config_irq,
			.preprocess_camif_irq = msm_isp47_preprocess_camif_irq,
			.dual_config_irq = NULL,
			.read_and_clear_dual_irq_status =
				NULL,
		},
		.axi_ops = {
			.reload_wm = msm_vfe44_axi_reload_wm,
@@ -1925,6 +1928,9 @@ struct msm_vfe_hardware_info vfe44_hw_info = {
			.init_bw_mgr = msm_vfe47_init_bandwidth_mgr,
			.deinit_bw_mgr = msm_vfe47_deinit_bandwidth_mgr,
			.update_bw = msm_vfe47_update_bandwidth,
			.set_dual_vfe_mode = NULL,
			.clear_dual_vfe_mode = NULL,
			.get_dual_sync_platform_data = NULL,
		}
	},
	.dmi_reg_offset = 0x918,
+6 −0
Original line number Diff line number Diff line
@@ -1904,6 +1904,9 @@ struct msm_vfe_hardware_info vfe46_hw_info = {
			.process_epoch_irq = msm_vfe46_process_epoch_irq,
			.config_irq = msm_vfe46_config_irq,
			.preprocess_camif_irq = msm_isp47_preprocess_camif_irq,
			.dual_config_irq = NULL,
			.read_and_clear_dual_irq_status =
				NULL,
		},
		.axi_ops = {
			.reload_wm = msm_vfe46_axi_reload_wm,
@@ -1994,6 +1997,9 @@ struct msm_vfe_hardware_info vfe46_hw_info = {
			.init_bw_mgr = msm_vfe47_init_bandwidth_mgr,
			.deinit_bw_mgr = msm_vfe47_deinit_bandwidth_mgr,
			.update_bw = msm_vfe47_update_bandwidth,
			.set_dual_vfe_mode = NULL,
			.clear_dual_vfe_mode = NULL,
			.get_dual_sync_platform_data = NULL,
		}
	},
	.dmi_reg_offset = 0xACC,
Loading