1/* 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 10#include <linux/clk.h> 11#include <linux/clkdev.h> 12#include <linux/clk-provider.h> 13#include <linux/mfd/dbx500-prcmu.h> 14#include <linux/platform_data/clk-ux500.h> 15#include "clk.h" 16 17void u8540_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, 18 u32 clkrst5_base, u32 clkrst6_base) 19{ 20 struct clk *clk; 21 22 /* Clock sources. */ 23 /* Fixed ClockGen */ 24 clk = clk_reg_prcmu_gate("soc0_pll", NULL, PRCMU_PLLSOC0, 25 CLK_IS_ROOT|CLK_IGNORE_UNUSED); 26 clk_register_clkdev(clk, "soc0_pll", NULL); 27 28 clk = clk_reg_prcmu_gate("soc1_pll", NULL, PRCMU_PLLSOC1, 29 CLK_IS_ROOT|CLK_IGNORE_UNUSED); 30 clk_register_clkdev(clk, "soc1_pll", NULL); 31 32 clk = clk_reg_prcmu_gate("ddr_pll", NULL, PRCMU_PLLDDR, 33 CLK_IS_ROOT|CLK_IGNORE_UNUSED); 34 clk_register_clkdev(clk, "ddr_pll", NULL); 35 36 clk = clk_register_fixed_rate(NULL, "rtc32k", NULL, 37 CLK_IS_ROOT|CLK_IGNORE_UNUSED, 38 32768); 39 clk_register_clkdev(clk, "clk32k", NULL); 40 clk_register_clkdev(clk, "apb_pclk", "rtc-pl031"); 41 42 clk = clk_register_fixed_rate(NULL, "ulp38m4", NULL, 43 CLK_IS_ROOT|CLK_IGNORE_UNUSED, 44 38400000); 45 46 clk = clk_reg_prcmu_gate("uartclk", NULL, PRCMU_UARTCLK, CLK_IS_ROOT); 47 clk_register_clkdev(clk, NULL, "UART"); 48 49 /* msp02clk needs a abx500 clk as parent. Handle by abx500 clk driver */ 50 clk = clk_reg_prcmu_gate("msp02clk", "ab9540_sysclk12_b1", 51 PRCMU_MSP02CLK, 0); 52 clk_register_clkdev(clk, NULL, "MSP02"); 53 54 clk = clk_reg_prcmu_gate("msp1clk", NULL, PRCMU_MSP1CLK, CLK_IS_ROOT); 55 clk_register_clkdev(clk, NULL, "MSP1"); 56 57 clk = clk_reg_prcmu_gate("i2cclk", NULL, PRCMU_I2CCLK, CLK_IS_ROOT); 58 clk_register_clkdev(clk, NULL, "I2C"); 59 60 clk = clk_reg_prcmu_gate("slimclk", NULL, PRCMU_SLIMCLK, CLK_IS_ROOT); 61 clk_register_clkdev(clk, NULL, "slim"); 62 63 clk = clk_reg_prcmu_gate("per1clk", NULL, PRCMU_PER1CLK, CLK_IS_ROOT); 64 clk_register_clkdev(clk, NULL, "PERIPH1"); 65 66 clk = clk_reg_prcmu_gate("per2clk", NULL, PRCMU_PER2CLK, CLK_IS_ROOT); 67 clk_register_clkdev(clk, NULL, "PERIPH2"); 68 69 clk = clk_reg_prcmu_gate("per3clk", NULL, PRCMU_PER3CLK, CLK_IS_ROOT); 70 clk_register_clkdev(clk, NULL, "PERIPH3"); 71 72 clk = clk_reg_prcmu_gate("per5clk", NULL, PRCMU_PER5CLK, CLK_IS_ROOT); 73 clk_register_clkdev(clk, NULL, "PERIPH5"); 74 75 clk = clk_reg_prcmu_gate("per6clk", NULL, PRCMU_PER6CLK, CLK_IS_ROOT); 76 clk_register_clkdev(clk, NULL, "PERIPH6"); 77 78 clk = clk_reg_prcmu_gate("per7clk", NULL, PRCMU_PER7CLK, CLK_IS_ROOT); 79 clk_register_clkdev(clk, NULL, "PERIPH7"); 80 81 clk = clk_reg_prcmu_scalable("lcdclk", NULL, PRCMU_LCDCLK, 0, 82 CLK_IS_ROOT|CLK_SET_RATE_GATE); 83 clk_register_clkdev(clk, NULL, "lcd"); 84 clk_register_clkdev(clk, "lcd", "mcde"); 85 86 clk = clk_reg_prcmu_opp_gate("bmlclk", NULL, PRCMU_BMLCLK, 87 CLK_IS_ROOT); 88 clk_register_clkdev(clk, NULL, "bml"); 89 90 clk = clk_reg_prcmu_scalable("hsitxclk", NULL, PRCMU_HSITXCLK, 0, 91 CLK_IS_ROOT|CLK_SET_RATE_GATE); 92 93 clk = clk_reg_prcmu_scalable("hsirxclk", NULL, PRCMU_HSIRXCLK, 0, 94 CLK_IS_ROOT|CLK_SET_RATE_GATE); 95 96 clk = clk_reg_prcmu_scalable("hdmiclk", NULL, PRCMU_HDMICLK, 0, 97 CLK_IS_ROOT|CLK_SET_RATE_GATE); 98 clk_register_clkdev(clk, NULL, "hdmi"); 99 clk_register_clkdev(clk, "hdmi", "mcde"); 100 101 clk = clk_reg_prcmu_gate("apeatclk", NULL, PRCMU_APEATCLK, CLK_IS_ROOT); 102 clk_register_clkdev(clk, NULL, "apeat"); 103 104 clk = clk_reg_prcmu_gate("apetraceclk", NULL, PRCMU_APETRACECLK, 105 CLK_IS_ROOT); 106 clk_register_clkdev(clk, NULL, "apetrace"); 107 108 clk = clk_reg_prcmu_gate("mcdeclk", NULL, PRCMU_MCDECLK, CLK_IS_ROOT); 109 clk_register_clkdev(clk, NULL, "mcde"); 110 clk_register_clkdev(clk, "mcde", "mcde"); 111 clk_register_clkdev(clk, NULL, "dsilink.0"); 112 clk_register_clkdev(clk, NULL, "dsilink.1"); 113 clk_register_clkdev(clk, NULL, "dsilink.2"); 114 115 clk = clk_reg_prcmu_opp_gate("ipi2cclk", NULL, PRCMU_IPI2CCLK, 116 CLK_IS_ROOT); 117 clk_register_clkdev(clk, NULL, "ipi2"); 118 119 clk = clk_reg_prcmu_gate("dsialtclk", NULL, PRCMU_DSIALTCLK, 120 CLK_IS_ROOT); 121 clk_register_clkdev(clk, NULL, "dsialt"); 122 123 clk = clk_reg_prcmu_gate("dmaclk", NULL, PRCMU_DMACLK, CLK_IS_ROOT); 124 clk_register_clkdev(clk, NULL, "dma40.0"); 125 126 clk = clk_reg_prcmu_gate("b2r2clk", NULL, PRCMU_B2R2CLK, CLK_IS_ROOT); 127 clk_register_clkdev(clk, NULL, "b2r2"); 128 clk_register_clkdev(clk, NULL, "b2r2_core"); 129 clk_register_clkdev(clk, NULL, "U8500-B2R2.0"); 130 clk_register_clkdev(clk, NULL, "b2r2_1_core"); 131 132 clk = clk_reg_prcmu_scalable("tvclk", NULL, PRCMU_TVCLK, 0, 133 CLK_IS_ROOT|CLK_SET_RATE_GATE); 134 clk_register_clkdev(clk, NULL, "tv"); 135 clk_register_clkdev(clk, "tv", "mcde"); 136 137 clk = clk_reg_prcmu_gate("sspclk", NULL, PRCMU_SSPCLK, CLK_IS_ROOT); 138 clk_register_clkdev(clk, NULL, "SSP"); 139 140 clk = clk_reg_prcmu_gate("rngclk", NULL, PRCMU_RNGCLK, CLK_IS_ROOT); 141 clk_register_clkdev(clk, NULL, "rngclk"); 142 143 clk = clk_reg_prcmu_gate("uiccclk", NULL, PRCMU_UICCCLK, CLK_IS_ROOT); 144 clk_register_clkdev(clk, NULL, "uicc"); 145 146 clk = clk_reg_prcmu_gate("timclk", NULL, PRCMU_TIMCLK, CLK_IS_ROOT); 147 clk_register_clkdev(clk, NULL, "mtu0"); 148 clk_register_clkdev(clk, NULL, "mtu1"); 149 150 clk = clk_reg_prcmu_opp_volt_scalable("sdmmcclk", NULL, 151 PRCMU_SDMMCCLK, 100000000, 152 CLK_IS_ROOT|CLK_SET_RATE_GATE); 153 clk_register_clkdev(clk, NULL, "sdmmc"); 154 155 clk = clk_reg_prcmu_opp_volt_scalable("sdmmchclk", NULL, 156 PRCMU_SDMMCHCLK, 400000000, 157 CLK_IS_ROOT|CLK_SET_RATE_GATE); 158 clk_register_clkdev(clk, NULL, "sdmmchclk"); 159 160 clk = clk_reg_prcmu_gate("hvaclk", NULL, PRCMU_HVACLK, CLK_IS_ROOT); 161 clk_register_clkdev(clk, NULL, "hva"); 162 163 clk = clk_reg_prcmu_gate("g1clk", NULL, PRCMU_G1CLK, CLK_IS_ROOT); 164 clk_register_clkdev(clk, NULL, "g1"); 165 166 clk = clk_reg_prcmu_scalable("spare1clk", NULL, PRCMU_SPARE1CLK, 0, 167 CLK_IS_ROOT|CLK_SET_RATE_GATE); 168 clk_register_clkdev(clk, "dsilcd", "mcde"); 169 170 clk = clk_reg_prcmu_scalable("dsi_pll", "hdmiclk", 171 PRCMU_PLLDSI, 0, CLK_SET_RATE_GATE); 172 clk_register_clkdev(clk, "dsihs2", "mcde"); 173 clk_register_clkdev(clk, "hs_clk", "dsilink.2"); 174 175 clk = clk_reg_prcmu_scalable("dsilcd_pll", "spare1clk", 176 PRCMU_PLLDSI_LCD, 0, CLK_SET_RATE_GATE); 177 clk_register_clkdev(clk, "dsilcd_pll", "mcde"); 178 179 clk = clk_reg_prcmu_scalable("dsi0clk", "dsi_pll", 180 PRCMU_DSI0CLK, 0, CLK_SET_RATE_GATE); 181 clk_register_clkdev(clk, "dsihs0", "mcde"); 182 183 clk = clk_reg_prcmu_scalable("dsi0lcdclk", "dsilcd_pll", 184 PRCMU_DSI0CLK_LCD, 0, CLK_SET_RATE_GATE); 185 clk_register_clkdev(clk, "dsihs0", "mcde"); 186 clk_register_clkdev(clk, "hs_clk", "dsilink.0"); 187 188 clk = clk_reg_prcmu_scalable("dsi1clk", "dsi_pll", 189 PRCMU_DSI1CLK, 0, CLK_SET_RATE_GATE); 190 clk_register_clkdev(clk, "dsihs1", "mcde"); 191 192 clk = clk_reg_prcmu_scalable("dsi1lcdclk", "dsilcd_pll", 193 PRCMU_DSI1CLK_LCD, 0, CLK_SET_RATE_GATE); 194 clk_register_clkdev(clk, "dsihs1", "mcde"); 195 clk_register_clkdev(clk, "hs_clk", "dsilink.1"); 196 197 clk = clk_reg_prcmu_scalable("dsi0escclk", "tvclk", 198 PRCMU_DSI0ESCCLK, 0, CLK_SET_RATE_GATE); 199 clk_register_clkdev(clk, "lp_clk", "dsilink.0"); 200 clk_register_clkdev(clk, "dsilp0", "mcde"); 201 202 clk = clk_reg_prcmu_scalable("dsi1escclk", "tvclk", 203 PRCMU_DSI1ESCCLK, 0, CLK_SET_RATE_GATE); 204 clk_register_clkdev(clk, "lp_clk", "dsilink.1"); 205 clk_register_clkdev(clk, "dsilp1", "mcde"); 206 207 clk = clk_reg_prcmu_scalable("dsi2escclk", "tvclk", 208 PRCMU_DSI2ESCCLK, 0, CLK_SET_RATE_GATE); 209 clk_register_clkdev(clk, "lp_clk", "dsilink.2"); 210 clk_register_clkdev(clk, "dsilp2", "mcde"); 211 212 clk = clk_reg_prcmu_scalable_rate("armss", NULL, 213 PRCMU_ARMSS, 0, CLK_IS_ROOT|CLK_IGNORE_UNUSED); 214 clk_register_clkdev(clk, "armss", NULL); 215 216 clk = clk_register_fixed_factor(NULL, "smp_twd", "armss", 217 CLK_IGNORE_UNUSED, 1, 2); 218 clk_register_clkdev(clk, NULL, "smp_twd"); 219 220 /* PRCC P-clocks */ 221 /* Peripheral 1 : PRCC P-clocks */ 222 clk = clk_reg_prcc_pclk("p1_pclk0", "per1clk", clkrst1_base, 223 BIT(0), 0); 224 clk_register_clkdev(clk, "apb_pclk", "uart0"); 225 226 clk = clk_reg_prcc_pclk("p1_pclk1", "per1clk", clkrst1_base, 227 BIT(1), 0); 228 clk_register_clkdev(clk, "apb_pclk", "uart1"); 229 230 clk = clk_reg_prcc_pclk("p1_pclk2", "per1clk", clkrst1_base, 231 BIT(2), 0); 232 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.1"); 233 234 clk = clk_reg_prcc_pclk("p1_pclk3", "per1clk", clkrst1_base, 235 BIT(3), 0); 236 clk_register_clkdev(clk, "apb_pclk", "msp0"); 237 clk_register_clkdev(clk, "apb_pclk", "dbx5x0-msp-i2s.0"); 238 239 clk = clk_reg_prcc_pclk("p1_pclk4", "per1clk", clkrst1_base, 240 BIT(4), 0); 241 clk_register_clkdev(clk, "apb_pclk", "msp1"); 242 clk_register_clkdev(clk, "apb_pclk", "dbx5x0-msp-i2s.1"); 243 244 clk = clk_reg_prcc_pclk("p1_pclk5", "per1clk", clkrst1_base, 245 BIT(5), 0); 246 clk_register_clkdev(clk, "apb_pclk", "sdi0"); 247 248 clk = clk_reg_prcc_pclk("p1_pclk6", "per1clk", clkrst1_base, 249 BIT(6), 0); 250 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.2"); 251 252 clk = clk_reg_prcc_pclk("p1_pclk7", "per1clk", clkrst1_base, 253 BIT(7), 0); 254 clk_register_clkdev(clk, NULL, "spi3"); 255 256 clk = clk_reg_prcc_pclk("p1_pclk8", "per1clk", clkrst1_base, 257 BIT(8), 0); 258 clk_register_clkdev(clk, "apb_pclk", "slimbus0"); 259 260 clk = clk_reg_prcc_pclk("p1_pclk9", "per1clk", clkrst1_base, 261 BIT(9), 0); 262 clk_register_clkdev(clk, NULL, "gpio.0"); 263 clk_register_clkdev(clk, NULL, "gpio.1"); 264 clk_register_clkdev(clk, NULL, "gpioblock0"); 265 clk_register_clkdev(clk, "apb_pclk", "ab85xx-codec.0"); 266 267 clk = clk_reg_prcc_pclk("p1_pclk10", "per1clk", clkrst1_base, 268 BIT(10), 0); 269 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.4"); 270 271 clk = clk_reg_prcc_pclk("p1_pclk11", "per1clk", clkrst1_base, 272 BIT(11), 0); 273 clk_register_clkdev(clk, "apb_pclk", "msp3"); 274 clk_register_clkdev(clk, "apb_pclk", "dbx5x0-msp-i2s.3"); 275 276 /* Peripheral 2 : PRCC P-clocks */ 277 clk = clk_reg_prcc_pclk("p2_pclk0", "per2clk", clkrst2_base, 278 BIT(0), 0); 279 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.3"); 280 281 clk = clk_reg_prcc_pclk("p2_pclk1", "per2clk", clkrst2_base, 282 BIT(1), 0); 283 clk_register_clkdev(clk, NULL, "spi2"); 284 285 clk = clk_reg_prcc_pclk("p2_pclk2", "per2clk", clkrst2_base, 286 BIT(2), 0); 287 clk_register_clkdev(clk, NULL, "spi1"); 288 289 clk = clk_reg_prcc_pclk("p2_pclk3", "per2clk", clkrst2_base, 290 BIT(3), 0); 291 clk_register_clkdev(clk, NULL, "pwl"); 292 293 clk = clk_reg_prcc_pclk("p2_pclk4", "per2clk", clkrst2_base, 294 BIT(4), 0); 295 clk_register_clkdev(clk, "apb_pclk", "sdi4"); 296 297 clk = clk_reg_prcc_pclk("p2_pclk5", "per2clk", clkrst2_base, 298 BIT(5), 0); 299 clk_register_clkdev(clk, "apb_pclk", "msp2"); 300 clk_register_clkdev(clk, "apb_pclk", "dbx5x0-msp-i2s.2"); 301 302 clk = clk_reg_prcc_pclk("p2_pclk6", "per2clk", clkrst2_base, 303 BIT(6), 0); 304 clk_register_clkdev(clk, "apb_pclk", "sdi1"); 305 306 clk = clk_reg_prcc_pclk("p2_pclk7", "per2clk", clkrst2_base, 307 BIT(7), 0); 308 clk_register_clkdev(clk, "apb_pclk", "sdi3"); 309 310 clk = clk_reg_prcc_pclk("p2_pclk8", "per2clk", clkrst2_base, 311 BIT(8), 0); 312 clk_register_clkdev(clk, NULL, "spi0"); 313 314 clk = clk_reg_prcc_pclk("p2_pclk9", "per2clk", clkrst2_base, 315 BIT(9), 0); 316 clk_register_clkdev(clk, "hsir_hclk", "ste_hsi.0"); 317 318 clk = clk_reg_prcc_pclk("p2_pclk10", "per2clk", clkrst2_base, 319 BIT(10), 0); 320 clk_register_clkdev(clk, "hsit_hclk", "ste_hsi.0"); 321 322 clk = clk_reg_prcc_pclk("p2_pclk11", "per2clk", clkrst2_base, 323 BIT(11), 0); 324 clk_register_clkdev(clk, NULL, "gpio.6"); 325 clk_register_clkdev(clk, NULL, "gpio.7"); 326 clk_register_clkdev(clk, NULL, "gpioblock1"); 327 328 clk = clk_reg_prcc_pclk("p2_pclk12", "per2clk", clkrst2_base, 329 BIT(12), 0); 330 clk_register_clkdev(clk, "msp4-pclk", "ab85xx-codec.0"); 331 332 /* Peripheral 3 : PRCC P-clocks */ 333 clk = clk_reg_prcc_pclk("p3_pclk0", "per3clk", clkrst3_base, 334 BIT(0), 0); 335 clk_register_clkdev(clk, NULL, "fsmc"); 336 337 clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", clkrst3_base, 338 BIT(1), 0); 339 clk_register_clkdev(clk, "apb_pclk", "ssp0"); 340 341 clk = clk_reg_prcc_pclk("p3_pclk2", "per3clk", clkrst3_base, 342 BIT(2), 0); 343 clk_register_clkdev(clk, "apb_pclk", "ssp1"); 344 345 clk = clk_reg_prcc_pclk("p3_pclk3", "per3clk", clkrst3_base, 346 BIT(3), 0); 347 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.0"); 348 349 clk = clk_reg_prcc_pclk("p3_pclk4", "per3clk", clkrst3_base, 350 BIT(4), 0); 351 clk_register_clkdev(clk, "apb_pclk", "sdi2"); 352 353 clk = clk_reg_prcc_pclk("p3_pclk5", "per3clk", clkrst3_base, 354 BIT(5), 0); 355 clk_register_clkdev(clk, "apb_pclk", "ske"); 356 clk_register_clkdev(clk, "apb_pclk", "nmk-ske-keypad"); 357 358 clk = clk_reg_prcc_pclk("p3_pclk6", "per3clk", clkrst3_base, 359 BIT(6), 0); 360 clk_register_clkdev(clk, "apb_pclk", "uart2"); 361 362 clk = clk_reg_prcc_pclk("p3_pclk7", "per3clk", clkrst3_base, 363 BIT(7), 0); 364 clk_register_clkdev(clk, "apb_pclk", "sdi5"); 365 366 clk = clk_reg_prcc_pclk("p3_pclk8", "per3clk", clkrst3_base, 367 BIT(8), 0); 368 clk_register_clkdev(clk, NULL, "gpio.2"); 369 clk_register_clkdev(clk, NULL, "gpio.3"); 370 clk_register_clkdev(clk, NULL, "gpio.4"); 371 clk_register_clkdev(clk, NULL, "gpio.5"); 372 clk_register_clkdev(clk, NULL, "gpioblock2"); 373 374 clk = clk_reg_prcc_pclk("p3_pclk9", "per3clk", clkrst3_base, 375 BIT(9), 0); 376 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.5"); 377 378 clk = clk_reg_prcc_pclk("p3_pclk10", "per3clk", clkrst3_base, 379 BIT(10), 0); 380 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.6"); 381 382 clk = clk_reg_prcc_pclk("p3_pclk11", "per3clk", clkrst3_base, 383 BIT(11), 0); 384 clk_register_clkdev(clk, "apb_pclk", "uart3"); 385 386 clk = clk_reg_prcc_pclk("p3_pclk12", "per3clk", clkrst3_base, 387 BIT(12), 0); 388 clk_register_clkdev(clk, "apb_pclk", "uart4"); 389 390 /* Peripheral 5 : PRCC P-clocks */ 391 clk = clk_reg_prcc_pclk("p5_pclk0", "per5clk", clkrst5_base, 392 BIT(0), 0); 393 clk_register_clkdev(clk, "usb", "musb-ux500.0"); 394 clk_register_clkdev(clk, "usbclk", "ab-iddet.0"); 395 396 clk = clk_reg_prcc_pclk("p5_pclk1", "per5clk", clkrst5_base, 397 BIT(1), 0); 398 clk_register_clkdev(clk, NULL, "gpio.8"); 399 clk_register_clkdev(clk, NULL, "gpioblock3"); 400 401 /* Peripheral 6 : PRCC P-clocks */ 402 clk = clk_reg_prcc_pclk("p6_pclk0", "per6clk", clkrst6_base, 403 BIT(0), 0); 404 clk_register_clkdev(clk, "apb_pclk", "rng"); 405 406 clk = clk_reg_prcc_pclk("p6_pclk1", "per6clk", clkrst6_base, 407 BIT(1), 0); 408 clk_register_clkdev(clk, NULL, "cryp0"); 409 clk_register_clkdev(clk, NULL, "cryp1"); 410 411 clk = clk_reg_prcc_pclk("p6_pclk2", "per6clk", clkrst6_base, 412 BIT(2), 0); 413 clk_register_clkdev(clk, NULL, "hash0"); 414 415 clk = clk_reg_prcc_pclk("p6_pclk3", "per6clk", clkrst6_base, 416 BIT(3), 0); 417 clk_register_clkdev(clk, NULL, "pka"); 418 419 clk = clk_reg_prcc_pclk("p6_pclk4", "per6clk", clkrst6_base, 420 BIT(4), 0); 421 clk_register_clkdev(clk, NULL, "db8540-hash1"); 422 423 clk = clk_reg_prcc_pclk("p6_pclk5", "per6clk", clkrst6_base, 424 BIT(5), 0); 425 clk_register_clkdev(clk, NULL, "cfgreg"); 426 427 clk = clk_reg_prcc_pclk("p6_pclk6", "per6clk", clkrst6_base, 428 BIT(6), 0); 429 clk_register_clkdev(clk, "apb_pclk", "mtu0"); 430 431 clk = clk_reg_prcc_pclk("p6_pclk7", "per6clk", clkrst6_base, 432 BIT(7), 0); 433 clk_register_clkdev(clk, "apb_pclk", "mtu1"); 434 435 /* 436 * PRCC K-clocks ==> see table PRCC_PCKEN/PRCC_KCKEN 437 * This differs from the internal implementation: 438 * We don't use the PERPIH[n| clock as parent, since those _should_ 439 * only be used as parents for the P-clocks. 440 * TODO: "parentjoin" with corresponding P-clocks for all K-clocks. 441 */ 442 443 /* Peripheral 1 : PRCC K-clocks */ 444 clk = clk_reg_prcc_kclk("p1_uart0_kclk", "uartclk", 445 clkrst1_base, BIT(0), CLK_SET_RATE_GATE); 446 clk_register_clkdev(clk, NULL, "uart0"); 447 448 clk = clk_reg_prcc_kclk("p1_uart1_kclk", "uartclk", 449 clkrst1_base, BIT(1), CLK_SET_RATE_GATE); 450 clk_register_clkdev(clk, NULL, "uart1"); 451 452 clk = clk_reg_prcc_kclk("p1_i2c1_kclk", "i2cclk", 453 clkrst1_base, BIT(2), CLK_SET_RATE_GATE); 454 clk_register_clkdev(clk, NULL, "nmk-i2c.1"); 455 456 clk = clk_reg_prcc_kclk("p1_msp0_kclk", "msp02clk", 457 clkrst1_base, BIT(3), CLK_SET_RATE_GATE); 458 clk_register_clkdev(clk, NULL, "msp0"); 459 clk_register_clkdev(clk, NULL, "dbx5x0-msp-i2s.0"); 460 461 clk = clk_reg_prcc_kclk("p1_msp1_kclk", "msp1clk", 462 clkrst1_base, BIT(4), CLK_SET_RATE_GATE); 463 clk_register_clkdev(clk, NULL, "msp1"); 464 clk_register_clkdev(clk, NULL, "dbx5x0-msp-i2s.1"); 465 466 clk = clk_reg_prcc_kclk("p1_sdi0_kclk", "sdmmchclk", 467 clkrst1_base, BIT(5), CLK_SET_RATE_GATE); 468 clk_register_clkdev(clk, NULL, "sdi0"); 469 470 clk = clk_reg_prcc_kclk("p1_i2c2_kclk", "i2cclk", 471 clkrst1_base, BIT(6), CLK_SET_RATE_GATE); 472 clk_register_clkdev(clk, NULL, "nmk-i2c.2"); 473 474 clk = clk_reg_prcc_kclk("p1_slimbus0_kclk", "slimclk", 475 clkrst1_base, BIT(8), CLK_SET_RATE_GATE); 476 clk_register_clkdev(clk, NULL, "slimbus0"); 477 478 clk = clk_reg_prcc_kclk("p1_i2c4_kclk", "i2cclk", 479 clkrst1_base, BIT(9), CLK_SET_RATE_GATE); 480 clk_register_clkdev(clk, NULL, "nmk-i2c.4"); 481 482 clk = clk_reg_prcc_kclk("p1_msp3_kclk", "msp1clk", 483 clkrst1_base, BIT(10), CLK_SET_RATE_GATE); 484 clk_register_clkdev(clk, NULL, "msp3"); 485 clk_register_clkdev(clk, NULL, "dbx5x0-msp-i2s.3"); 486 487 /* Peripheral 2 : PRCC K-clocks */ 488 clk = clk_reg_prcc_kclk("p2_i2c3_kclk", "i2cclk", 489 clkrst2_base, BIT(0), CLK_SET_RATE_GATE); 490 clk_register_clkdev(clk, NULL, "nmk-i2c.3"); 491 492 clk = clk_reg_prcc_kclk("p2_pwl_kclk", "rtc32k", 493 clkrst2_base, BIT(1), CLK_SET_RATE_GATE); 494 clk_register_clkdev(clk, NULL, "pwl"); 495 496 clk = clk_reg_prcc_kclk("p2_sdi4_kclk", "sdmmchclk", 497 clkrst2_base, BIT(2), CLK_SET_RATE_GATE); 498 clk_register_clkdev(clk, NULL, "sdi4"); 499 500 clk = clk_reg_prcc_kclk("p2_msp2_kclk", "msp02clk", 501 clkrst2_base, BIT(3), CLK_SET_RATE_GATE); 502 clk_register_clkdev(clk, NULL, "msp2"); 503 clk_register_clkdev(clk, NULL, "dbx5x0-msp-i2s.2"); 504 505 clk = clk_reg_prcc_kclk("p2_sdi1_kclk", "sdmmchclk", 506 clkrst2_base, BIT(4), CLK_SET_RATE_GATE); 507 clk_register_clkdev(clk, NULL, "sdi1"); 508 509 clk = clk_reg_prcc_kclk("p2_sdi3_kclk", "sdmmcclk", 510 clkrst2_base, BIT(5), CLK_SET_RATE_GATE); 511 clk_register_clkdev(clk, NULL, "sdi3"); 512 513 clk = clk_reg_prcc_kclk("p2_ssirx_kclk", "hsirxclk", 514 clkrst2_base, BIT(6), 515 CLK_SET_RATE_GATE|CLK_SET_RATE_PARENT); 516 clk_register_clkdev(clk, "hsir_hsirxclk", "ste_hsi.0"); 517 518 clk = clk_reg_prcc_kclk("p2_ssitx_kclk", "hsitxclk", 519 clkrst2_base, BIT(7), 520 CLK_SET_RATE_GATE|CLK_SET_RATE_PARENT); 521 clk_register_clkdev(clk, "hsit_hsitxclk", "ste_hsi.0"); 522 523 /* Should only be 9540, but might be added for 85xx as well */ 524 clk = clk_reg_prcc_kclk("p2_msp4_kclk", "msp02clk", 525 clkrst2_base, BIT(9), CLK_SET_RATE_GATE); 526 clk_register_clkdev(clk, NULL, "msp4"); 527 clk_register_clkdev(clk, "msp4", "ab85xx-codec.0"); 528 529 /* Peripheral 3 : PRCC K-clocks */ 530 clk = clk_reg_prcc_kclk("p3_ssp0_kclk", "sspclk", 531 clkrst3_base, BIT(1), CLK_SET_RATE_GATE); 532 clk_register_clkdev(clk, NULL, "ssp0"); 533 534 clk = clk_reg_prcc_kclk("p3_ssp1_kclk", "sspclk", 535 clkrst3_base, BIT(2), CLK_SET_RATE_GATE); 536 clk_register_clkdev(clk, NULL, "ssp1"); 537 538 clk = clk_reg_prcc_kclk("p3_i2c0_kclk", "i2cclk", 539 clkrst3_base, BIT(3), CLK_SET_RATE_GATE); 540 clk_register_clkdev(clk, NULL, "nmk-i2c.0"); 541 542 clk = clk_reg_prcc_kclk("p3_sdi2_kclk", "sdmmchclk", 543 clkrst3_base, BIT(4), CLK_SET_RATE_GATE); 544 clk_register_clkdev(clk, NULL, "sdi2"); 545 546 clk = clk_reg_prcc_kclk("p3_ske_kclk", "rtc32k", 547 clkrst3_base, BIT(5), CLK_SET_RATE_GATE); 548 clk_register_clkdev(clk, NULL, "ske"); 549 clk_register_clkdev(clk, NULL, "nmk-ske-keypad"); 550 551 clk = clk_reg_prcc_kclk("p3_uart2_kclk", "uartclk", 552 clkrst3_base, BIT(6), CLK_SET_RATE_GATE); 553 clk_register_clkdev(clk, NULL, "uart2"); 554 555 clk = clk_reg_prcc_kclk("p3_sdi5_kclk", "sdmmcclk", 556 clkrst3_base, BIT(7), CLK_SET_RATE_GATE); 557 clk_register_clkdev(clk, NULL, "sdi5"); 558 559 clk = clk_reg_prcc_kclk("p3_i2c5_kclk", "i2cclk", 560 clkrst3_base, BIT(8), CLK_SET_RATE_GATE); 561 clk_register_clkdev(clk, NULL, "nmk-i2c.5"); 562 563 clk = clk_reg_prcc_kclk("p3_i2c6_kclk", "i2cclk", 564 clkrst3_base, BIT(9), CLK_SET_RATE_GATE); 565 clk_register_clkdev(clk, NULL, "nmk-i2c.6"); 566 567 clk = clk_reg_prcc_kclk("p3_uart3_kclk", "uartclk", 568 clkrst3_base, BIT(10), CLK_SET_RATE_GATE); 569 clk_register_clkdev(clk, NULL, "uart3"); 570 571 clk = clk_reg_prcc_kclk("p3_uart4_kclk", "uartclk", 572 clkrst3_base, BIT(11), CLK_SET_RATE_GATE); 573 clk_register_clkdev(clk, NULL, "uart4"); 574 575 /* Peripheral 6 : PRCC K-clocks */ 576 clk = clk_reg_prcc_kclk("p6_rng_kclk", "rngclk", 577 clkrst6_base, BIT(0), CLK_SET_RATE_GATE); 578 clk_register_clkdev(clk, NULL, "rng"); 579} 580