• Uwe Kleine-König's avatar
    ARM: mxs/clock-mx28: fix up name##_set_rate · f61b9fc2
    Uwe Kleine-König authored
    For the lcdif clock get_rate looks as follows:
    
    	read div from HW_CLKCTRL_DIS_LCDIF.DIV
    	return clk_get_rate(clk->parent) / div
    
    with clk->parent being ref_pix_clk on my system.
    
    ref_pix_clk's rate depends on HW_CLKCTRL_FRAC1.PIXFRAC.
    
    The set_rate function for lcdif does:
    
    	parent_rate = clk_get_rate(clk->parent);
    	based on that calculate frac and div such that
    	  parent_rate * 18 / frac / div is near the requested rate.
    	HW_CLKCTRL_FRAC1.PIXFRAC is updated with frac
    	HW_CLKCTRL_DIS_LCDIF.DIV is updated with div
    
    For this calculation to be correct parent_rate needs to be
    initialized not with the clock rate of lcdif's parent (i.e. ref_pix) but
    that of its grandparent (i.e. ref_pix' parent == pll0_clk).
    
    The obvious downside of this patch is that now set_rate(lcdif) changes
    its parent's rate, too.  Still this is better than a wrong rate.
    Acked-by: default avatarShawn Guo <shawn.guo@freescale.com>
    LAKML-Reference: 20110225084950.GA13684@S2101-09.ap.freescale.net
    Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: default avatarSascha Hauer <s.hauer@pengutronix.de>
    f61b9fc2
clock-mx28.c 22.2 KB