Commit | Line | Data |
---|---|---|
6f9ba9b4 AB |
1 | /* |
2 | * Copyright (c) 2014 Marvell Technology Group Ltd. | |
3 | * | |
4 | * Alexandre Belloni <alexandre.belloni@free-electrons.com> | |
5 | * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> | |
6 | * | |
7 | * This program is free software; you can redistribute it and/or modify it | |
8 | * under the terms and conditions of the GNU General Public License, | |
9 | * version 2, as published by the Free Software Foundation. | |
10 | * | |
11 | * This program is distributed in the hope it will be useful, but WITHOUT | |
12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
14 | * more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License along with | |
17 | * this program. If not, see <http://www.gnu.org/licenses/>. | |
18 | */ | |
19 | #ifndef __BERLIN2_DIV_H | |
20 | #define __BERLIN2_DIV_H | |
21 | ||
f6475e29 | 22 | struct clk_hw; |
6f9ba9b4 AB |
23 | |
24 | #define BERLIN2_DIV_HAS_GATE BIT(0) | |
25 | #define BERLIN2_DIV_HAS_MUX BIT(1) | |
26 | ||
27 | #define BERLIN2_PLL_SELECT(_off, _sh) \ | |
28 | .pll_select_offs = _off, \ | |
29 | .pll_select_shift = _sh | |
30 | ||
31 | #define BERLIN2_PLL_SWITCH(_off, _sh) \ | |
32 | .pll_switch_offs = _off, \ | |
33 | .pll_switch_shift = _sh | |
34 | ||
35 | #define BERLIN2_DIV_SELECT(_off, _sh) \ | |
36 | .div_select_offs = _off, \ | |
37 | .div_select_shift = _sh | |
38 | ||
39 | #define BERLIN2_DIV_SWITCH(_off, _sh) \ | |
40 | .div_switch_offs = _off, \ | |
41 | .div_switch_shift = _sh | |
42 | ||
43 | #define BERLIN2_DIV_D3SWITCH(_off, _sh) \ | |
44 | .div3_switch_offs = _off, \ | |
45 | .div3_switch_shift = _sh | |
46 | ||
47 | #define BERLIN2_DIV_GATE(_off, _sh) \ | |
48 | .gate_offs = _off, \ | |
49 | .gate_shift = _sh | |
50 | ||
51 | #define BERLIN2_SINGLE_DIV(_off) \ | |
52 | BERLIN2_DIV_GATE(_off, 0), \ | |
53 | BERLIN2_PLL_SELECT(_off, 1), \ | |
54 | BERLIN2_PLL_SWITCH(_off, 4), \ | |
55 | BERLIN2_DIV_SWITCH(_off, 5), \ | |
56 | BERLIN2_DIV_D3SWITCH(_off, 6), \ | |
57 | BERLIN2_DIV_SELECT(_off, 7) | |
58 | ||
59 | struct berlin2_div_map { | |
60 | u16 pll_select_offs; | |
61 | u16 pll_switch_offs; | |
62 | u16 div_select_offs; | |
63 | u16 div_switch_offs; | |
64 | u16 div3_switch_offs; | |
65 | u16 gate_offs; | |
66 | u8 pll_select_shift; | |
67 | u8 pll_switch_shift; | |
68 | u8 div_select_shift; | |
69 | u8 div_switch_shift; | |
70 | u8 div3_switch_shift; | |
71 | u8 gate_shift; | |
72 | }; | |
73 | ||
74 | struct berlin2_div_data { | |
75 | const char *name; | |
76 | const u8 *parent_ids; | |
77 | int num_parents; | |
78 | unsigned long flags; | |
79 | struct berlin2_div_map map; | |
80 | u8 div_flags; | |
81 | }; | |
82 | ||
f6475e29 | 83 | struct clk_hw * |
6f9ba9b4 AB |
84 | berlin2_div_register(const struct berlin2_div_map *map, |
85 | void __iomem *base, const char *name, u8 div_flags, | |
86 | const char **parent_names, int num_parents, | |
87 | unsigned long flags, spinlock_t *lock); | |
88 | ||
89 | #endif /* __BERLIN2_DIV_H */ |