xref: /openbmc/linux/drivers/clk/meson/clk-pll.h (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
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;
39*b6ec400aSDmitry Rokosov 	struct parm current_en;
40*b6ec400aSDmitry Rokosov 	struct parm l_detect;
41889c2b7eSJerome Brunet 	const struct reg_sequence *init_regs;
42889c2b7eSJerome Brunet 	unsigned int init_count;
43889c2b7eSJerome Brunet 	const struct pll_params_table *table;
448eed1db1SJerome Brunet 	const struct pll_mult_range *range;
45889c2b7eSJerome Brunet 	u8 flags;
46889c2b7eSJerome Brunet };
47889c2b7eSJerome Brunet 
48889c2b7eSJerome Brunet extern const struct clk_ops meson_clk_pll_ro_ops;
49889c2b7eSJerome Brunet extern const struct clk_ops meson_clk_pll_ops;
5039b85002SNeil Armstrong extern const struct clk_ops meson_clk_pcie_pll_ops;
51889c2b7eSJerome Brunet 
52889c2b7eSJerome Brunet #endif /* __MESON_CLK_PLL_H */
53