2 #include <mach/rk29_iomap.h>
3 #include <mach/board.h>
6 #include <asm/tlbflush.h>
8 #include <linux/regulator/rk29-pwm-regulator.h>
10 #define pwm_write_reg(addr, val) __raw_writel(val, addr + (RK29_PWM_BASE + 2*0x10))
11 #define pwm_read_reg(addr) __raw_readl(addr + (RK29_PWM_BASE + 2*0x10))
12 #define cru_readl(offset) readl(RK29_CRU_BASE + offset)
13 #define cru_writel(v, offset) do { writel(v, RK29_CRU_BASE + offset); dsb(); } while (0)
15 void interface_ctr_reg_pread(void)
21 static unsigned int __sramdata pwm_lrc,pwm_hrc;
23 static void __sramfunc rk29_pwm_set_core_voltage(unsigned int uV)
27 gate1 = cru_readl(CRU_CLKGATE1_CON);
28 cru_writel(gate1 & ~((1 << CLK_GATE_PCLK_PEIRPH % 32) | (1 << CLK_GATE_ACLK_PEIRPH % 32) | (1 << CLK_GATE_ACLK_CPU_PERI % 32)), CRU_CLKGATE1_CON);
31 writel((readl(RK29_GRF_BASE + 0x58) & ~(0x3<<6)) | (0x2<<6), RK29_GRF_BASE + 0x58);
34 pwm_lrc = pwm_read_reg(PWM_REG_LRC);
35 pwm_hrc = pwm_read_reg(PWM_REG_HRC);
38 pwm_write_reg(PWM_REG_CTRL, PWM_DIV|PWM_RESET);
40 pwm_write_reg(PWM_REG_LRC, 12);
41 pwm_write_reg(PWM_REG_HRC, 10);
43 pwm_write_reg(PWM_REG_LRC, pwm_lrc);
44 pwm_write_reg(PWM_REG_HRC, pwm_hrc);
46 pwm_write_reg(PWM_REG_CNTR, 0);
47 pwm_write_reg(PWM_REG_CTRL, PWM_DIV|PWM_ENABLE|PWM_TimeEN);
49 LOOP(5 * 1000 * LOOPS_PER_USEC); /* delay 5ms */
51 cru_writel(gate1, CRU_CLKGATE1_CON);
54 unsigned int __sramfunc rk29_suspend_voltage_set(unsigned int vol)
57 rk29_pwm_set_core_voltage(1000000);
61 void __sramfunc rk29_suspend_voltage_resume(unsigned int vol)
63 rk29_pwm_set_core_voltage(0);
68 void interface_ctr_reg_pread(void)
71 unsigned int __sramfunc rk29_suspend_voltage_set(unsigned int vol)
74 void __sramfunc rk29_suspend_voltage_resume(unsigned int vol)