1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (c) 2019 BayLibre, SAS. 4 * Author: Jerome Brunet <jbrunet@baylibre.com> 5 */ 6 7 #ifndef __MESON_CLK_PLL_H 8 #define __MESON_CLK_PLL_H 9 10 #include <linux/clk-provider.h> 11 #include <linux/regmap.h> 12 #include "parm.h" 13 14 struct pll_params_table { 15 unsigned int m; 16 unsigned int n; 17 }; 18 19 struct pll_mult_range { 20 unsigned int min; 21 unsigned int max; 22 }; 23 24 #define PLL_PARAMS(_m, _n) \ 25 { \ 26 .m = (_m), \ 27 .n = (_n), \ 28 } 29 30 #define CLK_MESON_PLL_ROUND_CLOSEST BIT(0) 31 #define CLK_MESON_PLL_NOINIT_ENABLED BIT(1) 32 33 struct meson_clk_pll_data { 34 struct parm en; 35 struct parm m; 36 struct parm n; 37 struct parm frac; 38 struct parm l; 39 struct parm rst; 40 struct parm current_en; 41 struct parm l_detect; 42 const struct reg_sequence *init_regs; 43 unsigned int init_count; 44 const struct pll_params_table *table; 45 const struct pll_mult_range *range; 46 u8 flags; 47 }; 48 49 extern const struct clk_ops meson_clk_pll_ro_ops; 50 extern const struct clk_ops meson_clk_pll_ops; 51 extern const struct clk_ops meson_clk_pcie_pll_ops; 52 53 #endif /* __MESON_CLK_PLL_H */ 54