[media] media: davinci: vpss: enable vpss clocks
By default the VPSS clocks were enabled in capture driver for davinci family which creates duplicates for dm355/dm365/dm644x. This patch adds support to enable the VPSS clocks in VPSS driver, which avoids duplication of code and also adding clock aliases. This patch uses PM runtime API to enable/disable clock, instead of DaVinci clock framework. con_ids for master and slave clocks of vpss is added in pm_domain. This patch cleanups the VPSS clock enabling in the capture driver, and also removes the clock alias in machine file. Along side adds a vpss slave clock for DM365 as mentioned by Sekhar (https://patchwork.kernel.org/patch/1221261/). The Suspend/Resume in dm644x_ccdc.c which enabled/disabled the VPSS clock is now implemented as part of the VPSS driver. Signed-off-by: Lad, Prabhakar <prabhakar.csengg@gmail.com> Acked-by: Sekhar Nori <nsekhar@ti.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:

committed by
Mauro Carvalho Chehab

parent
407ccc65bf
commit
9a3e89b10f
@@ -25,6 +25,8 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
|
||||
#include <media/davinci/vpss.h>
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
@@ -490,6 +492,10 @@ static int vpss_probe(struct platform_device *pdev)
|
||||
} else
|
||||
oper_cfg.hw_ops.clear_wbl_overflow = dm644x_clear_wbl_overflow;
|
||||
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
|
||||
pm_runtime_get(&pdev->dev);
|
||||
|
||||
spin_lock_init(&oper_cfg.vpss_lock);
|
||||
dev_info(&pdev->dev, "%s vpss probe success\n", platform_name);
|
||||
return 0;
|
||||
@@ -507,6 +513,7 @@ static int vpss_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *res;
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
iounmap(oper_cfg.vpss_regs_base0);
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
release_mem_region(res->start, resource_size(res));
|
||||
@@ -518,10 +525,28 @@ static int vpss_remove(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vpss_suspend(struct device *dev)
|
||||
{
|
||||
pm_runtime_put(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vpss_resume(struct device *dev)
|
||||
{
|
||||
pm_runtime_get(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops vpss_pm_ops = {
|
||||
.suspend = vpss_suspend,
|
||||
.resume = vpss_resume,
|
||||
};
|
||||
|
||||
static struct platform_driver vpss_driver = {
|
||||
.driver = {
|
||||
.name = "vpss",
|
||||
.owner = THIS_MODULE,
|
||||
.pm = &vpss_pm_ops,
|
||||
},
|
||||
.remove = vpss_remove,
|
||||
.probe = vpss_probe,
|
||||
|
Reference in New Issue
Block a user