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