summaryrefslogtreecommitdiff
path: root/cpu/mpc86xx
diff options
context:
space:
mode:
authorTimur Tabi <timur@freescale.com>2008-04-04 11:16:11 -0500
committerWolfgang Denk <wd@denx.de>2008-04-30 22:52:35 +0200
commit1b9ed2574a38c93cb03dad41885fc06be4bfc9dd (patch)
treeb97e947c8581850ce0eec7e0239a5548910843eb /cpu/mpc86xx
parentf32f7fe7bd3a5bda3a476520f00e1aca7c2103a9 (diff)
downloadu-boot-imx-1b9ed2574a38c93cb03dad41885fc06be4bfc9dd.zip
u-boot-imx-1b9ed2574a38c93cb03dad41885fc06be4bfc9dd.tar.gz
u-boot-imx-1b9ed2574a38c93cb03dad41885fc06be4bfc9dd.tar.bz2
Fix calculation of I2C clock for some 86xx chips
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>
Diffstat (limited to 'cpu/mpc86xx')
-rw-r--r--cpu/mpc86xx/speed.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/cpu/mpc86xx/speed.c b/cpu/mpc86xx/speed.c
index 7e884f8..da5b58b 100644
--- a/cpu/mpc86xx/speed.c
+++ b/cpu/mpc86xx/speed.c
@@ -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;