ARM: zynq: Simplify SLCR initialization
authorMichal Simek <michal.simek@xilinx.com>
Thu, 11 Dec 2014 10:31:30 +0000 (11:31 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Thu, 29 Jan 2015 14:38:17 +0000 (15:38 +0100)
Based on
"mfd: syscon: Decouple syscon interface from platform devices"
(sha1: bdb0066df96e74a4002125467ebe459feff1ebef)
SLCR driver can use syscon/regmap drivers directly.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/arm/mach-zynq/common.c
arch/arm/mach-zynq/slcr.c

index 26f92c2..c887196 100644 (file)
@@ -146,8 +146,6 @@ out:
 
        platform_device_register(&zynq_cpuidle_device);
        platform_device_register_full(&devinfo);
-
-       zynq_slcr_init();
 }
 
 static void __init zynq_timer_init(void)
index d4cb50c..c3c24fd 100644 (file)
@@ -47,11 +47,6 @@ static struct regmap *zynq_slcr_regmap;
  */
 static int zynq_slcr_write(u32 val, u32 offset)
 {
-       if (!zynq_slcr_regmap) {
-               writel(val, zynq_slcr_base + offset);
-               return 0;
-       }
-
        return regmap_write(zynq_slcr_regmap, offset, val);
 }
 
@@ -65,12 +60,7 @@ static int zynq_slcr_write(u32 val, u32 offset)
  */
 static int zynq_slcr_read(u32 *val, u32 offset)
 {
-       if (zynq_slcr_regmap)
-               return regmap_read(zynq_slcr_regmap, offset, val);
-
-       *val = readl(zynq_slcr_base + offset);
-
-       return 0;
+       return regmap_read(zynq_slcr_regmap, offset, val);
 }
 
 /**
@@ -196,23 +186,6 @@ void zynq_slcr_cpu_state_write(int cpu, bool die)
 }
 
 /**
- * zynq_slcr_init - Regular slcr driver init
- * Return:     0 on success, negative errno otherwise.
- *
- * Called early during boot from platform code to remap SLCR area.
- */
-int __init zynq_slcr_init(void)
-{
-       zynq_slcr_regmap = syscon_regmap_lookup_by_compatible("xlnx,zynq-slcr");
-       if (IS_ERR(zynq_slcr_regmap)) {
-               pr_err("%s: failed to find zynq-slcr\n", __func__);
-               return -ENODEV;
-       }
-
-       return 0;
-}
-
-/**
  * zynq_early_slcr_init - Early slcr init function
  *
  * Return:     0 on success, negative errno otherwise.
@@ -237,6 +210,12 @@ int __init zynq_early_slcr_init(void)
 
        np->data = (__force void *)zynq_slcr_base;
 
+       zynq_slcr_regmap = syscon_regmap_lookup_by_compatible("xlnx,zynq-slcr");
+       if (IS_ERR(zynq_slcr_regmap)) {
+               pr_err("%s: failed to find zynq-slcr\n", __func__);
+               return -ENODEV;
+       }
+
        /* unlock the SLCR so that registers can be changed */
        zynq_slcr_unlock();