]> git.ipfire.org Git - thirdparty/kernel/stable.git/blame - drivers/clk/samsung/clk-pll.h
Merge branch 'address-masking'
[thirdparty/kernel/stable.git] / drivers / clk / samsung / clk-pll.h
CommitLineData
d2912cb1 1/* SPDX-License-Identifier: GPL-2.0-only */
1c4c5fe0
TA
2/*
3 * Copyright (c) 2013 Samsung Electronics Co., Ltd.
4 * Copyright (c) 2013 Linaro Ltd.
5 *
1c4c5fe0
TA
6 * Common Clock Framework support for all PLL's in Samsung platforms
7*/
8
9#ifndef __SAMSUNG_CLK_PLL_H
10#define __SAMSUNG_CLK_PLL_H
11
07dc76fa 12enum samsung_pll_type {
a951b1d9
HS
13 pll_2126,
14 pll_3000,
07dc76fa
YSB
15 pll_35xx,
16 pll_36xx,
17 pll_2550,
18 pll_2650,
52b06016
TF
19 pll_4500,
20 pll_4502,
21 pll_4508,
c50d11f3
TF
22 pll_4600,
23 pll_4650,
24 pll_4650c,
40ef723c 25 pll_6552,
06654acb 26 pll_6552_s3c2416,
40ef723c 27 pll_6553,
1d9aa64c 28 pll_2550x,
84329847 29 pll_2550xx,
be95d2c7 30 pll_2650x,
eefe119b 31 pll_2650xx,
c703a2f4 32 pll_1417x,
0c23e2af
NKC
33 pll_1450x,
34 pll_1451x,
35 pll_1452x,
36 pll_1460x,
f2819ea1 37 pll_0818x,
8f90f43a 38 pll_0822x,
6a734b37 39 pll_0831x,
4f346005 40 pll_142xx,
13ff3bda
PG
41 pll_0516x,
42 pll_0517x,
43 pll_0518x,
07dc76fa
YSB
44};
45
1d5013f1
AH
46#define PLL_RATE(_fin, _m, _p, _s, _k, _ks) \
47 ((u64)(_fin) * (BIT(_ks) * (_m) + (_k)) / BIT(_ks) / ((_p) << (_s)))
48#define PLL_VALID_RATE(_fin, _fout, _m, _p, _s, _k, _ks) ((_fout) + \
49 BUILD_BUG_ON_ZERO(PLL_RATE(_fin, _m, _p, _s, _k, _ks) != (_fout)))
50
51#define PLL_35XX_RATE(_fin, _rate, _m, _p, _s) \
52 { \
53 .rate = PLL_VALID_RATE(_fin, _rate, \
54 _m, _p, _s, 0, 16), \
55 .mdiv = (_m), \
56 .pdiv = (_p), \
57 .sdiv = (_s), \
58 }
59
1d5013f1 60#define PLL_36XX_RATE(_fin, _rate, _m, _p, _s, _k) \
3ff6e0d8 61 { \
1d5013f1
AH
62 .rate = PLL_VALID_RATE(_fin, _rate, \
63 _m, _p, _s, _k, 16), \
3ff6e0d8
YSB
64 .mdiv = (_m), \
65 .pdiv = (_p), \
66 .sdiv = (_s), \
67 .kdiv = (_k), \
68 }
69
1d5013f1 70#define PLL_4508_RATE(_fin, _rate, _m, _p, _s, _afc) \
b4054ac6 71 { \
1d5013f1
AH
72 .rate = PLL_VALID_RATE(_fin, _rate, \
73 _m, _p, _s - 1, 0, 16), \
b4054ac6
TF
74 .mdiv = (_m), \
75 .pdiv = (_p), \
76 .sdiv = (_s), \
77 .afc = (_afc), \
78 }
79
1d5013f1 80#define PLL_4600_RATE(_fin, _rate, _m, _p, _s, _k, _vsel) \
5c89658a 81 { \
1d5013f1
AH
82 .rate = PLL_VALID_RATE(_fin, _rate, \
83 _m, _p, _s, _k, 16), \
5c89658a
TF
84 .mdiv = (_m), \
85 .pdiv = (_p), \
86 .sdiv = (_s), \
87 .kdiv = (_k), \
88 .vsel = (_vsel), \
89 }
90
1d5013f1 91#define PLL_4650_RATE(_fin, _rate, _m, _p, _s, _k, _mfr, _mrr, _vsel) \
5c89658a 92 { \
1d5013f1
AH
93 .rate = PLL_VALID_RATE(_fin, _rate, \
94 _m, _p, _s, _k, 10), \
5c89658a
TF
95 .mdiv = (_m), \
96 .pdiv = (_p), \
97 .sdiv = (_s), \
98 .kdiv = (_k), \
99 .mfr = (_mfr), \
100 .mrr = (_mrr), \
101 .vsel = (_vsel), \
102 }
103
3ff6e0d8
YSB
104/* NOTE: Rate table should be kept sorted in descending order. */
105
106struct samsung_pll_rate_table {
107 unsigned int rate;
108 unsigned int pdiv;
109 unsigned int mdiv;
110 unsigned int sdiv;
111 unsigned int kdiv;
b4054ac6 112 unsigned int afc;
5c89658a
TF
113 unsigned int mfr;
114 unsigned int mrr;
115 unsigned int vsel;
3ff6e0d8
YSB
116};
117
1c4c5fe0 118#endif /* __SAMSUNG_CLK_PLL_H */