}
#endif
-static int isp_set_isp_clk(struct isp *tegra_isp,
- long isp_clk_rate, bool set_default_rate)
-{
- struct clk *isp_clk;
- int ret = 0;
-
- struct nvhost_device_data *pdata =
- platform_get_drvdata(tegra_isp->ndev);
-
- if (WARN_ONCE(pdata == NULL, "pdata not found, %s failed\n", __func__))
- return -ENODEV;
-
- if (!pdata->clk || !pdata->clocks) {
- dev_err(&tegra_isp->ndev->dev,
- "%s: pdata does not have clock entries\n",
- __func__);
- return -EFAULT;
- }
-
- if (set_default_rate)
- isp_clk_rate = pdata->clocks[0].default_rate;
-
- if (!isp_clk_rate) {
- dev_err(&tegra_isp->ndev->dev,
- "%s: Invalid isp clock rate\n", __func__);
- return -EINVAL;
- }
-
- isp_clk = pdata->clk[0];
-
- if (IS_ERR(isp_clk)) {
- dev_err(&tegra_isp->ndev->dev,
- "%s: isp clock not found\n", __func__);
- return -EFAULT;
- }
-
- isp_clk_rate = clk_round_rate(isp_clk, isp_clk_rate);
-
- ret = clk_set_rate(isp_clk, isp_clk_rate);
-
- if (ret) {
- dev_err(&tegra_isp->ndev->dev,
- "%s: isp clk_set_rate failed\n", __func__);
- return ret;
- }
-
- return 0;
-}
-
static long isp_ioctl(struct file *file,
unsigned int cmd, unsigned long arg)
{
- struct isp *tegra_isp = file->private_data;
+ struct isp *tegra_isp;
if (_IOC_TYPE(cmd) != NVHOST_ISP_IOCTL_MAGIC)
return -EFAULT;
+ tegra_isp = file->private_data;
+
switch (cmd) {
case NVHOST_ISP_IOCTL_SET_EMC: {
int ret;
#endif
return ret;
}
- case NVHOST_ISP_IOCTL_SET_ISP_CLK: {
- long isp_clk_rate = 0;
-
- if (copy_from_user(&isp_clk_rate,
- (const void __user *)arg, sizeof(long))) {
- dev_err(&tegra_isp->ndev->dev,
- "%s: Failed to copy arg from user\n", __func__);
- return -EFAULT;
- }
-
- return isp_set_isp_clk(tegra_isp, isp_clk_rate, false);
- }
default:
dev_err(&tegra_isp->ndev->dev,
"%s: Unknown ISP ioctl.\n", __func__);
static int isp_release(struct inode *inode, struct file *file)
{
- int ret = 0;
-
#if defined(CONFIG_TEGRA_ISOMGR)
+ int ret = 0;
struct isp *tegra_isp = file->private_data;
/* nullify isomgr request */
}
}
#endif
-
- /* Reset to default isp clk rate on release */
- ret = isp_set_isp_clk(tegra_isp, 0, true);
-
- return ret;
+ return 0;
}
const struct file_operations tegra_isp_ctrl_ops = {
/*
- * Copyright (c) 2013-2015, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2013-2014, NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
return ret;
}
-static int vi_set_vi_clk(struct vi *tegra_vi,
- long vi_clk_rate, bool set_default_rate)
-{
- struct clk *vi_clk;
- int ret = 0;
- struct nvhost_device_data *pdata = tegra_vi->ndev->dev.platform_data;
-
- if (WARN_ONCE(pdata == NULL, "pdata not found, %s failed\n", __func__))
- return -ENODEV;
-
- if (!pdata->clk || !pdata->clocks) {
- dev_err(&tegra_vi->ndev->dev,
- "%s: pdata does not have clock entries\n",
- __func__);
- return -EFAULT;
- }
-
- if (set_default_rate)
- vi_clk_rate = pdata->clocks[0].default_rate;
-
- if (!vi_clk_rate) {
- dev_err(&tegra_vi->ndev->dev,
- "%s: Invalid vi clock rate\n", __func__);
- return -EINVAL;
- }
-
- vi_clk = pdata->clk[0];
-
- if (IS_ERR(vi_clk)) {
- dev_err(&tegra_vi->ndev->dev,
- "%s: vi clock not found\n", __func__);
- return -EFAULT;
- }
-
- vi_clk_rate = clk_round_rate(vi_clk, vi_clk_rate);
-
- ret = clk_set_rate(vi_clk, vi_clk_rate);
-
- if (ret) {
- dev_err(&tegra_vi->ndev->dev,
- "%s: vi clk_set_rate failed\n", __func__);
- return ret;
- }
-
- return 0;
-}
static long vi_ioctl(struct file *file,
unsigned int cmd, unsigned long arg)
#endif
return ret;
}
- case NVHOST_VI_IOCTL_SET_VI_CLK: {
- long vi_clk_rate = 0;
-
- if (copy_from_user(&vi_clk_rate,
- (const void __user *)arg, sizeof(long))) {
- dev_err(&tegra_vi->ndev->dev,
- "%s: Failed to copy arg from user\n", __func__);
- return -EFAULT;
- }
-
- return vi_set_vi_clk(tegra_vi, vi_clk_rate, false);
- }
default:
dev_err(&tegra_vi->ndev->dev,
"%s: Unknown vi ioctl.\n", __func__);
}
#endif
- /* Reset to default vi clk rate on release */
- ret = vi_set_vi_clk(tegra_vi, 0, true);
-
- return ret;
+ return 0;
}
const struct file_operations tegra_vi_ctrl_ops = {
*
* Tegra ISP Driver
*
- * Copyright (c) 2013-2015, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2013, NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
*/
#define NVHOST_ISP_IOCTL_SET_EMC _IOW(NVHOST_ISP_IOCTL_MAGIC, 1, struct isp_emc)
-#define NVHOST_ISP_IOCTL_SET_ISP_CLK _IOW(NVHOST_ISP_IOCTL_MAGIC, 2, long)
#endif
*
* Tegra VI Driver
*
- * Copyright (c) 2013-2015, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2013, NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
#define NVHOST_VI_IOCTL_ENABLE_TPG _IOW(NVHOST_VI_IOCTL_MAGIC, 1, uint)
#define NVHOST_VI_IOCTL_SET_EMC_INFO _IOW(NVHOST_VI_IOCTL_MAGIC, 2, uint)
-#define NVHOST_VI_IOCTL_SET_VI_CLK _IOW(NVHOST_VI_IOCTL_MAGIC, 3, long)
#endif