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

Commit 7bbe2010 authored by Iliya Varadzhakov's avatar Iliya Varadzhakov Committed by Stephen Boyd
Browse files

msm: cpp: Attach/detach iommu device on open/close node



Change the iommu device attachement to happen on
cpp_open_node and detachment in cpp_close_node.
It decrease the power consumption when Camera is not
working.

Change-Id: I7f8d65e14af2949d9512191459d313ac4d3fff9c
Signed-off-by: default avatarIliya Varadzhakov <ivarad@codeaurora.org>
parent 37742251
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -856,6 +856,7 @@ static int cpp_open_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
	cpp_dev->cpp_open_cnt++;
	if (cpp_dev->cpp_open_cnt == 1) {
		cpp_init_hardware(cpp_dev);
		iommu_attach_device(cpp_dev->domain, cpp_dev->iommu_ctx);
		cpp_init_mem(cpp_dev);
		cpp_dev->state = CPP_STATE_IDLE;
	}
@@ -922,6 +923,7 @@ static int cpp_close_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
			msm_camera_io_r(cpp_dev->cpp_hw_base + 0x8C));
		msm_camera_io_w(0x0, cpp_dev->base + MSM_CPP_MICRO_CLKEN_CTL);
		cpp_deinit_mem(cpp_dev);
		iommu_detach_device(cpp_dev->domain, cpp_dev->iommu_ctx);
		cpp_release_hardware(cpp_dev);
		cpp_dev->state = CPP_STATE_OFF;
	}
@@ -1717,6 +1719,7 @@ static int cpp_register_domain(void)
	return msm_register_domain(&cpp_fw_layout);
}


static int cpp_probe(struct platform_device *pdev)
{
	struct cpp_device *cpp_dev;
@@ -1831,7 +1834,6 @@ static int cpp_probe(struct platform_device *pdev)
	cpp_dev->msm_sd.sd.entity.revision = cpp_dev->msm_sd.sd.devnode->num;
	cpp_dev->state = CPP_STATE_BOOT;
	cpp_init_hardware(cpp_dev);
	iommu_attach_device(cpp_dev->domain, cpp_dev->iommu_ctx);

	msm_camera_io_w(0x0, cpp_dev->base +
					   MSM_CPP_MICRO_IRQGEN_MASK);
@@ -1859,7 +1861,6 @@ static int cpp_probe(struct platform_device *pdev)
	cpp_timers[1].used = 0;
	cpp_dev->fw_name_bin = NULL;
	return rc;

ERROR3:
	release_mem_region(cpp_dev->mem->start, resource_size(cpp_dev->mem));
ERROR2:
@@ -1889,7 +1890,6 @@ static int cpp_device_remove(struct platform_device *dev)
		return 0;
	}

	iommu_detach_device(cpp_dev->domain, cpp_dev->iommu_ctx);
	msm_sd_unregister(&cpp_dev->msm_sd);
	release_mem_region(cpp_dev->mem->start, resource_size(cpp_dev->mem));
	release_mem_region(cpp_dev->vbif_mem->start,