Commit | Line | Data |
---|---|---|
e874a669 EL |
1 | #ifndef __MACH_SUNXI_CLK_FACTORS_H |
2 | #define __MACH_SUNXI_CLK_FACTORS_H | |
3 | ||
4 | #include <linux/clk-provider.h> | |
5 | #include <linux/clkdev.h> | |
601da9d0 | 6 | #include <linux/spinlock.h> |
e874a669 EL |
7 | |
8 | #define SUNXI_FACTORS_NOT_APPLICABLE (0) | |
9 | ||
10 | struct clk_factors_config { | |
11 | u8 nshift; | |
12 | u8 nwidth; | |
13 | u8 kshift; | |
14 | u8 kwidth; | |
15 | u8 mshift; | |
16 | u8 mwidth; | |
17 | u8 pshift; | |
18 | u8 pwidth; | |
9a5e6c7e | 19 | u8 n_start; |
e874a669 EL |
20 | }; |
21 | ||
601da9d0 MR |
22 | struct factors_data { |
23 | int enable; | |
24 | int mux; | |
e94f8cb3 | 25 | int muxmask; |
601da9d0 MR |
26 | struct clk_factors_config *table; |
27 | void (*getter) (u32 *rate, u32 parent_rate, u8 *n, u8 *k, u8 *m, u8 *p); | |
28 | const char *name; | |
29 | }; | |
30 | ||
40a5dcba EL |
31 | struct clk_factors { |
32 | struct clk_hw hw; | |
33 | void __iomem *reg; | |
34 | struct clk_factors_config *config; | |
35 | void (*get_factors) (u32 *rate, u32 parent, u8 *n, u8 *k, u8 *m, u8 *p); | |
36 | spinlock_t *lock; | |
37 | }; | |
38 | ||
7c74c220 HG |
39 | struct clk *sunxi_factors_register(struct device_node *node, |
40 | const struct factors_data *data, | |
41 | spinlock_t *lock, | |
42 | void __iomem *reg); | |
601da9d0 | 43 | |
e874a669 | 44 | #endif |