Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: samsung: exynos7: add clocks for SPI block

Add clock support for 5 SPI channels.

Signed-off-by: Padmavathi Venna <padma.v@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>

authored by

Padmavathi Venna and committed by
Sylwester Nawrocki
ee74b56a 9cc2a0c9

+95 -2
+5
Documentation/devicetree/bindings/clock/exynos7-clock.txt
··· 77 77 - sclk_uart1 78 78 - sclk_uart2 79 79 - sclk_uart3 80 + - sclk_spi0 81 + - sclk_spi1 82 + - sclk_spi2 83 + - sclk_spi3 84 + - sclk_spi4 80 85 81 86 Input clocks for peris clock controller: 82 87 - fin_pll
+73
drivers/clk/samsung/clk-exynos7.c
··· 177 177 #define MUX_SEL_TOP00 0x0200 178 178 #define MUX_SEL_TOP01 0x0204 179 179 #define MUX_SEL_TOP03 0x020C 180 + #define MUX_SEL_TOP0_PERIC1 0x0234 181 + #define MUX_SEL_TOP0_PERIC2 0x0238 180 182 #define MUX_SEL_TOP0_PERIC3 0x023C 181 183 #define DIV_TOP03 0x060C 184 + #define DIV_TOP0_PERIC1 0x0634 185 + #define DIV_TOP0_PERIC2 0x0638 182 186 #define DIV_TOP0_PERIC3 0x063C 187 + #define ENABLE_SCLK_TOP0_PERIC1 0x0A34 188 + #define ENABLE_SCLK_TOP0_PERIC2 0x0A38 183 189 #define ENABLE_SCLK_TOP0_PERIC3 0x0A3C 184 190 185 191 /* List of parent clocks for Muxes in CMU_TOP0 */ ··· 211 205 MUX_SEL_TOP00, 212 206 MUX_SEL_TOP01, 213 207 MUX_SEL_TOP03, 208 + MUX_SEL_TOP0_PERIC1, 209 + MUX_SEL_TOP0_PERIC2, 214 210 MUX_SEL_TOP0_PERIC3, 215 211 DIV_TOP03, 212 + DIV_TOP0_PERIC1, 213 + DIV_TOP0_PERIC2, 216 214 DIV_TOP0_PERIC3, 215 + ENABLE_SCLK_TOP0_PERIC1, 216 + ENABLE_SCLK_TOP0_PERIC2, 217 217 ENABLE_SCLK_TOP0_PERIC3, 218 218 }; 219 219 ··· 241 229 MUX(0, "mout_aclk_peric1_66", mout_top0_group1, MUX_SEL_TOP03, 12, 2), 242 230 MUX(0, "mout_aclk_peric0_66", mout_top0_group1, MUX_SEL_TOP03, 20, 2), 243 231 232 + MUX(0, "mout_sclk_spi1", mout_top0_group1, MUX_SEL_TOP0_PERIC1, 8, 2), 233 + MUX(0, "mout_sclk_spi0", mout_top0_group1, MUX_SEL_TOP0_PERIC1, 20, 2), 234 + 235 + MUX(0, "mout_sclk_spi3", mout_top0_group1, MUX_SEL_TOP0_PERIC2, 8, 2), 236 + MUX(0, "mout_sclk_spi2", mout_top0_group1, MUX_SEL_TOP0_PERIC2, 20, 2), 244 237 MUX(0, "mout_sclk_uart3", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 4, 2), 245 238 MUX(0, "mout_sclk_uart2", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 8, 2), 246 239 MUX(0, "mout_sclk_uart1", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 12, 2), 247 240 MUX(0, "mout_sclk_uart0", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 16, 2), 241 + MUX(0, "mout_sclk_spi4", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 20, 2), 248 242 }; 249 243 250 244 static struct samsung_div_clock top0_div_clks[] __initdata = { ··· 259 241 DIV(DOUT_ACLK_PERIC0, "dout_aclk_peric0_66", "mout_aclk_peric0_66", 260 242 DIV_TOP03, 20, 6), 261 243 244 + DIV(0, "dout_sclk_spi1", "mout_sclk_spi1", DIV_TOP0_PERIC1, 8, 12), 245 + DIV(0, "dout_sclk_spi0", "mout_sclk_spi0", DIV_TOP0_PERIC1, 20, 12), 246 + 247 + DIV(0, "dout_sclk_spi3", "mout_sclk_spi3", DIV_TOP0_PERIC2, 8, 12), 248 + DIV(0, "dout_sclk_spi2", "mout_sclk_spi2", DIV_TOP0_PERIC2, 20, 12), 249 + 262 250 DIV(0, "dout_sclk_uart3", "mout_sclk_uart3", DIV_TOP0_PERIC3, 4, 4), 263 251 DIV(0, "dout_sclk_uart2", "mout_sclk_uart2", DIV_TOP0_PERIC3, 8, 4), 264 252 DIV(0, "dout_sclk_uart1", "mout_sclk_uart1", DIV_TOP0_PERIC3, 12, 4), 265 253 DIV(0, "dout_sclk_uart0", "mout_sclk_uart0", DIV_TOP0_PERIC3, 16, 4), 254 + DIV(0, "dout_sclk_spi4", "mout_sclk_spi4", DIV_TOP0_PERIC3, 20, 12), 266 255 }; 267 256 268 257 static struct samsung_gate_clock top0_gate_clks[] __initdata = { 258 + GATE(CLK_SCLK_SPI1, "sclk_spi1", "dout_sclk_spi1", 259 + ENABLE_SCLK_TOP0_PERIC1, 8, CLK_SET_RATE_PARENT, 0), 260 + GATE(CLK_SCLK_SPI0, "sclk_spi0", "dout_sclk_spi0", 261 + ENABLE_SCLK_TOP0_PERIC1, 20, CLK_SET_RATE_PARENT, 0), 262 + 263 + GATE(CLK_SCLK_SPI3, "sclk_spi3", "dout_sclk_spi3", 264 + ENABLE_SCLK_TOP0_PERIC2, 8, CLK_SET_RATE_PARENT, 0), 265 + GATE(CLK_SCLK_SPI2, "sclk_spi2", "dout_sclk_spi2", 266 + ENABLE_SCLK_TOP0_PERIC2, 20, CLK_SET_RATE_PARENT, 0), 269 267 GATE(CLK_SCLK_UART3, "sclk_uart3", "dout_sclk_uart3", 270 268 ENABLE_SCLK_TOP0_PERIC3, 4, 0, 0), 271 269 GATE(CLK_SCLK_UART2, "sclk_uart2", "dout_sclk_uart2", ··· 290 256 ENABLE_SCLK_TOP0_PERIC3, 12, 0, 0), 291 257 GATE(CLK_SCLK_UART0, "sclk_uart0", "dout_sclk_uart0", 292 258 ENABLE_SCLK_TOP0_PERIC3, 16, 0, 0), 259 + GATE(CLK_SCLK_SPI4, "sclk_spi4", "dout_sclk_spi4", 260 + ENABLE_SCLK_TOP0_PERIC3, 20, CLK_SET_RATE_PARENT, 0), 293 261 }; 294 262 295 263 static struct samsung_fixed_factor_clock top0_fixed_factor_clks[] __initdata = { ··· 567 531 /* Register Offset definitions for CMU_PERIC1 (0x14C80000) */ 568 532 #define MUX_SEL_PERIC10 0x0200 569 533 #define MUX_SEL_PERIC11 0x0204 534 + #define MUX_SEL_PERIC12 0x0208 570 535 #define ENABLE_PCLK_PERIC1 0x0900 571 536 #define ENABLE_SCLK_PERIC10 0x0A00 572 537 ··· 579 542 PNAME(mout_sclk_uart1_p) = { "fin_pll", "sclk_uart1" }; 580 543 PNAME(mout_sclk_uart2_p) = { "fin_pll", "sclk_uart2" }; 581 544 PNAME(mout_sclk_uart3_p) = { "fin_pll", "sclk_uart3" }; 545 + PNAME(mout_sclk_spi0_p) = { "fin_pll", "sclk_spi0" }; 546 + PNAME(mout_sclk_spi1_p) = { "fin_pll", "sclk_spi1" }; 547 + PNAME(mout_sclk_spi2_p) = { "fin_pll", "sclk_spi2" }; 548 + PNAME(mout_sclk_spi3_p) = { "fin_pll", "sclk_spi3" }; 549 + PNAME(mout_sclk_spi4_p) = { "fin_pll", "sclk_spi4" }; 582 550 583 551 static unsigned long peric1_clk_regs[] __initdata = { 584 552 MUX_SEL_PERIC10, 585 553 MUX_SEL_PERIC11, 554 + MUX_SEL_PERIC12, 586 555 ENABLE_PCLK_PERIC1, 587 556 ENABLE_SCLK_PERIC10, 588 557 }; ··· 597 554 MUX(0, "mout_aclk_peric1_66_user", mout_aclk_peric1_66_p, 598 555 MUX_SEL_PERIC10, 0, 1), 599 556 557 + MUX_F(0, "mout_sclk_spi0_user", mout_sclk_spi0_p, 558 + MUX_SEL_PERIC11, 0, 1, CLK_SET_RATE_PARENT, 0), 559 + MUX_F(0, "mout_sclk_spi1_user", mout_sclk_spi1_p, 560 + MUX_SEL_PERIC11, 4, 1, CLK_SET_RATE_PARENT, 0), 561 + MUX_F(0, "mout_sclk_spi2_user", mout_sclk_spi2_p, 562 + MUX_SEL_PERIC11, 8, 1, CLK_SET_RATE_PARENT, 0), 563 + MUX_F(0, "mout_sclk_spi3_user", mout_sclk_spi3_p, 564 + MUX_SEL_PERIC11, 12, 1, CLK_SET_RATE_PARENT, 0), 565 + MUX_F(0, "mout_sclk_spi4_user", mout_sclk_spi4_p, 566 + MUX_SEL_PERIC11, 16, 1, CLK_SET_RATE_PARENT, 0), 600 567 MUX(0, "mout_sclk_uart1_user", mout_sclk_uart1_p, 601 568 MUX_SEL_PERIC11, 20, 1), 602 569 MUX(0, "mout_sclk_uart2_user", mout_sclk_uart2_p, ··· 632 579 ENABLE_PCLK_PERIC1, 10, 0, 0), 633 580 GATE(PCLK_UART3, "pclk_uart3", "mout_aclk_peric1_66_user", 634 581 ENABLE_PCLK_PERIC1, 11, 0, 0), 582 + GATE(PCLK_SPI0, "pclk_spi0", "mout_aclk_peric1_66_user", 583 + ENABLE_PCLK_PERIC1, 12, 0, 0), 584 + GATE(PCLK_SPI1, "pclk_spi1", "mout_aclk_peric1_66_user", 585 + ENABLE_PCLK_PERIC1, 13, 0, 0), 586 + GATE(PCLK_SPI2, "pclk_spi2", "mout_aclk_peric1_66_user", 587 + ENABLE_PCLK_PERIC1, 14, 0, 0), 588 + GATE(PCLK_SPI3, "pclk_spi3", "mout_aclk_peric1_66_user", 589 + ENABLE_PCLK_PERIC1, 15, 0, 0), 590 + GATE(PCLK_SPI4, "pclk_spi4", "mout_aclk_peric1_66_user", 591 + ENABLE_PCLK_PERIC1, 16, 0, 0), 635 592 636 593 GATE(SCLK_UART1, "sclk_uart1_user", "mout_sclk_uart1_user", 637 594 ENABLE_SCLK_PERIC10, 9, 0, 0), ··· 649 586 ENABLE_SCLK_PERIC10, 10, 0, 0), 650 587 GATE(SCLK_UART3, "sclk_uart3_user", "mout_sclk_uart3_user", 651 588 ENABLE_SCLK_PERIC10, 11, 0, 0), 589 + GATE(SCLK_SPI0, "sclk_spi0_user", "mout_sclk_spi0_user", 590 + ENABLE_SCLK_PERIC10, 12, CLK_SET_RATE_PARENT, 0), 591 + GATE(SCLK_SPI1, "sclk_spi1_user", "mout_sclk_spi1_user", 592 + ENABLE_SCLK_PERIC10, 13, CLK_SET_RATE_PARENT, 0), 593 + GATE(SCLK_SPI2, "sclk_spi2_user", "mout_sclk_spi2_user", 594 + ENABLE_SCLK_PERIC10, 14, CLK_SET_RATE_PARENT, 0), 595 + GATE(SCLK_SPI3, "sclk_spi3_user", "mout_sclk_spi3_user", 596 + ENABLE_SCLK_PERIC10, 15, CLK_SET_RATE_PARENT, 0), 597 + GATE(SCLK_SPI4, "sclk_spi4_user", "mout_sclk_spi4_user", 598 + ENABLE_SCLK_PERIC10, 16, CLK_SET_RATE_PARENT, 0), 652 599 }; 653 600 654 601 static struct samsung_cmu_info peric1_cmu_info __initdata = {
+17 -2
include/dt-bindings/clock/exynos7-clk.h
··· 28 28 #define CLK_SCLK_UART1 4 29 29 #define CLK_SCLK_UART2 5 30 30 #define CLK_SCLK_UART3 6 31 - #define TOP0_NR_CLK 7 31 + #define CLK_SCLK_SPI0 7 32 + #define CLK_SCLK_SPI1 8 33 + #define CLK_SCLK_SPI2 9 34 + #define CLK_SCLK_SPI3 10 35 + #define CLK_SCLK_SPI4 11 36 + #define TOP0_NR_CLK 12 32 37 33 38 /* TOP1 */ 34 39 #define DOUT_ACLK_FSYS1_200 1 ··· 77 72 #define PCLK_HSI2C6 9 78 73 #define PCLK_HSI2C7 10 79 74 #define PCLK_HSI2C8 11 80 - #define PERIC1_NR_CLK 12 75 + #define PCLK_SPI0 12 76 + #define PCLK_SPI1 13 77 + #define PCLK_SPI2 14 78 + #define PCLK_SPI3 15 79 + #define PCLK_SPI4 16 80 + #define SCLK_SPI0 17 81 + #define SCLK_SPI1 18 82 + #define SCLK_SPI2 19 83 + #define SCLK_SPI3 20 84 + #define SCLK_SPI4 21 85 + #define PERIC1_NR_CLK 22 81 86 82 87 /* PERIS */ 83 88 #define PCLK_CHIPID 1