1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- * V4L2 clock service
- *
- * Copyright (C) 2012-2013, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * ATTENTION: This is a temporary API and it shall be replaced by the generic
- * clock API, when the latter becomes widely available.
- */
- #ifndef MEDIA_V4L2_CLK_H
- #define MEDIA_V4L2_CLK_H
- #include <linux/atomic.h>
- #include <linux/export.h>
- #include <linux/list.h>
- #include <linux/mutex.h>
- struct module;
- struct device;
- struct clk;
- struct v4l2_clk {
- struct list_head list;
- const struct v4l2_clk_ops *ops;
- const char *dev_id;
- int enable;
- struct mutex lock; /* Protect the enable count */
- atomic_t use_count;
- struct clk *clk;
- void *priv;
- };
- struct v4l2_clk_ops {
- struct module *owner;
- int (*enable)(struct v4l2_clk *clk);
- void (*disable)(struct v4l2_clk *clk);
- unsigned long (*get_rate)(struct v4l2_clk *clk);
- int (*set_rate)(struct v4l2_clk *clk, unsigned long);
- };
- struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops,
- const char *dev_name,
- void *priv);
- void v4l2_clk_unregister(struct v4l2_clk *clk);
- struct v4l2_clk *v4l2_clk_get(struct device *dev, const char *id);
- void v4l2_clk_put(struct v4l2_clk *clk);
- int v4l2_clk_enable(struct v4l2_clk *clk);
- void v4l2_clk_disable(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);
- struct module;
- struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_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,
- unsigned long rate)
- {
- return __v4l2_clk_register_fixed(dev_id, rate, THIS_MODULE);
- }
- #define V4L2_CLK_NAME_SIZE 64
- #define v4l2_clk_name_i2c(name, size, adap, client) snprintf(name, size, \
- "%d-%04x", adap, client)
- #define v4l2_clk_name_of(name, size, node) snprintf(name, size, \
- "of-%pOF", node)
- #endif
|