Fix calculation of I2C clock for some 86xx chips
authorTimur Tabi <timur@freescale.com>
Fri, 4 Apr 2008 16:16:11 +0000 (11:16 -0500)
committerWolfgang Denk <wd@denx.de>
Wed, 30 Apr 2008 20:52:35 +0000 (22:52 +0200)
Some 86xx chips use CCB as the base clock for the I2C, and others used CCB/2.
There is no pattern that can be used to determine which chips use which
frequency, so the only way to determine is to look up the actual SOC
designation and use the right value for that SOC.

Signed-off-by: Timur Tabi <timur@freescale.com>
cpu/mpc86xx/speed.c

index 7e884f8e0142334c96bf15996199d1f6d75d2a76..da5b58b73f29441761d0abd430f8d1f19a879103 100644 (file)
@@ -105,8 +105,20 @@ int get_clocks(void)
        get_sys_info(&sys_info);
        gd->cpu_clk = sys_info.freqProcessor;
        gd->bus_clk = sys_info.freqSystemBus;
+
+       /*
+        * The base clock for I2C depends on the actual SOC.  Unfortunately,
+        * there is no pattern that can be used to determine the frequency, so
+        * the only choice is to look up the actual SOC number and use the value
+        * for that SOC. This information is taken from application note
+        * AN2919.
+        */
+#ifdef CONFIG_MPC8610
        gd->i2c1_clk = sys_info.freqSystemBus;
-       gd->i2c2_clk = sys_info.freqSystemBus;
+#else
+       gd->i2c1_clk = sys_info.freqSystemBus / 2;
+#endif
+       gd->i2c2_clk = gd->i2c1_clk;
 
        if (gd->cpu_clk != 0)
                return 0;