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

sh: clkfwk: clock-sh73a0: all div6_clks use SH_CLK_DIV6_EXT()

Current div6 clocks can specify their current parent clocks
from its register value if it is registered
by sh_clk_div6_reparent_register().
This patch modifies all div6 clocks into SH_CLK_DIV6_EXT().

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>

authored by

Kuninori Morimoto and committed by
Paul Mundt
d4775356 171f1bc7

+126 -22
+124 -22
arch/arm/mach-shmobile/clock-sh73a0.c
··· 92 92 .recalc = div2_recalc, 93 93 }; 94 94 95 + static unsigned long div7_recalc(struct clk *clk) 96 + { 97 + return clk->parent->rate / 7; 98 + } 99 + 100 + static struct clk_ops div7_clk_ops = { 101 + .recalc = div7_recalc, 102 + }; 103 + 104 + static unsigned long div13_recalc(struct clk *clk) 105 + { 106 + return clk->parent->rate / 13; 107 + } 108 + 109 + static struct clk_ops div13_clk_ops = { 110 + .recalc = div13_recalc, 111 + }; 112 + 95 113 /* Divide extal1 by two */ 96 114 static struct clk extal1_div2_clk = { 97 115 .ops = &div2_clk_ops, ··· 129 111 /* Main clock */ 130 112 static struct clk main_clk = { 131 113 .ops = &main_clk_ops, 114 + }; 115 + 116 + static struct clk main_div2_clk = { 117 + .ops = &div2_clk_ops, 118 + .parent = &main_clk, 132 119 }; 133 120 134 121 /* PLL0, PLL1, PLL2, PLL3 */ ··· 191 168 .enable_bit = 3, 192 169 }; 193 170 194 - /* Divide PLL1 by two */ 171 + /* Divide PLL */ 195 172 static struct clk pll1_div2_clk = { 196 173 .ops = &div2_clk_ops, 197 174 .parent = &pll1_clk, 175 + }; 176 + 177 + static struct clk pll1_div7_clk = { 178 + .ops = &div7_clk_ops, 179 + .parent = &pll1_clk, 180 + }; 181 + 182 + static struct clk pll1_div13_clk = { 183 + .ops = &div13_clk_ops, 184 + .parent = &pll1_clk, 185 + }; 186 + 187 + /* External input clock */ 188 + struct clk sh73a0_extcki_clk = { 189 + }; 190 + 191 + struct clk sh73a0_extalr_clk = { 198 192 }; 199 193 200 194 static struct clk *main_clks[] = { ··· 221 181 &extal1_div2_clk, 222 182 &extal2_div2_clk, 223 183 &main_clk, 184 + &main_div2_clk, 224 185 &pll0_clk, 225 186 &pll1_clk, 226 187 &pll2_clk, 227 188 &pll3_clk, 228 189 &pll1_div2_clk, 190 + &pll1_div7_clk, 191 + &pll1_div13_clk, 192 + &sh73a0_extcki_clk, 193 + &sh73a0_extalr_clk, 229 194 }; 230 195 231 196 static void div4_kick(struct clk *clk) ··· 284 239 DIV6_DSIT, DIV6_DSI0P, DIV6_DSI1P, 285 240 DIV6_NR }; 286 241 242 + static struct clk *vck_parent[8] = { 243 + [0] = &pll1_div2_clk, 244 + [1] = &pll2_clk, 245 + [2] = &sh73a0_extcki_clk, 246 + [3] = &sh73a0_extal2_clk, 247 + [4] = &main_div2_clk, 248 + [5] = &sh73a0_extalr_clk, 249 + [6] = &main_clk, 250 + }; 251 + 252 + static struct clk *pll_parent[4] = { 253 + [0] = &pll1_div2_clk, 254 + [1] = &pll2_clk, 255 + [2] = &pll1_div13_clk, 256 + }; 257 + 258 + static struct clk *hsi_parent[4] = { 259 + [0] = &pll1_div2_clk, 260 + [1] = &pll2_clk, 261 + [2] = &pll1_div7_clk, 262 + }; 263 + 264 + static struct clk *pll_extal2_parent[] = { 265 + [0] = &pll1_div2_clk, 266 + [1] = &pll2_clk, 267 + [2] = &sh73a0_extal2_clk, 268 + [3] = &sh73a0_extal2_clk, 269 + }; 270 + 271 + static struct clk *dsi_parent[8] = { 272 + [0] = &pll1_div2_clk, 273 + [1] = &pll2_clk, 274 + [2] = &main_clk, 275 + [3] = &sh73a0_extal2_clk, 276 + [4] = &sh73a0_extcki_clk, 277 + }; 278 + 287 279 static struct clk div6_clks[DIV6_NR] = { 288 - [DIV6_VCK1] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR1, 0), 289 - [DIV6_VCK2] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR2, 0), 290 - [DIV6_VCK3] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR3, 0), 291 - [DIV6_ZB1] = SH_CLK_DIV6(&pll1_div2_clk, ZBCKCR, 0), 292 - [DIV6_FLCTL] = SH_CLK_DIV6(&pll1_div2_clk, FLCKCR, 0), 293 - [DIV6_SDHI0] = SH_CLK_DIV6(&pll1_div2_clk, SD0CKCR, 0), 294 - [DIV6_SDHI1] = SH_CLK_DIV6(&pll1_div2_clk, SD1CKCR, 0), 295 - [DIV6_SDHI2] = SH_CLK_DIV6(&pll1_div2_clk, SD2CKCR, 0), 296 - [DIV6_FSIA] = SH_CLK_DIV6(&pll1_div2_clk, FSIACKCR, 0), 297 - [DIV6_FSIB] = SH_CLK_DIV6(&pll1_div2_clk, FSIBCKCR, 0), 298 - [DIV6_SUB] = SH_CLK_DIV6(&sh73a0_extal2_clk, SUBCKCR, 0), 299 - [DIV6_SPUA] = SH_CLK_DIV6(&pll1_div2_clk, SPUACKCR, 0), 300 - [DIV6_SPUV] = SH_CLK_DIV6(&pll1_div2_clk, SPUVCKCR, 0), 301 - [DIV6_MSU] = SH_CLK_DIV6(&pll1_div2_clk, MSUCKCR, 0), 302 - [DIV6_HSI] = SH_CLK_DIV6(&pll1_div2_clk, HSICKCR, 0), 303 - [DIV6_MFG1] = SH_CLK_DIV6(&pll1_div2_clk, MFCK1CR, 0), 304 - [DIV6_MFG2] = SH_CLK_DIV6(&pll1_div2_clk, MFCK2CR, 0), 305 - [DIV6_DSIT] = SH_CLK_DIV6(&pll1_div2_clk, DSITCKCR, 0), 306 - [DIV6_DSI0P] = SH_CLK_DIV6(&pll1_div2_clk, DSI0PCKCR, 0), 307 - [DIV6_DSI1P] = SH_CLK_DIV6(&pll1_div2_clk, DSI1PCKCR, 0), 280 + [DIV6_VCK1] = SH_CLK_DIV6_EXT(VCLKCR1, 0, 281 + vck_parent, ARRAY_SIZE(vck_parent), 12, 3), 282 + [DIV6_VCK2] = SH_CLK_DIV6_EXT(VCLKCR2, 0, 283 + vck_parent, ARRAY_SIZE(vck_parent), 12, 3), 284 + [DIV6_VCK3] = SH_CLK_DIV6_EXT(VCLKCR3, 0, 285 + vck_parent, ARRAY_SIZE(vck_parent), 12, 3), 286 + [DIV6_ZB1] = SH_CLK_DIV6_EXT(ZBCKCR, 0, 287 + pll_parent, ARRAY_SIZE(pll_parent), 7, 1), 288 + [DIV6_FLCTL] = SH_CLK_DIV6_EXT(FLCKCR, 0, 289 + pll_parent, ARRAY_SIZE(pll_parent), 7, 1), 290 + [DIV6_SDHI0] = SH_CLK_DIV6_EXT(SD0CKCR, 0, 291 + pll_parent, ARRAY_SIZE(pll_parent), 6, 2), 292 + [DIV6_SDHI1] = SH_CLK_DIV6_EXT(SD1CKCR, 0, 293 + pll_parent, ARRAY_SIZE(pll_parent), 6, 2), 294 + [DIV6_SDHI2] = SH_CLK_DIV6_EXT(SD2CKCR, 0, 295 + pll_parent, ARRAY_SIZE(pll_parent), 6, 2), 296 + [DIV6_FSIA] = SH_CLK_DIV6_EXT(FSIACKCR, 0, 297 + pll_parent, ARRAY_SIZE(pll_parent), 6, 1), 298 + [DIV6_FSIB] = SH_CLK_DIV6_EXT(FSIBCKCR, 0, 299 + pll_parent, ARRAY_SIZE(pll_parent), 6, 1), 300 + [DIV6_SUB] = SH_CLK_DIV6_EXT(SUBCKCR, 0, 301 + pll_extal2_parent, ARRAY_SIZE(pll_extal2_parent), 6, 2), 302 + [DIV6_SPUA] = SH_CLK_DIV6_EXT(SPUACKCR, 0, 303 + pll_extal2_parent, ARRAY_SIZE(pll_extal2_parent), 6, 2), 304 + [DIV6_SPUV] = SH_CLK_DIV6_EXT(SPUVCKCR, 0, 305 + pll_extal2_parent, ARRAY_SIZE(pll_extal2_parent), 6, 2), 306 + [DIV6_MSU] = SH_CLK_DIV6_EXT(MSUCKCR, 0, 307 + pll_parent, ARRAY_SIZE(pll_parent), 7, 1), 308 + [DIV6_HSI] = SH_CLK_DIV6_EXT(HSICKCR, 0, 309 + hsi_parent, ARRAY_SIZE(hsi_parent), 6, 2), 310 + [DIV6_MFG1] = SH_CLK_DIV6_EXT(MFCK1CR, 0, 311 + pll_parent, ARRAY_SIZE(pll_parent), 7, 1), 312 + [DIV6_MFG2] = SH_CLK_DIV6_EXT(MFCK2CR, 0, 313 + pll_parent, ARRAY_SIZE(pll_parent), 7, 1), 314 + [DIV6_DSIT] = SH_CLK_DIV6_EXT(DSITCKCR, 0, 315 + pll_parent, ARRAY_SIZE(pll_parent), 7, 1), 316 + [DIV6_DSI0P] = SH_CLK_DIV6_EXT(DSI0PCKCR, 0, 317 + dsi_parent, ARRAY_SIZE(dsi_parent), 12, 3), 318 + [DIV6_DSI1P] = SH_CLK_DIV6_EXT(DSI1PCKCR, 0, 319 + dsi_parent, ARRAY_SIZE(dsi_parent), 12, 3), 308 320 }; 309 321 310 322 enum { MSTP001, ··· 489 387 ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table); 490 388 491 389 if (!ret) 492 - ret = sh_clk_div6_register(div6_clks, DIV6_NR); 390 + ret = sh_clk_div6_reparent_register(div6_clks, DIV6_NR); 493 391 494 392 if (!ret) 495 393 ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);
+2
arch/arm/mach-shmobile/include/mach/common.h
··· 47 47 extern void sh73a0_pinmux_init(void); 48 48 extern struct clk sh73a0_extal1_clk; 49 49 extern struct clk sh73a0_extal2_clk; 50 + extern struct clk sh73a0_extcki_clk; 51 + extern struct clk sh73a0_extalr_clk; 50 52 51 53 extern unsigned int sh73a0_get_core_count(void); 52 54 extern void sh73a0_secondary_init(unsigned int cpu);