IMX: introduce clock API
This patch introduces the clock API for i.MX and converts all in-Kernel drivers to use it. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
committed by
Robert Schwebel
parent
dbff4e9ea2
commit
38a41fdf94
@@ -214,82 +214,6 @@ int imx_irq_to_gpio(unsigned irq)
|
||||
|
||||
EXPORT_SYMBOL(imx_irq_to_gpio);
|
||||
|
||||
/*
|
||||
* get the system pll clock in Hz
|
||||
*
|
||||
* mfi + mfn / (mfd +1)
|
||||
* f = 2 * f_ref * --------------------
|
||||
* pd + 1
|
||||
*/
|
||||
static unsigned int imx_decode_pll(unsigned int pll, u32 f_ref)
|
||||
{
|
||||
unsigned long long ll;
|
||||
unsigned long quot;
|
||||
|
||||
u32 mfi = (pll >> 10) & 0xf;
|
||||
u32 mfn = pll & 0x3ff;
|
||||
u32 mfd = (pll >> 16) & 0x3ff;
|
||||
u32 pd = (pll >> 26) & 0xf;
|
||||
|
||||
mfi = mfi <= 5 ? 5 : mfi;
|
||||
|
||||
ll = 2 * (unsigned long long)f_ref * ( (mfi<<16) + (mfn<<16) / (mfd+1) );
|
||||
quot = (pd+1) * (1<<16);
|
||||
ll += quot / 2;
|
||||
do_div(ll, quot);
|
||||
return (unsigned int) ll;
|
||||
}
|
||||
|
||||
unsigned int imx_get_system_clk(void)
|
||||
{
|
||||
u32 f_ref = (CSCR & CSCR_SYSTEM_SEL) ? 16000000 : (CLK32 * 512);
|
||||
|
||||
return imx_decode_pll(SPCTL0, f_ref);
|
||||
}
|
||||
EXPORT_SYMBOL(imx_get_system_clk);
|
||||
|
||||
unsigned int imx_get_mcu_clk(void)
|
||||
{
|
||||
return imx_decode_pll(MPCTL0, CLK32 * 512);
|
||||
}
|
||||
EXPORT_SYMBOL(imx_get_mcu_clk);
|
||||
|
||||
/*
|
||||
* get peripheral clock 1 ( UART[12], Timer[12], PWM )
|
||||
*/
|
||||
unsigned int imx_get_perclk1(void)
|
||||
{
|
||||
return imx_get_system_clk() / (((PCDR) & 0xf)+1);
|
||||
}
|
||||
EXPORT_SYMBOL(imx_get_perclk1);
|
||||
|
||||
/*
|
||||
* get peripheral clock 2 ( LCD, SD, SPI[12] )
|
||||
*/
|
||||
unsigned int imx_get_perclk2(void)
|
||||
{
|
||||
return imx_get_system_clk() / (((PCDR>>4) & 0xf)+1);
|
||||
}
|
||||
EXPORT_SYMBOL(imx_get_perclk2);
|
||||
|
||||
/*
|
||||
* get peripheral clock 3 ( SSI )
|
||||
*/
|
||||
unsigned int imx_get_perclk3(void)
|
||||
{
|
||||
return imx_get_system_clk() / (((PCDR>>16) & 0x7f)+1);
|
||||
}
|
||||
EXPORT_SYMBOL(imx_get_perclk3);
|
||||
|
||||
/*
|
||||
* get hclk ( SDRAM, CSI, Memory Stick, I2C, DMA )
|
||||
*/
|
||||
unsigned int imx_get_hclk(void)
|
||||
{
|
||||
return imx_get_system_clk() / (((CSCR>>10) & 0xf)+1);
|
||||
}
|
||||
EXPORT_SYMBOL(imx_get_hclk);
|
||||
|
||||
static struct resource imx_mmc_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x00214000,
|
||||
|
Reference in New Issue
Block a user