diff options
| author | Macpaul Lin <macpaul@andestech.com> | 2011-03-20 23:44:06 +0000 | 
|---|---|---|
| committer | Albert ARIBAUD <albert.u.boot@aribaud.net> | 2011-04-27 19:38:08 +0200 | 
| commit | caddb8e41e178d3a27aebf6a15bb5e201481d93b (patch) | |
| tree | 8076388a5ccab8a48deb9e2369e6132c12e84ace /drivers/power/ftpmu010.c | |
| parent | 286a5b253a5a154d8b0a1403258bc8b99600fc98 (diff) | |
| download | olio-uboot-2014.01-caddb8e41e178d3a27aebf6a15bb5e201481d93b.tar.xz olio-uboot-2014.01-caddb8e41e178d3a27aebf6a15bb5e201481d93b.zip | |
ftpmu010: fix relocation and enhance features
1. ftpmu010.h: fix and add definitions
   Enhanced for more features and asm related support
   according to datasheet.
   Note:
    - FTPMU010_PDLLCR0_HCLKOUTDIS is "incorrect" in datasheet.
    - FTPMU010_PDLLCR0_DLLFRANG is only 1 bit at bit #19. (not 20-19)
    - FTPMU010_PDLLCR0_HCLKOUTDIS is 4 bits at bit #20. (not 24-21)
2. ftpmu010.c: enhance features and fix relocation
   - The following functions is added for pmu features.
     ftpmu010_mfpsr_select_dev()
     ftpmu010_sdramhtc_set()
   - This patch also fix the declare statement for relocation.
Signed-off-by: Macpaul Lin <macpaul@andestech.com>
Diffstat (limited to 'drivers/power/ftpmu010.c')
| -rw-r--r-- | drivers/power/ftpmu010.c | 39 | 
1 files changed, 37 insertions, 2 deletions
| diff --git a/drivers/power/ftpmu010.c b/drivers/power/ftpmu010.c index c6a8cda7b..df99dfa73 100644 --- a/drivers/power/ftpmu010.c +++ b/drivers/power/ftpmu010.c @@ -25,10 +25,10 @@  #include <asm/io.h>  #include <faraday/ftpmu010.h> -static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE; - +/* OSCC: OSC Control Register */  void ftpmu010_32768osc_enable(void)  { +	static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE;  	unsigned int oscc;  	/* enable the 32768Hz oscillator */ @@ -46,8 +46,31 @@ void ftpmu010_32768osc_enable(void)  	writel(oscc, &pmu->OSCC);  } +/* MFPSR: Multi-Function Port Setting Register */ +void ftpmu010_mfpsr_select_dev(unsigned int dev) +{ +	static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE; +	unsigned int mfpsr; + +	mfpsr = readl(&pmu->MFPSR); +	mfpsr |= dev; +	writel(mfpsr, &pmu->MFPSR); +} + +void ftpmu010_mfpsr_diselect_dev(unsigned int dev) +{ +	static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE; +	unsigned int mfpsr; + +	mfpsr = readl(&pmu->MFPSR); +	mfpsr &= ~dev; +	writel(mfpsr, &pmu->MFPSR); +} + +/* PDLLCR0: PLL/DLL Control Register 0 */  void ftpmu010_dlldis_disable(void)  { +	static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE;  	unsigned int pdllcr0;  	pdllcr0 = readl(&pmu->PDLLCR0); @@ -57,9 +80,21 @@ void ftpmu010_dlldis_disable(void)  void ftpmu010_sdram_clk_disable(unsigned int cr0)  { +	static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE;  	unsigned int pdllcr0;  	pdllcr0 = readl(&pmu->PDLLCR0);  	pdllcr0 |= FTPMU010_PDLLCR0_HCLKOUTDIS(cr0);  	writel(pdllcr0, &pmu->PDLLCR0);  } + +/* SDRAMHTC: SDRAM Signal Hold Time Control */ +void ftpmu010_sdramhtc_set(unsigned int val) +{ +	static struct ftpmu010 *pmu = (struct ftpmu010 *)CONFIG_FTPMU010_BASE; +	unsigned int sdramhtc; + +	sdramhtc = readl(&pmu->SDRAMHTC); +	sdramhtc |= val; +	writel(sdramhtc, &pmu->SDRAMHTC); +} |