mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
[media] V4L2: add v4l2-clock helpers to register and unregister a fixed-rate clock
Many bridges and video host controllers supply fixed rate always on clocks to their I2C devices. This patch adds two simple helpers to register and unregister such a clock. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
d3f884a709
commit
cf326dfebe
2 changed files with 53 additions and 0 deletions
|
@ -240,3 +240,42 @@ void v4l2_clk_unregister(struct v4l2_clk *clk)
|
||||||
kfree(clk);
|
kfree(clk);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(v4l2_clk_unregister);
|
EXPORT_SYMBOL(v4l2_clk_unregister);
|
||||||
|
|
||||||
|
struct v4l2_clk_fixed {
|
||||||
|
unsigned long rate;
|
||||||
|
struct v4l2_clk_ops ops;
|
||||||
|
};
|
||||||
|
|
||||||
|
static unsigned long fixed_get_rate(struct v4l2_clk *clk)
|
||||||
|
{
|
||||||
|
struct v4l2_clk_fixed *priv = clk->priv;
|
||||||
|
return priv->rate;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_id,
|
||||||
|
const char *id, unsigned long rate, struct module *owner)
|
||||||
|
{
|
||||||
|
struct v4l2_clk *clk;
|
||||||
|
struct v4l2_clk_fixed *priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
||||||
|
|
||||||
|
if (!priv)
|
||||||
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
|
priv->rate = rate;
|
||||||
|
priv->ops.get_rate = fixed_get_rate;
|
||||||
|
priv->ops.owner = owner;
|
||||||
|
|
||||||
|
clk = v4l2_clk_register(&priv->ops, dev_id, id, priv);
|
||||||
|
if (IS_ERR(clk))
|
||||||
|
kfree(priv);
|
||||||
|
|
||||||
|
return clk;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__v4l2_clk_register_fixed);
|
||||||
|
|
||||||
|
void v4l2_clk_unregister_fixed(struct v4l2_clk *clk)
|
||||||
|
{
|
||||||
|
kfree(clk->priv);
|
||||||
|
v4l2_clk_unregister(clk);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(v4l2_clk_unregister_fixed);
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#define MEDIA_V4L2_CLK_H
|
#define MEDIA_V4L2_CLK_H
|
||||||
|
|
||||||
#include <linux/atomic.h>
|
#include <linux/atomic.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
|
|
||||||
|
@ -51,4 +52,17 @@ void v4l2_clk_disable(struct v4l2_clk *clk);
|
||||||
unsigned long v4l2_clk_get_rate(struct v4l2_clk *clk);
|
unsigned long v4l2_clk_get_rate(struct v4l2_clk *clk);
|
||||||
int v4l2_clk_set_rate(struct v4l2_clk *clk, unsigned long rate);
|
int v4l2_clk_set_rate(struct v4l2_clk *clk, unsigned long rate);
|
||||||
|
|
||||||
|
struct module;
|
||||||
|
|
||||||
|
struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_id,
|
||||||
|
const char *id, unsigned long rate, struct module *owner);
|
||||||
|
void v4l2_clk_unregister_fixed(struct v4l2_clk *clk);
|
||||||
|
|
||||||
|
static inline struct v4l2_clk *v4l2_clk_register_fixed(const char *dev_id,
|
||||||
|
const char *id,
|
||||||
|
unsigned long rate)
|
||||||
|
{
|
||||||
|
return __v4l2_clk_register_fixed(dev_id, id, rate, THIS_MODULE);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue