diff options
author | Jihoon Bang <jbang@nvidia.com> | 2012-05-03 12:20:00 -0700 |
---|---|---|
committer | Rohan Somvanshi <rsomvanshi@nvidia.com> | 2012-05-18 00:26:31 -0700 |
commit | a4d60323addfc7748f9a74d7efc8d27f86181c9b (patch) | |
tree | 5a07a3b31d193b3a44609d34cb25c0f3413197bd /drivers/media | |
parent | 600219e764013aefde88a8722558d10cd739af3a (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.c | 20 |
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); |