clk: sunxi: factors: Add unregister function
[cascardo/linux.git] / drivers / clk / sunxi / clk-factors.h
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>
6 #include <linux/spinlock.h>
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;
19         u8 n_start;
20 };
21
22 struct factors_data {
23         int enable;
24         int mux;
25         int muxmask;
26         const 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
31 struct clk_factors {
32         struct clk_hw hw;
33         void __iomem *reg;
34         const 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         /* for cleanup */
38         struct clk_mux *mux;
39         struct clk_gate *gate;
40 };
41
42 struct clk *sunxi_factors_register(struct device_node *node,
43                                    const struct factors_data *data,
44                                    spinlock_t *lock,
45                                    void __iomem *reg);
46
47 void sunxi_factors_unregister(struct device_node *node, struct clk *clk);
48
49 #endif