xref: /openbmc/linux/drivers/clk/meson/clk-pll.h (revision 39b8500283b45252e2f9ad9d60992f2c0d3a1659)
1889c2b7eSJerome Brunet /* SPDX-License-Identifier: GPL-2.0 */
2889c2b7eSJerome Brunet /*
3889c2b7eSJerome Brunet  * Copyright (c) 2019 BayLibre, SAS.
4889c2b7eSJerome Brunet  * Author: Jerome Brunet <jbrunet@baylibre.com>
5889c2b7eSJerome Brunet  */
6889c2b7eSJerome Brunet 
7889c2b7eSJerome Brunet #ifndef __MESON_CLK_PLL_H
8889c2b7eSJerome Brunet #define __MESON_CLK_PLL_H
9889c2b7eSJerome Brunet 
10889c2b7eSJerome Brunet #include <linux/clk-provider.h>
11889c2b7eSJerome Brunet #include <linux/regmap.h>
12889c2b7eSJerome Brunet #include "parm.h"
13889c2b7eSJerome Brunet 
14889c2b7eSJerome Brunet struct pll_params_table {
158eed1db1SJerome Brunet 	unsigned int	m;
168eed1db1SJerome Brunet 	unsigned int	n;
178eed1db1SJerome Brunet };
188eed1db1SJerome Brunet 
198eed1db1SJerome Brunet struct pll_mult_range {
208eed1db1SJerome Brunet 	unsigned int	min;
218eed1db1SJerome Brunet 	unsigned int	max;
22889c2b7eSJerome Brunet };
23889c2b7eSJerome Brunet 
24889c2b7eSJerome Brunet #define PLL_PARAMS(_m, _n)						\
25889c2b7eSJerome Brunet 	{								\
26889c2b7eSJerome Brunet 		.m		= (_m),					\
27889c2b7eSJerome Brunet 		.n		= (_n),					\
28889c2b7eSJerome Brunet 	}
29889c2b7eSJerome Brunet 
30889c2b7eSJerome Brunet #define CLK_MESON_PLL_ROUND_CLOSEST	BIT(0)
31889c2b7eSJerome Brunet 
32889c2b7eSJerome Brunet struct meson_clk_pll_data {
33889c2b7eSJerome Brunet 	struct parm en;
34889c2b7eSJerome Brunet 	struct parm m;
35889c2b7eSJerome Brunet 	struct parm n;
36889c2b7eSJerome Brunet 	struct parm frac;
37889c2b7eSJerome Brunet 	struct parm l;
38889c2b7eSJerome Brunet 	struct parm rst;
39889c2b7eSJerome Brunet 	const struct reg_sequence *init_regs;
40889c2b7eSJerome Brunet 	unsigned int init_count;
41889c2b7eSJerome Brunet 	const struct pll_params_table *table;
428eed1db1SJerome Brunet 	const struct pll_mult_range *range;
43889c2b7eSJerome Brunet 	u8 flags;
44889c2b7eSJerome Brunet };
45889c2b7eSJerome Brunet 
46889c2b7eSJerome Brunet extern const struct clk_ops meson_clk_pll_ro_ops;
47889c2b7eSJerome Brunet extern const struct clk_ops meson_clk_pll_ops;
48*39b85002SNeil Armstrong extern const struct clk_ops meson_clk_pcie_pll_ops;
49889c2b7eSJerome Brunet 
50889c2b7eSJerome Brunet #endif /* __MESON_CLK_PLL_H */
51