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

Commit 03143540 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ARM: dts: msm: Add OPP table support for camera clocks on msm8996"

parents 5f9446af 7cf072d8
Loading
Loading
Loading
Loading
+107 −108
Original line number Diff line number Diff line
@@ -48,11 +48,6 @@ Required properties for child node:

Example:

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

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

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

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

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

	qcom,cam_smmu {
+3 −0
Original line number Diff line number Diff line
@@ -740,6 +740,9 @@
		vdd_dig-supply = <&pm8994_s1_corner>;
		mmpll4_dig-supply = <&pm8994_s1_corner>;
		mmpll4_analog-supply = <&pm8994_l12>;
		qcom,vfe0_clk_src-opp-store-vcorner = <&vfe0>;
		qcom,vfe1_clk_src-opp-store-vcorner = <&vfe1>;
		qcom,cpp_clk_src-opp-store-vcorner = <&cpp>;
		clock-names = "xo", "gpll0", "gpll0_div",
				"pclk0_src", "pclk1_src",
				"byte0_src", "byte1_src",
+2 −2
Original line number Diff line number Diff line
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/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_isp47.o msm_isp46.o msm_isp44.o msm_isp40.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 msm_isp.o
+52 −19
Original line number 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
};

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)
{
	struct vfe_parent_device *vfe_parent_dev;
	int rc = 0;
	struct device_node *node;
	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),
		GFP_KERNEL);
@@ -459,18 +489,30 @@ static int vfe_probe(struct platform_device *pdev)
	memset(&vfe_common_data, 0, sizeof(vfe_common_data));
	spin_lock_init(&vfe_common_data.common_dev_data_lock);

	for_each_available_child_of_node(dt_node, node) {
		new_dev = of_platform_device_create(node, NULL, &pdev->dev);
	of_property_read_u32(pdev->dev.of_node,
		"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) {
			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;
		}
		vfe_parent_dev->child_list[vfe_parent_dev->num_hw_sd++] =
			new_dev;
		vfe_parent_dev->child_list[i] = new_dev;
		new_dev->dev.platform_data =
			(void *)vfe_parent_dev->common_sd->common_data;

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

	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;
	}

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

	if (pdev->dev.of_node) {
		of_property_read_u32(pdev->dev.of_node,
			"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);

	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);
	if (rc < 0) {
@@ -642,7 +675,7 @@ static void __exit msm_vfe_exit_module(void)
	platform_driver_unregister(&vfe_driver);
}

module_init(msm_vfe_init_module);
late_initcall(msm_vfe_init_module);
module_exit(msm_vfe_exit_module);
MODULE_DESCRIPTION("MSM VFE driver");
MODULE_LICENSE("GPL v2");
Loading