GNU Linux-libre 4.19.286-gnu1
[releases.git] / drivers / clk / sunxi / clk-factors.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __MACH_SUNXI_CLK_FACTORS_H
3 #define __MACH_SUNXI_CLK_FACTORS_H
4
5 #include <linux/clk-provider.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_request {
23         unsigned long rate;
24         unsigned long parent_rate;
25         u8 parent_index;
26         u8 n;
27         u8 k;
28         u8 m;
29         u8 p;
30 };
31
32 struct factors_data {
33         int enable;
34         int mux;
35         int muxmask;
36         const struct clk_factors_config *table;
37         void (*getter)(struct factors_request *req);
38         void (*recalc)(struct factors_request *req);
39         const char *name;
40 };
41
42 struct clk_factors {
43         struct clk_hw hw;
44         void __iomem *reg;
45         const struct clk_factors_config *config;
46         void (*get_factors)(struct factors_request *req);
47         void (*recalc)(struct factors_request *req);
48         spinlock_t *lock;
49         /* for cleanup */
50         struct clk_mux *mux;
51         struct clk_gate *gate;
52 };
53
54 struct clk *sunxi_factors_register(struct device_node *node,
55                                    const struct factors_data *data,
56                                    spinlock_t *lock,
57                                    void __iomem *reg);
58 struct clk *sunxi_factors_register_critical(struct device_node *node,
59                                             const struct factors_data *data,
60                                             spinlock_t *lock,
61                                             void __iomem *reg);
62
63 void sunxi_factors_unregister(struct device_node *node, struct clk *clk);
64
65 #endif