Blame view
include/media/v4l2-clk.h
2.11 KB
ff5430de7
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* * 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> |
cf326dfeb
|
18 |
#include <linux/export.h> |
ff5430de7
|
19 20 21 22 23 |
#include <linux/list.h> #include <linux/mutex.h> struct module; struct device; |
4f528afcf
|
24 |
struct clk; |
ff5430de7
|
25 26 27 28 |
struct v4l2_clk { struct list_head list; const struct v4l2_clk_ops *ops; const char *dev_id; |
ff5430de7
|
29 30 31 |
int enable; struct mutex lock; /* Protect the enable count */ atomic_t use_count; |
4f528afcf
|
32 |
struct clk *clk; |
ff5430de7
|
33 34 35 36 37 38 39 40 41 42 43 44 45 |
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, |
a37462b91
|
46 |
void *priv); |
ff5430de7
|
47 48 49 50 51 52 53 |
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); |
cf326dfeb
|
54 55 56 |
struct module; struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_id, |
a37462b91
|
57 |
unsigned long rate, struct module *owner); |
cf326dfeb
|
58 59 60 |
void v4l2_clk_unregister_fixed(struct v4l2_clk *clk); static inline struct v4l2_clk *v4l2_clk_register_fixed(const char *dev_id, |
cf326dfeb
|
61 62 |
unsigned long rate) { |
a37462b91
|
63 |
return __v4l2_clk_register_fixed(dev_id, rate, THIS_MODULE); |
cf326dfeb
|
64 |
} |
3d83078a0
|
65 |
#define V4L2_CLK_NAME_SIZE 64 |
774cc4c28
|
66 67 |
#define v4l2_clk_name_i2c(name, size, adap, client) snprintf(name, size, \ "%d-%04x", adap, client) |
ac2841f3b
|
68 69 |
#define v4l2_clk_name_of(name, size, of_full_name) snprintf(name, size, \ "of-%s", of_full_name) |
ff5430de7
|
70 |
#endif |