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

Commit aabfbaba authored by Harsh Shah's avatar Harsh Shah
Browse files

ARM: dts: msm: Make VFE HW nodes available to bus



Decouple VFE hw dtsi nodes and parent dtsi node so that the child
nodes are accessible to clock driver in bus during boot. This change
is needed for clock driver to associate clock table with VFE HW
device node at boot time. The hierarchy of parent and child VFE nodes
is now established in probe.

Change-Id: If37d5b9d1388d91c35097a9687d5bae79ebb2abb
Signed-off-by: default avatarHarsh Shah <harshs@codeaurora.org>
parent ad9fe5a4
Loading
Loading
Loading
Loading
+107 −108
Original line number Original line Diff line number Diff line
@@ -48,11 +48,6 @@ Required properties for child node:


Example:
Example:


qcom,vfe {
	compatible = "qcom,vfe";
	#address-cells = <1>;
	#size-cells = <1>;

vfe0: qcom,vfe0@fda10000 {
vfe0: qcom,vfe0@fda10000 {
	cell-index = <0>;
	cell-index = <0>;
	compatible = "qcom,vfe44";
	compatible = "qcom,vfe44";
@@ -63,38 +58,38 @@ qcom,vfe {
	interrupt-names = "vfe";
	interrupt-names = "vfe";
	vdd-supply = <&gdsc_vfe>;
	vdd-supply = <&gdsc_vfe>;
	qos-entries = <8>;
	qos-entries = <8>;
		qos-regs = <0x2C4 0x2C8 0x2CC 0x2D0 0x2D4 0x2D8
	qos-regs = <0x2c4 0x2c8 0x2cc 0x2d0 0x2d4 0x2d8
			0x2DC 0x2E0>;
		0x2dc 0x2e0>;
		qos-settings = <0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA
	qos-settings = <0xaaaaaaaa 0xaaaaaaaa 0xaaaaaaaa
			0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA
		0xaaaaaaaa 0xaaaaaaaa 0xaaaaaaaa
			0xAAAAAAAA 0x0002AAAA>;
		0xaaaaaaaa 0x0002aaaa>;
		qos-v2-settings = <0xAAA9AAA9 0xAAA9AAA9 0xAAA9AAA9
	qos-v2-settings = <0xaaa9aaa9 0xaaa9aaa9 0xaaa9aaa9
			0xAAA9AAA9 0xAAA9AAA9 0xAAA9AAA9
		0xaaa9aaa9 0xaaa9aaa9 0xaaa9aaa9
			0xAAA9AAA9 0x0001AAA9>;
		0xaaa9aaa9 0x0001aaa9>;
		qos-v3-settings = <0xAAA9AAA9 0xAAA9AAA9 0xAAA9AAA9
	qos-v3-settings = <0xaaa9aaa9 0xaaa9aaa9 0xaaa9aaa9
			0xAAA9AAA9 0xAAA9AAA9 0xAAA9AAA9
		0xaaa9aaa9 0xaaa9aaa9 0xaaa9aaa9
			0xAAA9AAA9 0x0001AAA9>;
		0xaaa9aaa9 0x0001aaa9>;
	vbif-entries = <17>;
	vbif-entries = <17>;
		vbif-regs = <0x4 0xB0 0xB4 0xB8 0xC0 0xC4 0xC8 0xD0
	vbif-regs = <0x4 0xb0 0xb4 0xb8 0xc0 0xc4 0xc8 0xd0
			0xD4 0xD8 0xDC 0xF0 0x178 0x17C 0x124 0x160
		0xd4 0xd8 0xdc 0xf0 0x178 0x17c 0x124 0x160
		0x164>;
		0x164>;
	vbif-settings = <0x1 0x01010101 0x01010101 0x10010110
	vbif-settings = <0x1 0x01010101 0x01010101 0x10010110
		0x10101010 0x10101010 0x10101010 0x00001010
		0x10101010 0x10101010 0x10101010 0x00001010
		0x00001010 0x00000707 0x00000707 0x00000030
		0x00001010 0x00000707 0x00000707 0x00000030
			0x00000FFF 0x0FFF0FFF 0x00000001 0x22222222
		0x00000fff 0x0fff0fff 0x00000001 0x22222222
		0x00002222>;
		0x00002222>;
	vbif-v2-entries = <16>;
	vbif-v2-entries = <16>;
		vbif-v2-regs = <0x4 0xB0 0xB4 0xB8 0xC0 0xC4 0xC8 0xD0
	vbif-v2-regs = <0x4 0xb0 0xb4 0xb8 0xc0 0xc4 0xc8 0xd0
			0xD4 0xD8 0xF0 0x178 0x17C 0x124 0x160
		0xd4 0xd8 0xf0 0x178 0x17c 0x124 0x160
		0x164>;
		0x164>;
	vbif-v2-settings = <0x1 0x10101010 0x10101010 0x10101010
	vbif-v2-settings = <0x1 0x10101010 0x10101010 0x10101010
		0x10101010 0x10101010 0x10101010 0x00000010
		0x10101010 0x10101010 0x10101010 0x00000010
			0x00000010 0x00000707 0x00000010 0x00000FFF
		0x00000010 0x00000707 0x00000010 0x00000fff
			0x0FFF0FFF 0x00000003 0x22222222 0x00002222>;
		0x0fff0fff 0x00000003 0x22222222 0x00002222>;
	ds-entries = <17>;
	ds-entries = <17>;
		ds-regs = <0x988 0x98C 0x990 0x994 0x998
	ds-regs = <0x988 0x98c 0x990 0x994 0x998
			0x99C 0x9A0 0x9A4 0x9A8 0x9AC 0x9B0
		0x99c 0x9a0 0x9a4 0x9a8 0x9ac 0x9b0
			0x9B4 0x9B8 0x9BC 0x9C0 0x9C4 0x9C8>;
		0x9b4 0x9b8 0x9bc 0x9c0 0x9c4 0x9c8>;
	ds-settings = <0x44441111 0x44441111 0x44441111
	ds-settings = <0x44441111 0x44441111 0x44441111
		0x44441111 0x44441111 0x44441111
		0x44441111 0x44441111 0x44441111
		0x44441111 0x44441111 0x44441111
		0x44441111 0x44441111 0x44441111
@@ -116,38 +111,38 @@ qcom,vfe {
	interrupt-names = "vfe";
	interrupt-names = "vfe";
	vdd-supply = <&gdsc_vfe>;
	vdd-supply = <&gdsc_vfe>;
	qos-entries = <8>;
	qos-entries = <8>;
		qos-regs = <0x2C4 0x2C8 0x2CC 0x2D0 0x2D4 0x2D8
	qos-regs = <0x2c4 0x2c8 0x2cc 0x2d0 0x2d4 0x2d8
			0x2DC 0x2E0>;
		0x2dc 0x2e0>;
		qos-settings = <0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA
	qos-settings = <0xaaaaaaaa 0xaaaaaaaa 0xaaaaaaaa
			0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA
		0xaaaaaaaa 0xaaaaaaaa 0xaaaaaaaa
			0xAAAAAAAA 0x0002AAAA>;
		0xaaaaaaaa 0x0002aaaa>;
		qos-v2-settings = <0xAAA9AAA9 0xAAA9AAA9 0xAAA9AAA9
	qos-v2-settings = <0xaaa9aaa9 0xaaa9aaa9 0xaaa9aaa9
			0xAAA9AAA9 0xAAA9AAA9 0xAAA9AAA9
		0xaaa9aaa9 0xaaa9aaa9 0xaaa9aaa9
			0xAAA9AAA9 0x0001AAA9>;
		0xaaa9aaa9 0x0001aaa9>;
		qos-v3-settings = <0xAAA9AAA9 0xAAA9AAA9 0xAAA9AAA9
	qos-v3-settings = <0xaaa9aaa9 0xaaa9aaa9 0xaaa9aaa9
			0xAAA9AAA9 0xAAA9AAA9 0xAAA9AAA9
		0xaaa9aaa9 0xaaa9aaa9 0xaaa9aaa9
			0xAAA9AAA9 0x0001AAA9>;
		0xaaa9aaa9 0x0001aaa9>;
	vbif-entries = <17>;
	vbif-entries = <17>;
		vbif-regs = <0x4 0xB0 0xB4 0xB8 0xC0 0xC4 0xC8 0xD0
	vbif-regs = <0x4 0xb0 0xb4 0xb8 0xc0 0xc4 0xc8 0xd0
			0xD4 0xD8 0xDC 0xF0 0x178 0x17C 0x124 0x160
		0xd4 0xd8 0xdc 0xf0 0x178 0x17c 0x124 0x160
		0x164>;
		0x164>;
	vbif-settings = <0x1 0x01010101 0x01010101 0x10010110
	vbif-settings = <0x1 0x01010101 0x01010101 0x10010110
		0x10101010 0x10101010 0x10101010 0x00001010
		0x10101010 0x10101010 0x10101010 0x00001010
		0x00001010 0x00000707 0x00000707 0x00000030
		0x00001010 0x00000707 0x00000707 0x00000030
			0x00000FFF 0x0FFF0FFF 0x00000001 0x22222222
		0x00000fff 0x0fff0fff 0x00000001 0x22222222
		0x00002222>;
		0x00002222>;
	vbif-v2-entries = <16>;
	vbif-v2-entries = <16>;
		vbif-v2-regs = <0x4 0xB0 0xB4 0xB8 0xC0 0xC4 0xC8 0xD0
	vbif-v2-regs = <0x4 0xb0 0xb4 0xb8 0xc0 0xc4 0xc8 0xd0
			0xD4 0xD8 0xF0 0x178 0x17C 0x124 0x160
		0xd4 0xd8 0xf0 0x178 0x17c 0x124 0x160
		0x164>;
		0x164>;
	vbif-v2-settings = <0x1 0x10101010 0x10101010 0x10101010
	vbif-v2-settings = <0x1 0x10101010 0x10101010 0x10101010
		0x10101010 0x10101010 0x10101010 0x00000010
		0x10101010 0x10101010 0x10101010 0x00000010
			0x00000010 0x00000707 0x00000010 0x00000FFF
		0x00000010 0x00000707 0x00000010 0x00000fff
			0x0FFF0FFF 0x00000003 0x22222222 0x00002222>;
		0x0fff0fff 0x00000003 0x22222222 0x00002222>;
	ds-entries = <17>;
	ds-entries = <17>;
		ds-regs = <0x988 0x98C 0x990 0x994 0x998
	ds-regs = <0x988 0x98c 0x990 0x994 0x998
			0x99C 0x9A0 0x9A4 0x9A8 0x9AC 0x9B0
		0x99c 0x9a0 0x9a4 0x9a8 0x9ac 0x9b0
			0x9B4 0x9B8 0x9BC 0x9C0 0x9C4 0x9C8>;
		0x9b4 0x9b8 0x9bc 0x9c0 0x9c4 0x9c8>;
	ds-settings = <0x44441111 0x44441111 0x44441111
	ds-settings = <0x44441111 0x44441111 0x44441111
		0x44441111 0x44441111 0x44441111
		0x44441111 0x44441111 0x44441111
		0x44441111 0x44441111 0x44441111
		0x44441111 0x44441111 0x44441111
@@ -158,6 +153,10 @@ qcom,vfe {
	max-clk-nominal = <465000000>;
	max-clk-nominal = <465000000>;
	max-clk-turbo = <600000000>;
	max-clk-turbo = <600000000>;
};
};

qcom,vfe {
	compatible = "qcom,vfe";
	num_child = <2>;
};
};


In version specific file one needs to move only entries that differ between
In version specific file one needs to move only entries that differ between
+145 −147
Original line number Original line Diff line number Diff line
@@ -273,12 +273,6 @@
		status = "ok";
		status = "ok";
	};
	};


	qcom,vfe {
		compatible = "qcom,vfe";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

	vfe0: qcom,vfe0@a10000 {
	vfe0: qcom,vfe0@a10000 {
		cell-index = <0>;
		cell-index = <0>;
		compatible = "qcom,vfe47";
		compatible = "qcom,vfe47";
@@ -312,39 +306,39 @@
		qcom,clock-rates = <0 0 0 0 320000000 0 0 0 0 0 0 0>;
		qcom,clock-rates = <0 0 0 0 320000000 0 0 0 0 0 0 0>;
		status = "ok";
		status = "ok";
		qos-entries = <8>;
		qos-entries = <8>;
			qos-regs = <0x404 0x408 0x40C 0x410 0x414 0x418
		qos-regs = <0x404 0x408 0x40c 0x410 0x414 0x418
				0x41C 0x420>;
			0x41c 0x420>;
			qos-settings = <0xAAA9AAA9
		qos-settings = <0xaaa9aaa9
				0xAAA9AAA9
			0xaaa9aaa9
				0xAAA9AAA9
			0xaaa9aaa9
				0xAAA9AAA9
			0xaaa9aaa9
				0xAAA9AAA9
			0xaaa9aaa9
				0xAAA9AAA9
			0xaaa9aaa9
				0xAAA9AAA9
			0xaaa9aaa9
				0x0001AAA9>;
			0x0001aaa9>;
		vbif-entries = <1>;
		vbif-entries = <1>;
		vbif-regs = <0x124>;
		vbif-regs = <0x124>;
		vbif-settings = <0x3>;
		vbif-settings = <0x3>;
		ds-entries = <17>;
		ds-entries = <17>;
			ds-regs = <0x424 0x428 0x42C 0x430 0x434
		ds-regs = <0x424 0x428 0x42c 0x430 0x434
				0x438 0x43C 0x440 0x444 0x448 0x44C
			0x438 0x43c 0x440 0x444 0x448 0x44c
				0x450 0x454 0x458 0x45C 0x460 0x464>;
			0x450 0x454 0x458 0x45c 0x460 0x464>;
			ds-settings = <0xCCCC0011
		ds-settings = <0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
			0x40000103>;
			0x40000103>;
		max-clk-svs = <300000000>;
		max-clk-svs = <300000000>;
		max-clk-nominal = <465000000>;
		max-clk-nominal = <465000000>;
@@ -384,44 +378,48 @@
		qcom,clock-rates = <0 0 0 0 320000000 0 0 0 0 0 0 0>;
		qcom,clock-rates = <0 0 0 0 320000000 0 0 0 0 0 0 0>;
		status = "ok";
		status = "ok";
		qos-entries = <8>;
		qos-entries = <8>;
			qos-regs = <0x404 0x408 0x40C 0x410 0x414 0x418
		qos-regs = <0x404 0x408 0x40c 0x410 0x414 0x418
				0x41C 0x420>;
			0x41c 0x420>;
			qos-settings = <0xAAA9AAA9
		qos-settings = <0xaaa9aaa9
				0xAAA9AAA9
			0xaaa9aaa9
				0xAAA9AAA9
			0xaaa9aaa9
				0xAAA9AAA9
			0xaaa9aaa9
				0xAAA9AAA9
			0xaaa9aaa9
				0xAAA9AAA9
			0xaaa9aaa9
				0xAAA9AAA9
			0xaaa9aaa9
				0x0001AAA9>;
			0x0001aaa9>;
		vbif-entries = <1>;
		vbif-entries = <1>;
		vbif-regs = <0x124>;
		vbif-regs = <0x124>;
		vbif-settings = <0x3>;
		vbif-settings = <0x3>;
		ds-entries = <17>;
		ds-entries = <17>;
			ds-regs = <0x424 0x428 0x42C 0x430 0x434
		ds-regs = <0x424 0x428 0x42c 0x430 0x434
				0x438 0x43C 0x440 0x444 0x448 0x44C
			0x438 0x43c 0x440 0x444 0x448 0x44c
				0x450 0x454 0x458 0x45C 0x460 0x464>;
			0x450 0x454 0x458 0x45c 0x460 0x464>;
			ds-settings = <0xCCCC0011
		ds-settings = <0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
				0xCCCC0011
			0xcccc0011
			0x40000103>;
			0x40000103>;
		max-clk-svs = <300000000>;
		max-clk-svs = <300000000>;
		max-clk-nominal = <465000000>;
		max-clk-nominal = <465000000>;
		max-clk-turbo = <600000000>;
		max-clk-turbo = <600000000>;
	};
	};

	qcom,vfe {
		compatible = "qcom,vfe";
		num_child = <2>;
	};
	};


	qcom,cam_smmu {
	qcom,cam_smmu {
+2 −2
Original line number Original line Diff line number Diff line
ccflags-y += -Idrivers/media/platform/msm/camera_v2
ccflags-y += -Idrivers/media/platform/msm/camera_v2
ccflags-y += -Idrivers/media/platform/msm/camera_v2/sensor/io
ccflags-y += -Idrivers/media/platform/msm/camera_v2/sensor/io
ccflags-y += -Idrivers/media/platform/msm/camera_v2/common/
ccflags-y += -Idrivers/media/platform/msm/camera_v2/common/
obj-$(CONFIG_MSMB_CAMERA) += msm_isp.o msm_buf_mgr.o msm_isp_util.o msm_isp_axi_util.o msm_isp_stats_util.o
obj-$(CONFIG_MSMB_CAMERA) += msm_buf_mgr.o msm_isp_util.o msm_isp_axi_util.o msm_isp_stats_util.o
obj-$(CONFIG_MSMB_CAMERA) += msm_isp47.o msm_isp46.o msm_isp44.o msm_isp40.o
obj-$(CONFIG_MSMB_CAMERA) += msm_isp47.o msm_isp46.o msm_isp44.o msm_isp40.o msm_isp.o
+52 −19
Original line number Original line Diff line number Diff line
@@ -433,13 +433,43 @@ static struct v4l2_file_operations msm_isp_v4l2_fops = {
	.unlocked_ioctl = msm_isp_v4l2_fops_ioctl
	.unlocked_ioctl = msm_isp_v4l2_fops_ioctl
};
};


static int vfe_set_common_data(struct platform_device *pdev)
{
	struct v4l2_subdev *sd = NULL;
	struct vfe_device *vfe_dev = NULL;

	sd = (struct v4l2_subdev *)platform_get_drvdata(pdev);
	if (!sd) {
		pr_err("%s: Error! Cannot find subdev\n", __func__);
		return -EPERM;
	}
	vfe_dev = (struct vfe_device *)v4l2_get_subdevdata(sd);
	if (!vfe_dev) {
		pr_err("%s: Error! Cannot find vfe_dev\n", __func__);
		return -EPERM;
	}

	vfe_dev->common_data = (struct msm_vfe_common_dev_data *)
		pdev->dev.platform_data;

	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->common_data->dual_vfe_res->stats_data[vfe_dev->pdev->id] =
		&vfe_dev->stats_data;
	vfe_dev->common_data->dual_vfe_res->vfe_dev[vfe_dev->pdev->id] =
		vfe_dev;
	return 0;
}

static int vfe_probe(struct platform_device *pdev)
static int vfe_probe(struct platform_device *pdev)
{
{
	struct vfe_parent_device *vfe_parent_dev;
	struct vfe_parent_device *vfe_parent_dev;
	int rc = 0;
	int rc = 0;
	struct device_node *node;
	struct device_node *node;
	struct platform_device *new_dev = NULL;
	struct platform_device *new_dev = NULL;
	const struct device_node *dt_node = pdev->dev.of_node;
	uint32_t i = 0;
	char name[10] = "\0";


	vfe_parent_dev = kzalloc(sizeof(struct vfe_parent_device),
	vfe_parent_dev = kzalloc(sizeof(struct vfe_parent_device),
		GFP_KERNEL);
		GFP_KERNEL);
@@ -459,18 +489,30 @@ static int vfe_probe(struct platform_device *pdev)
	memset(&vfe_common_data, 0, sizeof(vfe_common_data));
	memset(&vfe_common_data, 0, sizeof(vfe_common_data));
	spin_lock_init(&vfe_common_data.common_dev_data_lock);
	spin_lock_init(&vfe_common_data.common_dev_data_lock);


	for_each_available_child_of_node(dt_node, node) {
	of_property_read_u32(pdev->dev.of_node,
		new_dev = of_platform_device_create(node, NULL, &pdev->dev);
		"num_child", &vfe_parent_dev->num_hw_sd);

	for (i = 0; i < vfe_parent_dev->num_hw_sd; i++) {
		node = NULL;
		snprintf(name, sizeof(name), "qcom,vfe%d", i);
		node = of_find_node_by_name(NULL, name);
		if (!node) {
			pr_err("%s: Error! Cannot find node in dtsi %s\n",
				__func__, name);
			goto probe_fail2;
		}
		new_dev = of_find_device_by_node(node);
		if (!new_dev) {
		if (!new_dev) {
			pr_err("Failed to create device %s\n", node->name);
			pr_err("%s: Failed to find device on bus %s\n",
				__func__, node->name);
			goto probe_fail2;
			goto probe_fail2;
		}
		}
		vfe_parent_dev->child_list[vfe_parent_dev->num_hw_sd++] =
		vfe_parent_dev->child_list[i] = new_dev;
			new_dev;
		new_dev->dev.platform_data =
		new_dev->dev.platform_data =
			(void *)vfe_parent_dev->common_sd->common_data;
			(void *)vfe_parent_dev->common_sd->common_data;

		rc = vfe_set_common_data(new_dev);
		pr_debug("%s: device creation done\n", __func__);
		if (rc < 0)
			goto probe_fail2;
	}
	}


	vfe_parent_dev->num_sd = vfe_parent_dev->num_hw_sd;
	vfe_parent_dev->num_sd = vfe_parent_dev->num_hw_sd;
@@ -513,9 +555,6 @@ int vfe_hw_probe(struct platform_device *pdev)
		goto probe_fail2;
		goto probe_fail2;
	}
	}


	vfe_dev->common_data = (struct msm_vfe_common_dev_data *)
		pdev->dev.platform_data;

	if (pdev->dev.of_node) {
	if (pdev->dev.of_node) {
		of_property_read_u32(pdev->dev.of_node,
		of_property_read_u32(pdev->dev.of_node,
			"cell-index", &pdev->id);
			"cell-index", &pdev->id);
@@ -542,13 +581,7 @@ int vfe_hw_probe(struct platform_device *pdev)
	ISP_DBG("%s: device id = %d\n", __func__, pdev->id);
	ISP_DBG("%s: device id = %d\n", __func__, pdev->id);


	vfe_dev->pdev = pdev;
	vfe_dev->pdev = pdev;
	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->common_data->dual_vfe_res->stats_data[vfe_dev->pdev->id] =
		&vfe_dev->stats_data;
	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);
	rc = vfe_dev->hw_info->vfe_ops.core_ops.get_platform_data(vfe_dev);
	if (rc < 0) {
	if (rc < 0) {
@@ -642,7 +675,7 @@ static void __exit msm_vfe_exit_module(void)
	platform_driver_unregister(&vfe_driver);
	platform_driver_unregister(&vfe_driver);
}
}


module_init(msm_vfe_init_module);
late_initcall(msm_vfe_init_module);
module_exit(msm_vfe_exit_module);
module_exit(msm_vfe_exit_module);
MODULE_DESCRIPTION("MSM VFE driver");
MODULE_DESCRIPTION("MSM VFE driver");
MODULE_LICENSE("GPL v2");
MODULE_LICENSE("GPL v2");
+5 −0
Original line number Original line Diff line number Diff line
@@ -2085,6 +2085,11 @@ int msm_isp_open_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)


	ISP_DBG("%s open_cnt %u\n", __func__, vfe_dev->vfe_open_cnt);
	ISP_DBG("%s open_cnt %u\n", __func__, vfe_dev->vfe_open_cnt);


	if (vfe_dev->common_data == NULL) {
		pr_err("%s: Error in probe. No common_data\n", __func__);
		return -EINVAL;
	}

	mutex_lock(&vfe_dev->realtime_mutex);
	mutex_lock(&vfe_dev->realtime_mutex);
	mutex_lock(&vfe_dev->core_mutex);
	mutex_lock(&vfe_dev->core_mutex);