Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux...
[linux/fpc-iii.git] / drivers / clk / sunxi / clk-factors.h
blob1e63c5b2d5f4cb6866127100be2274a7095641cd
1 #ifndef __MACH_SUNXI_CLK_FACTORS_H
2 #define __MACH_SUNXI_CLK_FACTORS_H
4 #include <linux/clk-provider.h>
5 #include <linux/spinlock.h>
7 #define SUNXI_FACTORS_NOT_APPLICABLE (0)
9 struct clk_factors_config {
10 u8 nshift;
11 u8 nwidth;
12 u8 kshift;
13 u8 kwidth;
14 u8 mshift;
15 u8 mwidth;
16 u8 pshift;
17 u8 pwidth;
18 u8 n_start;
21 struct factors_request {
22 unsigned long rate;
23 unsigned long parent_rate;
24 u8 parent_index;
25 u8 n;
26 u8 k;
27 u8 m;
28 u8 p;
31 struct factors_data {
32 int enable;
33 int mux;
34 int muxmask;
35 const struct clk_factors_config *table;
36 void (*getter)(struct factors_request *req);
37 void (*recalc)(struct factors_request *req);
38 const char *name;
41 struct clk_factors {
42 struct clk_hw hw;
43 void __iomem *reg;
44 const struct clk_factors_config *config;
45 void (*get_factors)(struct factors_request *req);
46 void (*recalc)(struct factors_request *req);
47 spinlock_t *lock;
48 /* for cleanup */
49 struct clk_mux *mux;
50 struct clk_gate *gate;
53 struct clk *sunxi_factors_register(struct device_node *node,
54 const struct factors_data *data,
55 spinlock_t *lock,
56 void __iomem *reg);
58 void sunxi_factors_unregister(struct device_node *node, struct clk *clk);
60 #endif