summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2014-03-28 11:46:46 +0530
committerTerje Bergstrom <tbergstrom@nvidia.com>2014-03-31 00:10:26 -0700
commit2ac28aa128a04f9bfa16ed27106be0dc544de741 (patch)
treeedf9a8d5c804e1a6e5337b83937ae3cfb33b580b /drivers
parenta715d19226b7fa7b97119c7a5961a3c7cf460137 (diff)
media: tegra_camera: free syncpts at driver remove
Use nvhost_free_syncpts() to free the syncpts during driver unload This is required to fix syncpts leak Bug 1489488 Bug 1305024 Change-Id: Ic02771e2078ddead4c9b54826a669bb7c3653ba2 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/388116 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Shridhar Rasal <srasal@nvidia.com> Reviewed-by: Bryan Wu <pengw@nvidia.com> Tested-by: Bryan Wu <pengw@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/platform/soc_camera/tegra_camera/common.c3
-rw-r--r--drivers/media/platform/soc_camera/tegra_camera/common.h1
-rw-r--r--drivers/media/platform/soc_camera/tegra_camera/vi.c10
-rw-r--r--drivers/media/platform/soc_camera/tegra_camera/vi2.c8
4 files changed, 22 insertions, 0 deletions
diff --git a/drivers/media/platform/soc_camera/tegra_camera/common.c b/drivers/media/platform/soc_camera/tegra_camera/common.c
index 41685abc38b6..1ea3447e945c 100644
--- a/drivers/media/platform/soc_camera/tegra_camera/common.c
+++ b/drivers/media/platform/soc_camera/tegra_camera/common.c
@@ -942,6 +942,9 @@ static int tegra_camera_remove(struct platform_device *pdev)
vb2_dma_contig_cleanup_ctx(cam->alloc_ctx);
if (cam->ops)
+ cam->ops->free_syncpts(cam);
+
+ if (cam->ops)
cam->ops->clks_deinit(cam);
kfree(cam);
diff --git a/drivers/media/platform/soc_camera/tegra_camera/common.h b/drivers/media/platform/soc_camera/tegra_camera/common.h
index 76de2a070cc6..3e713c8c550d 100644
--- a/drivers/media/platform/soc_camera/tegra_camera/common.h
+++ b/drivers/media/platform/soc_camera/tegra_camera/common.h
@@ -68,6 +68,7 @@ struct tegra_camera_ops {
int (*capture_stop)(struct tegra_camera_dev *vi2_cam, int port);
void (*init_syncpts)(struct tegra_camera_dev *vi2_cam);
+ void (*free_syncpts)(struct tegra_camera_dev *vi2_cam);
void (*incr_syncpts)(struct tegra_camera_dev *vi2_cam);
void (*save_syncpts)(struct tegra_camera_dev *vi2_cam);
diff --git a/drivers/media/platform/soc_camera/tegra_camera/vi.c b/drivers/media/platform/soc_camera/tegra_camera/vi.c
index 6bdec974164d..1f07d6895d9f 100644
--- a/drivers/media/platform/soc_camera/tegra_camera/vi.c
+++ b/drivers/media/platform/soc_camera/tegra_camera/vi.c
@@ -412,6 +412,15 @@ static void vi_init_syncpts(struct tegra_camera_dev *cam)
cam->syncpt_id_vip = nvhost_get_syncpt_client_managed("vi_vip");
}
+static void vi_free_syncpts(struct tegra_camera_dev *cam)
+{
+ nvhost_free_syncpt(cam->syncpt_id_csi_a);
+
+ nvhost_free_syncpt(cam->syncpt_id_csi_b);
+
+ nvhost_free_syncpt(cam->syncpt_id_vip);
+}
+
static void vi_save_syncpts(struct tegra_camera_dev *cam)
{
u32 val;
@@ -1057,6 +1066,7 @@ struct tegra_camera_ops vi_ops = {
.deactivate = vi_powergate,
.init_syncpts = vi_init_syncpts,
+ .free_syncpts = vi_free_syncpts,
.save_syncpts = vi_save_syncpts,
.incr_syncpts = vi_incr_syncpts,
diff --git a/drivers/media/platform/soc_camera/tegra_camera/vi2.c b/drivers/media/platform/soc_camera/tegra_camera/vi2.c
index 8fc4618c2546..b97e0b341fe0 100644
--- a/drivers/media/platform/soc_camera/tegra_camera/vi2.c
+++ b/drivers/media/platform/soc_camera/tegra_camera/vi2.c
@@ -435,6 +435,13 @@ static void vi2_init_syncpts(struct tegra_camera_dev *cam)
cam->syncpt_id_csi_b = nvhost_get_syncpt_client_managed("vi_csi_B");
}
+static void vi2_free_syncpts(struct tegra_camera_dev *cam)
+{
+ nvhost_free_syncpt(cam->syncpt_id_csi_a);
+
+ nvhost_free_syncpt(cam->syncpt_id_csi_b);
+}
+
static void vi2_save_syncpts(struct tegra_camera_dev *cam)
{
u32 val;
@@ -802,6 +809,7 @@ struct tegra_camera_ops vi2_ops = {
.activate = vi2_sw_reset,
.init_syncpts = vi2_init_syncpts,
+ .free_syncpts = vi2_free_syncpts,
.save_syncpts = vi2_save_syncpts,
.incr_syncpts = vi2_incr_syncpts,