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