ARM: shmobile: r8a7779: Add helper to read mode pins
authorSimon Horman <horms+renesas@verge.net.au>
Thu, 15 May 2014 11:32:01 +0000 (20:32 +0900)
committerSimon Horman <horms+renesas@verge.net.au>
Tue, 17 Jun 2014 10:56:18 +0000 (19:56 +0900)
Add and use helper to read mode pins.
This will be re-used when moving marzen-reference to
the common clock framework.

Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
arch/arm/mach-shmobile/clock-r8a7779.c
arch/arm/mach-shmobile/include/mach/r8a7779.h
arch/arm/mach-shmobile/setup-r8a7779.c

index d81539a26dbdfc22819a149ed28e04562b22d00e..5dd66a21f0364179f822ab73948f0a26677807ab 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/io.h>
 #include <linux/sh_clk.h>
 #include <linux/clkdev.h>
+#include <mach/r8a7779.h>
 #include "clock.h"
 #include "common.h"
 
@@ -52,9 +53,6 @@
 #define MSTPCR3                IOMEM(0xffc8003c)
 #define MSTPSR1                IOMEM(0xffc80044)
 
-#define MODEMR         0xffcc0020
-
-
 /* ioremap() through clock mapping mandatory to avoid
  * collision with ARM coherent DMA virtual memory range.
  */
@@ -207,14 +205,9 @@ static struct clk_lookup lookups[] = {
 
 void __init r8a7779_clock_init(void)
 {
-       void __iomem *modemr = ioremap_nocache(MODEMR, PAGE_SIZE);
-       u32 mode;
+       u32 mode = r8a7779_read_mode_pins();
        int k, ret = 0;
 
-       BUG_ON(!modemr);
-       mode = ioread32(modemr);
-       iounmap(modemr);
-
        if (mode & MD(1)) {
                plla_clk.rate = 1500000000;
 
index def10a29e09a85be70d55a0e2e40f7bc3213f6b7..5ef0bad6334db956ffa1c4a613f84f4a88cee23f 100644 (file)
@@ -20,6 +20,7 @@ extern void r8a7779_add_early_devices(void);
 extern void r8a7779_add_standard_devices(void);
 extern void r8a7779_add_standard_devices_dt(void);
 extern void r8a7779_init_late(void);
+extern u32 r8a7779_read_mode_pins(void);
 extern void r8a7779_clock_init(void);
 extern void r8a7779_pinmux_init(void);
 extern void r8a7779_pm_init(void);
index 86ec4b625a783d6b142107985af38ff365cbe2a1..25e1d0b7246332bce419be6ee1c88ecbcff1d713 100644 (file)
@@ -762,6 +762,24 @@ void __init r8a7779_add_standard_devices_dt(void)
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
 }
 
+#define MODEMR         0xffcc0020
+
+u32 __init r8a7779_read_mode_pins(void)
+{
+       static u32 mode;
+       static bool mode_valid;
+
+       if (!mode_valid) {
+               void __iomem *modemr = ioremap_nocache(MODEMR, PAGE_SIZE);
+               BUG_ON(!modemr);
+               mode = ioread32(modemr);
+               iounmap(modemr);
+               mode_valid = true;
+       }
+
+       return mode;
+}
+
 static const char *r8a7779_compat_dt[] __initdata = {
        "renesas,r8a7779",
        NULL,