aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarvey Hunt <harvey.hunt@imgtec.com>2016-05-09 12:29:52 -0400
committerStephen Boyd <sboyd@codeaurora.org>2016-05-12 17:48:25 -0400
commit4afe2d1a6ed5cba794aeeaa816e7c97a45167b01 (patch)
treee88fd50b5e791760c7abb20f01e087c53583fe34
parent5707291c6cada6db7344c90a548d02f427bf376c (diff)
clk: ingenic: Allow divider value to be divided
The JZ4780's MSC clock divider registers multiply the clock divider by 2. This means that MMC devices run at half their expected speed. Add the ability to divide the clock divider in order to solve this. Signed-off-by: Harvey Hunt <harvey.hunt@imgtec.com> Cc: Paul Burton <paul.burton@imgtec.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: linux-clk@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
-rw-r--r--drivers/clk/ingenic/cgu.c11
-rw-r--r--drivers/clk/ingenic/cgu.h6
-rw-r--r--drivers/clk/ingenic/jz4740-cgu.c24
-rw-r--r--drivers/clk/ingenic/jz4780-cgu.c40
4 files changed, 47 insertions, 34 deletions
diff --git a/drivers/clk/ingenic/cgu.c b/drivers/clk/ingenic/cgu.c
index 7cfb7b2a2ed6..e8248f9185f7 100644
--- a/drivers/clk/ingenic/cgu.c
+++ b/drivers/clk/ingenic/cgu.c
@@ -325,6 +325,7 @@ ingenic_clk_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
325 div = (div_reg >> clk_info->div.shift) & 325 div = (div_reg >> clk_info->div.shift) &
326 GENMASK(clk_info->div.bits - 1, 0); 326 GENMASK(clk_info->div.bits - 1, 0);
327 div += 1; 327 div += 1;
328 div *= clk_info->div.div;
328 329
329 rate /= div; 330 rate /= div;
330 } 331 }
@@ -345,6 +346,14 @@ ingenic_clk_calc_div(const struct ingenic_cgu_clk_info *clk_info,
345 div = min_t(unsigned, div, 1 << clk_info->div.bits); 346 div = min_t(unsigned, div, 1 << clk_info->div.bits);
346 div = max_t(unsigned, div, 1); 347 div = max_t(unsigned, div, 1);
347 348
349 /*
350 * If the divider value itself must be divided before being written to
351 * the divider register, we must ensure we don't have any bits set that
352 * would be lost as a result of doing so.
353 */
354 div /= clk_info->div.div;
355 div *= clk_info->div.div;
356
348 return div; 357 return div;
349} 358}
350 359
@@ -395,7 +404,7 @@ ingenic_clk_set_rate(struct clk_hw *hw, unsigned long req_rate,
395 /* update the divide */ 404 /* update the divide */
396 mask = GENMASK(clk_info->div.bits - 1, 0); 405 mask = GENMASK(clk_info->div.bits - 1, 0);
397 reg &= ~(mask << clk_info->div.shift); 406 reg &= ~(mask << clk_info->div.shift);
398 reg |= (div - 1) << clk_info->div.shift; 407 reg |= ((div / clk_info->div.div) - 1) << clk_info->div.shift;
399 408
400 /* clear the stop bit */ 409 /* clear the stop bit */
401 if (clk_info->div.stop_bit != -1) 410 if (clk_info->div.stop_bit != -1)
diff --git a/drivers/clk/ingenic/cgu.h b/drivers/clk/ingenic/cgu.h
index 99347e2b97e8..09700b2c555d 100644
--- a/drivers/clk/ingenic/cgu.h
+++ b/drivers/clk/ingenic/cgu.h
@@ -76,8 +76,11 @@ struct ingenic_cgu_mux_info {
76/** 76/**
77 * struct ingenic_cgu_div_info - information about a divider 77 * struct ingenic_cgu_div_info - information about a divider
78 * @reg: offset of the divider control register within the CGU 78 * @reg: offset of the divider control register within the CGU
79 * @shift: number of bits to shift the divide value by (ie. the index of 79 * @shift: number of bits to left shift the divide value by (ie. the index of
80 * the lowest bit of the divide value within its control register) 80 * the lowest bit of the divide value within its control register)
81 * @div: number of bits to divide the divider value by (i.e. if the
82 * effective divider value is the value written to the register
83 * multiplied by some constant)
81 * @bits: the size of the divide value in bits 84 * @bits: the size of the divide value in bits
82 * @ce_bit: the index of the change enable bit within reg, or -1 if there 85 * @ce_bit: the index of the change enable bit within reg, or -1 if there
83 * isn't one 86 * isn't one
@@ -87,6 +90,7 @@ struct ingenic_cgu_mux_info {
87struct ingenic_cgu_div_info { 90struct ingenic_cgu_div_info {
88 unsigned reg; 91 unsigned reg;
89 u8 shift; 92 u8 shift;
93 u8 div;
90 u8 bits; 94 u8 bits;
91 s8 ce_bit; 95 s8 ce_bit;
92 s8 busy_bit; 96 s8 busy_bit;
diff --git a/drivers/clk/ingenic/jz4740-cgu.c b/drivers/clk/ingenic/jz4740-cgu.c
index 305a26c2a800..510fe7e0c8f1 100644
--- a/drivers/clk/ingenic/jz4740-cgu.c
+++ b/drivers/clk/ingenic/jz4740-cgu.c
@@ -90,51 +90,51 @@ static const struct ingenic_cgu_clk_info jz4740_cgu_clocks[] = {
90 [JZ4740_CLK_PLL_HALF] = { 90 [JZ4740_CLK_PLL_HALF] = {
91 "pll half", CGU_CLK_DIV, 91 "pll half", CGU_CLK_DIV,
92 .parents = { JZ4740_CLK_PLL, -1, -1, -1 }, 92 .parents = { JZ4740_CLK_PLL, -1, -1, -1 },
93 .div = { CGU_REG_CPCCR, 21, 1, -1, -1, -1 }, 93 .div = { CGU_REG_CPCCR, 21, 1, 1, -1, -1, -1 },
94 }, 94 },
95 95
96 [JZ4740_CLK_CCLK] = { 96 [JZ4740_CLK_CCLK] = {
97 "cclk", CGU_CLK_DIV, 97 "cclk", CGU_CLK_DIV,
98 .parents = { JZ4740_CLK_PLL, -1, -1, -1 }, 98 .parents = { JZ4740_CLK_PLL, -1, -1, -1 },
99 .div = { CGU_REG_CPCCR, 0, 4, 22, -1, -1 }, 99 .div = { CGU_REG_CPCCR, 0, 1, 4, 22, -1, -1 },
100 }, 100 },
101 101
102 [JZ4740_CLK_HCLK] = { 102 [JZ4740_CLK_HCLK] = {
103 "hclk", CGU_CLK_DIV, 103 "hclk", CGU_CLK_DIV,
104 .parents = { JZ4740_CLK_PLL, -1, -1, -1 }, 104 .parents = { JZ4740_CLK_PLL, -1, -1, -1 },
105 .div = { CGU_REG_CPCCR, 4, 4, 22, -1, -1 }, 105 .div = { CGU_REG_CPCCR, 4, 1, 4, 22, -1, -1 },
106 }, 106 },
107 107
108 [JZ4740_CLK_PCLK] = { 108 [JZ4740_CLK_PCLK] = {
109 "pclk", CGU_CLK_DIV, 109 "pclk", CGU_CLK_DIV,
110 .parents = { JZ4740_CLK_PLL, -1, -1, -1 }, 110 .parents = { JZ4740_CLK_PLL, -1, -1, -1 },
111 .div = { CGU_REG_CPCCR, 8, 4, 22, -1, -1 }, 111 .div = { CGU_REG_CPCCR, 8, 1, 4, 22, -1, -1 },
112 }, 112 },
113 113
114 [JZ4740_CLK_MCLK] = { 114 [JZ4740_CLK_MCLK] = {
115 "mclk", CGU_CLK_DIV, 115 "mclk", CGU_CLK_DIV,
116 .parents = { JZ4740_CLK_PLL, -1, -1, -1 }, 116 .parents = { JZ4740_CLK_PLL, -1, -1, -1 },
117 .div = { CGU_REG_CPCCR, 12, 4, 22, -1, -1 }, 117 .div = { CGU_REG_CPCCR, 12, 1, 4, 22, -1, -1 },
118 }, 118 },
119 119
120 [JZ4740_CLK_LCD] = { 120 [JZ4740_CLK_LCD] = {
121 "lcd", CGU_CLK_DIV | CGU_CLK_GATE, 121 "lcd", CGU_CLK_DIV | CGU_CLK_GATE,
122 .parents = { JZ4740_CLK_PLL_HALF, -1, -1, -1 }, 122 .parents = { JZ4740_CLK_PLL_HALF, -1, -1, -1 },
123 .div = { CGU_REG_CPCCR, 16, 5, 22, -1, -1 }, 123 .div = { CGU_REG_CPCCR, 16, 1, 5, 22, -1, -1 },
124 .gate = { CGU_REG_CLKGR, 10 }, 124 .gate = { CGU_REG_CLKGR, 10 },
125 }, 125 },
126 126
127 [JZ4740_CLK_LCD_PCLK] = { 127 [JZ4740_CLK_LCD_PCLK] = {
128 "lcd_pclk", CGU_CLK_DIV, 128 "lcd_pclk", CGU_CLK_DIV,
129 .parents = { JZ4740_CLK_PLL_HALF, -1, -1, -1 }, 129 .parents = { JZ4740_CLK_PLL_HALF, -1, -1, -1 },
130 .div = { CGU_REG_LPCDR, 0, 11, -1, -1, -1 }, 130 .div = { CGU_REG_LPCDR, 0, 1, 11, -1, -1, -1 },
131 }, 131 },
132 132
133 [JZ4740_CLK_I2S] = { 133 [JZ4740_CLK_I2S] = {
134 "i2s", CGU_CLK_MUX | CGU_CLK_DIV | CGU_CLK_GATE, 134 "i2s", CGU_CLK_MUX | CGU_CLK_DIV | CGU_CLK_GATE,
135 .parents = { JZ4740_CLK_EXT, JZ4740_CLK_PLL_HALF, -1, -1 }, 135 .parents = { JZ4740_CLK_EXT, JZ4740_CLK_PLL_HALF, -1, -1 },
136 .mux = { CGU_REG_CPCCR, 31, 1 }, 136 .mux = { CGU_REG_CPCCR, 31, 1 },
137 .div = { CGU_REG_I2SCDR, 0, 8, -1, -1, -1 }, 137 .div = { CGU_REG_I2SCDR, 0, 1, 8, -1, -1, -1 },
138 .gate = { CGU_REG_CLKGR, 6 }, 138 .gate = { CGU_REG_CLKGR, 6 },
139 }, 139 },
140 140
@@ -142,21 +142,21 @@ static const struct ingenic_cgu_clk_info jz4740_cgu_clocks[] = {
142 "spi", CGU_CLK_MUX | CGU_CLK_DIV | CGU_CLK_GATE, 142 "spi", CGU_CLK_MUX | CGU_CLK_DIV | CGU_CLK_GATE,
143 .parents = { JZ4740_CLK_EXT, JZ4740_CLK_PLL, -1, -1 }, 143 .parents = { JZ4740_CLK_EXT, JZ4740_CLK_PLL, -1, -1 },
144 .mux = { CGU_REG_SSICDR, 31, 1 }, 144 .mux = { CGU_REG_SSICDR, 31, 1 },
145 .div = { CGU_REG_SSICDR, 0, 4, -1, -1, -1 }, 145 .div = { CGU_REG_SSICDR, 0, 1, 4, -1, -1, -1 },
146 .gate = { CGU_REG_CLKGR, 4 }, 146 .gate = { CGU_REG_CLKGR, 4 },
147 }, 147 },
148 148
149 [JZ4740_CLK_MMC] = { 149 [JZ4740_CLK_MMC] = {
150 "mmc", CGU_CLK_DIV | CGU_CLK_GATE, 150 "mmc", CGU_CLK_DIV | CGU_CLK_GATE,
151 .parents = { JZ4740_CLK_PLL_HALF, -1, -1, -1 }, 151 .parents = { JZ4740_CLK_PLL_HALF, -1, -1, -1 },
152 .div = { CGU_REG_MSCCDR, 0, 5, -1, -1, -1 }, 152 .div = { CGU_REG_MSCCDR, 0, 1, 5, -1, -1, -1 },
153 .gate = { CGU_REG_CLKGR, 7 }, 153 .gate = { CGU_REG_CLKGR, 7 },
154 }, 154 },
155 155
156 [JZ4740_CLK_UHC] = { 156 [JZ4740_CLK_UHC] = {
157 "uhc", CGU_CLK_DIV | CGU_CLK_GATE, 157 "uhc", CGU_CLK_DIV | CGU_CLK_GATE,
158 .parents = { JZ4740_CLK_PLL_HALF, -1, -1, -1 }, 158 .parents = { JZ4740_CLK_PLL_HALF, -1, -1, -1 },
159 .div = { CGU_REG_UHCCDR, 0, 4, -1, -1, -1 }, 159 .div = { CGU_REG_UHCCDR, 0, 1, 4, -1, -1, -1 },
160 .gate = { CGU_REG_CLKGR, 14 }, 160 .gate = { CGU_REG_CLKGR, 14 },
161 }, 161 },
162 162
@@ -164,7 +164,7 @@ static const struct ingenic_cgu_clk_info jz4740_cgu_clocks[] = {
164 "udc", CGU_CLK_MUX | CGU_CLK_DIV, 164 "udc", CGU_CLK_MUX | CGU_CLK_DIV,
165 .parents = { JZ4740_CLK_EXT, JZ4740_CLK_PLL_HALF, -1, -1 }, 165 .parents = { JZ4740_CLK_EXT, JZ4740_CLK_PLL_HALF, -1, -1 },
166 .mux = { CGU_REG_CPCCR, 29, 1 }, 166 .mux = { CGU_REG_CPCCR, 29, 1 },
167 .div = { CGU_REG_CPCCR, 23, 6, -1, -1, -1 }, 167 .div = { CGU_REG_CPCCR, 23, 1, 6, -1, -1, -1 },
168 .gate = { CGU_REG_SCR, 6 }, 168 .gate = { CGU_REG_SCR, 6 },
169 }, 169 },
170 170
diff --git a/drivers/clk/ingenic/jz4780-cgu.c b/drivers/clk/ingenic/jz4780-cgu.c
index 431f962300b6..b35d6d9dd5aa 100644
--- a/drivers/clk/ingenic/jz4780-cgu.c
+++ b/drivers/clk/ingenic/jz4780-cgu.c
@@ -296,13 +296,13 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
296 [JZ4780_CLK_CPU] = { 296 [JZ4780_CLK_CPU] = {
297 "cpu", CGU_CLK_DIV, 297 "cpu", CGU_CLK_DIV,
298 .parents = { JZ4780_CLK_CPUMUX, -1, -1, -1 }, 298 .parents = { JZ4780_CLK_CPUMUX, -1, -1, -1 },
299 .div = { CGU_REG_CLOCKCONTROL, 0, 4, 22, -1, -1 }, 299 .div = { CGU_REG_CLOCKCONTROL, 0, 1, 4, 22, -1, -1 },
300 }, 300 },
301 301
302 [JZ4780_CLK_L2CACHE] = { 302 [JZ4780_CLK_L2CACHE] = {
303 "l2cache", CGU_CLK_DIV, 303 "l2cache", CGU_CLK_DIV,
304 .parents = { JZ4780_CLK_CPUMUX, -1, -1, -1 }, 304 .parents = { JZ4780_CLK_CPUMUX, -1, -1, -1 },
305 .div = { CGU_REG_CLOCKCONTROL, 4, 4, -1, -1, -1 }, 305 .div = { CGU_REG_CLOCKCONTROL, 4, 1, 4, -1, -1, -1 },
306 }, 306 },
307 307
308 [JZ4780_CLK_AHB0] = { 308 [JZ4780_CLK_AHB0] = {
@@ -310,7 +310,7 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
310 .parents = { -1, JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, 310 .parents = { -1, JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL,
311 JZ4780_CLK_EPLL }, 311 JZ4780_CLK_EPLL },
312 .mux = { CGU_REG_CLOCKCONTROL, 26, 2 }, 312 .mux = { CGU_REG_CLOCKCONTROL, 26, 2 },
313 .div = { CGU_REG_CLOCKCONTROL, 8, 4, 21, -1, -1 }, 313 .div = { CGU_REG_CLOCKCONTROL, 8, 1, 4, 21, -1, -1 },
314 }, 314 },
315 315
316 [JZ4780_CLK_AHB2PMUX] = { 316 [JZ4780_CLK_AHB2PMUX] = {
@@ -323,20 +323,20 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
323 [JZ4780_CLK_AHB2] = { 323 [JZ4780_CLK_AHB2] = {
324 "ahb2", CGU_CLK_DIV, 324 "ahb2", CGU_CLK_DIV,
325 .parents = { JZ4780_CLK_AHB2PMUX, -1, -1, -1 }, 325 .parents = { JZ4780_CLK_AHB2PMUX, -1, -1, -1 },
326 .div = { CGU_REG_CLOCKCONTROL, 12, 4, 20, -1, -1 }, 326 .div = { CGU_REG_CLOCKCONTROL, 12, 1, 4, 20, -1, -1 },
327 }, 327 },
328 328
329 [JZ4780_CLK_PCLK] = { 329 [JZ4780_CLK_PCLK] = {
330 "pclk", CGU_CLK_DIV, 330 "pclk", CGU_CLK_DIV,
331 .parents = { JZ4780_CLK_AHB2PMUX, -1, -1, -1 }, 331 .parents = { JZ4780_CLK_AHB2PMUX, -1, -1, -1 },
332 .div = { CGU_REG_CLOCKCONTROL, 16, 4, 20, -1, -1 }, 332 .div = { CGU_REG_CLOCKCONTROL, 16, 1, 4, 20, -1, -1 },
333 }, 333 },
334 334
335 [JZ4780_CLK_DDR] = { 335 [JZ4780_CLK_DDR] = {
336 "ddr", CGU_CLK_MUX | CGU_CLK_DIV, 336 "ddr", CGU_CLK_MUX | CGU_CLK_DIV,
337 .parents = { -1, JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, -1 }, 337 .parents = { -1, JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, -1 },
338 .mux = { CGU_REG_DDRCDR, 30, 2 }, 338 .mux = { CGU_REG_DDRCDR, 30, 2 },
339 .div = { CGU_REG_DDRCDR, 0, 4, 29, 28, 27 }, 339 .div = { CGU_REG_DDRCDR, 0, 1, 4, 29, 28, 27 },
340 }, 340 },
341 341
342 [JZ4780_CLK_VPU] = { 342 [JZ4780_CLK_VPU] = {
@@ -344,7 +344,7 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
344 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, 344 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL,
345 JZ4780_CLK_EPLL, -1 }, 345 JZ4780_CLK_EPLL, -1 },
346 .mux = { CGU_REG_VPUCDR, 30, 2 }, 346 .mux = { CGU_REG_VPUCDR, 30, 2 },
347 .div = { CGU_REG_VPUCDR, 0, 4, 29, 28, 27 }, 347 .div = { CGU_REG_VPUCDR, 0, 1, 4, 29, 28, 27 },
348 .gate = { CGU_REG_CLKGR1, 2 }, 348 .gate = { CGU_REG_CLKGR1, 2 },
349 }, 349 },
350 350
@@ -352,7 +352,7 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
352 "i2s_pll", CGU_CLK_MUX | CGU_CLK_DIV, 352 "i2s_pll", CGU_CLK_MUX | CGU_CLK_DIV,
353 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_EPLL, -1, -1 }, 353 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_EPLL, -1, -1 },
354 .mux = { CGU_REG_I2SCDR, 30, 1 }, 354 .mux = { CGU_REG_I2SCDR, 30, 1 },
355 .div = { CGU_REG_I2SCDR, 0, 8, 29, 28, 27 }, 355 .div = { CGU_REG_I2SCDR, 0, 1, 8, 29, 28, 27 },
356 }, 356 },
357 357
358 [JZ4780_CLK_I2S] = { 358 [JZ4780_CLK_I2S] = {
@@ -366,7 +366,7 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
366 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, 366 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL,
367 JZ4780_CLK_VPLL, -1 }, 367 JZ4780_CLK_VPLL, -1 },
368 .mux = { CGU_REG_LP0CDR, 30, 2 }, 368 .mux = { CGU_REG_LP0CDR, 30, 2 },
369 .div = { CGU_REG_LP0CDR, 0, 8, 28, 27, 26 }, 369 .div = { CGU_REG_LP0CDR, 0, 1, 8, 28, 27, 26 },
370 }, 370 },
371 371
372 [JZ4780_CLK_LCD1PIXCLK] = { 372 [JZ4780_CLK_LCD1PIXCLK] = {
@@ -374,7 +374,7 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
374 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, 374 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL,
375 JZ4780_CLK_VPLL, -1 }, 375 JZ4780_CLK_VPLL, -1 },
376 .mux = { CGU_REG_LP1CDR, 30, 2 }, 376 .mux = { CGU_REG_LP1CDR, 30, 2 },
377 .div = { CGU_REG_LP1CDR, 0, 8, 28, 27, 26 }, 377 .div = { CGU_REG_LP1CDR, 0, 1, 8, 28, 27, 26 },
378 }, 378 },
379 379
380 [JZ4780_CLK_MSCMUX] = { 380 [JZ4780_CLK_MSCMUX] = {
@@ -386,21 +386,21 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
386 [JZ4780_CLK_MSC0] = { 386 [JZ4780_CLK_MSC0] = {
387 "msc0", CGU_CLK_DIV | CGU_CLK_GATE, 387 "msc0", CGU_CLK_DIV | CGU_CLK_GATE,
388 .parents = { JZ4780_CLK_MSCMUX, -1, -1, -1 }, 388 .parents = { JZ4780_CLK_MSCMUX, -1, -1, -1 },
389 .div = { CGU_REG_MSC0CDR, 0, 8, 29, 28, 27 }, 389 .div = { CGU_REG_MSC0CDR, 0, 2, 8, 29, 28, 27 },
390 .gate = { CGU_REG_CLKGR0, 3 }, 390 .gate = { CGU_REG_CLKGR0, 3 },
391 }, 391 },
392 392
393 [JZ4780_CLK_MSC1] = { 393 [JZ4780_CLK_MSC1] = {
394 "msc1", CGU_CLK_DIV | CGU_CLK_GATE, 394 "msc1", CGU_CLK_DIV | CGU_CLK_GATE,
395 .parents = { JZ4780_CLK_MSCMUX, -1, -1, -1 }, 395 .parents = { JZ4780_CLK_MSCMUX, -1, -1, -1 },
396 .div = { CGU_REG_MSC1CDR, 0, 8, 29, 28, 27 }, 396 .div = { CGU_REG_MSC1CDR, 0, 2, 8, 29, 28, 27 },
397 .gate = { CGU_REG_CLKGR0, 11 }, 397 .gate = { CGU_REG_CLKGR0, 11 },
398 }, 398 },
399 399
400 [JZ4780_CLK_MSC2] = { 400 [JZ4780_CLK_MSC2] = {
401 "msc2", CGU_CLK_DIV | CGU_CLK_GATE, 401 "msc2", CGU_CLK_DIV | CGU_CLK_GATE,
402 .parents = { JZ4780_CLK_MSCMUX, -1, -1, -1 }, 402 .parents = { JZ4780_CLK_MSCMUX, -1, -1, -1 },
403 .div = { CGU_REG_MSC2CDR, 0, 8, 29, 28, 27 }, 403 .div = { CGU_REG_MSC2CDR, 0, 2, 8, 29, 28, 27 },
404 .gate = { CGU_REG_CLKGR0, 12 }, 404 .gate = { CGU_REG_CLKGR0, 12 },
405 }, 405 },
406 406
@@ -409,7 +409,7 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
409 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, 409 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL,
410 JZ4780_CLK_EPLL, JZ4780_CLK_OTGPHY }, 410 JZ4780_CLK_EPLL, JZ4780_CLK_OTGPHY },
411 .mux = { CGU_REG_UHCCDR, 30, 2 }, 411 .mux = { CGU_REG_UHCCDR, 30, 2 },
412 .div = { CGU_REG_UHCCDR, 0, 8, 29, 28, 27 }, 412 .div = { CGU_REG_UHCCDR, 0, 1, 8, 29, 28, 27 },
413 .gate = { CGU_REG_CLKGR0, 24 }, 413 .gate = { CGU_REG_CLKGR0, 24 },
414 }, 414 },
415 415
@@ -417,7 +417,7 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
417 "ssi_pll", CGU_CLK_MUX | CGU_CLK_DIV, 417 "ssi_pll", CGU_CLK_MUX | CGU_CLK_DIV,
418 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, -1, -1 }, 418 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, -1, -1 },
419 .mux = { CGU_REG_SSICDR, 30, 1 }, 419 .mux = { CGU_REG_SSICDR, 30, 1 },
420 .div = { CGU_REG_SSICDR, 0, 8, 29, 28, 27 }, 420 .div = { CGU_REG_SSICDR, 0, 1, 8, 29, 28, 27 },
421 }, 421 },
422 422
423 [JZ4780_CLK_SSI] = { 423 [JZ4780_CLK_SSI] = {
@@ -430,7 +430,7 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
430 "cim_mclk", CGU_CLK_MUX | CGU_CLK_DIV, 430 "cim_mclk", CGU_CLK_MUX | CGU_CLK_DIV,
431 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, -1, -1 }, 431 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, -1, -1 },
432 .mux = { CGU_REG_CIMCDR, 31, 1 }, 432 .mux = { CGU_REG_CIMCDR, 31, 1 },
433 .div = { CGU_REG_CIMCDR, 0, 8, 30, 29, 28 }, 433 .div = { CGU_REG_CIMCDR, 0, 1, 8, 30, 29, 28 },
434 }, 434 },
435 435
436 [JZ4780_CLK_PCMPLL] = { 436 [JZ4780_CLK_PCMPLL] = {
@@ -438,7 +438,7 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
438 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, 438 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL,
439 JZ4780_CLK_EPLL, JZ4780_CLK_VPLL }, 439 JZ4780_CLK_EPLL, JZ4780_CLK_VPLL },
440 .mux = { CGU_REG_PCMCDR, 29, 2 }, 440 .mux = { CGU_REG_PCMCDR, 29, 2 },
441 .div = { CGU_REG_PCMCDR, 0, 8, 28, 27, 26 }, 441 .div = { CGU_REG_PCMCDR, 0, 1, 8, 28, 27, 26 },
442 }, 442 },
443 443
444 [JZ4780_CLK_PCM] = { 444 [JZ4780_CLK_PCM] = {
@@ -453,7 +453,7 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
453 .parents = { -1, JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, 453 .parents = { -1, JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL,
454 JZ4780_CLK_EPLL }, 454 JZ4780_CLK_EPLL },
455 .mux = { CGU_REG_GPUCDR, 30, 2 }, 455 .mux = { CGU_REG_GPUCDR, 30, 2 },
456 .div = { CGU_REG_GPUCDR, 0, 4, 29, 28, 27 }, 456 .div = { CGU_REG_GPUCDR, 0, 1, 4, 29, 28, 27 },
457 .gate = { CGU_REG_CLKGR1, 4 }, 457 .gate = { CGU_REG_CLKGR1, 4 },
458 }, 458 },
459 459
@@ -462,7 +462,7 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
462 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, 462 .parents = { JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL,
463 JZ4780_CLK_VPLL, -1 }, 463 JZ4780_CLK_VPLL, -1 },
464 .mux = { CGU_REG_HDMICDR, 30, 2 }, 464 .mux = { CGU_REG_HDMICDR, 30, 2 },
465 .div = { CGU_REG_HDMICDR, 0, 8, 29, 28, 26 }, 465 .div = { CGU_REG_HDMICDR, 0, 1, 8, 29, 28, 26 },
466 .gate = { CGU_REG_CLKGR1, 9 }, 466 .gate = { CGU_REG_CLKGR1, 9 },
467 }, 467 },
468 468
@@ -471,7 +471,7 @@ static const struct ingenic_cgu_clk_info jz4780_cgu_clocks[] = {
471 .parents = { -1, JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL, 471 .parents = { -1, JZ4780_CLK_SCLKA, JZ4780_CLK_MPLL,
472 JZ4780_CLK_EPLL }, 472 JZ4780_CLK_EPLL },
473 .mux = { CGU_REG_BCHCDR, 30, 2 }, 473 .mux = { CGU_REG_BCHCDR, 30, 2 },
474 .div = { CGU_REG_BCHCDR, 0, 4, 29, 28, 27 }, 474 .div = { CGU_REG_BCHCDR, 0, 1, 4, 29, 28, 27 },
475 .gate = { CGU_REG_CLKGR0, 1 }, 475 .gate = { CGU_REG_CLKGR0, 1 },
476 }, 476 },
477 477