blob: 133859f0e2bf9003524dea7c75908bac91bf2f99 [file] [log] [blame]
Ulf Hanssonbce5afd2012-08-27 15:45:51 +02001/*
2 * Clock definitions for u8540 platform.
3 *
4 * Copyright (C) 2012 ST-Ericsson SA
5 * Author: Ulf Hansson <ulf.hansson@linaro.org>
6 *
7 * License terms: GNU General Public License (GPL) version 2
8 */
9
Linus Walleij5dc0fe12015-07-30 15:19:25 +020010#include <linux/of.h>
11#include <linux/of_address.h>
Ulf Hanssonbce5afd2012-08-27 15:45:51 +020012#include <linux/clkdev.h>
13#include <linux/clk-provider.h>
14#include <linux/mfd/dbx500-prcmu.h>
Ulf Hanssonbce5afd2012-08-27 15:45:51 +020015#include "clk.h"
16
Linus Walleij5dc0fe12015-07-30 15:19:25 +020017/* CLKRST4 is missing making it hard to index things */
18enum clkrst_index {
19 CLKRST1_INDEX = 0,
20 CLKRST2_INDEX,
21 CLKRST3_INDEX,
22 CLKRST5_INDEX,
23 CLKRST6_INDEX,
24 CLKRST_MAX,
25};
26
Arnd Bergmann269f1aa2016-06-20 22:47:53 +020027static void u8540_clk_init(struct device_node *np)
Ulf Hanssonbce5afd2012-08-27 15:45:51 +020028{
Philippe Begnica6a3ec72013-05-27 14:41:32 +020029 struct clk *clk;
Linus Walleij5dc0fe12015-07-30 15:19:25 +020030 u32 bases[CLKRST_MAX];
31 int i;
32
Linus Walleij5dc0fe12015-07-30 15:19:25 +020033 for (i = 0; i < ARRAY_SIZE(bases); i++) {
34 struct resource r;
35
36 if (of_address_to_resource(np, i, &r))
37 /* Not much choice but to continue */
38 pr_err("failed to get CLKRST %d base address\n",
39 i + 1);
40 bases[i] = r.start;
41 }
Philippe Begnica6a3ec72013-05-27 14:41:32 +020042
43 /* Clock sources. */
44 /* Fixed ClockGen */
45 clk = clk_reg_prcmu_gate("soc0_pll", NULL, PRCMU_PLLSOC0,
Stephen Boyd66f4ae72016-03-01 11:00:04 -080046 CLK_IGNORE_UNUSED);
Philippe Begnica6a3ec72013-05-27 14:41:32 +020047 clk_register_clkdev(clk, "soc0_pll", NULL);
48
49 clk = clk_reg_prcmu_gate("soc1_pll", NULL, PRCMU_PLLSOC1,
Stephen Boyd66f4ae72016-03-01 11:00:04 -080050 CLK_IGNORE_UNUSED);
Philippe Begnica6a3ec72013-05-27 14:41:32 +020051 clk_register_clkdev(clk, "soc1_pll", NULL);
52
53 clk = clk_reg_prcmu_gate("ddr_pll", NULL, PRCMU_PLLDDR,
Stephen Boyd66f4ae72016-03-01 11:00:04 -080054 CLK_IGNORE_UNUSED);
Philippe Begnica6a3ec72013-05-27 14:41:32 +020055 clk_register_clkdev(clk, "ddr_pll", NULL);
56
57 clk = clk_register_fixed_rate(NULL, "rtc32k", NULL,
Stephen Boyd66f4ae72016-03-01 11:00:04 -080058 CLK_IGNORE_UNUSED,
Philippe Begnica6a3ec72013-05-27 14:41:32 +020059 32768);
60 clk_register_clkdev(clk, "clk32k", NULL);
61 clk_register_clkdev(clk, "apb_pclk", "rtc-pl031");
62
63 clk = clk_register_fixed_rate(NULL, "ulp38m4", NULL,
Stephen Boyd66f4ae72016-03-01 11:00:04 -080064 CLK_IGNORE_UNUSED,
Philippe Begnica6a3ec72013-05-27 14:41:32 +020065 38400000);
66
Stephen Boyd66f4ae72016-03-01 11:00:04 -080067 clk = clk_reg_prcmu_gate("uartclk", NULL, PRCMU_UARTCLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +020068 clk_register_clkdev(clk, NULL, "UART");
69
70 /* msp02clk needs a abx500 clk as parent. Handle by abx500 clk driver */
71 clk = clk_reg_prcmu_gate("msp02clk", "ab9540_sysclk12_b1",
72 PRCMU_MSP02CLK, 0);
73 clk_register_clkdev(clk, NULL, "MSP02");
74
Stephen Boyd66f4ae72016-03-01 11:00:04 -080075 clk = clk_reg_prcmu_gate("msp1clk", NULL, PRCMU_MSP1CLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +020076 clk_register_clkdev(clk, NULL, "MSP1");
77
Stephen Boyd66f4ae72016-03-01 11:00:04 -080078 clk = clk_reg_prcmu_gate("i2cclk", NULL, PRCMU_I2CCLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +020079 clk_register_clkdev(clk, NULL, "I2C");
80
Stephen Boyd66f4ae72016-03-01 11:00:04 -080081 clk = clk_reg_prcmu_gate("slimclk", NULL, PRCMU_SLIMCLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +020082 clk_register_clkdev(clk, NULL, "slim");
83
Stephen Boyd66f4ae72016-03-01 11:00:04 -080084 clk = clk_reg_prcmu_gate("per1clk", NULL, PRCMU_PER1CLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +020085 clk_register_clkdev(clk, NULL, "PERIPH1");
86
Stephen Boyd66f4ae72016-03-01 11:00:04 -080087 clk = clk_reg_prcmu_gate("per2clk", NULL, PRCMU_PER2CLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +020088 clk_register_clkdev(clk, NULL, "PERIPH2");
89
Stephen Boyd66f4ae72016-03-01 11:00:04 -080090 clk = clk_reg_prcmu_gate("per3clk", NULL, PRCMU_PER3CLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +020091 clk_register_clkdev(clk, NULL, "PERIPH3");
92
Stephen Boyd66f4ae72016-03-01 11:00:04 -080093 clk = clk_reg_prcmu_gate("per5clk", NULL, PRCMU_PER5CLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +020094 clk_register_clkdev(clk, NULL, "PERIPH5");
95
Stephen Boyd66f4ae72016-03-01 11:00:04 -080096 clk = clk_reg_prcmu_gate("per6clk", NULL, PRCMU_PER6CLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +020097 clk_register_clkdev(clk, NULL, "PERIPH6");
98
Stephen Boyd66f4ae72016-03-01 11:00:04 -080099 clk = clk_reg_prcmu_gate("per7clk", NULL, PRCMU_PER7CLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200100 clk_register_clkdev(clk, NULL, "PERIPH7");
101
102 clk = clk_reg_prcmu_scalable("lcdclk", NULL, PRCMU_LCDCLK, 0,
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800103 CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200104 clk_register_clkdev(clk, NULL, "lcd");
105 clk_register_clkdev(clk, "lcd", "mcde");
106
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800107 clk = clk_reg_prcmu_opp_gate("bmlclk", NULL, PRCMU_BMLCLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200108 clk_register_clkdev(clk, NULL, "bml");
109
110 clk = clk_reg_prcmu_scalable("hsitxclk", NULL, PRCMU_HSITXCLK, 0,
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800111 CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200112
113 clk = clk_reg_prcmu_scalable("hsirxclk", NULL, PRCMU_HSIRXCLK, 0,
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800114 CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200115
116 clk = clk_reg_prcmu_scalable("hdmiclk", NULL, PRCMU_HDMICLK, 0,
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800117 CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200118 clk_register_clkdev(clk, NULL, "hdmi");
119 clk_register_clkdev(clk, "hdmi", "mcde");
120
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800121 clk = clk_reg_prcmu_gate("apeatclk", NULL, PRCMU_APEATCLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200122 clk_register_clkdev(clk, NULL, "apeat");
123
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800124 clk = clk_reg_prcmu_gate("apetraceclk", NULL, PRCMU_APETRACECLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200125 clk_register_clkdev(clk, NULL, "apetrace");
126
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800127 clk = clk_reg_prcmu_gate("mcdeclk", NULL, PRCMU_MCDECLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200128 clk_register_clkdev(clk, NULL, "mcde");
129 clk_register_clkdev(clk, "mcde", "mcde");
130 clk_register_clkdev(clk, NULL, "dsilink.0");
131 clk_register_clkdev(clk, NULL, "dsilink.1");
132 clk_register_clkdev(clk, NULL, "dsilink.2");
133
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800134 clk = clk_reg_prcmu_opp_gate("ipi2cclk", NULL, PRCMU_IPI2CCLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200135 clk_register_clkdev(clk, NULL, "ipi2");
136
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800137 clk = clk_reg_prcmu_gate("dsialtclk", NULL, PRCMU_DSIALTCLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200138 clk_register_clkdev(clk, NULL, "dsialt");
139
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800140 clk = clk_reg_prcmu_gate("dmaclk", NULL, PRCMU_DMACLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200141 clk_register_clkdev(clk, NULL, "dma40.0");
142
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800143 clk = clk_reg_prcmu_gate("b2r2clk", NULL, PRCMU_B2R2CLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200144 clk_register_clkdev(clk, NULL, "b2r2");
145 clk_register_clkdev(clk, NULL, "b2r2_core");
146 clk_register_clkdev(clk, NULL, "U8500-B2R2.0");
147 clk_register_clkdev(clk, NULL, "b2r2_1_core");
148
149 clk = clk_reg_prcmu_scalable("tvclk", NULL, PRCMU_TVCLK, 0,
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800150 CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200151 clk_register_clkdev(clk, NULL, "tv");
152 clk_register_clkdev(clk, "tv", "mcde");
153
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800154 clk = clk_reg_prcmu_gate("sspclk", NULL, PRCMU_SSPCLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200155 clk_register_clkdev(clk, NULL, "SSP");
156
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800157 clk = clk_reg_prcmu_gate("rngclk", NULL, PRCMU_RNGCLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200158 clk_register_clkdev(clk, NULL, "rngclk");
159
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800160 clk = clk_reg_prcmu_gate("uiccclk", NULL, PRCMU_UICCCLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200161 clk_register_clkdev(clk, NULL, "uicc");
162
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800163 clk = clk_reg_prcmu_gate("timclk", NULL, PRCMU_TIMCLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200164 clk_register_clkdev(clk, NULL, "mtu0");
165 clk_register_clkdev(clk, NULL, "mtu1");
166
167 clk = clk_reg_prcmu_opp_volt_scalable("sdmmcclk", NULL,
168 PRCMU_SDMMCCLK, 100000000,
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800169 CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200170 clk_register_clkdev(clk, NULL, "sdmmc");
171
172 clk = clk_reg_prcmu_opp_volt_scalable("sdmmchclk", NULL,
173 PRCMU_SDMMCHCLK, 400000000,
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800174 CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200175 clk_register_clkdev(clk, NULL, "sdmmchclk");
176
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800177 clk = clk_reg_prcmu_gate("hvaclk", NULL, PRCMU_HVACLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200178 clk_register_clkdev(clk, NULL, "hva");
179
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800180 clk = clk_reg_prcmu_gate("g1clk", NULL, PRCMU_G1CLK, 0);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200181 clk_register_clkdev(clk, NULL, "g1");
182
183 clk = clk_reg_prcmu_scalable("spare1clk", NULL, PRCMU_SPARE1CLK, 0,
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800184 CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200185 clk_register_clkdev(clk, "dsilcd", "mcde");
186
187 clk = clk_reg_prcmu_scalable("dsi_pll", "hdmiclk",
188 PRCMU_PLLDSI, 0, CLK_SET_RATE_GATE);
189 clk_register_clkdev(clk, "dsihs2", "mcde");
190 clk_register_clkdev(clk, "hs_clk", "dsilink.2");
191
192 clk = clk_reg_prcmu_scalable("dsilcd_pll", "spare1clk",
193 PRCMU_PLLDSI_LCD, 0, CLK_SET_RATE_GATE);
194 clk_register_clkdev(clk, "dsilcd_pll", "mcde");
195
196 clk = clk_reg_prcmu_scalable("dsi0clk", "dsi_pll",
197 PRCMU_DSI0CLK, 0, CLK_SET_RATE_GATE);
198 clk_register_clkdev(clk, "dsihs0", "mcde");
199
200 clk = clk_reg_prcmu_scalable("dsi0lcdclk", "dsilcd_pll",
201 PRCMU_DSI0CLK_LCD, 0, CLK_SET_RATE_GATE);
202 clk_register_clkdev(clk, "dsihs0", "mcde");
203 clk_register_clkdev(clk, "hs_clk", "dsilink.0");
204
205 clk = clk_reg_prcmu_scalable("dsi1clk", "dsi_pll",
206 PRCMU_DSI1CLK, 0, CLK_SET_RATE_GATE);
207 clk_register_clkdev(clk, "dsihs1", "mcde");
208
209 clk = clk_reg_prcmu_scalable("dsi1lcdclk", "dsilcd_pll",
210 PRCMU_DSI1CLK_LCD, 0, CLK_SET_RATE_GATE);
211 clk_register_clkdev(clk, "dsihs1", "mcde");
212 clk_register_clkdev(clk, "hs_clk", "dsilink.1");
213
214 clk = clk_reg_prcmu_scalable("dsi0escclk", "tvclk",
215 PRCMU_DSI0ESCCLK, 0, CLK_SET_RATE_GATE);
216 clk_register_clkdev(clk, "lp_clk", "dsilink.0");
217 clk_register_clkdev(clk, "dsilp0", "mcde");
218
219 clk = clk_reg_prcmu_scalable("dsi1escclk", "tvclk",
220 PRCMU_DSI1ESCCLK, 0, CLK_SET_RATE_GATE);
221 clk_register_clkdev(clk, "lp_clk", "dsilink.1");
222 clk_register_clkdev(clk, "dsilp1", "mcde");
223
224 clk = clk_reg_prcmu_scalable("dsi2escclk", "tvclk",
225 PRCMU_DSI2ESCCLK, 0, CLK_SET_RATE_GATE);
226 clk_register_clkdev(clk, "lp_clk", "dsilink.2");
227 clk_register_clkdev(clk, "dsilp2", "mcde");
228
229 clk = clk_reg_prcmu_scalable_rate("armss", NULL,
Stephen Boyd66f4ae72016-03-01 11:00:04 -0800230 PRCMU_ARMSS, 0, CLK_IGNORE_UNUSED);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200231 clk_register_clkdev(clk, "armss", NULL);
232
233 clk = clk_register_fixed_factor(NULL, "smp_twd", "armss",
234 CLK_IGNORE_UNUSED, 1, 2);
235 clk_register_clkdev(clk, NULL, "smp_twd");
236
237 /* PRCC P-clocks */
238 /* Peripheral 1 : PRCC P-clocks */
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200239 clk = clk_reg_prcc_pclk("p1_pclk0", "per1clk", bases[CLKRST1_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200240 BIT(0), 0);
241 clk_register_clkdev(clk, "apb_pclk", "uart0");
242
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200243 clk = clk_reg_prcc_pclk("p1_pclk1", "per1clk", bases[CLKRST1_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200244 BIT(1), 0);
245 clk_register_clkdev(clk, "apb_pclk", "uart1");
246
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200247 clk = clk_reg_prcc_pclk("p1_pclk2", "per1clk", bases[CLKRST1_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200248 BIT(2), 0);
249 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.1");
250
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200251 clk = clk_reg_prcc_pclk("p1_pclk3", "per1clk", bases[CLKRST1_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200252 BIT(3), 0);
253 clk_register_clkdev(clk, "apb_pclk", "msp0");
254 clk_register_clkdev(clk, "apb_pclk", "dbx5x0-msp-i2s.0");
255
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200256 clk = clk_reg_prcc_pclk("p1_pclk4", "per1clk", bases[CLKRST1_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200257 BIT(4), 0);
258 clk_register_clkdev(clk, "apb_pclk", "msp1");
259 clk_register_clkdev(clk, "apb_pclk", "dbx5x0-msp-i2s.1");
260
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200261 clk = clk_reg_prcc_pclk("p1_pclk5", "per1clk", bases[CLKRST1_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200262 BIT(5), 0);
263 clk_register_clkdev(clk, "apb_pclk", "sdi0");
264
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200265 clk = clk_reg_prcc_pclk("p1_pclk6", "per1clk", bases[CLKRST1_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200266 BIT(6), 0);
267 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.2");
268
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200269 clk = clk_reg_prcc_pclk("p1_pclk7", "per1clk", bases[CLKRST1_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200270 BIT(7), 0);
271 clk_register_clkdev(clk, NULL, "spi3");
272
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200273 clk = clk_reg_prcc_pclk("p1_pclk8", "per1clk", bases[CLKRST1_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200274 BIT(8), 0);
275 clk_register_clkdev(clk, "apb_pclk", "slimbus0");
276
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200277 clk = clk_reg_prcc_pclk("p1_pclk9", "per1clk", bases[CLKRST1_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200278 BIT(9), 0);
279 clk_register_clkdev(clk, NULL, "gpio.0");
280 clk_register_clkdev(clk, NULL, "gpio.1");
281 clk_register_clkdev(clk, NULL, "gpioblock0");
282 clk_register_clkdev(clk, "apb_pclk", "ab85xx-codec.0");
283
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200284 clk = clk_reg_prcc_pclk("p1_pclk10", "per1clk", bases[CLKRST1_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200285 BIT(10), 0);
286 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.4");
287
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200288 clk = clk_reg_prcc_pclk("p1_pclk11", "per1clk", bases[CLKRST1_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200289 BIT(11), 0);
290 clk_register_clkdev(clk, "apb_pclk", "msp3");
291 clk_register_clkdev(clk, "apb_pclk", "dbx5x0-msp-i2s.3");
292
293 /* Peripheral 2 : PRCC P-clocks */
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200294 clk = clk_reg_prcc_pclk("p2_pclk0", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200295 BIT(0), 0);
296 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.3");
297
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200298 clk = clk_reg_prcc_pclk("p2_pclk1", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200299 BIT(1), 0);
300 clk_register_clkdev(clk, NULL, "spi2");
301
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200302 clk = clk_reg_prcc_pclk("p2_pclk2", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200303 BIT(2), 0);
304 clk_register_clkdev(clk, NULL, "spi1");
305
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200306 clk = clk_reg_prcc_pclk("p2_pclk3", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200307 BIT(3), 0);
308 clk_register_clkdev(clk, NULL, "pwl");
309
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200310 clk = clk_reg_prcc_pclk("p2_pclk4", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200311 BIT(4), 0);
312 clk_register_clkdev(clk, "apb_pclk", "sdi4");
313
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200314 clk = clk_reg_prcc_pclk("p2_pclk5", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200315 BIT(5), 0);
316 clk_register_clkdev(clk, "apb_pclk", "msp2");
317 clk_register_clkdev(clk, "apb_pclk", "dbx5x0-msp-i2s.2");
318
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200319 clk = clk_reg_prcc_pclk("p2_pclk6", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200320 BIT(6), 0);
321 clk_register_clkdev(clk, "apb_pclk", "sdi1");
322
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200323 clk = clk_reg_prcc_pclk("p2_pclk7", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200324 BIT(7), 0);
325 clk_register_clkdev(clk, "apb_pclk", "sdi3");
326
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200327 clk = clk_reg_prcc_pclk("p2_pclk8", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200328 BIT(8), 0);
329 clk_register_clkdev(clk, NULL, "spi0");
330
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200331 clk = clk_reg_prcc_pclk("p2_pclk9", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200332 BIT(9), 0);
333 clk_register_clkdev(clk, "hsir_hclk", "ste_hsi.0");
334
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200335 clk = clk_reg_prcc_pclk("p2_pclk10", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200336 BIT(10), 0);
337 clk_register_clkdev(clk, "hsit_hclk", "ste_hsi.0");
338
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200339 clk = clk_reg_prcc_pclk("p2_pclk11", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200340 BIT(11), 0);
341 clk_register_clkdev(clk, NULL, "gpio.6");
342 clk_register_clkdev(clk, NULL, "gpio.7");
343 clk_register_clkdev(clk, NULL, "gpioblock1");
344
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200345 clk = clk_reg_prcc_pclk("p2_pclk12", "per2clk", bases[CLKRST2_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200346 BIT(12), 0);
347 clk_register_clkdev(clk, "msp4-pclk", "ab85xx-codec.0");
348
349 /* Peripheral 3 : PRCC P-clocks */
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200350 clk = clk_reg_prcc_pclk("p3_pclk0", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200351 BIT(0), 0);
352 clk_register_clkdev(clk, NULL, "fsmc");
353
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200354 clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200355 BIT(1), 0);
356 clk_register_clkdev(clk, "apb_pclk", "ssp0");
357
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200358 clk = clk_reg_prcc_pclk("p3_pclk2", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200359 BIT(2), 0);
360 clk_register_clkdev(clk, "apb_pclk", "ssp1");
361
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200362 clk = clk_reg_prcc_pclk("p3_pclk3", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200363 BIT(3), 0);
364 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.0");
365
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200366 clk = clk_reg_prcc_pclk("p3_pclk4", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200367 BIT(4), 0);
368 clk_register_clkdev(clk, "apb_pclk", "sdi2");
369
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200370 clk = clk_reg_prcc_pclk("p3_pclk5", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200371 BIT(5), 0);
372 clk_register_clkdev(clk, "apb_pclk", "ske");
373 clk_register_clkdev(clk, "apb_pclk", "nmk-ske-keypad");
374
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200375 clk = clk_reg_prcc_pclk("p3_pclk6", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200376 BIT(6), 0);
377 clk_register_clkdev(clk, "apb_pclk", "uart2");
378
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200379 clk = clk_reg_prcc_pclk("p3_pclk7", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200380 BIT(7), 0);
381 clk_register_clkdev(clk, "apb_pclk", "sdi5");
382
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200383 clk = clk_reg_prcc_pclk("p3_pclk8", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200384 BIT(8), 0);
385 clk_register_clkdev(clk, NULL, "gpio.2");
386 clk_register_clkdev(clk, NULL, "gpio.3");
387 clk_register_clkdev(clk, NULL, "gpio.4");
388 clk_register_clkdev(clk, NULL, "gpio.5");
389 clk_register_clkdev(clk, NULL, "gpioblock2");
390
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200391 clk = clk_reg_prcc_pclk("p3_pclk9", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200392 BIT(9), 0);
393 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.5");
394
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200395 clk = clk_reg_prcc_pclk("p3_pclk10", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200396 BIT(10), 0);
397 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.6");
398
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200399 clk = clk_reg_prcc_pclk("p3_pclk11", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200400 BIT(11), 0);
401 clk_register_clkdev(clk, "apb_pclk", "uart3");
402
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200403 clk = clk_reg_prcc_pclk("p3_pclk12", "per3clk", bases[CLKRST3_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200404 BIT(12), 0);
405 clk_register_clkdev(clk, "apb_pclk", "uart4");
406
407 /* Peripheral 5 : PRCC P-clocks */
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200408 clk = clk_reg_prcc_pclk("p5_pclk0", "per5clk", bases[CLKRST5_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200409 BIT(0), 0);
410 clk_register_clkdev(clk, "usb", "musb-ux500.0");
411 clk_register_clkdev(clk, "usbclk", "ab-iddet.0");
412
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200413 clk = clk_reg_prcc_pclk("p5_pclk1", "per5clk", bases[CLKRST5_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200414 BIT(1), 0);
415 clk_register_clkdev(clk, NULL, "gpio.8");
416 clk_register_clkdev(clk, NULL, "gpioblock3");
417
418 /* Peripheral 6 : PRCC P-clocks */
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200419 clk = clk_reg_prcc_pclk("p6_pclk0", "per6clk", bases[CLKRST6_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200420 BIT(0), 0);
421 clk_register_clkdev(clk, "apb_pclk", "rng");
422
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200423 clk = clk_reg_prcc_pclk("p6_pclk1", "per6clk", bases[CLKRST6_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200424 BIT(1), 0);
425 clk_register_clkdev(clk, NULL, "cryp0");
426 clk_register_clkdev(clk, NULL, "cryp1");
427
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200428 clk = clk_reg_prcc_pclk("p6_pclk2", "per6clk", bases[CLKRST6_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200429 BIT(2), 0);
430 clk_register_clkdev(clk, NULL, "hash0");
431
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200432 clk = clk_reg_prcc_pclk("p6_pclk3", "per6clk", bases[CLKRST6_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200433 BIT(3), 0);
434 clk_register_clkdev(clk, NULL, "pka");
435
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200436 clk = clk_reg_prcc_pclk("p6_pclk4", "per6clk", bases[CLKRST6_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200437 BIT(4), 0);
438 clk_register_clkdev(clk, NULL, "db8540-hash1");
439
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200440 clk = clk_reg_prcc_pclk("p6_pclk5", "per6clk", bases[CLKRST6_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200441 BIT(5), 0);
442 clk_register_clkdev(clk, NULL, "cfgreg");
443
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200444 clk = clk_reg_prcc_pclk("p6_pclk6", "per6clk", bases[CLKRST6_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200445 BIT(6), 0);
446 clk_register_clkdev(clk, "apb_pclk", "mtu0");
447
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200448 clk = clk_reg_prcc_pclk("p6_pclk7", "per6clk", bases[CLKRST6_INDEX],
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200449 BIT(7), 0);
450 clk_register_clkdev(clk, "apb_pclk", "mtu1");
451
452 /*
453 * PRCC K-clocks ==> see table PRCC_PCKEN/PRCC_KCKEN
454 * This differs from the internal implementation:
455 * We don't use the PERPIH[n| clock as parent, since those _should_
456 * only be used as parents for the P-clocks.
457 * TODO: "parentjoin" with corresponding P-clocks for all K-clocks.
458 */
459
460 /* Peripheral 1 : PRCC K-clocks */
461 clk = clk_reg_prcc_kclk("p1_uart0_kclk", "uartclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200462 bases[CLKRST1_INDEX], BIT(0), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200463 clk_register_clkdev(clk, NULL, "uart0");
464
465 clk = clk_reg_prcc_kclk("p1_uart1_kclk", "uartclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200466 bases[CLKRST1_INDEX], BIT(1), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200467 clk_register_clkdev(clk, NULL, "uart1");
468
469 clk = clk_reg_prcc_kclk("p1_i2c1_kclk", "i2cclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200470 bases[CLKRST1_INDEX], BIT(2), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200471 clk_register_clkdev(clk, NULL, "nmk-i2c.1");
472
473 clk = clk_reg_prcc_kclk("p1_msp0_kclk", "msp02clk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200474 bases[CLKRST1_INDEX], BIT(3), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200475 clk_register_clkdev(clk, NULL, "msp0");
476 clk_register_clkdev(clk, NULL, "dbx5x0-msp-i2s.0");
477
478 clk = clk_reg_prcc_kclk("p1_msp1_kclk", "msp1clk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200479 bases[CLKRST1_INDEX], BIT(4), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200480 clk_register_clkdev(clk, NULL, "msp1");
481 clk_register_clkdev(clk, NULL, "dbx5x0-msp-i2s.1");
482
483 clk = clk_reg_prcc_kclk("p1_sdi0_kclk", "sdmmchclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200484 bases[CLKRST1_INDEX], BIT(5), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200485 clk_register_clkdev(clk, NULL, "sdi0");
486
487 clk = clk_reg_prcc_kclk("p1_i2c2_kclk", "i2cclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200488 bases[CLKRST1_INDEX], BIT(6), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200489 clk_register_clkdev(clk, NULL, "nmk-i2c.2");
490
491 clk = clk_reg_prcc_kclk("p1_slimbus0_kclk", "slimclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200492 bases[CLKRST1_INDEX], BIT(8), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200493 clk_register_clkdev(clk, NULL, "slimbus0");
494
495 clk = clk_reg_prcc_kclk("p1_i2c4_kclk", "i2cclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200496 bases[CLKRST1_INDEX], BIT(9), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200497 clk_register_clkdev(clk, NULL, "nmk-i2c.4");
498
499 clk = clk_reg_prcc_kclk("p1_msp3_kclk", "msp1clk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200500 bases[CLKRST1_INDEX], BIT(10), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200501 clk_register_clkdev(clk, NULL, "msp3");
502 clk_register_clkdev(clk, NULL, "dbx5x0-msp-i2s.3");
503
504 /* Peripheral 2 : PRCC K-clocks */
505 clk = clk_reg_prcc_kclk("p2_i2c3_kclk", "i2cclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200506 bases[CLKRST2_INDEX], BIT(0), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200507 clk_register_clkdev(clk, NULL, "nmk-i2c.3");
508
509 clk = clk_reg_prcc_kclk("p2_pwl_kclk", "rtc32k",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200510 bases[CLKRST2_INDEX], BIT(1), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200511 clk_register_clkdev(clk, NULL, "pwl");
512
513 clk = clk_reg_prcc_kclk("p2_sdi4_kclk", "sdmmchclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200514 bases[CLKRST2_INDEX], BIT(2), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200515 clk_register_clkdev(clk, NULL, "sdi4");
516
517 clk = clk_reg_prcc_kclk("p2_msp2_kclk", "msp02clk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200518 bases[CLKRST2_INDEX], BIT(3), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200519 clk_register_clkdev(clk, NULL, "msp2");
520 clk_register_clkdev(clk, NULL, "dbx5x0-msp-i2s.2");
521
522 clk = clk_reg_prcc_kclk("p2_sdi1_kclk", "sdmmchclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200523 bases[CLKRST2_INDEX], BIT(4), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200524 clk_register_clkdev(clk, NULL, "sdi1");
525
526 clk = clk_reg_prcc_kclk("p2_sdi3_kclk", "sdmmcclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200527 bases[CLKRST2_INDEX], BIT(5), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200528 clk_register_clkdev(clk, NULL, "sdi3");
529
530 clk = clk_reg_prcc_kclk("p2_ssirx_kclk", "hsirxclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200531 bases[CLKRST2_INDEX], BIT(6),
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200532 CLK_SET_RATE_GATE|CLK_SET_RATE_PARENT);
533 clk_register_clkdev(clk, "hsir_hsirxclk", "ste_hsi.0");
534
535 clk = clk_reg_prcc_kclk("p2_ssitx_kclk", "hsitxclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200536 bases[CLKRST2_INDEX], BIT(7),
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200537 CLK_SET_RATE_GATE|CLK_SET_RATE_PARENT);
538 clk_register_clkdev(clk, "hsit_hsitxclk", "ste_hsi.0");
539
540 /* Should only be 9540, but might be added for 85xx as well */
541 clk = clk_reg_prcc_kclk("p2_msp4_kclk", "msp02clk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200542 bases[CLKRST2_INDEX], BIT(9), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200543 clk_register_clkdev(clk, NULL, "msp4");
544 clk_register_clkdev(clk, "msp4", "ab85xx-codec.0");
545
546 /* Peripheral 3 : PRCC K-clocks */
547 clk = clk_reg_prcc_kclk("p3_ssp0_kclk", "sspclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200548 bases[CLKRST3_INDEX], BIT(1), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200549 clk_register_clkdev(clk, NULL, "ssp0");
550
551 clk = clk_reg_prcc_kclk("p3_ssp1_kclk", "sspclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200552 bases[CLKRST3_INDEX], BIT(2), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200553 clk_register_clkdev(clk, NULL, "ssp1");
554
555 clk = clk_reg_prcc_kclk("p3_i2c0_kclk", "i2cclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200556 bases[CLKRST3_INDEX], BIT(3), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200557 clk_register_clkdev(clk, NULL, "nmk-i2c.0");
558
559 clk = clk_reg_prcc_kclk("p3_sdi2_kclk", "sdmmchclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200560 bases[CLKRST3_INDEX], BIT(4), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200561 clk_register_clkdev(clk, NULL, "sdi2");
562
563 clk = clk_reg_prcc_kclk("p3_ske_kclk", "rtc32k",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200564 bases[CLKRST3_INDEX], BIT(5), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200565 clk_register_clkdev(clk, NULL, "ske");
566 clk_register_clkdev(clk, NULL, "nmk-ske-keypad");
567
568 clk = clk_reg_prcc_kclk("p3_uart2_kclk", "uartclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200569 bases[CLKRST3_INDEX], BIT(6), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200570 clk_register_clkdev(clk, NULL, "uart2");
571
572 clk = clk_reg_prcc_kclk("p3_sdi5_kclk", "sdmmcclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200573 bases[CLKRST3_INDEX], BIT(7), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200574 clk_register_clkdev(clk, NULL, "sdi5");
575
576 clk = clk_reg_prcc_kclk("p3_i2c5_kclk", "i2cclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200577 bases[CLKRST3_INDEX], BIT(8), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200578 clk_register_clkdev(clk, NULL, "nmk-i2c.5");
579
580 clk = clk_reg_prcc_kclk("p3_i2c6_kclk", "i2cclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200581 bases[CLKRST3_INDEX], BIT(9), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200582 clk_register_clkdev(clk, NULL, "nmk-i2c.6");
583
584 clk = clk_reg_prcc_kclk("p3_uart3_kclk", "uartclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200585 bases[CLKRST3_INDEX], BIT(10), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200586 clk_register_clkdev(clk, NULL, "uart3");
587
588 clk = clk_reg_prcc_kclk("p3_uart4_kclk", "uartclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200589 bases[CLKRST3_INDEX], BIT(11), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200590 clk_register_clkdev(clk, NULL, "uart4");
591
592 /* Peripheral 6 : PRCC K-clocks */
593 clk = clk_reg_prcc_kclk("p6_rng_kclk", "rngclk",
Linus Walleij5dc0fe12015-07-30 15:19:25 +0200594 bases[CLKRST6_INDEX], BIT(0), CLK_SET_RATE_GATE);
Philippe Begnica6a3ec72013-05-27 14:41:32 +0200595 clk_register_clkdev(clk, NULL, "rng");
Ulf Hanssonbce5afd2012-08-27 15:45:51 +0200596}
Arnd Bergmann269f1aa2016-06-20 22:47:53 +0200597CLK_OF_DECLARE(u8540_clks, "stericsson,u8540-clks", u8540_clk_init);