mx5 clocks: Fix get_ipg_per_clk()
authorBenoît Thébaudeau <benoit.thebaudeau@advansee.com>
Thu, 27 Sep 2012 10:23:08 +0000 (10:23 +0000)
committerTom Rini <trini@ti.com>
Mon, 15 Oct 2012 18:54:11 +0000 (11:54 -0700)
This fixes the "IPG PERCLK" frequency printed by the clocks command. The issue
was that get_ipg_per_clk() used periph_clk instead of lp_apm in the case
CCM.CBCMR.perclk_lp_apm_sel is set.

It also fixes I²C support.

Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
Cc: Stefano Babic <sbabic@denx.de>
arch/arm/cpu/armv7/mx5/clock.c

index e6eae7eafef6de93be97d0d8e63fa746e36aa9a0..c5a93a08ac06945632e2facf46f155081c30e27c 100644 (file)
@@ -315,16 +315,20 @@ static u32 get_ipg_clk(void)
  */
 static u32 get_ipg_per_clk(void)
 {
-       u32 pred1, pred2, podf;
+       u32 freq, pred1, pred2, podf;
 
        if (readl(&mxc_ccm->cbcmr) & MXC_CCM_CBCMR_PERCLK_IPG_CLK_SEL)
                return get_ipg_clk();
-       /* Fixme: not handle what about lpm*/
+
+       if (readl(&mxc_ccm->cbcmr) & MXC_CCM_CBCMR_PERCLK_LP_APM_CLK_SEL)
+               freq = get_lp_apm();
+       else
+               freq = get_periph_clk();
        podf = readl(&mxc_ccm->cbcdr);
        pred1 = MXC_CCM_CBCDR_PERCLK_PRED1_RD(podf);
        pred2 = MXC_CCM_CBCDR_PERCLK_PRED2_RD(podf);
        podf = MXC_CCM_CBCDR_PERCLK_PODF_RD(podf);
-       return get_periph_clk() / ((pred1 + 1) * (pred2 + 1) * (podf + 1));
+       return freq / ((pred1 + 1) * (pred2 + 1) * (podf + 1));
 }
 
 /*