summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorJihoon Bang <jbang@nvidia.com>2012-05-03 12:20:00 -0700
committerRohan Somvanshi <rsomvanshi@nvidia.com>2012-05-18 00:26:31 -0700
commita4d60323addfc7748f9a74d7efc8d27f86181c9b (patch)
tree5a07a3b31d193b3a44609d34cb25c0f3413197bd /drivers/media
parent600219e764013aefde88a8722558d10cd739af3a (diff)
media: video: tegra: add EMC clock rate control
Add EMC clock rate control to tegra_camera ioctl. This change allows user space to change EMC clock requirement for camera based on use case and resolution. For example, video recording use case needs more than double memory bandwidth of preview use case. Bug 964635 Change-Id: Ibe5a77a810869b53b6e057f2ee62ebb96997c2f4 Signed-off-by: Jihoon Bang <jbang@nvidia.com> Reviewed-on: http://git-master/r/101274 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Dan Willemsen <dwillemsen@nvidia.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/tegra/tegra_camera.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/media/video/tegra/tegra_camera.c b/drivers/media/video/tegra/tegra_camera.c
index 36ecde087bed..de0c662ba613 100644
--- a/drivers/media/video/tegra/tegra_camera.c
+++ b/drivers/media/video/tegra/tegra_camera.c
@@ -96,17 +96,9 @@ static int tegra_camera_disable_clk(struct tegra_camera_dev *dev)
static int tegra_camera_enable_emc(struct tegra_camera_dev *dev)
{
- /*
- * tegra_camera wasn't added as a user of emc_clk until 3x.
- * set to 150 MHz, will likely need to be increased as we support
- * sensors with higher framerates and resolutions.
- */
clk_enable(dev->emc_clk);
-
#ifdef CONFIG_ARCH_TEGRA_2x_SOC
clk_set_rate(dev->emc_clk, 300000000);
-#else
- clk_set_rate(dev->emc_clk, 150000000);
#endif
return 0;
}
@@ -130,7 +122,8 @@ static int tegra_camera_clk_set_rate(struct tegra_camera_dev *dev)
return -EINVAL;
}
- if (info->id != TEGRA_CAMERA_MODULE_VI) {
+ if (info->id != TEGRA_CAMERA_MODULE_VI &&
+ info->id != TEGRA_CAMERA_MODULE_EMC) {
dev_err(dev->dev,
"%s: set rate only aplies to vi module %d\n",
__func__, info->id);
@@ -144,6 +137,14 @@ static int tegra_camera_clk_set_rate(struct tegra_camera_dev *dev)
case TEGRA_CAMERA_VI_SENSOR_CLK:
clk = dev->vi_sensor_clk;
break;
+ case TEGRA_CAMERA_EMC_CLK:
+ clk = dev->emc_clk;
+#ifndef CONFIG_ARCH_TEGRA_2x_SOC
+ dev_dbg(dev->dev, "%s: emc_clk rate=%lu\n",
+ __func__, info->rate);
+ clk_set_rate(dev->emc_clk, info->rate);
+#endif
+ goto set_rate_end;
default:
dev_err(dev->dev,
"%s: invalid clk id for set rate %d\n",
@@ -189,6 +190,7 @@ static int tegra_camera_clk_set_rate(struct tegra_camera_dev *dev)
#endif
}
+set_rate_end:
info->rate = clk_get_rate(clk);
dev_dbg(dev->dev, "%s: get_rate=%lu",
__func__, info->rate);