aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-shmobile
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2012-06-12 05:36:39 -0400
committerRafael J. Wysocki <rjw@sisk.pl>2012-06-20 06:27:49 -0400
commitad9f1721c15b84f1a2e45a8a03f1ff7c86c2829b (patch)
tree1117c0859ecbc90291fffa2a6187c32173f1794e /arch/arm/mach-shmobile
parentd49679e5928709bce8937dce396458b139c4b34d (diff)
ARM: shmobile: r8a7740: add CEU clock support
It is required from sh_mobile_ceu_camera driver. This patch is based on v1.0 manual Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Tested-by: Simon Horman <horms@verge.net.au> Acked-by: Magnus Damm <damm@opensource.se> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Diffstat (limited to 'arch/arm/mach-shmobile')
-rw-r--r--arch/arm/mach-shmobile/clock-r8a7740.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/arch/arm/mach-shmobile/clock-r8a7740.c b/arch/arm/mach-shmobile/clock-r8a7740.c
index b09534352f97..ce0930a415e8 100644
--- a/arch/arm/mach-shmobile/clock-r8a7740.c
+++ b/arch/arm/mach-shmobile/clock-r8a7740.c
@@ -43,6 +43,8 @@
43/* CPG registers */ 43/* CPG registers */
44#define FRQCRA 0xe6150000 44#define FRQCRA 0xe6150000
45#define FRQCRB 0xe6150004 45#define FRQCRB 0xe6150004
46#define VCLKCR1 0xE6150008
47#define VCLKCR2 0xE615000c
46#define FRQCRC 0xe61500e0 48#define FRQCRC 0xe61500e0
47#define PLLC01CR 0xe6150028 49#define PLLC01CR 0xe6150028
48 50
@@ -317,6 +319,7 @@ static struct clk_div4_table div4_table = {
317/* DIV6 reparent */ 319/* DIV6 reparent */
318enum { 320enum {
319 DIV6_HDMI, 321 DIV6_HDMI,
322 DIV6_VCLK1, DIV6_VCLK2,
320 DIV6_REPARENT_NR, 323 DIV6_REPARENT_NR,
321}; 324};
322 325
@@ -326,9 +329,21 @@ static struct clk *hdmi_parent[] = {
326 [2] = &dv_clk 329 [2] = &dv_clk
327}; 330};
328 331
332static struct clk *vclk_parents[8] = {
333 [0] = &pllc1_div2_clk,
334 [2] = &dv_clk,
335 [3] = &usb24s_clk,
336 [4] = &extal1_div2_clk,
337 [5] = &extalr_clk,
338};
339
329static struct clk div6_reparent_clks[DIV6_REPARENT_NR] = { 340static struct clk div6_reparent_clks[DIV6_REPARENT_NR] = {
330 [DIV6_HDMI] = SH_CLK_DIV6_EXT(HDMICKCR, 0, 341 [DIV6_HDMI] = SH_CLK_DIV6_EXT(HDMICKCR, 0,
331 hdmi_parent, ARRAY_SIZE(hdmi_parent), 6, 2), 342 hdmi_parent, ARRAY_SIZE(hdmi_parent), 6, 2),
343 [DIV6_VCLK1] = SH_CLK_DIV6_EXT(VCLKCR1, 0,
344 vclk_parents, ARRAY_SIZE(vclk_parents), 12, 3),
345 [DIV6_VCLK2] = SH_CLK_DIV6_EXT(VCLKCR2, 0,
346 vclk_parents, ARRAY_SIZE(vclk_parents), 12, 3),
332}; 347};
333 348
334/* HDMI1/2 clock */ 349/* HDMI1/2 clock */
@@ -417,7 +432,7 @@ static struct clk div6_clks[DIV6_NR] = {
417}; 432};
418 433
419enum { 434enum {
420 MSTP125, 435 MSTP128, MSTP127, MSTP125,
421 MSTP116, MSTP111, MSTP100, MSTP117, 436 MSTP116, MSTP111, MSTP100, MSTP117,
422 437
423 MSTP230, 438 MSTP230,
@@ -434,6 +449,8 @@ enum {
434}; 449};
435 450
436static struct clk mstp_clks[MSTP_NR] = { 451static struct clk mstp_clks[MSTP_NR] = {
452 [MSTP128] = SH_CLK_MSTP32(&div4_clks[DIV4_S], SMSTPCR1, 28, 0), /* CEU21 */
453 [MSTP127] = SH_CLK_MSTP32(&div4_clks[DIV4_S], SMSTPCR1, 27, 0), /* CEU20 */
437 [MSTP125] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR1, 25, 0), /* TMU0 */ 454 [MSTP125] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR1, 25, 0), /* TMU0 */
438 [MSTP117] = SH_CLK_MSTP32(&div4_clks[DIV4_B], SMSTPCR1, 17, 0), /* LCDC1 */ 455 [MSTP117] = SH_CLK_MSTP32(&div4_clks[DIV4_B], SMSTPCR1, 17, 0), /* LCDC1 */
439 [MSTP116] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR1, 16, 0), /* IIC0 */ 456 [MSTP116] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR1, 16, 0), /* IIC0 */
@@ -484,6 +501,8 @@ static struct clk_lookup lookups[] = {
484 CLKDEV_CON_ID("usb24s", &usb24s_clk), 501 CLKDEV_CON_ID("usb24s", &usb24s_clk),
485 CLKDEV_CON_ID("hdmi1", &hdmi1_clk), 502 CLKDEV_CON_ID("hdmi1", &hdmi1_clk),
486 CLKDEV_CON_ID("hdmi2", &hdmi2_clk), 503 CLKDEV_CON_ID("hdmi2", &hdmi2_clk),
504 CLKDEV_CON_ID("video1", &div6_reparent_clks[DIV6_VCLK1]),
505 CLKDEV_CON_ID("video2", &div6_reparent_clks[DIV6_VCLK2]),
487 506
488 /* DIV4 clocks */ 507 /* DIV4 clocks */
489 CLKDEV_CON_ID("i_clk", &div4_clks[DIV4_I]), 508 CLKDEV_CON_ID("i_clk", &div4_clks[DIV4_I]),
@@ -506,6 +525,8 @@ static struct clk_lookup lookups[] = {
506 CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[MSTP116]), 525 CLKDEV_DEV_ID("i2c-sh_mobile.0", &mstp_clks[MSTP116]),
507 CLKDEV_DEV_ID("sh_mobile_lcdc_fb.1", &mstp_clks[MSTP117]), 526 CLKDEV_DEV_ID("sh_mobile_lcdc_fb.1", &mstp_clks[MSTP117]),
508 CLKDEV_DEV_ID("sh_tmu.0", &mstp_clks[MSTP125]), 527 CLKDEV_DEV_ID("sh_tmu.0", &mstp_clks[MSTP125]),
528 CLKDEV_DEV_ID("sh_mobile_ceu.0", &mstp_clks[MSTP127]),
529 CLKDEV_DEV_ID("sh_mobile_ceu.1", &mstp_clks[MSTP128]),
509 530
510 CLKDEV_DEV_ID("sh-sci.4", &mstp_clks[MSTP200]), 531 CLKDEV_DEV_ID("sh-sci.4", &mstp_clks[MSTP200]),
511 CLKDEV_DEV_ID("sh-sci.3", &mstp_clks[MSTP201]), 532 CLKDEV_DEV_ID("sh-sci.3", &mstp_clks[MSTP201]),