#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/platform_device.h>
-#include <linux/pm_runtime.h>
#include <linux/nvhost.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include "dev.h"
#include "bus_client.h"
+#include "nvhost_acm.h"
#include "t114/t114.h"
#include "t124/t124.h"
static void tegra_camera_activate(struct tegra_camera_dev *cam)
{
struct tegra_camera_ops *cam_ops = cam->ops;
+ int ret;
nvhost_module_busy_ext(cam->ndev);
/* Enable external power */
- if (cam->reg)
- regulator_enable(cam->reg);
+ if (cam->reg) {
+ ret = regulator_enable(cam->reg);
+ if (ret)
+ dev_err(&cam->ndev->dev, "enabling regulator failed\n");
+ }
if (cam_ops->activate)
cam_ops->activate(cam);
struct tegra_camera_dev *cam = ici->priv;
if (!cam->enable_refcnt) {
- pm_runtime_get_sync(ici->v4l2_dev.dev);
tegra_camera_activate(cam);
cam->num_frames = 0;
}
if (!cam->enable_refcnt) {
cancel_work_sync(&cam->work);
tegra_camera_deactivate(cam);
- pm_runtime_put_sync(ici->v4l2_dev.dev);
}
}
goto exit_deinit_clk;
}
+ mutex_init(&ndata->lock);
platform_set_drvdata(pdev, ndata);
err = nvhost_client_device_get_resources(pdev);
if (err) {
goto exit_deinit_clk;
}
+ nvhost_module_init(pdev);
+
err = nvhost_client_device_init(pdev);
if (err) {
dev_err(&pdev->dev, "%s: nvhost init failed %d\n",
goto exit_deinit_clk;
}
- tegra_pd_add_device(&pdev->dev);
- pm_runtime_use_autosuspend(&pdev->dev);
- pm_runtime_set_autosuspend_delay(&pdev->dev, ndata->clockgate_delay);
- pm_runtime_enable(&pdev->dev);
-
cam->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev);
if (IS_ERR(cam->alloc_ctx)) {
err = PTR_ERR(cam->alloc_ctx);
- goto exit_pm_disable;
+ goto exit_deinit_clk;
}
platform_set_drvdata(pdev, cam);
exit_cleanup_alloc_ctx:
platform_set_drvdata(pdev, cam->ndata);
vb2_dma_contig_cleanup_ctx(cam->alloc_ctx);
-exit_pm_disable:
- pm_runtime_disable(&pdev->dev);
exit_deinit_clk:
cam->ops->clks_deinit(cam);
kfree(cam);
platform_set_drvdata(pdev, cam->ndata);
nvhost_client_device_release(pdev);
+ cam->ndata->aperture[0] = NULL;
vb2_dma_contig_cleanup_ctx(cam->alloc_ctx);
- pm_runtime_disable(&pdev->dev);
-
if (cam->ops)
cam->ops->clks_deinit(cam);