MXC PLL decoding: calculate mfn value with less magic
authorSascha Hauer <s.hauer@pengutronix.de>
Wed, 3 Jun 2009 09:22:32 +0000 (11:22 +0200)
committerSascha Hauer <s.hauer@pengutronix.de>
Fri, 7 Aug 2009 10:11:10 +0000 (12:11 +0200)
Also, use cpu_is_* macros rather than CONFIG_ARCH_*

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
arch/arm/plat-mxc/clock.c

index 92e1356..f653213 100644 (file)
@@ -39,6 +39,7 @@
 #include <linux/string.h>
 
 #include <mach/clock.h>
+#include <mach/hardware.h>
 
 static LIST_HEAD(clocks);
 static DEFINE_MUTEX(clocks_mutex);
@@ -363,12 +364,11 @@ unsigned long mxc_decode_pll(unsigned int reg_val, u32 freq)
 
        mfn_abs = mfn;
 
-#if !defined CONFIG_ARCH_MX1 && !defined CONFIG_ARCH_MX21
-       if (mfn >= 0x200) {
-               mfn |= 0xFFFFFE00;
-               mfn_abs = -mfn;
-       }
-#endif
+       /* On all i.MXs except i.MX1 and i.MX21 mfn is a 10bit
+        * 2's complements number
+        */
+       if (!cpu_is_mx1() && !cpu_is_mx21() && mfn >= 0x200)
+               mfn_abs = 0x400 - mfn;
 
        freq *= 2;
        freq /= pd + 1;
@@ -376,8 +376,10 @@ unsigned long mxc_decode_pll(unsigned int reg_val, u32 freq)
        ll = (unsigned long long)freq * mfn_abs;
 
        do_div(ll, mfd + 1);
-       if (mfn < 0)
+
+       if (!cpu_is_mx1() && !cpu_is_mx21() && mfn >= 0x200)
                ll = -ll;
+
        ll = (freq * mfi) + ll;
 
        return ll;