aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabriel FERNANDEZ <gabriel.fernandez@st.com>2014-07-15 11:20:27 -0400
committerMike Turquette <mturquette@linaro.org>2014-07-29 01:36:54 -0400
commit51306d56ba81dc2bded042188706481f0c84d379 (patch)
treed6f61bcde203dc15a849cd948096bf5cd15c303c
parentfc755c8bc8f155980077cb015020ec0a97ebc5c6 (diff)
clk: st: STiH407: Support for clockgenC0
The patch added support for DT registration of ClockGenC0 It includes 2 c32 type PLL and a 660 Quadfs. Signed-off-by: Gabriel Fernandez <gabriel.fernandez@linaro.org> Signed-off-by: Olivier Bideau <olivier.bideau@st.com> Acked-by: Peter Griffin <peter.griffin@linaro.org> Signed-off-by: Mike Turquette <mturquette@linaro.org>
-rw-r--r--drivers/clk/st/clkgen-fsyn.c51
-rw-r--r--drivers/clk/st/clkgen-pll.c32
2 files changed, 83 insertions, 0 deletions
diff --git a/drivers/clk/st/clkgen-fsyn.c b/drivers/clk/st/clkgen-fsyn.c
index 4cd10b2e3b15..84fcf715bf96 100644
--- a/drivers/clk/st/clkgen-fsyn.c
+++ b/drivers/clk/st/clkgen-fsyn.c
@@ -255,6 +255,49 @@ static const struct clkgen_quadfs_data st_fs660c32_F_416 = {
255 .get_rate = clk_fs660c32_dig_get_rate, 255 .get_rate = clk_fs660c32_dig_get_rate,
256}; 256};
257 257
258static const struct clkgen_quadfs_data st_fs660c32_C_407 = {
259 .nrst_present = true,
260 .nrst = { CLKGEN_FIELD(0x2f0, 0x1, 0),
261 CLKGEN_FIELD(0x2f0, 0x1, 1),
262 CLKGEN_FIELD(0x2f0, 0x1, 2),
263 CLKGEN_FIELD(0x2f0, 0x1, 3) },
264 .npda = CLKGEN_FIELD(0x2f0, 0x1, 12),
265 .nsb = { CLKGEN_FIELD(0x2f0, 0x1, 8),
266 CLKGEN_FIELD(0x2f0, 0x1, 9),
267 CLKGEN_FIELD(0x2f0, 0x1, 10),
268 CLKGEN_FIELD(0x2f0, 0x1, 11) },
269 .nsdiv_present = true,
270 .nsdiv = { CLKGEN_FIELD(0x304, 0x1, 24),
271 CLKGEN_FIELD(0x308, 0x1, 24),
272 CLKGEN_FIELD(0x30c, 0x1, 24),
273 CLKGEN_FIELD(0x310, 0x1, 24) },
274 .mdiv = { CLKGEN_FIELD(0x304, 0x1f, 15),
275 CLKGEN_FIELD(0x308, 0x1f, 15),
276 CLKGEN_FIELD(0x30c, 0x1f, 15),
277 CLKGEN_FIELD(0x310, 0x1f, 15) },
278 .en = { CLKGEN_FIELD(0x2fc, 0x1, 0),
279 CLKGEN_FIELD(0x2fc, 0x1, 1),
280 CLKGEN_FIELD(0x2fc, 0x1, 2),
281 CLKGEN_FIELD(0x2fc, 0x1, 3) },
282 .ndiv = CLKGEN_FIELD(0x2f4, 0x7, 16),
283 .pe = { CLKGEN_FIELD(0x304, 0x7fff, 0),
284 CLKGEN_FIELD(0x308, 0x7fff, 0),
285 CLKGEN_FIELD(0x30c, 0x7fff, 0),
286 CLKGEN_FIELD(0x310, 0x7fff, 0) },
287 .sdiv = { CLKGEN_FIELD(0x304, 0xf, 20),
288 CLKGEN_FIELD(0x308, 0xf, 20),
289 CLKGEN_FIELD(0x30c, 0xf, 20),
290 CLKGEN_FIELD(0x310, 0xf, 20) },
291 .lockstatus_present = true,
292 .lock_status = CLKGEN_FIELD(0x2A0, 0x1, 24),
293 .powerup_polarity = 1,
294 .standby_polarity = 1,
295 .pll_ops = &st_quadfs_pll_c32_ops,
296 .rtbl = fs660c32_rtbl,
297 .rtbl_cnt = ARRAY_SIZE(fs660c32_rtbl),
298 .get_rate = clk_fs660c32_dig_get_rate,
299};
300
258/** 301/**
259 * DOC: A Frequency Synthesizer that multiples its input clock by a fixed factor 302 * DOC: A Frequency Synthesizer that multiples its input clock by a fixed factor
260 * 303 *
@@ -938,6 +981,14 @@ static struct of_device_id quadfs_of_match[] = {
938 .compatible = "st,stih416-quadfs660-F", 981 .compatible = "st,stih416-quadfs660-F",
939 .data = &st_fs660c32_F_416 982 .data = &st_fs660c32_F_416
940 }, 983 },
984 {
985 .compatible = "st,stih407-quadfs660-C",
986 .data = &st_fs660c32_C_407
987 },
988 {
989 .compatible = "st,stih407-quadfs660-D",
990 .data = &st_fs660c32_D_407
991 },
941 {} 992 {}
942}; 993};
943 994
diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c
index d4ef4f479776..5327a7474c53 100644
--- a/drivers/clk/st/clkgen-pll.c
+++ b/drivers/clk/st/clkgen-pll.c
@@ -192,6 +192,30 @@ static const struct clkgen_pll_data st_pll3200c32_407_a0 = {
192 .ops = &stm_pll3200c32_ops, 192 .ops = &stm_pll3200c32_ops,
193}; 193};
194 194
195static const struct clkgen_pll_data st_pll3200c32_407_c0_0 = {
196 /* 407 C0 PLL0 */
197 .pdn_status = CLKGEN_FIELD(0x2a0, 0x1, 8),
198 .locked_status = CLKGEN_FIELD(0x2a0, 0x1, 24),
199 .ndiv = CLKGEN_FIELD(0x2a4, C32_NDIV_MASK, 16),
200 .idf = CLKGEN_FIELD(0x2a4, C32_IDF_MASK, 0x0),
201 .num_odfs = 1,
202 .odf = { CLKGEN_FIELD(0x2b4, C32_ODF_MASK, 0) },
203 .odf_gate = { CLKGEN_FIELD(0x2b4, 0x1, 6) },
204 .ops = &stm_pll3200c32_ops,
205};
206
207static const struct clkgen_pll_data st_pll3200c32_407_c0_1 = {
208 /* 407 C0 PLL1 */
209 .pdn_status = CLKGEN_FIELD(0x2c8, 0x1, 8),
210 .locked_status = CLKGEN_FIELD(0x2c8, 0x1, 24),
211 .ndiv = CLKGEN_FIELD(0x2cc, C32_NDIV_MASK, 16),
212 .idf = CLKGEN_FIELD(0x2cc, C32_IDF_MASK, 0x0),
213 .num_odfs = 1,
214 .odf = { CLKGEN_FIELD(0x2dc, C32_ODF_MASK, 0) },
215 .odf_gate = { CLKGEN_FIELD(0x2dc, 0x1, 6) },
216 .ops = &stm_pll3200c32_ops,
217};
218
195/** 219/**
196 * DOC: Clock Generated by PLL, rate set and enabled by bootloader 220 * DOC: Clock Generated by PLL, rate set and enabled by bootloader
197 * 221 *
@@ -586,6 +610,14 @@ static struct of_device_id c32_pll_of_match[] = {
586 .compatible = "st,stih407-plls-c32-a0", 610 .compatible = "st,stih407-plls-c32-a0",
587 .data = &st_pll3200c32_407_a0, 611 .data = &st_pll3200c32_407_a0,
588 }, 612 },
613 {
614 .compatible = "st,stih407-plls-c32-c0_0",
615 .data = &st_pll3200c32_407_c0_0,
616 },
617 {
618 .compatible = "st,stih407-plls-c32-c0_1",
619 .data = &st_pll3200c32_407_c0_1,
620 },
589 {} 621 {}
590}; 622};
591 623