xref: /linux/drivers/clk/ultrarisc/clk-ultrarisc.h (revision 502d45774af09f1c681c754c4b7cdfb5d7f72fd9)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 #ifndef __ULTRARISC_CLK_ULTRARISC_H
3 #define __ULTRARISC_CLK_ULTRARISC_H
4 
5 #include <linux/clk-provider.h>
6 #include <linux/platform_device.h>
7 #include <linux/types.h>
8 
9 struct ultrarisc_pll_layout {
10 	u32 cfg1_offset;
11 	u32 cfg2_offset;
12 	u32 frac_mask;
13 	u32 m_mask;
14 	u32 n_mask;
15 	u32 oddiv1_mask;
16 	u32 oddiv2_mask;
17 };
18 
19 struct ultrarisc_pll_desc {
20 	u32 id;
21 	const char *name;
22 };
23 
24 struct ultrarisc_fixed_factor_desc {
25 	u32 id;
26 	const char *name;
27 	u32 parent_id;
28 	u32 mult;
29 	u32 div;
30 };
31 
32 struct ultrarisc_divider_desc {
33 	u32 id;
34 	const char *name;
35 	u32 offset;
36 	u32 parent_id;
37 	unsigned long max_rate;
38 	u32 load_mask;
39 	u8 div_shift;
40 	u8 div_width;
41 	u8 gate_bit;
42 	u16 divider_flags;
43 	u8 gate_flags;
44 };
45 
46 struct ultrarisc_gate_desc {
47 	u32 id;
48 	const char *name;
49 	u32 offset;
50 	u32 parent_id;
51 	u8 gate_bit;
52 	u8 gate_flags;
53 };
54 
55 struct ultrarisc_clk_soc_data {
56 	const struct ultrarisc_pll_layout *pll_layout;
57 	const struct ultrarisc_pll_desc *plls;
58 	u32 num_plls;
59 	const struct ultrarisc_fixed_factor_desc *fixed_factors;
60 	u32 num_fixed_factors;
61 	const struct ultrarisc_divider_desc *dividers;
62 	u32 num_dividers;
63 	const struct ultrarisc_gate_desc *gates;
64 	u32 num_gates;
65 	u32 num_clks;
66 };
67 
68 int ultrarisc_clk_probe(struct platform_device *pdev,
69 			const struct ultrarisc_clk_soc_data *soc_data);
70 
71 #endif /* __ULTRARISC_CLK_ULTRARISC_H */
72